使用 AudioQueueStart() 时的延迟

Posted

技术标签:

【中文标题】使用 AudioQueueStart() 时的延迟【英文标题】:Delay when using AudioQueueStart() 【发布时间】:2009-06-30 23:32:42 【问题描述】:

我正在使用音频队列服务在 iPhone 上录制音频。我在开始录制时遇到了延迟问题。这是代码(大约):

OSStatus status = AudioQueueNewInput(
     &recordState.dataFormat, // 1
     AudioInputCallback, // 2
     &recordState,  // 3
     CFRunLoopGetCurrent(),  // 4
     kCFRunLoopCommonModes, // 5
     0,  // 6
     &recordState.queue);  // 7

// create buffers
for(int i = 0; i < NUM_BUFFERS; i++)

    if (status == 0)
        status = AudioQueueAllocateBuffer(recordState.queue, BUFFER_SIZE, &recordState.buffers[i]);


DebugLog(@"Starting recording\n");
OSStatus status = 0;
for(int i = 0; i < NUM_BUFFERS; i++)

    if (status == 0)
        status = AudioQueueEnqueueBuffer(recordState.queue, recordState.buffers[i], 0, NULL);

DebugLog(@"Queued buffers\n");
if (status == 0)

    // start audio queue
    status = AudioQueueStart(recordState.queue, NULL);

DebugLog(@"Started recording, status = %d\n", status);

日志输出如下所示:

2009-06-30 19:18:59.631 app[24887:20b] Starting recording
2009-06-30 19:18:59.828 app[24887:20b] Queued buffers
2009-06-30 19:19:00.849 app[24887:20b] Started recording, status = 0

请注意“Queued Buffers”消息和第二个“Starting recording”消息之间的 1 秒延迟。除了在我启动我的应用程序后立即开始录制之外,我有什么想法可以摆脱它吗?

顺便说一句,1 秒在模拟器和设备中非常一致,并且似乎不受缓冲区数量或大小的影响。使用良好的老式单声道 16 位 PCM。

【问题讨论】:

【参考方案1】:

迈克·泰森在他的blog 中涵盖了this。

但是,如果您希望快速开始录制,最好使用远程音频单元,或AVAudioEngine

【讨论】:

谢谢,这个页面也很有帮助:michael.tyson.id.au/2009/02/15/… 你能告诉我你做了什么来完成这项工作吗?我有同样的问题,似乎无法在该博客中找到正确的信息。你说的是 kAudiosessionProperty_PreferredHardwareIOBufferDuration 吗?

以上是关于使用 AudioQueueStart() 时的延迟的主要内容,如果未能解决你的问题,请参考以下文章

AudioQueueStart() 方法无法在 ios4 后台播放音乐

iPad 上的 AudioQueueStart() 问题

在 iphone4 中打电话后 AudioQueueStart 失败

AudioQueueStart 返回 561015905 (AVAudioSessionErrorCodeCannotStartPlaying)

AudioQueueStart 返回错误代码 -50

音频队列:AudioQueueStart 返回 -50