Ho creato un gioco OpenGL 3D che utilizza OpenAL per la riproduzione audio e sperimenta un problema di perdita di audio se il pulsante "Home" viene premuto prima che il dispositivo audio venga inizializzato. Ho provato a collegarmi al gestore di interrupt di sessione audio, ma il mio callback non viene mai chiamato. Non importa se minimizzo o massimizzo la mia applicazione. Il mio "OpenALInterruptionListener" non viene mai chiamato.Come gestire correttamente le interruzioni audio?
Cosa sto sbagliando?
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/ riavviando-OpenAL-dopo-application-interruzione-on-the-iphone /) – james82345