我的声音长达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
答案 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
}
});