有没有办法捕获从remoteIOUnit发送到扬声器的音频缓冲区?我在不同的线程上渲染了几个不同的循环到同一个IOUnit (一个是点击,另一个是音乐),并希望执行音乐是如何与点击排队的分析,而不必过滤任何噪音来自,比方说,使用麦克风输入。我的数学计算必须非常准确(误差小于2ms ),所以获得这个混合后的缓冲区将是理想的。
发布于 2015-07-15 20:41:57
可以,您只需使用AudioUnitAddRenderNotify向remoteIO添加一个呈现通知回调。然后,每个缓冲区将获得四个回调:输入预渲染、输入后渲染、输出预渲染和输出后渲染。您只需要对适当的ioActionFlags和inBusNumber执行操作。
AudioUnitAddRenderNotify(remoteIO, inputOutputTap, (__bridge void *)self);
OSStatus inputOutputTap (void * inRefCon,
AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData) {
if (*ioActionFlags == kAudioUnitRenderAction_PostRender && inBusNumber == 0) {
MyObject *self = (__bridge MyObject *)inRefCon;
MyObjectDoTheThing(self,ioData,inTimeStamp);
}
return noErr;
}https://stackoverflow.com/questions/31427451
复制相似问题