2010-10-02 10 views
21

Ho utilizzato AVAudioPlayer per riprodurre un file wav di 10 secondi e funziona correttamente. Ora, io cosa fermare il wav al 4 ° e poi riprodurlo dal molto primo.AVAudioPlayer interrompe un suono e lo riproduce dall'inizio

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 di nuovo il [gioco XXX], il wav continua a giocare il 5 ° sec invece di suonare dall'inizio.

Come ho potuto ottenere questo fatto? Qualsiasi aiuto sarà apprezzato.

+0

e per brevi suona il sintomo evidente è che il suono non gioca la seconda volta - chiamando stop e giocare solo ha causato il suono per terminare la riproduzione e sembrava il secondo gioco è stato ignorato . Questo è ciò che stava accadendo nel mio codice, e la risposta in basso l'ha risolto. – Echelon

risposta

54

di Apple AVAudioPlayer class reference dice:

Il metodo di arresto non resetta il valore della proprietà currentTime a 0. In altre parole, se si chiama fermata durante la riproduzione e quindi si chiama il gioco, la riproduzione riprende dal punto in cui si lasciato fuori.

Così si dovrebbe essere in grado di riavviare con:

[ahhhhhSound stop]; 
ahhhhhSound.currentTime = 0; 
[ahhhhhSound play]; 
+0

Ho riscontrato un problema con questo sui dispositivi iOS 4.3.3 e 4.3.5 almeno. Funziona OK su dispositivi iOS 5.0.1. (iPhone 4 e 4S) dopo aver fermato, quindi impostando currentTime su 0, quindi su play, la riproduzione fallisce (restituendo NO). Sto tirando i miei capelli qui ... – Jonny

+0

@Jonny: Poi fai una nuova domanda. Questa domanda è di 1,5 anni ;-) – DarkDust

+0

No, ho trovato una soluzione alternativa e sono in corsa per la tua fama ;-) – Jonny

6

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. Probabilmente anche versioni precedenti di iOS, ma non iOS 5.0.1. In qualche modo, lo stesso AVAudioPlayer sembrava "rompere" quando lo si interrompeva e quest'ultimo gioco falliva in modo inesplicabile. In realtà uno "stop" scaricherà alcune cose caricate su prepareToPlay, che non viene scaricato se si "mette in pausa" il giocatore - in base al riferimento. Quindi la mia soluzione sarebbe usare la pausa invece di fermarsi - considerato che il giocatore sta correntemente giocando - altrimenti non ci sarebbe motivo di fermare nulla. In teoria dovrebbe essere anche più veloce. Risolto per me.

if (ahhhhhSound.playing) { 
    [ahhhhhSound pause]; 
} 
ahhhhhSound.currentTime = 0; 
[ahhhhhSound play]; 

Ora posso riprendere la vita.

+0

+1 a questa soluzione. Avevo problemi con l'interruzione (i suoni si interrompevano, solo le parti finali riproducevano altri suoni, ecc. Ho più istanze di AVAudioPlayer). L'uso della pausa e l'impostazione del tempo corrente su 0 risolve tutti i miei problemi! –

+0

Sì, pause() è il modo corretto per farlo. – StackUnderflow

0

Swift:

mySound.audioPlayer?.stop() 
mySound.audioPlayer?.currentTime = 0 
mySound.audioPlayer?.play() 
Problemi correlati