ObjectAL自动中断处理错误

时间:2015-09-10 20:03:44

标签: objective-c sprite-kit avaudiosession interruption objectal

在(SpriteKit)游戏运行时,我一直在玩电话,以测试中断。我使用的是ObjectAL文档中的示例:"Using the OpenAL Objects and OALAudioTrack"

所以,我让图书馆自动处理这个......

[OALAudioSession sharedInstance ]. handleInterruptions = YES

它有效但部分有效。例如,通过3个声音的简单设置,我得到下一个错误消息:

  

OALAudioSession activateAudioSession]:无法激活音频   尝试2次后的会话:错误域= NSOSStatusErrorDomain   代码= 561015905"操作无法完成。 (OSStatus错误   。561015905)"

Error 561015905 == 0x21706C61 == !pla,并引用AVAudioSession.h中声明的错误:

  

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

实际上这是有效的,有两次失败的尝试,第三次是成功的,没有什么可以被注意到,因为一切都很快,一切似乎都在按预期工作。

我注意到如果我添加更多声音(比方说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次尝试失败之后,我得到的消息是:&#34; 21次尝试后会话被激活&#34;

但是因为kMaxSessionActivationRetries被设置为40,所以最终声音播放将会打破&#34;打破&#34;因为尝试的次数很容易超过允许的40次尝试。我知道我可以改变这个值,但这并没有真正解决问题。

我错过了重要的事情吗?我认为当handleInterruptions属性设置为YES时,我们不必进行任何手动中断/会话处理?我正在测试iPhone 6&amp; iOS8如果重要的话。谁能对此有所了解?

0 个答案:

没有答案