AudioQueue,Callback没有统一播放音频

时间:2011-06-07 16:45:51

标签: cocoa macos objective-c++ 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;
}

我觉得缓冲区是正确的,但我听不到声音,任何人都可以指导我,我做错了什么。

提前致谢

1 个答案:

答案 0 :(得分:0)

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