我正在尝试使用新的AVAudioUnits / AVAudioNodes进行一些音频处理。当AVAudioUnits公开它们的底层(经典CA) AudioUnit时,我假设我可以像往常一样简单地附加一个呈现回调,但是回调不会被调用。
下面是我说的代码:
AVAudioUnitReverb *reverbUnit = [[AVAudioUnitReverb alloc] init];
AURenderCallbackStruct renderCallbackStruct;
renderCallbackStruct.inputProc = &myRenderCallback;
renderCallbackStruct.inputProcRefCon = myAudioStruct;
AudioUnitSetProperty(reverbUnit.audioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Global, 0, &renderCallbackStruct, sizeof(renderCallbackStruct));而呈现回调基本上如下所示:
OSStatus myRenderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) {
printf("callback!");
return noErr;
}reverbUnit当然是附在引擎(PlayerNode -> Reverb -> MainMixer)上的,我可以像预期的那样听到播放器的声音(回响)。
注意:当我设置回调时
AudioUnitAddRenderNotify(reverbUnit, &myRenderCallback, myAudioStruct)它被调用,但是ioData->mBuffers[0].mData是零(这是正确的AFAIK),所以这不是一个替代。
发布于 2014-08-07 02:53:02
呈现回调由AUGraph中混响单元的输入节点连接覆盖。您只能有一个输入到一个混响节点,或者一个输入节点或者一个渲染回调。
https://stackoverflow.com/questions/25164076
复制相似问题