2012-05-16 13 views
12

Utworzyłem grę OpenGL 3D z wykorzystaniem OpenAL do odtwarzania dźwięku i doświadczam problemu utraty dźwięku, jeśli przycisk "Home" zostanie naciśnięty przed zainicjowaniem urządzenia audio. Próbowałem podłączyć się do obsługi przerwań sesji audio, ale moje wywołania zwrotne nigdy nie są wywoływane. Nieważne, czy zminimalizuję lub zmaksymalizuję aplikację. Mój "OpenALInterruptionListener" nigdy nie jest wywoływany.Jak prawidłowo obsługiwać przerwy w dźwięku?

Co robię źle?

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

Odpowiedz

0

Spróbuj użyć NULL w 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/ restartowanie-otwarcie-po-aplikacji-przerwanie-na-iphone /) – james82345

1

Należy pamiętać, że obecnie problemy z przerwami i iOS audio. Powiadomienia o przerwach są w porządku, ale powiadomienia o przerwaniu dźwięku nie zawsze działają. Na tym jest Apple i nie odpowiedzieli.

Powiązane problemy