iOS CoreAudio - 使用AUFilePlayer和渲染回调

时间:2012-06-01 13:16:36

标签: ios core-audio

刚刚开始开发一个小型测试iOS 5.0应用,看看平台上有什么可能。

有些资源是无价的,例如Chris Adamson的博客和David Zicarelli的audioGraph示例(基于Apple的MixerHost和一系列新功能)。

我正在尝试使用iOS 5.x SDK中的新FilePlayer AudioUnit来设置类似的内容。

(AUFilePlayer bus0) - > (一些自定义过程) - > (bus0 MultiChannelMixer bus0) - > (bus0远程I / O)

我开始使用audioGraph,删除了我不想要的东西,最后得到了上面的链。

我可以看到AUFilePlayer首选输出是8.24流,因此混音器也是这样设置的(输入范围为8.24)。我的流程将处理它所需的任何转换。

在总线0上为混音器注册了“自定义进程”回调。一旦应用程序启动,它就会被定期调用,我可以通过记录来验证。

static OSStatus simpleRenderCallback (
                                  void *inRefCon, 
                                  AudioUnitRenderActionFlags  
                                  *ioActionFlags, 
                                  const AudioTimeStamp *inTimeStamp,  
                                  UInt32  inBusNumber,   
                                  UInt32  inNumberFrames,  
                                  AudioBufferList *ioData
                                  ) {
MixerHostAudio* THIS = (MixerHostAudio*) inRefCon; //the MixerHostAudio instance

AudioUnit fpUnit= THIS.auFilePlayerUnit_1;


OSStatus renderErr = noErr;



renderErr= AudioUnitRender(AUFilePlayerUnit, ioActionFlags, inTimeStamp, 0, inNumberFrames, ioData); 
if (renderErr < 0) {
    NSLog(@"error:%ld",renderErr);
    return renderErr;
}


return noErr;
}

问题是每次在我的回调中调用AudioUnitRender时,我总是得到一个renderErr = -50。

我现在正在运行模拟器,Mac声卡设置为44,100Hz,我可以看到inNumberFrames总是等于512.

问题出在哪里? -50在CoreAudio中意味着“坏的参数”,但这还不足以让我知道错误。

谢谢!

0 个答案:

没有答案