2010-08-01 18 views
0

J'ai du mal à obtenir une sortie audio sur mon iPhone et je n'ai plus d'idées.AudioQueue ne produit aucun son

Voici mon rappel pour remplir la mémoire tampon de file d'attente audio

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); 
} 

I configuration de la file d'attente audio en utilisant l'extrait suivant

// 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); 

La bibliothèque J'utilise est sortie PCM 16bit 44Hz linéaire.

Répondre

0

J'utilise habituellement 3 tampons. Vous avez besoin d'au moins 2 parce que l'un est joué, l'autre est rempli par votre code. Si vous en avez seulement un, il n'y a pas assez de temps pour remplir le même tampon et le remettre en file d'attente pour que la lecture soit transparente. Donc, il arrête probablement votre file d'attente, car il n'y avait plus de tampons.

0

Allouer deux tampons à la place.

AudioQueues sont très finicky.