2011-07-31 1 views
14

私はwavファイルをクリックして再生するゲームを作成しています。この場合は銃声 "バン"です。HTML5オーディオ - 前の繰り返しが終了しても、クリックしても音を繰り返し再生します。

問題は、急速にクリックすると、クリックごとに音が1回再生されないということです。音が再生されている間は無視され、音が終了すると再びクリックを聞き取り始めます。

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

は、ここに私のJSです::遅延はここに私のHTMLだ誰かが毎秒4または5回をクリックした場合、私は5つの前髪、ない1

をしたい把握ので、約1秒の長であるように思わ

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

アイデア?

答えて

15

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(); 
    }); 
+0

これは有望です。私の唯一の恐怖は、要素が作成されている間、クリックとオーディオの間に待ち時間があることです。私はまだ私の最初の 'audio'タグが必要ですか?私はそれがどのようにプリロードされていると仮定しますか? – AlienWebguy

+0

ハハはすべて恐れて、感謝しています!今すぐJQueryがこれらの関数をサポートするようになるので、 '$( 'selector')。play()'とそれ以外のことはできますか? – AlienWebguy

+1

これは過剰です。 'currentTime'を' 0'に設定するだけです:http://stackoverflow.com/a/7005562/352796 – katspaugh

11

、私はそれが非常に遅く答えを知っているが、私はしたかったが、私は私の場合には最適なものは、サウンドをプリロードして、私が欲しいたびに再生するためにノードのクローンを作成することがわかったソリューションを求めて

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

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

うわー、私のことはまったく動かないだろう、これは修正された。 –

+0

これは素晴らしいことです。とにかく同じことをするが、複数のmp3を使用することはありますか? – gravityboy

+0

@jmserveraこれはいいですが、新しいクリックごとにHTTPリクエストが追加されます:( –

1

あなたがあなた自身のプログラム固有のクリックロジックと、次のラップすることができますが、以下の3銃が同時に聞こえる示しています。それは、これは以前に終了していないなら、私もそれを再生することができます。何らかの遅延が必要な場合は、小さな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> 
+0

preload = "preload" HTML5の再生ボタンをクリックする前にオーディオを読み込みますか? –

関連する問題