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