3

刚刚开始开发一个小型测试 iOS 5.0 应用程序,看看该平台上的可能性。

一些资源没有价值,例如 Chris Adamson 的博客和 David Zicarelli 的 audioGraph 示例(基于 Apple 的 MixerHost 并具有许多新功能)。

我想要做的是设置这样的东西,使用来自 iOS 5.x SDK 的新 FilePlayer AudioUnit。

(AUFilePlayer bus0) -> (一些自定义进程) -> (bus0 MultiChannelMixer bus0) -> (bus0 Remote 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 中的“错误参数”,但这还不足以知道出了什么问题。

谢谢!

4

0 回答 0