どのようにして、一連のサウンドを前もってキューに入れることができる「ビートボックス」スタイルのサウンドエンジンを作成するには?これらのサウンドは、ギャップや乱れを伴わずに再生する必要があります。iPhone SDK - OpenAL、 'Beat Box'スタイルのサウンドエンジン
OpenALを見て、alSourceQueueBuffers()を使用して一連のプリバッファリングされたクリップでソースを作成しようとしましたが、私が探していたものを達成できませんでした。
AudioFileOpenURLでオーディオファイルをロードしてから、AudioFileReadBytesを使用してchar配列にロードし、alGenBuffersでバッファを作成してから、alBufferDataでバッファします。
次に、alGenSourcesでソースを作成し、そのソースへの参照を保持します。次に、alieSourceQueueBuffers(sourceId、1、& bufferId)を呼び出します。ここで、bufferIdは、私の 'queueClip'メソッドに渡されるパラメータであり、いくつかの異なるクリップを参照します。
これを実行してから、alSourcePlayを呼び出すと、私のクリップがバックツーバックで再生されているように見えますが、何もしません(3つのオーディオファイルをロードして、ランダムにalSourceQueueBuffersを使用して数回)。
私もなど、メモリをクリーンアップするためにそれに新しい音を追加し、それから、すでに演奏音を削除するには、私のソースを更新するための最良の方法を知っておく必要があり
なぜこれをAVAudioPlayerの上に書くことができませんか?レイテンシ? – zoul
待ち時間は深刻な問題です。AVAudioPlayerでは、項目の再生に0.151のオフセットがありました。アイテムを 'loop'に設定すると、実際にはループがシームレスに実行されましたが、アイテムをキューに入れてさまざまなアイテムを再生するつもりです。 'audioDidFinishPlaying'コールバック設定を取得し、リスト内の次の項目を再生すると、再生時に一貫した0.151オフセットが発生しました。私はタイマーを書くことを検討し、現在のサンプル時間に基づいて、この既知の一貫性のあるオフセットをマイナスして刻々と変化させることを考えました...しかし、これは「グーフィー」と発音し、「正確」または「正確」ではありません。 –
私はFMODライブラリを使い始めました。これは、再生のためにダブルバッファ機構を使用した「リアルタイムステッチング」の例を提供していました。 2つのサブサウンドを作成し、再生中にもう一方のサウンドを切り替えると、2つのサンプルがシームレスに再生され、可聴ギャップは発生しません。これは私がやっていたことでしたが、FMODには値札があり、これに対するOpenALのソリューションが好まれるでしょう。 –