我想从iOS设备的麦克风中捕获音频并将其写入.caf文件。
我可以将远程IO音频设备连接到多声道混音器单元(MCMU),并将回调连接到MCMU的输入。在回调中,我可以使用ExtAudioFileAsyncWrite()将音频数据从麦克风成功写入文件。
我想简化一些事情并从图片中删除MCMU。我的想法是我可以简单地将回调附加到远程IO的输入范围的输出总线和回调调用ExtAudioFileAsyncWrite()内部。
但是当我尝试这个时,ExtAudioFileAsyncWrite()返回-50(paramError)。
是否无法将回调附加到远程IO的输入元件的输出总线?
答案 0 :(得分:3)
有可能。您需要使用AudioUnitSetProperty
来设置kAudioOutputUnitProperty_SetInputCallback
属性。此回调的功能与渲染回调非常相似,但只要RemoteIO / mic为您提供了一些新数据(而不是请求程序中的数据),就会调用它。
示例:
AURenderCallbackStruct callbackInfo = {YourInputCallback, NULL};
AudioUnitSetProperty(remoteIO,
kAudioOutputUnitProperty_SetInputCallback,
kAudioUnitScope_Global,
0,
&callbackInfo,
sizeof(callbackInfo));
只要有一批新样本,这将使RemoteIO / mic呼叫YourInputCallback
。您可以像以前一样使用此回调来呼叫ExtAudioFileWriteAsync
。请注意,您还必须在RemoteIO上调用AudioUnitRender
,以便从中获取新样本。
关于-50错误,这不是一个非常有用的错误诊断。它基本上只是说“你的一个参数出错了”。很可能您的ExtAudioFile
为NULL或未正确设置(在这种情况下,您之前使用的ExtAudioFile*
函数之一会返回一个更有用的错误代码,您可以使用它来诊断它)。