2

OpenAl と MPMoviePlayerController の組み合わせに問題があります。

OpenAl セットアップ プロセスで AudioInterruptionLister を登録しました。ビデオを開始すると、リスナーは AudioListenerInterruptionStarts を受け取りますが、ムービーが終了すると AudioListenerInterruptionEnd トリガーを受け取りません。

// Register callback for audio interrupts
AudioSessionInitialize(NULL, NULL, &OpenALInterruptionListener, this);

リスナー

void OpenALInterruptionListener(void *inClientData, UInt32 inInterruptionState) 
{
    OpenAL *oal = (OpenAL *) inClientData;

    if (inInterruptionState == kAudioSessionBeginInterruption) 
    {
        oal->MakeContextNull();
        AudioSessionSetActive(false);
    } 
    else if (inInterruptionState == kAudioSessionEndInterruption) 
    {
        AudioSessionSetActive(true);
       oal->MakeContextCurrent();
    }
}

これまでの私の解決策は、映画を開始する前にコンテキストを無効にし、映画が終了した後に現在のコンテキストにすることでした。ユーザーが画面に触れて映画を非常に速くスキップすると、コンテキストが最新になり、少し遅れて、コンテキストが再び null に設定される AudioListenerInterruptionStart トリガーが取得されるという問題が発生します。

iOS 3.1 以降では、useApplicationAudioSession = NO を設定でき、リスナーが開始トリガーまたは終了トリガーになることはありません。ただし、iOS 3.2 未満では、htis オプションは存在しません。

しかし、私の主な質問は、なぜ AudioListenerInterruptionEnd トリガーを取得しないのかということです。

助けてくれてありがとう

4

0 に答える 0