0

私のアプリでは、線形PCM形式のソケットを介してオーディオデータを受信します。一定の時間間隔で約50ミリ秒、AudioQueueを使用して同じものを再生します。AudioQueueSpeakHereの例のコードのほとんどを参照しました。違いのみ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;
}

バッファは適切だと思いますが、音が聞こえません。誰かが私を案内してくれますか、私が間違っていることを教えてください。

前もって感謝します

4

1 に答える 1

0

ご覧いただきありがとうございます。問題は、AudioQueueをC ++ベースのスレッドクラスで実行していて終了しました。スレッドクラスから削除すると、正常に動作しました。

于 2011-06-15T07:46:52.537 に答える