JavaScript. Звук при повторении прерывается. Как сделать повторение звука правильно?

Мне нужно реализовать повторение звука таким образом, чтобы не был заметен повтор звука, в моем коде звук сначала на доли секунды затихает, а потом повторяется.
var sound = new Audio();
sound.src = "sounds/car.mp4";
sound.loop = true;
sound.play();
  • Вопрос задан
  • 370 просмотров
Пригласить эксперта
Ответы на вопрос 4
joeberetta
@joeberetta Куратор тега JavaScript
Читай: https://epdf.pub/google-for-dummies.html
Вот такой костыль найден на просторах СО
Ответ написан
Комментировать
@floydback
Первый вариант, использовать callback timeupdate, отслеживать приближение к концу, чтобы перематывать на начало. Минус этого метода состоит в том, что этот колбэк срабатывает редко и, каждое повторение будет неравной длины. Это может быть слышно. К тому же можно пропустить конец, потому что колбэк никогда на конечной точке не сработает.

Второй вариант, делать тоже самое с помощью reqest animation frame. Он срабатывать чаще, но тоже есть свои минусы. Если владыка закрыта на слабых устройствах Теоретически может вызываться реже. Но из практики могу сказать, что он работает лучше и услышать неровность по длительности почти невозможно.

В обоих случаях может быть такая ситуация: в односеккндном файле приходит колбэк с параметром 0,9799, а следующий уже 0. Т.е. минуя 1. Причина как раз в том, что колбэк генерируется периодически.

Третий вариант. Если вы делаете что-то, где важен реально ровный ритм (например, метроном), единственный выход читать audioBuffer, копировать его много раз, склеивать в один длинный массив и проигрывать этот длинный файл. Работает это быстро и очень точно.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
В самом файле слева и справа добавьте по 3 секунды повтора:
1. окончание основного - последние 3 сек,
2. основной кусок
3. начало основного - первые 3 сек.

Затем, после готовности, воспроизводите с начала основного и до конца основного: только середину!
По окончании, устанавливаете позицию снова на начало основного.
Т.е., создаёте свой программный loop.
Ответ написан
Комментировать
@laisto
а mp4 пихать в audio легально вообще?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы