Accessing an HTML5 audio element (a .ogg file) with JavaScript in Chrome. The file does play properly, yet somehow it will not recognize the duration.
I just cribbed this code: https://www.w3schools.com/jsref/prop_audio_duration.asp (I know w3schools isn’t great, but it seems like something else is the problem…)
var x = document.getElementById("testTone").duration; console.log("duration:"+x); // duration:NaN var y = document.getElementById("testTone"); y.play(); // works!
the element…
<audio controls id="testTone"> <source src="autoharp/tone0.ogg" type="audio/ogg"> </audio>
Answer
Add preload="metadata"
to your tag to have it request the metadata for your audio object:
<audio controls id="testTone" preload="metadata"> <source src="autoharp/tone0.ogg" type="audio/ogg"> </audio>
In your code, attach an event handler, to set the duration when the metadata has been loaded:
var au = document.getElementById("testTone"); au.onloadedmetadata = function() { console.log(au.duration) };