1

我正在使用 AudioQueueServices 记录连续的数据流。据我了解,只有当缓冲区充满数据时才会调用回调。在实践中,第一个回调有一个完整的缓冲区,第二个回调是 3/4 满,第三个回调是满的,第四个是 3/4 满,依此类推。这些缓冲区是 8000 个数据包(记录 8khz 音频) - 所以我应该每次都将 1s 的音频返回给回调。我已经确认我的音频队列缓冲区大小是正确的(并且在某种程度上被行为所证实)。我究竟做错了什么?我应该在 AudioQueueNewInput 中使用不同的 RunLoop 做某事吗?我试过了,但这似乎没有什么不同......

顺便说一句,如果我在调试器中运行,每个回调充满了 8000 个样本——这让我觉得这是一个线程/计时的事情。

4

1 回答 1

0

显然,通过与他人讨论——以及缺乏回应,这种行为是设计好的(或损坏但不太可能修复),即使记录不正确。解决方法是在必要时在回调中适当地缓冲您的样本,并且不要期望缓冲区已满。如果您只是将数据写入文件,这根本不是问题,但如果您希望在回调中对大小一致的音频数据块进行操作,则必须自己确保这种一致性。

于 2010-03-31T13:56:26.760 回答