2011-06-07 54 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++中,它被終止,當我把它拿出來的線程類的它工作得很好。