Question

J'utilise les services de file d'attente audio pour enregistrer de l'audio sur l'iPhone. J'ai un problème de latence que lors du démarrage de l'enregistrement. Voici le code (environ):

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

La sortie du journal ressemble à ceci:

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

Notez le délai de 1 seconde entre le message « Queutés buffers » et 2ème message « Démarrage de l'enregistrement ». Toute idée comment je peux me débarrasser de lui, en dehors de l'enregistrement à partir dès que je commence mon application?

BTW, le 1-seconde est assez cohérente dans le simulateur et l'appareil, et ne semble pas être affecté par le nombre ou la taille des tampons. En utilisant le bon vieux mono PCM 16 bits.

scroll top