2012-05-16 20 views
12

He creado un juego OpenGL 3D utilizando OpenAL para la reproducción de audio y experimentando un problema de pérdida de audio si se presiona el botón "Inicio" antes de que se inicie el dispositivo de audio. Traté de conectarme al controlador de interrupción de sesión de audio, pero mi devolución de llamada nunca se llama. No importa si minimizo o maximizo mi aplicación. Mi "OpenALInterruptionListener" nunca se llama.¿Cómo manejar adecuadamente las interrupciones de audio?

¿Qué estoy haciendo mal?

AudioSessionInitialize(NULL, NULL, OpenALInterriptionListener, this); 

void OpenALInterriptionListener(void * inClientData, UInt32 inInterruptionState) 
{ 
    OpenALDevice * device = (OpenALDevice *) inClientData; 

    if (inInterruptionState == kAudioSessionBeginInterruption) 
    { 
      alcSuspendContext(_context); 
      alcMakeContextCurrent(_context); 
      AudioSessionSetActive(false); 
    } 
    else if (inInterruptionState == kAudioSessionEndInterruption) 
    { 
      UInt32 sessionCategory = kAudioSessionCategory_AmbientSound; 
      AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); 
      AudioSessionSetActive(true);  
      alcMakeContextCurrent(_context); 
      alcProcessContext(_context); 
    } 
} 

Respuesta

0

Intente utilizar NULL en alcMakeContextCurrent()

void OpenALInterriptionListener(void *inClientData, UInt32 inInterruptionState) 
{ 
    OpenALDevice * device = (OpenALDevice *) inClientData; 
    OSStatus nResult; 

    if(inInterruptionState == kAudioSessionBeginInterruption) 
    { 
     alcMakeContextCurrent(NULL);  
    } 
    else if(inInterruptionState == kAudioSessionEndInterruption) 
    { 
     nResult = AudioSessionSetActive(true); 

     if(nResult) 
     { 
      // "Error setting audio session active" 
     } 

     alcMakeContextCurrent(device->GetContext()); 
    } 
} 
+0

[http://benbritten.com/2009/02/02/restarting-openal-after-application-interruption-on-the-iphone/](http://benbritten.com/2009/02/02/ restarting-openal-after-application-interruption-on-the-iphone /) – james82345

1

Tenga en cuenta que actualmente hay problemas con interrupciones en el audio y el IOS. Las notificaciones de interrupción están bien, pero las notificaciones finales de interrupciones de audio no siempre funcionan. Hay un error en Apple en esto y no han respondido.

Cuestiones relacionadas