Error de manejo de interrupción automática de ObjectAL

He estado jugando con llamadas telefónicas mientras el juego (SpriteKit) se ejecuta para probar interrupciones. Estoy usando un ejemplo de la documentación de ObjectAL llamada:"Uso de los objetos OpenAL y OALAudioTrack".

Entonces, dejo que la biblioteca maneje esto automáticamente ...

[OALAudioSession sharedInstance ]. handleInterruptions = YES

Y funciona pero parcialmente. Por ejemplo, con una configuración simple con 3 sonidos, recibo el siguiente mensaje de error:

OALAudioSession enableAudioSession]: No se pudo activar la sesión de audio después de 2 intentos: Error Domain = NSOSStatusErrorDomain Code = 561015905 "La operación no se pudo completar (error OSStatus 561015905.)"

Error 561015905 == 0x21706C61 == !pla, y en referencia al error declarado en AVAudioSession.h:

AVAudioSessionErrorCodeCannotStartPlaying = '! Pla', / * 0x21706C61, 561015905

Y en realidad esto funciona, hay dos intentos fallidos, el tercero fue exitoso, no se nota nada porque todo es rápido y todo parece estar funcionando como debería.

He notado que si agrego más sonidos (digamos 20), recibiré los mismos mensajes:

No se pudo activar la sesión de audio después de 20 intentos:

Después de eso, la sesión se activa. Luego, acabo de agregar un mensaje de depuración en el método relevante:

OALAudioSession.m

- (void) activateAudioSession
{
    NSError* error;
    for(int try = 1; try <= kMaxSessionActivationRetries; try++)
    {
        if([[AVAudioSession sharedInstance] setActive:YES error:&error])
        {

            NSLog(@"Session activated after %d", try);

            audioSessionActive = YES;
            return;
        }
        OAL_LOG_ERROR(@"Could not activate audio session after %d tries: %@", try, error);
        [NSThread sleepForTimeInterval:0.2];
    }
    OAL_LOG_ERROR(@"Failed to activate the audio session");
}  

Entonces, finalmente, después de 20 intentos fallidos, recibo un mensaje que dice: "Sesión activada después de 21 intentos"

Pero debido a que kMaxSessionActivationRetries está configurado en 40, eventualmente la reproducción del sonido se "interrumpirá" porque el número de intentos puede superar fácilmente los 40 intentos permitidos. Soy consciente de que puedo cambiar este valor, pero eso en realidad no resuelve el problema.

¿Me estoy perdiendo algo importante aquí? Pensé que cuandohandleInterruptions La propiedad está establecida en SÍ, no tenemos que hacer ninguna interrupción manual / manejo de sesión? Estoy probando en iPhone 6 y iOS8 si eso importa. ¿Alguien podría arrojar algo de luz sobre esto?

Respuestas a la pregunta(0)

Su respuesta a la pregunta