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.

Foi útil?

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()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top