2017-02-12 20 views
2

私は、オーディオを記録し、入ってくるバイトを処理する単純なアプリケーションを持っています。私はかなりのデータが入っていないことがわかりました、それの2/3のような何か。OSX:AudioUnitコールバックが十分に呼び出されていない

このルーチン:

static OSStatus AudioCallBack (void* userData, AudioUnitRenderActionFlags* ioActionFlags, const AudioTimeStamp* inTimeStamp, UInt32 inBusNumber, UInt32 nFrames, AudioBufferList* ioData) 

は十分に呼び出されていません。何が原因でしょうか?

答えて

2

Audio Unitコールバック(またはObjective Cのメッセージング、同期、ロック、またはメモリ管理などを行うもの)内で処理を行うと、コールバック関数またはブロックが長時間かかることがありますしたがって、あなたのアプリはいくつかのコールバックを見逃してしまい、いくつかのオーディオデータが欠落する可能性があります。これを確認するには、コールバック内のすべての処理を取り除き、受け取ったオーディオサンプルの数を合計して、適切な量が1秒あたりに入っていることを確認します。

コールバックが長時間ブロックされないようにするには、処理を並べ替えるか、別のスレッドで処理するか、Audio Unitコールバックのデータをすぐに配列、キュー、またはFIFOを他の処理タスクまたはスレッドに渡します。 Audio Callbacksのレートを知っているので、必要な処理をポーリングするための正しいレートを決定することができます。

+0

はい、これが問題でした。ありがとう! – Doej

関連する問題