HTML5 аудио - воспроизведение звука несколько раз при щелчке, независимо от того, закончилась ли предыдущая итерация

Я создаю игру, в которой wav файл воспроизводится на клике - в этом случае это звуковой сигнал "удар".

Проблема в том, что если я быстро нажимаю, он не будет воспроизводить звук один раз для каждого клика - он, как если бы щелчки игнорировались во время воспроизведения звука, и как только звук будет закончен, он снова начнет прослушивать клики. Задержка, кажется, длится около одной секунды, поэтому вы считаете, что если кто-то нажимает 4 или 5 раз в секунду, мне нужно 5 чел, а не 1.

Здесь мой HTML:

<audio id="gun_sound" preload>
    <source src="http://www.seancannon.com/_test/audio/gun_bang.wav" />
</audio>

Здесь мой JS:

$('#' + CANVAS_ID).bind(_click, function() {
    document.getElementById('gun_sound').play();
    adj_game_data(GAME_DATA_AMMO_ID, -1);
    check_ammo();
}); 

Идеи?

Ответы

Ответ 1

После предварительной загрузки gun_bang.wav вы можете динамически создавать новые элементы с прикрепленным к нему звуком, воспроизводить аудио, а затем удалять их, когда звук закончен.

    function gun_bang(){
        var audio = document.createElement("audio");
        audio.src = "http://www.seancannon.com/_test/audio/gun_bang.wav";
        audio.addEventListener("ended", function () {
            document.removeChild(this);
        }, false);
        audio.play();   
    }

    $('#' + CANVAS_ID).bind(_click, function() {
        gun_bang();
        adj_game_data(GAME_DATA_AMMO_ID, -1);
        check_ammo();
    }); 

Ответ 2

Я знаю, что это очень поздний ответ, я просто хотел, но, найдя решение, я обнаружил, что в моем случае лучше всего было предварительно загрузить звук, а затем клонировать node каждый раз, когда я хочу его воспроизвести, это позволяет мне воспроизводить его, даже если предыдущий не закончился:

var sound = new Audio("click.mp3");
sound.preload = 'auto';
sound.load();

function playSound(volume) {
  var click=sound.cloneNode();
  click.volume=volume;
  click.play();
}

Ответ 3

Вы можете обернуть следующее с помощью собственной логики щелчка по конкретному программному обеспечению, но следующее демонстрирует одновременно 3 звука пушки. Если вы хотите какую-либо задержку, вы можете ввести функцию minor sleep() (для этого легко найти много халатов для этого), или вы можете использовать setTimeout() для вызова последующих.

<audio id="gun_sound" preload="preload">
    <source src="http://www.seancannon.com/_test/audio/gun_bang.wav" />
</audio>

<script type="text/javascript">
jQuery(document).ready(function($){

  $('#gun_sound').clone()[0].play();
  $('#gun_sound').clone()[0].play();
  $('#gun_sound').clone()[0].play();

});
</script>