2011-02-01 15 views
7

Viene visualizzato un avviso "AudioQueueObject :: FreeBuffer: AQBuffer * 0x6273fd0 ha un conteggio di enqueue di 1" per API AudioQueueFreeBuffer ... Come evitare questo avviso?Avviso AudioQueueFreeBuffer

sto ottenendo questo avvertimento nel AudioQueueFreeBuffer API

 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

Invia qualche codice minimo che riproduca questo errore. – servermanfail

+0

Non ho ricevuto risposta e ho perso anche 50 punti :-( –

risposta

1

Prova questa:

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

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

Provato ... Ma non ho risolto il problema –

2

Ciò si verifica quando si tenta di chiamare AudioQueueFreeBuffer() su un buffer che si è accodato in un AudioQueue che è in esecuzione. È necessario chiamare AudioQueueStop() sull'audioQueue associato prima di provare a liberare i buffer.

The doc's for AudioQueueFreeBuffer() say:

chiamare questa funzione solo se si desidera disporre di un particolare tampone continuando a utilizzare una coda audio. È possibile smaltire un buffer solo quando la coda audio che lo possiede viene arrestata (ovvero, non è elaborazione dati audio).