8

中断をテストするために、(SpriteKit)ゲームの実行中に電話で遊んでいます。「OpenAL オブジェクトと OALAudioTrack の使用」という ObjectAL ドキュメントの例を使用しています。

だから、ライブラリにこれを自動的に処理させます...

[OALAudioSession sharedInstance ]. handleInterruptions = YES

そしてそれは部分的にしか機能しません。たとえば、3 つのサウンドを使用した単純なセットアップでは、次のエラー メッセージが表示されます。

OALAudioSession activateAudioSession]: 2 回試行した後、オーディオ セッションをアクティブにできませんでした: エラー ドメイン = NSOSStatusErrorDomain コード = 561015905 「操作を完了できませんでした。(OSStatus エラー 561015905。)」

Error 561015905 == 0x21706C61 == !pla、および AVAudioSession.h で宣言されたエラーを参照します。

AVAudioSessionErrorCodeCannotStartPlaying = '!pla', /* 0x21706C61, 561015905

実際、これは機能します。2 回失敗し、3 回目は成功しました。すべてが高速で、すべてが正常に機能しているように見えるため、何も気付かれません。

さらにサウンドを追加すると (20 としましょう)、同じメッセージが表示されることに気付きました。

20 回試行した後、オーディオ セッションをアクティブ化できませんでした:

その後、セッションがアクティブになります。次に、関連するメソッドにデバッグ メッセージを追加しました。

OALAudioSession.m

- (void) activateAudioSession
{
    NSError* error;
    for(int try = 1; try <= kMaxSessionActivationRetries; try++)
    {
        if([[AVAudioSession sharedInstance] setActive:YES error:&error])
        {

            NSLog(@"Session activated after %d", try);

            audioSessionActive = YES;
            return;
        }
        OAL_LOG_ERROR(@"Could not activate audio session after %d tries: %@", try, error);
        [NSThread sleepForTimeInterval:0.2];
    }
    OAL_LOG_ERROR(@"Failed to activate the audio session");
}  

したがって、最後に、20回の試行に失敗した後、「21回の試行後にセッションがアクティブになりました」というメッセージが表示されます

ただし、kMaxSessionActivationRetries が 40 に設定されているため、試行回数が許可されている 40 回を簡単に超える可能性があるため、サウンドの再生は最終的に「中断」します。この値を変更できることは承知していますが、実際には問題は解決しません。

ここで重要な何かが欠けていますか? プロパティが YES に設定されている場合handleInterruptions、手動の中断/セッション処理を行う必要はないと思いましたか? 問題がある場合は、iPhone 6 と iOS8 でテストしています。誰かがこれに光を当てることができますか?

4

0 に答える 0