我正在使用AudioComponentInstance audioUnit在iOS,Liniar PCM上录制麦克风,具有各种采样率(可从应用程序配置)。奇怪的是,它适用于11025,22050和44100,但不适用于8000.它没有提供任何错误或其他什么,我只是没有在回调中收到任何东西。 此外,使用9600测试,它无法正常工作。
有人知道这个的原因吗? 我用
开始会话status = AudioUnitInitialize(audioUnit);
status = AudioOutputUnitStart(audioUnit);
如果需要,我可以提供更多(全部)代码,但我不认为这与代码有关。
更新
经过一些测试后,我发现我在录制回调中使用的缓冲区大小是个问题。在回调中我打电话
status = AudioUnitRender([instance audioUnit],
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
entry->bufferList);
似乎inNumberFrames是186或185,我用128创建了一个缓冲区。但是现在它已经失败了5次中有4次状态为-50。我将缓冲区大小设置为256,512,186,但行为是相同的。结果是录制失真,因为帧丢失。
答案 0 :(得分:0)
嗯,我自己找到了答案。由于一些不明原因,据报道回调准备好的186帧太多了。在AudioUnitRender()的调用中我用185替换了值后,它就像一个魅力。 似乎有一个bug和一些时间CoreAudio报告一个额外的帧准备就绪。
对于更高的频率,问题不存在,因为帧数始终是恒定的,功率为2(256,512,1024)