2009-03-23 16 views
6

Estoy desarrollando un transmisor de audio y he declarado un oyente de interrupción para guardar el estado de una canción cuando ocurre una interrupción, como una llamada entrante o un sms.Manejo de interrupciones con la cola de audio

Aquí está el código correspondiente

En mi AppDelegate, tengo este

AudioSessionInitialize (NULL, NULL, interruptionListenerCallback, self); 
AudioSessionSetActive(YES); 

Esto es lo que el oyente interrupción parece

void interruptionListenerCallback (void *inUserData, UInt32 interruptionState) { 
// This callback, being outside the implementation block, needs a reference 
//to the AudioPlayer object 
MyPlayer *player = (MyPlayer *)inUserData; 

if (interruptionState == kAudioSessionBeginInterruption) { 
    if ([player audioStreamer]) { 
     // if currently playing, pause 
     [player pausePlayback]; 
     player.interruptedOnPlayback = YES; 
    } 

} else if ((interruptionState == kAudioSessionEndInterruption) && player.interruptedOnPlayback) { 
    // if the interruption was removed, and the app had been playing, resume playback 
    [player resumePlayback]; 
    player.interruptedOnPlayback = NO; 
} 

}

Cuando consigo una llamada telefónica se llama al oyente de interrupción y, si el usuario rechaza la llamada, el método de reanudación de la reproducción también se llama. Pero antes de que se llama al método resumePlayback, me sale este error en la consola de AudioQueueEnqueueBuffer

error: tca! error int: 560030580

¿Alguien tiene una idea de cómo manejar correctamente interrupciones de audio al reproducir archivos de audio.

Gracias.

Respuesta

0

A mi me parece como si está configurando inUserData como su AppDelegate en lugar de su reproductor.

2

! Acto es kAudioSessionNotActiveError, declaró en AudioServices.h, con el comentario

"en la operación porque el AudioSession no está activo. Llamando AudioSessionSetActive (verdadero) primero corregirá este error en la mayoría de los casos."

También aparece este error cuando llama a AudioQueueStart() después de una interrupción (como me enteré hoy).

+0

En mi caso esto fue porque paré la sesión antes de pausar un AVPlayer en reproducción. – Drew

Cuestiones relacionadas