2011-02-01 9 views
7

Recibo una advertencia "AudioQueueObject :: FreeBuffer: AQBuffer * 0x6273fd0 tiene una cuenta en cola de 1" para API AudioQueueFreeBuffer ... ¿Cómo puedo evitar esta advertencia?Advertencia de AudioQueueFreeBuffer

estoy recibiendo esta advertencia en API AudioQueueFreeBuffer

 for (int i = 0; i < kNumberBuffers; ++i) { 

      if(mAudioInfo.mBuffers[i] != NULL) 
      { 
       AudioQueueFreeBuffer(mAudioInfo.mQueue, mAudioInfo.mBuffers[i]); 
       mAudioInfo.mBuffers[i] = NULL; 
      } 
      XThrowIfError(AudioQueueAllocateBuffer(mAudioInfo.mQueue, mBufferByteSize, &mAudioInfo.mBuffers[i]), "AudioQueueAllocateBuffer failed"); 

      AQTestBufferCallback (&mAudioInfo, mAudioInfo.mQueue, mAudioInfo.mBuffers[i]); 

      if (mAudioInfo.mDone) break; 
     } 
+0

Publique un código mínimo que reproduzca este error. – servermanfail

+0

No recibí respuesta y también perdí 50 puntos :-( –

Respuesta

1

Prueba esto:

for(int i = 0; i < NUM_BUFFERS; i++) 
{ 
    AudioQueueFreeBuffer(playState.queue, playState.buffers[i]); 
} 

AudioQueueDispose(playState.queue, true); 
AudioFileClose(playState.audioFile); 
+0

Intenté ... pero no resolvió el problema –

2

Esto ocurre cuando se intenta llamar AudioQueueFreeBuffer() en un tampón que ha sido puestas en cola en un AudioQueue que Esta corriendo. Debería llamar a AudioQueueStop() en la AudioQueue asociada antes de intentar liberar los búferes.

The doc's for AudioQueueFreeBuffer() say:

llamar a esta función sólo si desea disponer de un búfer en particular sin dejar de utilizar una cola de audio. Puede deshacerse de un almacenamiento intermedio solo cuando se detiene la cola de audio que lo posee (es decir, no procesando datos de audio).