AVAudioPlayer fermare un suono e riprodurlo dall'inizio
-
27-09-2019 - |
Domanda
Ho usato l'AVAudioPlayer per riprodurre un file wav 10 secondi e funziona benissimo. Ora ho quello di fermare il wav al 4 ° sec e poi giocare di nuovo dal molto prima sec.
Ecco il codice che ho provato:
NSString *ahhhPath = [[NSBundle mainBundle] pathForResource:@"Ahhh" ofType:@"wav"];
AVAudioPlayer *ahhhhhSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:ahhhPath] error:NULL];
[ahhhhhSound stop];
[ahhhhhSound play];
Quello che ottengo è, il wav si ferma al 4 ° sec, ma quando ho eseguito il [gioco XXX] ancora una volta, il wav continua a giocare il 5 ° sec invece di giocare dall'inizio.
Come potrei ottenere questo fatto? Qualsiasi aiuto sarà apprezzato.
Soluzione
AVAudioPlayer di riferimento di classe di Apple dice:
Il metodo di arresto non azzerare il valore della proprietà currentTime a 0. In altre parole, se si chiama fermata durante la riproduzione e il gioco poi chiamata, la riproduzione riprende dal punto in cui era stato interrotto.
Quindi, si dovrebbe essere in grado di riavviare con:
[ahhhhhSound stop];
ahhhhhSound.currentTime = 0;
[ahhhhhSound play];
Altri suggerimenti
Così ho avuto qualche problema, come si può vedere dal mio commento sulla risposta di DarkDust. Il problema è apparso solo su iOS 4.3.3 / 4.3.5, iPhone 4. iOS versioni forse anche prima, come pure, ma non iOS 5.0.1. In qualche modo l'AVAudioPlayer stesso sembrava di "rompere" quando l'arresto e il secondo gioco sarebbe solo riuscire unexplicably. In realtà un "stop" sarebbe scaricare alcune cose caricato su prepareToPlay, che non viene scaricato solo se si "pausa", il giocatore - secondo il riferimento. Quindi la mia soluzione sarebbe utilizzando pausa invece di stop - considerato il giocatore è attualmente in riproduzione - altrimenti non ci sarebbe alcun motivo di arresto nulla. Teoricamente dovrebbe essere più veloce anche. Risolto il problema per me.
if (ahhhhhSound.playing) {
[ahhhhhSound pause];
}
ahhhhhSound.currentTime = 0;
[ahhhhhSound play];
Ora posso andare avanti con la vita.
Swift:
mySound.audioPlayer?.stop()
mySound.audioPlayer?.currentTime = 0
mySound.audioPlayer?.play()