Avaudioplayer Pare um som e reproduz -o desde o início
-
27-09-2019 - |
Pergunta
Usei o Avaudioplayer para reproduzir um arquivo WAV de 10 segundos e funciona bem. Agora eu o que parar o WAV no 4º segundo e depois reproduzi -lo novamente do primeiro segundo.
Aqui está o código que tentei:
NSString *ahhhPath = [[NSBundle mainBundle] pathForResource:@"Ahhh" ofType:@"wav"];
AVAudioPlayer *ahhhhhSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:ahhhPath] error:NULL];
[ahhhhhSound stop];
[ahhhhhSound play];
O que eu recebo é, o WAV para no 4º segundo, mas quando eu corro o [XXX Play] novamente, o WAV continua jogando o quinto segundo em vez de jogar desde o início.
Como eu poderia fazer isso? Qualquer ajuda será apreciada.
Solução
Apple's Referência da classe AvaudioPlayer diz:
O método de parada não redefine o valor da propriedade CurrentTime para 0. Em outras palavras, se você ligar para a parada durante a reprodução e depois chamar o jogo, a reprodução é retomada no ponto em que parou.
Então você deve ser capaz de reiniciá -lo com:
[ahhhhhSound stop];
ahhhhhSound.currentTime = 0;
[ahhhhhSound play];
Outras dicas
Então, tive alguns problemas, como você pode ver pelo meu comentário sobre a resposta de Darkdust. O problema apareceu apenas no iOS 4.3.3/4.3.5, iPhone 4. Possivelmente as versões anteriores do iOS também, mas não o iOS 5.0.1. De alguma forma, o próprio Avaudioplayer parecia "quebrar" ao interromper -o e a última jogada falharia inexplicavelmente. Na verdade, uma "parada" descarretaria algumas coisas carregadas no PrepareToPlay, que não são descarregadas se você apenas "pausar" o jogador - de acordo com a referência. Portanto, minha solução estaria usando uma pausa em vez de parar - considerado que o jogador está jogando no momento - caso contrário, não haveria razão para parar nada. Teoricamente deve ser mais rápido também. Resolveu isso para mim.
if (ahhhhhSound.playing) {
[ahhhhhSound pause];
}
ahhhhhSound.currentTime = 0;
[ahhhhhSound play];
Agora posso continuar com a vida novamente.
Rápido:
mySound.audioPlayer?.stop()
mySound.audioPlayer?.currentTime = 0
mySound.audioPlayer?.play()