AVAudioPlayer reset attualmente in riproduzione audio e giocare dall'inizio
-
18-09-2019 - |
Domanda
Sto avendo un problema con AVAudioPlayer dove voglio ripristinare un giocatore se è attualmente in riproduzione e lo hanno giocare di nuovo.
provo quanto segue senza fortuna:
L'audio viene riprodotto una volta, ma poi la seconda volta i selezionare il pulsante si ferma il suono, la terza volta che si avvia il suono di nuovo.
//Stop the player and restart it
if (player.playing) {
NSLog(@"Reset sound: %@", selectedSound);
[player stop];
[player play];
} else {
NSLog(@"playSound: %@", selectedSound);
[player play];
}
Inoltre ho provato ad utilizzare player.currentTime = 0 che indica che sarebbe ripristinare il lettore, che non ha funzionato, ho anche provato a ripristinare currentTime = 0 e quindi chiamando il gioco che non ha funzionato.
//Stop the player and restart it
if (player.playing) {
NSLog(@"Reset sound: %@", selectedSound);
player.currentTime = 0;
[player play];
} else {
NSLog(@"playSound: %@", selectedSound);
[player play];
}
Soluzione
Per la vostra situazione che avrebbe cercato il seguente
//Pause the player and restart it
if (player.playing) {
NSLog(@"Reset sound: %@", selectedSound);
[player pause];
}
player.currentTime = 0;
[player play];
Se avete intenzione di giocare subito il suono di nuovo, vorrei suggerire di pausa, invece di arresto. Chiamando stop "di interrompere la riproduzione e disfa la configurazione necessaria per la riproduzione".
Altri suggerimenti
Esempio Swift:
player.currentTime = 0.0;
Come indicato, se si desidera che il suono a giocare di nuovo, si dovrebbe evitare disabilitando l'istanza AVAudioPlayer con una sosta, ma piuttosto, semplicemente emettere un reset della posizione in cui si sta giocando. Quindi, non utilizzare stop () o pause (), ma come detto Plumenator, basta rilasciare .currentTime = 0. Quindi nel tuo caso, si sarebbe semplicemente fare:
if (player.isPlaying) {
player.currentTime = 0
} else {
player.play()
}