В моем приложении я буду получать аудиоданные через сокет в линейном формате 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;
}
Я чувствую, что буфер правильный, но я не слышу звук, может кто-нибудь наставить меня, что я делаю неправильно.
Заранее спасибо