Вопрос по 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;

Постановка на паузу ничего не меняет.

→ Ссылка