AudioQueue не выводит звук - PullRequest
0 голосов
/ 02 августа 2010

У меня проблемы с выводом звука в моем эксперименте с iPhone, и у меня нет идей.

Вот мой обратный вызов для заполнения буфера аудио-очереди

void AudioOutputCallback(void *user, AudioQueueRef refQueue, AudioQueueBufferRef inBuffer)
{
     NSLog(@"callback called");
     inBuffer->mAudioDataByteSize = 1024;

     gme_play((Music_Emu*)user, 1024, (short *)inBuffer->mAudioData);

     AudioQueueEnqueueBuffer(refQueue, inBuffer, 0, NULL);
}

Я установил звукочередь с использованием следующего фрагмента

    // Create stream description
    AudioStreamBasicDescription streamDescription;
    streamDescription.mSampleRate = 44100;
    streamDescription.mFormatID = kAudioFormatLinearPCM;
    streamDescription.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
    streamDescription.mBytesPerPacket = 1024;
    streamDescription.mFramesPerPacket = 1024 / 4;
    streamDescription.mBytesPerFrame = 2 * sizeof(short);
    streamDescription.mChannelsPerFrame = 2;
    streamDescription.mBitsPerChannel = 16;

    AudioQueueNewOutput(&streamDescription, AudioOutputCallback, theEmu, NULL, NULL, 0, &theAudioQueue);

    OSStatus errorCode = AudioQueueAllocateBuffer(theAudioQueue, 1024, &someBuffer);

    if( errorCode )
    {
        NSLog(@"Cannot allocate buffer");
    }

    AudioOutputCallback(theEmu, theAudioQueue, someBuffer);

    AudioQueueSetParameter(theAudioQueue, kAudioQueueParam_Volume, 1.0);

    AudioQueueStart(theAudioQueue, NULL);

Используемая мной библиотека выводит линейный PCM 16 бит 44 Гц.

Ответы [ 2 ]

0 голосов
/ 05 августа 2010

Я обычно использую 3 буфера. Вам нужно по крайней мере 2, потому что когда один разыгрывается, другой заполняется вашим кодом. Если у вас есть только один, недостаточно времени, чтобы заполнить тот же буфер и повторно поставить его в очередь, и воспроизведение будет плавным. Так что это, вероятно, просто останавливает вашу очередь, потому что в ней закончились буферы.

0 голосов
/ 02 августа 2010

Вместо этого выделите два буфера.

AudioQueues очень привередливы.

...