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

How can I layer the same sound file with Audio API?

本文关键字:文件 声音 分层 何使用 Audio API      更新时间:2023-09-26

我有一个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.

这看起来可能包含了答案,但我无法获得任何适用于我的可执行代码:JavaScript/HTML5 中的音效

Audio.play方法不是异步的。因此,您的play()方法在返回主循环之前"等待"(blocks是正确的术语),直到它完成。

大多数JavaScript调用都是阻塞的(并且是单线程的),所以您的应用程序通常会等待某个东西完成后再转到下一行。要在JavaScript中执行异步操作,需要使用setTimeout或setInterval之类的函数来调用函数。

添加此行不会创建新层!但每次按键时,它都会导致音频文件被反复播放。无论是否已经过了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
    }
});