我正在尝试向AVAudioEngine's
inputNode 添加一个输入回调,但它从未被调用过。
希望我可以AVAudioEngine
用来管理 iOS 和 OS X 的基本 AUGraph,并且我可以在两者之间运行我自己的代码。我也尝试在输入节点上安装一个水龙头,但我无法更改缓冲区长度。
我制作了一个单视图 iOS 应用程序并将此代码放入viewDidLoad
:
_audioEngine = [AVAudioEngine new];
_inputNode = _audioEngine.inputNode;
_outputNode = _audioEngine.outputNode;
AURenderCallbackStruct inputCallback;
inputCallback.inputProc = inputCalbackProc;
inputCallback.inputProcRefCon = (__bridge void *)(self);
AudioUnitSetProperty(_inputNode.audioUnit,
kAudioOutputUnitProperty_SetInputCallback,
kAudioUnitScope_Global,
0,
&inputCallback,
sizeof(inputCallback));
[_audioEngine startAndReturnError:nil];
渲染回调定义如下:
OSStatus inputCalbackProc (void * inRefCon,
AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData)
{
printf("Called");
return noErr;
}
我设法以同样的方式在输出节点的音频单元上安装了一个渲染回调,但我的输入回调从未被调用。
我检查了输入节点的音频单元与输出节点的音频单元是否相同,这表明图形已正确设置。我也试过kAudioOutputUnitProperty_EnableIO
在RemoteIO
单元上设置(inputNode.audioUnit)
有人有什么建议吗?