HTML: Audio jak odtworzyć ten sam dźwięk ponownie?
Opublikowano: 07.12.2021 - tagi: HTML Audio Dźwięk JavaScript
Ostatnio pracuję trochę z API HTML Audio i nauczyłem się prostej sztuczki.
Problem
Załóżmy, że chcemy odtwarzać jakiś dźwięk. Możemy to zrobić w łatwy sposób:
<button data-play>Play</button>
const audio = new Audio( './pew-pew.wav');
const playBtnEl = document.querySelector('[data-play]');
playBtnEl.addEventListener('click', (e) => {
audio.play();
});
Wszystko działa poprawnie. Kiedy użytkownik kliknie przycisk, to dźwięk zostanie odtworzony. Problem będzie wtedy gdy zaczniesz szybko naciskać przycisk. Załóżmy: klikam dwa razy w przycisk. W takim przypadku chciałbym usłyszeć dwa razy ten sam dźwięk — co więcej te dźwięki mogą na siebie nachodzić. Ale w tym przypadku tak nie jest. Dźwięk nie zostanie odtworzony, dopóki ten poprzedni się nie skończy.
Rozwiązanie
Rozwiązanie tego problemu jest banalne. Po małym refaktoringu kod wygląd tak:
const getSound = () => new Audio('./pew-pew.wav');
let audio;
playBtnEl.addEventListener('click', (e) => {
audio = getSound();
audio.play();
});
Po prostu za każdym razem kiedy zostanie kliknięty przycisk, tworzymy nową instancję obiektu Audio. Dzięki czemu nie musimy czekać na zakończenie odtwarzania poprzedniej instancji dźwięku.