html5 display audio currentTime

76,610

Solution 1

Here's an example:

<audio id="track" src="http://upload.wikimedia.org/wikipedia/commons/a/a9/Tromboon-sample.ogg"
       ontimeupdate="document.getElementById('tracktime').innerHTML = Math.floor(this.currentTime) + ' / ' + Math.floor(this.duration);">
    <p>Your browser does not support the audio element</p>
</audio>
<span id="tracktime">0 / 0</span>
<button onclick="document.getElementById('track').play();">Play</button>

This should work in Firefox and Chrome, for other browsers you'll probably need to add alternative encodings.

Solution 2

here is simple usage. keep in mind html5 elements are still in the works so anything can change:

    audio = document.getElementsByTagName("audio")[0];

    //functions
    audio.load();
    audio.play();
    audio.pause();

    //properties
    audio.currentSrc  
    audio.currentTime  
    audio.duration

here is the reference HTML5 Audio

to get the currentTime while audio is playing you must attach the timeupdate event and update your current time within the callback function.

simple tutorial audio/video html5 on dev.opera

Solution 3

robertc's version will work fine except for the fact that it does not turn the number of seconds you get from math.floor() into proper time values.

Here is my function called when ontimeupdate is called:

<audio id='audioTrack' ontimeupdate='updateTrackTime(this);'>
  Audio tag not supported in this browser</audio>
<script>
function updateTrackTime(track){
  var currTimeDiv = document.getElementById('currentTime');
  var durationDiv = document.getElementById('duration');

  var currTime = Math.floor(track.currentTime).toString(); 
  var duration = Math.floor(track.duration).toString();

  currTimeDiv.innerHTML = formatSecondsAsTime(currTime);

  if (isNaN(duration)){
    durationDiv.innerHTML = '00:00';
  } 
  else{
    durationDiv.innerHTML = formatSecondsAsTime(duration);
  }
}
</script>

I modified formatSecondsAsTime() from something I found here:

function formatSecondsAsTime(secs, format) {
  var hr  = Math.floor(secs / 3600);
  var min = Math.floor((secs - (hr * 3600))/60);
  var sec = Math.floor(secs - (hr * 3600) -  (min * 60));

  if (min < 10){ 
    min = "0" + min; 
  }
  if (sec < 10){ 
    sec  = "0" + sec;
  }

  return min + ':' + sec;
}

Solution 4

ES6

       const audio = new Audio();
       audio.src = document.querySelector('#audio').src;
       audio.play();
       audio.addEventListener('timeupdate', (event) => {
            const currentTime = Math.floor(audio.currentTime);
            const duration = Math.floor(audio.duration);
        }, false);

Solution 5

When you use audio.duration(). It will give you result in seconds. You just have to change this in minutes and seconds. Demo of Code is here, hope it will help you.

song.addEventListener('timeupdate',function (){

    var duration = song.duration; //song is object of audio.  song= new Audio();

    var sec= new Number();
    var min= new Number();
     sec = Math.floor( duration );    
     min = Math.floor( sec / 60 );
    min = min >= 10 ? min : '0' + min;    
    sec = Math.floor( sec % 60 );
    sec = sec >= 10 ? sec : '0' + sec;

    $("#total_duration").html(min + ":"+ sec);   //Id where i have to print the total duration of song.

    });

This code will definitely work for total duration. To get current Time, you just have to use song.currentTime; in place of song.duration; Whole code will remain same.

Share:
76,610
Lenny Magico
Author by

Lenny Magico

Not much :)

Updated on January 06, 2022

Comments

  • Lenny Magico
    Lenny Magico over 2 years

    I would like to display the current time of of an html 5 audio element and the duration of that element. I've been looking over the internet but can't find a functional script which allows me to display how long the audio files is and what the time currently is e.g. 1:35 / 3:20.

    Any one got any ideas :)?

  • clamchoda
    clamchoda over 13 years
    Don't you love how your answers not correct unless you write the code the OP wants? Good answer.
  • KJYe.Name
    KJYe.Name over 13 years
    i don't want to tinker with html5 until its official. too many browsers to debug lol =D thanks mate.
  • Lenny Magico
    Lenny Magico over 13 years
    I'm not saying his answer is wrong, I just don't understand JS and html 5 audio is new to me so I didn't quite understand what to do with this :)
  • Atharva Johri
    Atharva Johri over 10 years
    i am unable to bind ontimeupdate in my js.. how can i do that?
  • yourkishore
    yourkishore over 10 years
    atharva johri just use a function in ontimeupdate and do your stuff in that function.
  • Jared Dunham
    Jared Dunham over 8 years
    It takes awhile for someone to easily put all of these different components together. I know when I was starting out, showing just this wouldn't have helped me understand how the code can be written.
  • user1788736
    user1788736 over 6 years
    is there a way to make this code work for blob URL to play mp3?
  • Andri
    Andri about 5 years
    Yes! Thank you very much. This is the only answer that worked for me :)
  • vinita
    vinita almost 5 years
    @anuj-sharma can you pls help me with this one --> stackoverflow.com/questions/56765496/…
  • 7uc1f3r
    7uc1f3r almost 4 years
    This question already contains multiple answers and an accepted answer. Can you explain (by editing your answer) where your answer differs from the other answers? Also know that Code-only answers are not useful in the long run.
  • TK421
    TK421 about 3 years
    Was looking for an answer that was js only, and did not utilize the dom. thanks for posting this!