刚刚开始开发一个小型测试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中意味着“坏的参数”,但这还不足以让我知道错误。
谢谢!