2011-06-07 61 views
0

在我的应用程序中,我将通过线性PCM格式的套接字接收音频数据,时间间隔统一,约为50 ms, 我使用AudioQueue播放音频数据我称为最从AudioQueue SpeakHere实施例的代码唯一的区别是我需要在Mac OS运行它的,AudioQueue,回调没有统一到播放音频

以下是相关的一段代码,

设置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

感谢有它一看,问题是,我是基于线程级运行AudioQueue在C++中,它被终止,当我把它拿出来的线程类的它工作得很好。