iOS麦克风捕获LPCM无法以8 kHz的采样率工作

时间:2014-11-25 14:05:25

标签: ios core-audio

我正在使用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,但行为是相同的。结果是录制失真,因为帧丢失。

1 个答案:

答案 0 :(得分:0)

嗯,我自己找到了答案。由于一些不明原因,据报道回调准备好的186帧太多了。在AudioUnitRender()的调用中我用185替换了值后,它就像一个魅力。 似乎有一个bug和一些时间CoreAudio报告一个额外的帧准备就绪。

对于更高的频率,问题不存在,因为帧数始终是恒定的,功率为2(256,512,1024)