Как правильно обрабатывать прерывания звука?

Я создал 3D-игру OpenGL, используя OpenAL для воспроизведения звука, и столкнулся с проблемой потери звука, если кнопка «Домой» нажата до того, как аудиоустройство будет инициализировано. Я попытался подключиться к обработчику прерывания аудиосеанса, но мой обратный вызов никогда не вызывается. Неважно, минимизирую я или максимизирую свое приложение. Мой «OpenALInterruptionListener» никогда не вызывается.

Что я делаю не так?

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);
    }
}
12
задан Sergey K. 21 May 2012 в 09:28
поделиться