|
В последнем примере инициализация стоит внутри audio.onplay. При повторном воспроизведении код снова создаёт AudioContext и пытается привязать тот же audio через createMediaElementSource. Повторная привязка приводит к InvalidStateError.
Контекст, source и analyser нужно создать один раз при первом пользовательском запуске, а дальше менять audio.src и при необходимости вызывать audioCtx.resume(). Цикл отрисовки тоже должен быть один: иначе каждый play оставляет новый setInterval. Для анимации удобнее requestAnimationFrame с остановкой при pause/ended.
|