Erro de manipulação de interrupção automática ObjectAL
Eu tenho jogado com telefonemas enquanto o jogo (SpriteKit) está sendo executado para testar interrupções. Estou usando o exemplo da documentação do ObjectAL chamada:"Usando os objetos OpenAL e OALAudioTrack".
Então, deixei a biblioteca lidar com isso automaticamente ...
[OALAudioSession sharedInstance ]. handleInterruptions = YES
E funciona, mas parcialmente. Por exemplo, com uma configuração simples com três sons, recebo a seguinte mensagem de erro:
OALAudioSession activAudioSession]: não foi possível ativar a sessão de áudio após duas tentativas: Domínio de erro = NSOSStatusErrorDomain Code = 561015905 "A operação não pôde ser concluída. (Erro de OSStatus 561015905.)"
Error 561015905 == 0x21706C61 == !pla
e referindo-se ao erro declarado em AVAudioSession.h:
AVAudioSessionErrorCodeCannotStartPlaying = '! Pla', / * 0x21706C61, 561015905
E, na verdade, isso funciona, há duas tentativas fracassadas, a terceira foi bem-sucedida, nada pode ser percebido porque tudo é rápido e tudo parece estar funcionando como deveria.
Percebi que se adicionar mais sons (digamos 20), receberei as mesmas mensagens:
Não foi possível ativar a sessão de áudio após 20 tentativas:
Depois disso, a sessão é ativada. Em seguida, adicionei a mensagem de depuração no método relevante:
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");
}
Então, finalmente, depois de 20 tentativas malsucedidas, recebo uma mensagem que diz: "Sessão ativada após 21 tentativas"
Mas como o kMaxSessionActivationRetries está definido como 40, a reprodução do som acabará "quebrando" porque o número de tentativas pode facilmente ultrapassar as 40 tentativas permitidas. Estou ciente de que posso alterar esse valor, mas isso não resolve o problema.
Estou perdendo algo importante aqui? Eu pensei que quandohandleInterruptions
está definida como YES, não precisamos fazer nenhuma interrupção manual / manipulação de sessão? Estou testando no iPhone 6 e iOS8, se isso importa. Alguém poderia lançar alguma luz sobre isso?