有可能的。您将要使用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*您之前使用的函数之一会返回一个更有用的错误代码,您可以使用它来诊断它)。