iOS 麦克风捕获 LPCM 在 8 kHz 采样率下不起作用



我正在使用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);

似乎 inNumberFrame 是 186 或 185,我用 128 创建了一个缓冲区。但现在它失败了 4 次中有 5 次失败,状态为 -50。我将缓冲区大小设置为 256、512、186,但行为相同。结果是录制失真,因为帧丢失。

好吧,自己找到了答案。由于一些晦涩的原因,回调报告已准备好的 186 帧太多了。在 AudioUnitRender() 的调用中,我将值替换为 185 后,它就像一个魅力。似乎有一个错误,一些 CoreAudio 报告一个额外的帧准备就绪。

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

最新更新