2010-11-26 4 views
0

私の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);
...
}

答えて

0

あなたは、iOS用のOpenALサウンドエンジンFinchに興味があるかもしれません。ゲームに非常に適しています。既存のコードを開発して保守するよりも、既存のコードを再利用する方が良いでしょう。

0

最初に、wavファイルが巨大で、ディスクからの読み込みに時間がかかるので、mp3を使う方が良いです。 MP3ファイルはディスク上で小さく、メモリにロードされ、再生用に圧縮解除されます。 mp3のビットレート/エンコードの品質を下げて試してみてください。

また、しゃっくりを避けるためにサウンドをプリロードする必要があります。そうしないと、サウンドが最初に再生されるときに遅延が発生します。

関連する問題