Pergunta

Eu estou usando os serviços da fila de áudio para gravar áudio no iPhone. Estou tendo um problema de latência embora quando iniciar a gravação. Aqui está o código (aprox):

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);

Os olhares de saída log como este:

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

Observe a 1 segundo de atraso entre a mensagem "em fila de espera buffers" e 2 "Iniciar gravação" mensagem. Alguma idéia de como posso me livrar dele, além de começar a gravar assim que eu começar o meu aplicativo?

BTW, o 1-segundo é bastante consistente no simulador e dispositivos, e não parece ser afetada por número ou tamanho dos buffers. Usando boa PCM mono 16-bit de idade.

Foi útil?

Solução

Mike Tyson cobre este em sua blogue .

No entanto, se você estiver olhando para rapidamente começar a gravar você faria melhor usar uma unidade remota de áudio ou AVAudioEngine.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top