0

我的问题可能与此类似:为什么不能调用我的 AudioQueueOutputCallback?

似乎该人能够通过在主线程上运行音频内容来修复。我不能这样做。

我将缓冲区排入主要音频 Q,然后启动音频 Q。一旦我启动队列,这些缓冲区不应该立即完成吗?

我正在正确设置数据大小。

作为一个黑客,我只是重复使用缓冲区而不等待 cabllback 将它们报告为已完成。如果我这样做,我会像这样运行几秒钟,然后缓冲区回调开始从它们开始工作。

4

1 回答 1

0

用核心音频破解你的方式绝对不是一个好主意。虽然这可能是一个快速修复,但从长远来看,它肯定会以模棱两可的方式伤害你。

您的问题与您发布的链接不同,他们的问题是在错误的线程上分配回调.. 在您的情况下,您的回调在正确的线程中,只是您最初提供的音频缓冲区是为空、太小或包含不适合音频播放的数据

请记住,回调的目的是在播放(即消耗)提供给音频队列的每个音频缓冲区后触发。事实上,在您启动队列后,回调没有被触发..这意味着音频缓冲区中没有任何内容可供其使用..或有意义的信息太少而无法使用..

当您手动执行此操作时,您会看到延迟 b/c 音频队列正在尝试处理您提供的空/错误缓冲区。然后您使用队列最终播放的有效数据重新提供相同的缓冲区,然后触发回调

解决方案:将您在启动队列之前放入缓冲区的数据与您手动提供的数据进行比较。我确定存在差异。如果这不起作用,请显示您的代码以进行进一步分析

于 2012-09-30T08:52:53.523 回答