在我的应用程序中,我将以线性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;
}
我觉得缓冲区是正确的,但我听不到声音,任何人都可以指导我,我做错了什么。
提前致谢
答案 0 :(得分:0)
感谢您看一下,问题是,我在基于C ++的线程类中运行AudioQueue并且它被终止,当我把它从线程类中取出它工作正常。