AudioQueue, обратный вызов не влияет равномерно для воспроизведения звука - PullRequest
0 голосов
/ 07 июня 2011

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

Я чувствую, что буфер правильный, но я не слышу звук, может кто-нибудь наставить меня, что я делаю неправильно.

Заранее спасибо

1 Ответ

0 голосов
/ 15 июня 2011

Спасибо, что взглянули на это, проблема была в том, что я запускал AudioQueue в классе потоков на основе C ++, и он был прерван, когда я вынул его из класса потоков, он работал нормально.

...