2

iOS デバイスのマイクからオーディオをキャプチャし、.caf ファイルに書き込みたいと考えています。

リモート IO オーディオ ユニットをマルチチャンネル ミキサー ユニット (MCMU) に接続し、MCMU の入力にコールバックをアタッチできます。そのコールバック内で、ExtAudioFileAsyncWrite() を使用して、マイクからのオーディオ データをファイルに正常に書き込むことができます。

物事を単純化し、写真から MCMU を削除したいと考えています。私の考えでは、リモート IO の入力スコープの出力バスにコールバックをアタッチし、そのコールバック内で ExtAudioFileAsyncWrite() を呼び出すだけです。

ただし、この ExtAudioFileAsyncWrite() を試すと、-50 (paramError) が返されます。

リモート IO の入力要素の出力バスにコールバックをアタッチすることはできませんか?

4

1 に答える 1

3

可能です。AudioUnitSetPropertyプロパティの設定に使用しkAudioOutputUnitProperty_SetInputCallbackます。このコールバックはレンダリング コールバックと同じように機能しますが、RemoteIO / mic に新しいデータがある場合はいつでも呼び出されます (プログラムからのデータの要求としてではなく)。

例:

AURenderCallbackStruct callbackInfo = {YourInputCallback, NULL};
AudioUnitSetProperty(remoteIO,
                     kAudioOutputUnitProperty_SetInputCallback,
                     kAudioUnitScope_Global,
                     0,
                     &callbackInfo,
                     sizeof(callbackInfo));

YourInputCallbackこれにより、サンプルの新しいバッチがあるたびに、RemoteIO / mic 呼び出しが行われます。以前と同じように、このコールバックを使用して呼び出すことができますExtAudioFileWriteAsyncAudioUnitRender新しいサンプルを取得するには、RemoteIO も呼び出す必要があることに注意してください。

-50 エラーに関しては、これはあまり有用なエラー診断ではありません。基本的に、「パラメーターの 1 つにエラーがありました」と表示されます。ほとんどのExtAudioFile場合、NULL であるか、適切に設定されていません (この場合、ExtAudioFile*以前に使用した関数の 1 つが、診断に使用できるより有用なエラー コードを返したはずです)。

于 2012-11-28T21:59:56.927 に答える