AudioQueue,回调未统一命中以播放音频



在我的应用程序中,我将通过线性PCM格式的套接字接收音频数据,时间间隔均匀,大约50毫秒。,我使用AudioQueue来播放相同的内容,我引用了AudioQueue SpeakHere的大部分代码。例如,唯一的区别是我需要在Mac OS、上运行它

以下是相关代码,

设置AudioBufferDescription格式,

FillOutASBDForLPCM (sRecordFormat,
                    16000,
                    1,
                    16,
                    16,
                    false,
                    false
                    );

分配缓冲区以保存和播放数据

for (int i = 0; i < kNumberBuffersPLyer; ++i) {
    XThrowIfError(AudioQueueAllocateBuffer(mQueue, bufferByteSize,   &mBuffers[i]),
                  "AudioQueueAllocateBuffer failed");
}

其中bufferByteSize为640,缓冲区数量为3

启动队列,

OSStatus errorCode = AudioQueueStart(mQueue,NULL);

现在,问题是,我原以为,当它播放缓冲区时,它应该会自动击中回调,但它没有发生,

因此,当我获得缓冲区时,我将缓冲区排队,这是代码

void AudioStream::startQueueIfNeeded(){
    SetLooping(true);
    // prime the queue with some data before starting
    for (int i = 0; i < kNumberBuffersPLyer; ++i) 
    {
        AQBufferCallback (this, mQueue, mBuffers[0]);           
        //enQueueBuffer(this,mQueue,mBuffers[i]);
    }
    //  AudioSessionSetActive( true );
    OSStatus errorCode = AudioQueueStart(mQueue,NULL);
    mIsDone = false;
    mIsStarted = true;
}

我觉得缓冲区很合适,但我听不到声音,有人能指导我吗,我做错了什么。

提前感谢

谢谢你看一下,问题是,我在基于C++的线程类中运行AudioQueue,它被终止了,当我把它从线程类中取出时,它运行得很好。

相关内容

  • 没有找到相关文章

最新更新