Я пытаюсь воспроизвести звук над клавиатурой.
Для этого я увидел, что решение состоит в том, чтобы клонировать звук и воспроизвести новый экземпляр:
var promise = sound.cloneNode(true).play();
Воспроизведение онлайн:
https://jsfiddle.net/alvarotrigo/up4c6m95/13/
Похоже, что это нормально работает в Chrome и Firefox. Однако в Safari это приводит к плохой производительности.
Попробуйте воспроизвести ошибку обеими руками очень быстро.
Примечание. Я добавил изображение в формате gif, которое очень быстро запаздывает при наборе текста.
Это, конечно, можно отметить и на инструментах разработки Safari, как показано на рисунке ниже:
Весь код здесь:
var sound = new Audio('https://www.w3schools.com/html/horse.mp3');
document.addEventListener('keydown', playSound);
function playSound() {
//in order to play the same sound over itself
var promise = sound.cloneNode(true).play();
//we just dont want to show the console error when autoplay is disabled :)
if (typeof promise !== undefined) {
promise.then(function() {
// Autoplay started!
}).catch(function(error) {
//error
});
}
}