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

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

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

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

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

Затем, после готовности, воспроизводите с начала основного и до конца основного: только середину!
По окончании, устанавливаете позицию снова на начало основного.
Т.е., создаёте свой программный loop.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 100 000 до 140 000 ₽
от 140 000 до 160 000 ₽
ВТК Новороссийск
от 50 000 до 150 000 ₽
05 апр. 2020, в 10:15
2500 руб./за проект
05 апр. 2020, в 10:13
400 руб./за проект
05 апр. 2020, в 09:51
3000 руб./за проект