2012-05-16 7 views
12

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

risposta

0

Provate ad usare NULL nel 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/ riavviando-OpenAL-dopo-application-interruzione-on-the-iphone /) – james82345

1

Si prega di notare che ci sono attualmente problemi con interruzioni audio e IOS. Le notifiche di interruzione sono valide, ma terminano le interruzioni audio Le notifiche non sempre funzionano. C'è un bug in Apple su questo e non hanno risposto.