2

そこで、キーボードと、オーディオ サンプルをトリガーする他のいくつかのボタンを備えた小さなアプリケーションを構築しています。

このアプリケーションには、ミュート/ミュート解除できる事前に録音されたオーディオ トラック (ドラム、ボーカル、ギター) がいくつかあります。その部分は AVAudioPlayer で正常に動作しています。

しかし、ほとんどの人が知っているように、AVAudioPlayer は少し遅く、ドラム ヒットまたはシンセの小さなオーディオ サンプルをトリガーするように割り当てられている場合、ある程度の遅延が発生します。そこで、SystemSoundServices を実装して短いサウンド サンプルを再生しました。ボタンを押してからサウンドが再生されるまでのレイテンシーに関しては問題なく動作していますが、少し問題があります。サンプルを 2 回繰り返したたくと、小さなポップ音が聞こえます。これは、2 回目にボタンを押したときに最初のサンプルの再生が中断されるためです。

基本的にサンプルが再生されているかどうかを検出し、再生されている場合は音量を0に設定し、再生を停止してから、サンプルを再度再生することでこれを解決したいと思います。残念ながら、systemsoundservices にはこの機能が組み込まれていません。AVAudioPlayer には組み込まれていますが、遅すぎます。CoreAudio、AudioQueue、Open AL があることは知っていますが、これらはすべて、私がしなければならないことを複雑にするために WAYYY のようです。あらゆる種類のオーディオ処理を行う必要はありません。

短いオーディオ クリップを再生するためだけに 100 行のコードを記述する必要がないオーディオ フレームワークの提案はありますか? すべてが、CoreAudio/AudioQueue/OpenAL の学習に何週間も費やすように私に指示しているようです。

4

3 に答える 3

1

AUSamplerサンプラーには を使用できます。確かに、SystemSounds よりも複雑です。これAUSamplerは、システム提供の AudioUnit です。そのため、プログラムによる AU 構成を少し行う必要がありますが、難しいことは手の届かないところにあります。

と を使用AudioFileExtAudioFileて、オーディオ ファイルの読み取りと作成を行うことができます。AUSampler の場合、サンプルを (利用可能なフォーマットのサブセットで) ロードする方法を認識しているため、ファイル I/O 部分を記述する必要さえありません。

より複雑なオーディオの場合は、オーディオ ストリームを自分で操作する方法を理解する必要があります。

于 2012-08-13T19:12:34.510 に答える
0

オーディオ トラックが圧縮されているかどうかについては言及していませんが、短い場合は .wav または別の非圧縮形式を使用してみてください。AVAudioPlayer は、解凍を開始するのに時間をかける必要はありません。それでも短い遅延がありますが、MP3 ほど長くはありません。

それを超えて、腰を下ろして下位レベルのフレームワークの1つを学ぶことが、あなたがする必要があることになると思います.

もしよろしければ、ここに OpenAL の簡単な紹介があります: http://benbritten.com/2008/11/06/openal-sound-on-the-iphone/

EDIT:また、prepareToPlay呼び出す前にメソッド呼び出しを使用していますよねplay

于 2012-08-13T19:13:56.900 に答える