2011-01-04 23 views
2

私が提供するバッファのサイズにかかわらず、AudioQueueNewInputに提供されるコールバックは、ほぼ同じ時間間隔で発生します。例えばAudioQueueNewInputコールバック待ち時間

あなたが0.05秒のバッファを持っており、44Kで最初の0.09秒で約呼ばれるコールバックを記録し、その後、2回目の呼び出しは、右(0.001秒)後に発生した場合。その後、~09秒待ってください。あなたのバッファサイズが.025だったら。 .09秒待ってからすぐに3つのバッファをほぼ瞬時に見ることができます。

サンプルレートを変更するとレイテンシが増加します。

16ビット8kオーディオを録音すると、バッファフラッド間に0.5秒の遅延が発生します。

私は、舞台裏で使用されている8000バイトのバッファがあると思われます。それが満たされると、私のコールバックは空にされるまで、指定されたバッファで実行されます。

できるだけ少ないレイテンシーで16kの16ビットオーディオを録音したいと思います。上記を考えると、私はいつも約4分の1の待ち時間を見ます。待ち時間を短縮する方法はありますか?内部バッファサイズを設定するオーディオセッションプロパティはありますか?私はkAudioSessionProperty_PreferredHardwareIOBufferDurationを試しましたが、それは役に立たないようです。

ありがとうございました!

答えて

0

Audio Queue APIはAudio Unit RemoteIO APIの上に構築されているようです。小さなAudio Queueバッファはおそらく大規模なRemoteIOバッファをシーンの裏に埋めるために使用されています。おそらく何らかのレートリサンプリングが行われているかもしれません(元の2G電話で)。

Latencyが低い場合は、RemoteIO Audio Unit APIを直接使用してから、オーディオセッションをリクエストして、アプリケーションの待ち時間バッファを小さくしてください。

+0

RemoteIO APIで少し作業した後、私は非常に低いレイテンシーの録音を得ることができました。このウェブサイトは助けになりました。 http://atastypixel.com/blog/using-remoteio-audio-unit/ – madmik3

関連する問題