0

iPhone ゲームに OpenAL コードを実装しました。ゲームを開始すると、1 秒間実行され、2 秒間停止してから再開されます (しゃっくり効果)。サウンドファイルの読み込みが原因で遅延したと思います。解決策は何ですか?本、サイト、またはソース コードを推奨できる人はいますか (iPhone のリファレンスではありません)。ローディング プロセスはありますか?ローディング プロセスはどこで初期化する必要がありますか? それは役に立ちますか?

以下に、実装した OpenAL コードの関連コンポーネントを示します。サウンド ファイルは、ゲームループ内の「if」ステートメントによって再生および呼び出されます。OpenALController クラスは音源とバッファの作成用であり、InitOpenALメソッドは OpenALController で呼び出されます。MyView は UIView のカスタマイズされたサブクラスであり、メイン ビューに接続されています (デフォルト ビューは使用しませんでした)。

// MyView.m // メイン ビューとしてカスタマイズされた UIView。
#import "OpenALSoundController.h"
- (void)startPlaying{
...
[自己初期化値];
...
[自己初期化タイマー];
}
- (void)initializeTimer { if (theTimer == nil) {
theTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector)gameLoop)];
theTimer.frameInterval = 2;
[theTimer addToRunLoop: [NSRunLoop currentRunLoop] forMode: NSDefaultRunLoopMode];
}
}
- (void)gameLoop { ... If something = true // サウンドを再生 [[OpenALSoundController sharedSoundController] playSound1];
...
}
...
@end


// OpenALSoundController.h @interface OpenALSoundController : NSObject {
...}
...
+ (OpenALSoundController*) sharedSoundController
...
@end


// OpenALSoundController.m
// シングルトン アクセサ
{
static OpenALSoundController* shared_sound_controller;
@synchronized(self)
{
if(nil == shared_sound_controller)
{ shared_sound_controller = [[OpenALSoundController alloc] init];
}
共有_サウンド_コントローラーを返します。
}
共有_サウンド_コントローラーを返します。
}
- (void) initOpenAL{
...
file_url = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"fire" ofType:@"wav"]];
firePcmData = MyGetOpenALAudioDataAll((CFURLRef)file_url, &data_size, &al_format,&sample_rate);
alBufferData(fireOutputBuffer, al_format, firePcmData, data_size, sample_rate);
[file_url 解放];
...
alSourcei(outputSourceFire, AL_BUFFER, fireOutputBuffer);
...
}

4

2 に答える 2

0

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

于 2010-11-27T10:09:28.490 に答える
0

wav ファイルは巨大で、ディスクからの読み込みに時間がかかるため、まず mp3 を使用することをお勧めします。Mp3 ファイルは、ディスク上ではサイズが小さく、メモリにロードされ、そこで解凍されて再生されます。mp3 のビットレート/エンコード品質も下げて実験してみてください。

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

于 2011-02-03T10:29:34.263 に答える