2012-05-16 20 views
12

Ich habe ein OpenGL 3D-Spiel mit OpenAL für die Audiowiedergabe erstellt und habe das Problem, Audio zu verlieren, wenn die Home-Taste gedrückt wird, bevor das Audiogerät initialisiert wird. Ich habe versucht, den Audio-Session-Interrupt-Handler zu erreichen, aber mein Callback wird nie aufgerufen. Egal, ob ich meine Bewerbung minimieren oder maximieren möchte. Mein "OpenALInterruptionListener" wird nie aufgerufen.Wie können Audiounterbrechungen richtig behandelt werden?

Was mache ich falsch?

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

Antwort

0

Versuchen NULL in 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/] Neustart-Openal-nach-Anwendung-Unterbrechung-auf-dem-iPhone /) – james82345

1

Bitte beachten Sie, dass es derzeit Probleme mit Audio Interruptions und IOS verwenden. Unterbrechungsbenachrichtigungen sind in Ordnung, aber Audiounterbrechungsbenachrichtigungen enden nicht immer. Es gibt einen Fehler in Apple und sie haben nicht geantwortet.