Почему мой звук не перематывается?

у меня возникли проблемы с перемоткой аудио в Javascript. У меня в основном есть обратный отсчет, который подает звуковой сигнал каждую секунду, когда он приближается к концу обратного отсчета.

Я пытался использовать;

var bip = new Audio("http://www.soundjay.com/button/beep-7.wav");
bip.play();

но он не сигналил каждую секунду, что, как я предполагаю, имеет какое-то отношение к необходимости загружать новый звук каждую секунду. Затем я попытался загрузить звук извне и запустить его со следующим кодом.

bip.pause();
bip.currentTime = 0;
console.log(bip.currentTime);
bip.play();

но это только воспроизводит звук один раз, затем полностью не удается перемотать его (это показано в консоли, регистрирующей время 0.19 секунд после первого прохождения).

Я что-то упускаю?

4 ответов


в google chrome я заметил, что он работает только в том случае, если у вас есть аудиофайл в том же домене. У меня нет проблем, если аудиофайл находится в том же домене. Настройка события .currentTime строительство.

Кросс-домен:

var bip = new Audio("http://www.soundjay.com/button/beep-7.wav");
bip.play();
bip.currentTime; //0.10950099676847458
bip.currentTime = 0;
bip.currentTime; //0.10950099676847458

тот же домен:

var bip = new Audio("beep-7.wav");
bip.play();
bip.currentTime; //0.10950099676847458
bip.currentTime = 0;
bip.currentTime; //0

я попробовал погуглить некоторое время и не смог найти ничего в спецификациях об этом или даже любом обсуждении.


когда я хочу перемотать назад, я просто загружаю аудио снова:

my_audio.load()

* кстати, я также использую eventlistener для "canplay" для запуска my_audio.играть.)( Кажется, что это необходимо в android, а может быть и другие устройства также*


для дальнейшего ответа dsdsdsdsd с немного краски-по-номера на "всю фигню"

Примечание: В моем приложении loc1 - это манекен, который ссылается на сохраненное местоположение песни

// ... code before ...

tune = new Audio(loc1); // First, create audio event using js

// set up "song's over' event listener & action
tune.addEventListener('ended', function(){
tune.load();    //reload audio event (and reset currentTime!)
tune.play();    //play audio event for subsequent 'ended' events
},false);

tune.play();        // plays it the first time thru

// ... code after ...

Я потратил дни и дни, пытаясь понять, что я делал неправильно, но теперь все работает нормально... по крайней мере, на настольных браузерах...


начиная с версии Chrome 37.0.2062.120 m поведение описывается @Esailija не изменилась.

Я обойти эту проблему путем кодирования аудиоданных в кодировке base64 и кормить данные в Audio() используя data: URL-адрес.

тестовый код:

snd = new Audio('data:audio/ogg;base64,[...base64 encoded data...]');
snd.onloadeddata = function() {
  snd.currentTime = 0;
  snd.play();
  setTimeout(function() {
    snd.currentTime = 0;
    snd.play();
  }, 200);
};

(Я удивлен, что нет сообщений об ошибках или ссылок на этот вопрос... или, может быть, мой Google-fu недостаточно силен.)