我使用的是音频队列服务记录在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

请注意的“排队缓冲器”消息和第二“启动记录”的消息之间的1秒的延迟。任何想法我如何能摆脱它,除了尽快开始记录我开始我的应用程序?

顺便说一句,1秒是在模拟器和设备相当一致的,并且似乎没有由数或缓冲器的尺寸的影响。使用旧的好的单16位PCM。

有帮助吗?

解决方案

泰森覆盖在他的博客

不过,如果你正在寻找快速启动录音,你会做的更好使用远程音频单元,或AVAudioEngine

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top