2011-07-13 15 views
3

私は最近、iOS向けの非常に特定のプロジェクトに取り組んでいました。私の研究はほとんど最終的なコードになりました。私は今までに見つけたすべての極端な困難を解決しましたが、この上で私は手がかりを持っていないようです(理由や解決の可能性について)。AudioToolbox - 録音中のコールバックの遅れ

オーディオキュー(サンプルレート44100、リニアPCMフォーマット、チャンネルごとに16ビット、フレームごとに2バイト、フレームごとに1チャンネル...)を設定し、12オーディオバッファでサウンドの録音を開始します。しかし、4回のコールバックごとに遅延があるようです。

状況は次のとおりです。最初の4コールバックは、それぞれ約2ミリ秒の間隔で呼び出されます。しかし、4番目と5番目の間には約60msの遅延があります。同じことが8日と9日、12日と13日に起こります。

フレームあたりのバイト数と遅延の瞬間との間には関係があるようです。私はこれを知っています。フレームごとに4バイトに変更すると、私は8番目と9番目の間、そして16番目と17番目の間、24番目と25番目の間に遅れがあります。それにもかかわらず、遅延の瞬間とバッファの数との間の関係。

コールバック関数は、2つのことだけを行います:オーディオデータ(inBuffer-> mAudioData)をクラスが使用できる配列に格納します。別のAudioQueueEnqueueBufferを呼び出して、現在のバッファをキューに戻します。

誰もこの問題を既に解決しましたか?誰でも知っている、少なくとも、それの原因となることができますか?

ありがとうございます。

答えて

2

Audio Queue APIはRemoteIO Audio Unit APIの上で実行されているように見えますが、実際のオーディオバッファサイズはオーディオキューバッファのサイズとは無関係で、したがって、RemoteIOバッファが準備されると、小さなAQバッファの束がすぐにそのバッファからいっぱいになります。そして、より大きなバッファがサンプルでいっぱいになるのを待つのに、より長い時間がかかります。

バッファのレイテンシをより適切に調整したい場合は、RemoteIo Audio Unitを直接使用してみてください。

+1

ありがとう、それはまさに私が探していた道です。リモートIO APIを使用してコードを書き直すには数時間かかりました。ドキュメンテーションとサンプルコードは単純ではなく、理解するための「トラップ」がたくさんあるためです。しかし、それは最終的に今働いています、そして、私はあなたの答えが完璧だと言うことができます。遅延はありませんが、iPhone 4では約2.94msの非常に安定したシーケンスが可能な限り最速の構成です。 –

関連する問題