2009-06-30 12 views
2

Ich verwende die Audio Queue-Dienste, um Audio auf dem iPhone aufzunehmen. Ich habe jedoch ein Latenzproblem beim Starten der Aufnahme. Hier ist der Code (ca.):Verzögerung bei der Verwendung von AudioQueueStart()

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

Die Log-Ausgabe sieht wie folgt aus:

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 

Beachten Sie die 1-Sekunden-Verzögerung zwischen dem "Queued Buffers" Nachricht und 2. "Aufnahme starten" -Meldung. Irgendwelche Ideen, wie ich es loswerden kann, abgesehen von der Aufnahme, sobald ich meine App starte?

BTW, die 1-Sekunde ist ziemlich einheitlich in den Simulator und Gerät, und scheint nicht von der Anzahl oder Größe der Puffer betroffen sein. Mit gutem alten 16-Bit-Mono-PCM.

Antwort

-2

Mike Tyson umfasst this in seinem blog.

Wenn Sie jedoch schnell mit der Aufnahme beginnen möchten, sollten Sie besser eine Remote-Audioeinheit verwenden, oder AVAudioEngine.

+0

Danke, diese Seite ist auch hilfreich: http://michael.tyson.id.au/2009/02/15/developing-loopy-part-2-implementation/ – sehugg

+0

Das ist die Seite, die ich gesucht habe. Es ist gutes Zeug. –

+0

Können Sie mir sagen, was Sie getan haben, damit das funktioniert? Ich habe das gleiche Problem und kann anscheinend nicht die richtigen Informationen in diesem Blog finden. Sprechen Sie über kAudioSessionProperty_PreferredHardwareIOBufferDuration? – madmik3

Verwandte Themen