AudioUnitRender()函数出错

时间:2011-03-31 19:33:09

标签: iphone

我想在“适用于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?

任何评论和指示都将受到高度赞赏。

谢谢, 芬斯波

2 个答案:

答案 0 :(得分:0)

我没有答案,因为我发出了同样的问题但你可以挖掘mixerhost苹果演示应用程序中的内容

答案 1 :(得分:0)

了解OSStatus错误代码有助于确定错过了哪一步。此外,您应该发布与初始化audio.ioUnit相关的所有代码。

确保您已在设备的输入总线上启用了IO,例如:

UInt32 enableInput = 1;
AudioUnitSetProperty( ioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, AudioUnitBus::Input, &enableInput, sizeof(enableInput) );