在我的应用程序中,我将通过线性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,它被终止了,当我把它从线程类中取出时,它运行得很好。