0

ゲームで使用するサウンドをいくつか作成しました。特定のイベントで問題なくプレイできます。

// create sounds
CFBundleRef mainBundle;
mainBundle = CFBundleGetMainBundle();

_soundFileShake = CFBundleCopyResourceURL(mainBundle, CFSTR("shake"), CFSTR("wav"), NULL);
AudioServicesCreateSystemSoundID(_soundFileShake, &_soundIdShake);

// later...
AudioServicesPlaySystemSound(_soundIdShake);

このゲームには、デバイスを振って一部の機能を有効にできるメカニズムがあります。シェイク コードが完成したので、ゲームに「シェイク開始」および「シェイク終了」メッセージが表示されます。必要なのは、揺れが始まったときに「shave.wav」の再生を開始し、揺れが止まるまでループすることです。AudioToolbox/AudioServices でこれを行う方法はありますか? そうでない場合、どうすればこれを行うことができますか?

4

1 に答える 1

2

「震えている」状態を追跡し、 でシステム サウンド完了のコールバックを登録しますAudioServicesAddSystemSoundCompletion。次に、システムサウンドが完了し、デバイスがまだ揺れているときにシステムサウンドを再度開始します。音が十分に短い場合、これにより目的の効果が得られます。揺れが止まったときにサウンドがすぐに停止するようにする必要がある場合は、再生をより細かく制御できるサウンド API のいずれかを使用する必要があります (Audio Queue Services や などAVAudioPlayer)。

于 2010-06-12T17:34:40.190 に答える