0

在我的应用程序中,我将通过线性 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;
}

我觉得缓冲区是正确的,但我听不到声音,谁能指导我,我做错了什么。

提前致谢

4

1 回答 1

0

感谢您查看它,问题是,我在基于 C++ 的线程类中运行 AudioQueue 并且它被终止,当我将它从线程类中取出时它工作正常。

于 2011-06-15T07:46:52.537 回答