如何使用Audio API对相同的声音文件进行分层?

时间:2015-03-31 03:09:53

标签: javascript jquery html html5 audio

我的声音长达2秒。它与输入键绑定。我希望能够每秒多次按下回车键,从而启用多层相同的声音。

目前我可以启动声音,但是下一个声音在第一个声音完成之前不会播放。

这是我的代码,但不会在多个按键上分层声音:

        	var fart = new Audio('http://www.soundjay.com/human/fart-01.wav');

        	$(document).keydown(function(e) {
        	    if(e.keyCode == 13)
        	    {
        	    	fart.play();
        	    }
        	});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Click here then press enter.

这看起来可能包含答案,但我无法获得任何适合我的可执行代码:Sound effects in JavaScript / HTML5

2 个答案:

答案 0 :(得分:1)

Audio.play方法不是异步的。因此你的play()方法'等待'(块是正确的术语),直到它完成后再返回主循环。

大多数JavaScript调用都是阻塞(和单线程),因此您的应用程序通常会在进入下一行之前等待某些事情完成。要在JavaScript中执行异步操作,您需要使用setTimeout或setInterval等函数调用函数。

答案 1 :(得分:0)

添加此行不会创建新图层!但这会使音频文件每次按键时一次又一次地播放。 无论经过2秒,每次都会从头开始。

var fart = new Audio('http://www.soundjay.com/human/fart-01.wav');

$(document).keydown(function(e) {
    if(e.keyCode == 13)
    {
        fart.play();
        fart.currentTime=0; // <- add this line
    }
});