我有 3 个 audioQueueBufferRef 来填充我的音频队列,当数据足够快时,一切都很好。但有时 outputCallback 要求在没有更多数据时填充缓冲区。在这种情况下,我不会将某些东西排入队列,并且不再调用回调。(普通的 ?)
在此之后,我使用 2 个缓冲区和后来(在另一个滞后之后)1 个缓冲区运行,最后没有更多的缓冲区有回调导致没有声音。
我尝试将空的 audioQueueBufferRef 存储在一个数组中,并在我有数据要填充时调用它们。但由于数据来得不够快,缓冲区只会“吃掉”我剩下的少量数据,而且声音很迟钝。
当要填充的数据不足时,最好的方法是什么?
我发现的最好的方法是让缓冲区在没有回调的情况下死掉,让剩余的缓冲区完成这项工作,直到每个缓冲区都为空。在此之后我停止音频队列,存储一些数据并再次播放。请注意,我必须调用 AudioqueueStop() 因为当每个缓冲区都是空的并且我重新填充它们时,没有声音出来。这是正常的吗?
一般来说,我是用好方法还是有更好的方法?是否有一个回调检测到我所有的 audioqueueBufferRef 都死了(没有回调运行)?2.