私のiPhoneゲームにOpenALコードを実装しました。ゲームを開始すると、1秒間実行され、2秒間停止してから再開します(ヒカップ効果)。私はそれがサウンドファイルの読み込みのために遅れていると信じています。解決策は何ですか?誰もが任意の本、サイトやソースコード(iphoneのリファレンスではない)をお勧めしますか?読み込みプロセスはありますか?読み込みプロセスはどこで初期化する必要がありますか?助けてくれますか?iPhoneでOpenALが実装されている場合のサウンド再生の遅延(ヒカップ)
以下、私が実装したOpenALコードの関連コンポーネントを示しました。サウンドファイルは、gameloopの "if"ステートメントによって再生され、呼び出されます。 OpenALControllerクラスは音源とバッファの作成用であり、InitOpenALメソッドはOpenALControllerで呼び出されます。 MyViewはUIViewのカスタマイズされたサブクラスで、メインビューに接続されています(私はデフォルトビューを使用しませんでした)。
// MyView.m //メインビューとしてカスタマイズされたUIView。
の#import "OpenALSoundController.h"
- (ボイド)startPlaying {
...
[自己initializeValuables]。
...
[self initializeTimer];
}
- (ボイド)initializeTimer { 場合(theTimer == NIL){
theTimer = [CADisplayLink displayLinkWithTarget:自己セレクタ:@selector)gameLoop)]。
theTimer.frameInterval = 2;
[theTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
}
- (無効)gameLoop { ... もし何か=真 //サウンドを再生 [[OpenALSoundController sharedSoundController] playSound1]。 // OpenALSoundController.h @interfaceのOpenALSoundController
...
}
...
@end
:NSObjectの{
...}
..
+(OpenALSoundController *)sharedSoundController
...
@end
// OpenALSoundController。m
//シングルトンアクセッサ
{
static OpenALSoundController * shared_sound_controller;
@synchronized(自己)
{
であれば(NIL == shared_sound_controller)
{shared_sound_controller = [[OpenALSoundControllerのALLOC] INIT]。
}
return shared_sound_controller;
}
return shared_sound_controller;
}
- (ボイド)initOpenAL {
...
file_url = [NSURL ALLOC] initFileURLWithPath:[[NSBundle mainBundle] pathForResource: "火" ofType @: "WAV" @]]。
firePcmData = MyGetOpenALAudioDataAll((CFURLRef)file_url、& data_size、& al_format、& sample_rate);
alBufferData(fireOutputBuffer、al_format、firePcmData、data_size、sample_rate);
[file_url release];
...
alSourcei(outputSourceFire、AL_BUFFER、fireOutputBuffer);
...
}