4

我正在尝试向AVAudioEngine'sinputNode 添加一个输入回调,但它从未被调用过。

希望我可以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_EnableIORemoteIO单元上设置(inputNode.audioUnit)

有人有什么建议吗?

4

3 回答 3

2

RemoteIO 在准备好渲染时实际上并不提供回调。由于它与输出的硬件相同,因此您可以在渲染输出单元时渲染输入单元

于 2015-09-27T12:27:52.937 回答
1

你能展示你的代码来启用 I/O 吗?请注意,它应该在范围kAudioUnitScope_Input和元素上1

于 2015-09-01T07:30:47.763 回答
0

我看到有两件事可能是错误的。你没有提到音频会话。我想知道您是否已将其设置为需要输入的内容:

let audioSession = AVAudioSession.sharedInstance()
audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
audioSession.setActive(true)

kAudioOutputUnitProperty_EnableIO需要应用,kAudioUnitScope_Input因为您可以独立启用/禁用输入或输出。

AudioUnitSetProperty(ioUnit, kAudioOutputUnitProperty_EnableIO,
kAudioUnitScope_Input, bus1, &enableInput,sizeof(enableInput))

还有其他事情要检查,但你说你有一个回调在其他地方工作,所以这些是特定于这个单元和总线的。

注意:此代码不完整,只是设置音频会话和启用输入的主要和相关点。

于 2015-09-03T11:23:05.023 回答