Почему мой звук не перематывается?
у меня возникли проблемы с перемоткой аудио в 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 недостаточно силен.)