在我的应用程序中,我将通过线性 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;
}
我觉得缓冲区是正确的,但我听不到声音,谁能指导我,我做错了什么。
提前致谢