我想从iOS设备的麦克风捕获音频并将其写入.caf文件。
我能够将远程IO音频单元连接到多声道混音器单元( MCMU ),并将回调附加到MCMU的输入。在该回调中,我可以使用ExtAudioFileAsyncWrite()成功地将音频数据从麦克风写入文件。
我想简化事情,并从图片中删除MCMU。我的想法是,我可以简单地将一个回调附加到远程IO的输入作用域的输出总线上,并在该回调调用中调用ExtAudioFileAsyncWrite()。
但是,当我尝试执行此操作时,ExtAudioFileAsyncWrite()返回-50 (paramError)。
不能将回调附加到远程IO的输入元素的输出总线上吗?
发布于 2012-11-29 05:59:57
这是可能的。您将需要使用AudioUnitSetProperty来设置kAudioOutputUnitProperty_SetInputCallback属性。该回调的功能与渲染回调非常相似,但只要RemoteIO / mic有新的数据(而不是从程序中请求数据),它就会被调用。
示例:
AURenderCallbackStruct callbackInfo = {YourInputCallback, NULL};
AudioUnitSetProperty(remoteIO,
kAudioOutputUnitProperty_SetInputCallback,
kAudioUnitScope_Global,
0,
&callbackInfo,
sizeof(callbackInfo));这将使RemoteIO /麦克风在有新的一批样本时调用YourInputCallback。您可以像以前一样使用此回调来调用ExtAudioFileWriteAsync。请注意,您还必须在RemoteIO上调用AudioUnitRender,才能从中获取新的示例。
关于-50错误,这不是一个非常有用的错误诊断。它基本上只是说“你的一个参数有错误”。很可能您的ExtAudioFile为空或没有正确设置(在这种情况下,您之前使用的某个ExtAudioFile*函数将返回一个更有用的错误代码,您可以用它来诊断它)。
https://stackoverflow.com/questions/13608789
复制相似问题