0

我正在尝试将 AudioQueueEnqueueBufferWithParameters 与 inStartTime 参数一起使用来延迟播放每个缓冲区的开始。如下所示,它正在播放而没有预期的延迟。我的 inStartTime 正确递增,但调用返回的实际开始时间基本上与前一个缓冲区背靠背。我正在播放的声音适合单个缓冲区,因此我每次都将相同的缓冲区排入队列,但 inStartTime 会增加。什么会导致 AudioQueueEnqueueBufferWithParameters 忽略我的 inStartTime?

Frames in buffer: 11025
intended playtime = 0.000000
actual playtime = 0.000000
intended playtime = 99225.000000
actual playtime = 11025.000000
intended playtime = 198450.000000
actual playtime = 22050.000000
intended playtime = 297675.000000
actual playtime = 33075.000000
.
.
.
4

2 回答 2

0

开始时间参数不能用于在正在运行的音频队列中的连续缓冲区之间创建延迟。单个正在运行的音频队列中的缓冲区始终被回放。

在音频队列中创建延迟的方法是计数样本并用静音填充部分或全部缓冲区,直到开始用所需的声音样本填充缓冲区。

于 2012-12-02T21:19:34.793 回答
0

根据在AudioQueueEnqueueBufferWithParameters的参数inStartTime上的AudioQueue.h中找到的文档(您可以使用 XCode 访问它):

@param inStartTime
...
注意:当指定缓冲区的开始时间时,如果缓冲区不是自 AudioQueueStop 或 AudioQueueReset 以来第一个入队的,通常需要在 AudioQueueEnqueueBufferWithParameters 之前调用 AudioQueueFlush

(由于某种原因,官方文档不包含此说明)

你必须先调用AudioQueueFlush 入队。我知道它写成“......因为 AudioQueueStop 或 AudioQueueReset......”但它也适用于AudioQueueStart

于 2015-06-09T15:43:34.043 回答