Verifica HTML5 se l'audio è in riproduzione?


Risposte:


152
function isPlaying(audelem) { return !audelem.paused; }

Il tag audio ha una pausedproprietà. Se non è in pausa, è in riproduzione.


Poiché non c'è arresto, questa è una soluzione pulita.
Todd Moses

11
E se non fosse mai iniziato?
Harry

30
Questa è una risposta sbagliata. Ci sto solo lavorando e prima del primo avvio .paused è falso.
Tomas

2
@ Tom hai un jsbin? Ho provato questo e sembra la risposta corretta.
Harry,

3
@Harry ci stavo giocando di più e sembra che in alcuni browser funzioni e in altri no. Immagino che dipenda dall'implementazione. Ma per tutti gli ultimi aggiornamenti per Chrome e Firefox sembra funzionare, quindi questa risposta è corretta per le ultime implementazioni.
Tomas

44

Puoi controllare la durata. È in riproduzione se la durata è superiore a 0 secondi e non è in pausa.

var myAudio = document.getElementById('myAudioID');

if (myAudio.duration > 0 && !myAudio.paused) {

    //Its playing...do your job

} else {

    //Not playing...maybe paused, stopped or never played.

}

2
Personalmente credo che !myAudio.paused||!myAudio.currentTimefarebbe un lavoro migliore.
m93a

11
@ m93a non intendi !myAudio.paused || myAudio.currentTime?
MalcolmOcean

5
Sì, dovrebbe essere !myAudio.paused || myAudio.currentTime. Mai risposto a quanto pare ...
Parte

16

Anche se sono davvero in ritardo su questo thread, utilizzo questa implementazione per capire se il suono viene riprodotto:

service.currentAudio = new Audio();

var isPlaying = function () {
    return service.currentAudio
        && service.currentAudio.currentTime > 0
        && !service.currentAudio.paused
        && !service.currentAudio.ended
        && service.currentAudio.readyState > 2;
}

Penso che la maggior parte dei flag sull'elemento audio siano evidenti a parte lo stato ready di cui puoi leggere qui: MDN HTMLMediaElement.readyState .


Non funziona se l'audio è stato messo in pausa automaticamente da iOS quando è bloccato.
shukshin.ivan

13
document.getElementsByTagName('audio').addEventListener('playing',function() { myfunction(); },false); 

Dovrebbe fare il trucco.


5

Prova questa funzione! La riproduzione audio non verrebbe eseguita se la posizione è l'inizio o la fine

function togglePause() {
     if (myAudio.paused && myAudio.currentTime > 0 && !myAudio.ended) {
         myAudio.play();
     } else {
         myAudio.pause();
     }
}

0

Per controllare se l'audio è davvero iniziare a giocare, soprattutto se si dispone di un flusso, necessità di controllare audio.played.lengtha 1. Sarà 1 solo se l'audio è davvero suoni di inizio. Altrimenti lo sarà 0. È più simile a un hack, ma funziona ancora anche nei browser mobili, come Safari e Chrome.


0

puoi usare l'evento onplay.

var audio = document.querySelector('audio');
audio.onplay = function() { /* do something */};

o

var audio = document.querySelector('audio');
audio.addEventListener('play', function() { /* do something */ };

0

sto usando questo codice jquery con il pulsante di traino play e stop, il pulsante play è un pulsante play and pouse

const help_p = new Audio("audio/help.mp3");//Set Help Audio Name
$('#help_play').click(function() {//pause-Play
if (help_p.paused == false) {
  help_p.pause();//pause if playing
} else {
  help_p.play();//Play If Pausing
}
});

$('#help_stop').click(function() {//Stop Button
  help_p.pause();//pause
  help_p.currentTime = 0; //Set Time 0
});

-2

Sebbene non esista un metodo chiamato isPlaying o qualcosa di simile, ci sono alcuni modi per farlo.

Questo metodo ottiene la% di avanzamento durante la riproduzione dell'audio:

function getPercentProg() {
    var myVideo = document.getElementById('myVideo');
    var endBuf = myVideo.buffered.end(0);
    var soFar = parseInt((endBuf / myVideo.duration) * 100);
    document.getElementById('loadStatus').innerHTML =  soFar + '%';
}

Se la percentuale è maggiore di 0 e minore di 100, è in riproduzione, altrimenti viene interrotta.


Ehm, cosa succede se metto in pausa l'audio a metà?
Niet the Dark Absol

1
Allora non sarebbe giocare.
Todd Moses

Questo rileva solo la quantità tamponata. Se, ad esempio, l'elemento audio ha iniziato il buffering dei dati ma non ha iniziato la riproduzione perché non dispone di dati sufficienti, questo metodo può comunque restituire true. O se l'elemento ha memorizzato i dati nel buffer durante la riproduzione e successivamente è stato messo in pausa.
dhasenan

getElementsByTagName ('myVideo')? penso che dovrebbe essere getElementById ('myVideo')
Lucky Soni

2
Em ... Perché minusing? Un'ottima idea, anche se scritta male. Come puoi verificare se l'audio in tempo reale (WebRTC) viene riprodotto con .paused? Solo con controllo del buffer. Non meritato minusing. Voto positivo.
igorpavlov
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.