2012-05-16 2 views
12

Я создал игру OpenGL 3D, используя OpenAL для воспроизведения звука и испытывая проблему потери звука, если кнопка «Главная» нажимается до того, как аудиоустройство начнет инициализироваться. Я попытался подключиться к обработчику прерываний аудио сессии, но мой callback никогда не вызывается. Независимо от того, уменьшаю ли я или максимизирую свое приложение. Мой «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); 
    } 
} 

ответ

0

Попробуйте использовать NULL в 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/ перезапуск-OpenAL-после-приложений-прерывание-на-Iphone /) – james82345

1

Пожалуйста, обратите внимание, что в настоящее время есть проблемы с аудио Перебои и IOS. Сообщения о прерываниях прекрасны, но прекращение уведомления об ошибках. Не всегда срабатывают уведомления. В Apple есть ошибка, и они не ответили.

Смежные вопросы