私のアプリでは、線形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;
}
バッファは適切だと思いますが、音が聞こえません。誰かが私を案内してくれますか、私が間違っていることを教えてください。
前もって感謝します