2012-05-16 24 views
12

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

答えて

0

(alcMakeContextCurrentにNULL使用してみてください)

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/)アプリケーションの中断 - アプリケーションの中断、アプリケーションの中断、再開 - iphone /) – james82345

1

オーディオ中断やIOSの問題は、現在存在していることに注意してください。中断の通知は正常ですが、終わりのオーディオ中断通知は必ずしも機能しません。これに関するAppleにはバグがあり、彼らは応答していません。

関連する問題