7

我收到 API AudioQueueFreeBuffer 的警告“ AudioQueueObject::FreeBuffer: AQBuffer * 0x6273fd0 has enqueue count of 1 ”... 如何避免此警告?

我在 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;
        }
4

2 回答 2

2

当您尝试对已在正在运行的 AudioQueue 中排队的缓冲区调用 AudioQueueFreeBuffer() 时,会发生这种情况。在尝试释放缓冲区之前,您应该在关联的 AudioQueue 上调用 AudioQueueStop()。

AudioQueueFreeBuffer() 的文档说:

仅当您想在继续使用音频队列的同时处理特定缓冲区时才调用此函数。只有当拥有它的音频队列停止(即不处理音频数据)时,您才能释放缓冲区。

于 2013-10-27T03:22:23.917 回答
1

尝试这个:

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

AudioQueueDispose(playState.queue, true);
AudioFileClose(playState.audioFile);
于 2011-02-20T15:22:41.083 回答