HTML audio can't set currentTime

I am using Chrome. In my dev tools console, I tried the following:

enter image description here

Everything works as expected except last line. Why can't I set currentTime on it?

Also in general, I am finding this whole HTML5 Audio thing to not be very reliable. Is there a robust javascript wrapper that fallsback to flash ?

Answers:

Answer

You need to do something like this (if you use jQuery)

$('#elem_audio').bind('canplay', function() {
  this.currentTime = 10;
});

or in Javascript

var aud = document.getElementById("elem_audio");
aud.oncanplay = function() {
    aud.currentTime = 10;
};

The reason behind for this setup is you need to make sure the audio is ready to play.

Answer

Check your HTTP server configuration, in my testing environment ( Chrome 69 on Mac OS) setting currentTime property of audio element works only when the audio source is served by a HTTP server support persistent connection.

If the HTTP server you used support persistent connection, you will found (in Chrome DevTool) the Connection field of response headers of your audio source be keep-alive. By contrast if the audio source is served by a persistent connection incompatible server, there will be no Connection field in response headers.

The status code of your audio source HTTP request will be a reference too, 206 Partial Content for persistent connection supported server, 200 OK for an inferior one.

Answer

Why cant I set currentTime on it?

Could not reproduce currentTime being set to 0 after setting to 10. Is 18.mp3 duration less than 10?

var request = new XMLHttpRequest();
request.open("GET", "/assets/audio/18.mp3", true);
request.responseType = "blob";    
request.onload = function() {
  if (this.status == 200) {
    var audio = new Audio(URL.createObjectURL(this.response));
    audio.load();
    audio.currentTime = 10;
    audio.play();
  }
}
request.send();

jsfiddle http://jsfiddle.net/Lg5L4qso/3/

Answer

I had the same problem, and the reason was missing headers on the mp3 file, like:

Content-Length, Content-Range, Content-Type

Answer

My guess is that '10' is longer that you mp3's length.

But that logs the length of mp3 instead of '0'.

What's your Chrome version?

Answer

The only solution for setting currentTime I got to work reliably was using the onprogress event.

audio.onprogress = function() {
  if (audio.currentTime == 0) {
    audio.currentTime = 10;
  }
}
Answer

The solution which worked for me was not setting "src" on directly, but use with type attribute, maybe type attribute is helping browser some way.

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.