HTML5 verifica se o áudio está sendo reproduzido?

Respostas:

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

A tag Audio possui uma pausedpropriedade Se não estiver em pausa, está sendo reproduzido.

Niet, o Escuro Absol
fonte
Como não há parada, esta é uma solução limpa.
Todd Moses
11
E se nunca tivesse começado?
Harry
30
Esta é uma resposta errada. Estou apenas trabalhando com ele, e antes do primeiro início .paused é falso.
Tomas
2
@ Tom você tem um jsbin? Eu tentei isso e parece que a resposta correta.
Harry
3
@ Harry Eu estava brincando com isso mais e parece que em alguns navegadores ele funciona e outros não. Eu acho que depende da implementação. Mas, para todas as atualizações mais recentes do chrome e do firefox, parece funcionar, portanto, esta resposta está correta para as implementações mais recentes.
Tomas
44

Você pode verificar a duração. É reproduzido se a duração for superior a 0 segundos e não estiver em 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.

}
Maxali
fonte
2
Pessoalmente, acredito que !myAudio.paused||!myAudio.currentTimefaria um trabalho melhor.
M93a
11
@ m93a, você não quer dizer !myAudio.paused || myAudio.currentTime?
MalcolmOcean
5
Sim, deveria ser !myAudio.paused || myAudio.currentTime. Parece que nunca respondeu de volta ...
Parth 22/02
16

Enquanto estou realmente atrasado para este segmento, uso esta implementação para descobrir se o som está sendo reproduzido:

service.currentAudio = new Audio();

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

Eu acho que a maioria dos sinalizadores no elemento de áudio é óbvia, além do estado pronto, sobre o qual você pode ler aqui: MDN HTMLMediaElement.readyState .

Hassan Mahmud
fonte
Não funciona se o áudio foi interrompido automaticamente pelo iOS quando bloqueado.
shukshin.ivan
13
document.getElementsByTagName('audio').addEventListener('playing',function() { myfunction(); },false); 

Deve fazer o truque.

projectxmatt
fonte
5

Experimente esta função! A reprodução de áudio não seria executada se a posição fosse o começo ou o fim

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

Para verificar se o áudio realmente está começando a ser reproduzido, especialmente se você tiver um fluxo, verifique audio.played.lengthem 1. Será 1 apenas se o áudio realmente iniciar sons. Caso contrário, será 0. É mais um truque, mas ainda funciona em navegadores móveis, como Safari e Chrome.

Alex Ivasyuv
fonte
0

você pode usar o evento onplay.

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

ou

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

estou usando esse código jquery com o botão rebocar play and stop, o botão play é um botão 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
});
Mohamed Slimane
fonte
-2

Embora não exista um método chamado isPlaying ou algo semelhante, existem algumas maneiras de fazer isso.

Este método obtém a% de progresso enquanto o áudio está sendo reproduzido:

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 a porcentagem for maior que 0 e menor que 100, está sendo reproduzida, caso contrário, será interrompida.

Todd Moses
fonte
Erm, e se eu pausar o áudio no meio?
Niet the Dark Absol
1
Então não estaria tocando.
Todd Moses
Isso detecta apenas a quantidade armazenada em buffer. Se, por exemplo, o elemento de áudio começou a armazenar dados em buffer, mas não foi reproduzido porque não possui dados suficientes, esse método ainda pode retornar verdadeiro. Ou se o elemento tiver armazenado dados em buffer como parte da reprodução e subsequentemente foi pausado.
dhasenan
getElementsByTagName ('myVideo')? Eu acho que deveria ser getElementById ( 'myVideo')
Sorte Soni
2
Em ... Por que minusing? Uma ótima idéia, mal escrita. Como você pode verificar se o áudio em tempo real (WebRTC) está sendo reproduzido com .paused? Somente com verificação de buffer. Não merecia minusing. Eu voto positivo.
Igorpavlov