我想在“适用于iOS的音频单元托管指南”文档中使用渲染回调函数模式实现I / O.我不确定如何实现渲染回调函数。
我的部分代码如下:
- (void) configureAndInitializeAudioProcessingGraph {
...
NSLog (@"- Attach the input render callback and context to the input bus");
AURenderCallbackStruct inputCallbackStruct;
inputCallbackStruct.inputProc = &inputRenderCallback;
inputCallbackStruct.inputProcRefCon = NULL; //&soundData;
result = AUGraphSetNodeInputCallback (
processingGraph,
ioNode,
0, //output element of I/O unit
&inputCallbackStruct
);
...
}
static OSStatus inputRenderCallback (
void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData
)
{
DCIDBAudio *audio = (DCIDBAudio *)inRefCon;
OSStatus err = AudioUnitRender (
audio.ioUnit,
ioActionFlags,
inTimeStamp,
1, input element od I/O unit
inNumberFrames,
ioData
);
if (err)
{
NSLog(@"AudioUnitRender() failed.");
return err;
}
return noErr;
}
我总是收到错误“AudioUnitRender()失败。”我只想使用AudioUnitRender()从io单元的1个元素的输出中获取数据,然后将数据放入ioData缓冲区,以便它们可以由io单元的0元素使用。
有人能指出我上面的代码有什么问题吗?我应该初始化参数: 首先是inNumberFrames和ioData?
任何评论和指示都将受到高度赞赏。
谢谢, 芬斯波
答案 0 :(得分:0)
我没有答案,因为我发出了同样的问题但你可以挖掘mixerhost苹果演示应用程序中的内容
答案 1 :(得分:0)
了解OSStatus错误代码有助于确定错过了哪一步。此外,您应该发布与初始化audio.ioUnit
相关的所有代码。
确保您已在设备的输入总线上启用了IO,例如:
UInt32 enableInput = 1;
AudioUnitSetProperty( ioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, AudioUnitBus::Input, &enableInput, sizeof(enableInput) );