最初没有调用AudioQueueOutputCallback

时间:2012-09-27 20:36:56

标签: macos core-audio audioqueueservices

我的问题可能类似于:Why might my AudioQueueOutputCallback not be called?

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

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

我正确设置数据大小。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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