2012-05-16 17 views
12

Ses çalma işlemi başlatılmadan önce "Home" (Ana Sayfa) düğmesine basılırsa, ses çalma için OpenAL kullanan ve sesini kaybetme sorununu yaşayan bir OpenGL 3D oyunu oluşturdum. Sesli oturum kesme işleyicisine bağlanmayı denedim, ancak geri aramam asla aranmıyor. Uygulamamı en aza indirir veya en üst düzeye çıkarırsam fark etmez. "OpenALInterruptionListener", asla çağrılmıyor.Ses kesintileri nasıl düzgün yapılır?

Neyi yanlış yapıyorum?

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

cevap

0

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/ yeniden başlatmadan-openal-sonrası uygulamaya-mudahale-on-the-iphone /) – james82345

1

Ses Kesintiler'e ve IOS ile ilgili sorunlar şu anda unutmayınız() alcMakeContextCurrent NULL kullanmayı deneyin. Kesinti bildirimleri iyidir, ancak sonlandırma Ses Kesintileri Bildirimleri her zaman çalışmaz. Bu konuda Apple'da bir hata var ve yanıt vermediler.