Вопрос по audio в js
У меня имеется игра, в которой при нажатии на клавишу воспроизводится звук. Изначально это работало через createElement, потом поменял на Web Audio API.
Но теперь я столкнулся с проблемой, что звук проигрывается полностью, и только потом реагирует на событие нажатия.
Но мне нужно, чтобы звук воспроизводился сразу при нажатии на кнопку, а не дожидался своего конца. С помощью createElement всё было супер, но мне не совсем нравится такой подход.
Подскажите, есть ли какие-то способы решить проблему? Или может есть другие решения?
Спасибо!
const handTechSound = new Audio();
handTechSound.src = 'audio/hand-seal.wav';
document.addEventListener('keydown', (e)=>{
const key = e.keyCode
console.log(key);
techniquesArr = techniques.push(key);
switch(key){
case 81:
input.innerHTML = 'I (Pig)';
imageBox.style.left = '0px';
handTechSound.play();
break
}
})
Ответы (1 шт):
Сразу хочу сказать, что WebAudio Api - это совсем другое. Его работа начинается с объявления типа
let audioCtx = new Audiocontext;
и предназначается в основном для генерирования и обработки звуков. А то, что объявляется таким образом:
const handTechSound = new Audio();
это - то же самое, что и
const audio = document.createElement('audio');
К тому же, я подозреваю, (хотя кода не видел) что с каждым нажатием на нужную клавишу у Вас создавался новый элемент аудио, что обычно засоряет оперативную память. Т. е., создание было внутри обработчика нажатия. Исправить теперешнюю ситуацию можно, добавив перед воспроизведением:
handTechSound.currentTime = 0;
Постановка на паузу ничего не меняет.