138
votes

What's the javascript api for checking if an html5 audio element is currently playing?

11

11 Answers

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

The Audio tag has a paused property. If it is not paused, then it's playing.

51
votes

You can check the duration. It is playing if the duration is more than 0 seconds and it is not paused.

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.

}
18
votes

While I am really late to this thread, I use this implementation to figure out if the sound is playing:

service.currentAudio = new Audio();

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

I think most of the flags on the audio element are obvious apart from the ready state which you can read about here: MDN HTMLMediaElement.readyState.

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

Should do the trick.

5
votes

Try this function! Audio playing would not be executed if the position is the beginning or ending

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

Try Out This Code:

    var myAudio = document.getElementById("audioFile"); 

    function playAudio() { 
          //audio.play(); 
          //console.log(audio.play())
           if (myAudio.paused && myAudio.currentTime >= 0 && !myAudio.started) {
         myAudio.play();
         console.log("started");
     } else {
         myAudio.pause();
     }
}
1
votes

To check if audio is really start playing, especially if you have a stream, need to check audio.played.length to 1. It will be 1 only if audio is really start sounds. Otherwise will be 0. It's more like a hack, but that still works even in mobile browsers, like Safari and Chrome.

1
votes

you can to use the onplay event.

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

or

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

I wondered if this code would work, and it amazingly did:

if (a.paused == false) {
/*do something*/
}

or you could write it as:

if (!a.paused == true) {
/*do something*/
}

if you want your IDE annoying you in JSfiddle.

0
votes

am using this jquery code withe tow button play and stop, play button is a play and pouse button

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
votes

While there is no method called isPlaying or something similar, there are a few ways to accomplish this.

This method gets the % of progress as audio is playing:

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 + '%';
}

If percent is greater than 0 and less than 100, it is playing, else it is stopped.