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 调用。ExtAudioFileWriteAsync您可以像以前一样使用此回调进行调用。请注意,您还必须调用AudioUnitRenderRemoteIO,才能从中获取新样本。

关于 -50 错误,这不是一个非常有用的错误诊断。它基本上只是说“您的一个参数有错误”。您很可能ExtAudioFile是 NULL 或未正确设置(在这种情况下,ExtAudioFile*您之前使用的函数之一会返回一个更有用的错误代码,您可以使用它来诊断它)。

于 2012-11-28T21:59:56.927 回答