我正在开发一个音乐程序,需要多个JavaScript元素与另一个元素保持同步。我一直在使用 setInterval
,刚开始效果非常好。但是随着时间的推移,这些元素逐渐失去同步,在音乐程序中这是不好的。
我在网上看到setTimeout
更准确,并且你可以以某种方式设置setTimeout
循环。然而,我没有找到一个通用版本来说明如何实现这一点。
基本上,我有一些函数,如下所示:
//drums
setInterval(function {
//code for the drums playing goes here
}, 8000);
//chords
setInterval(function {
//code for the chords playing goes here
}, 1000);
//bass
setInterval(function {
//code for the bass playing goes here
}, 500);
它最初运作得非常好,但大约一分钟后,声音会变得明显不同步,据我所读,这是使用 setInterval
时会发生的情况。 我已经阅读到 setTimeout
可以更加准确地工作。
是否有人可以向我展示一个基本的例子,如何使用 setTimeout
无限循环某些内容? 或者,如果有一种方法可以通过 setInterval
甚至其他函数实现更同步的结果,请告诉我。
setTimeout
可以计算延迟的实际时间并调整下一个超时的时间。 - Matt BurlandrequestAnimationFrame
怎么样?每次运行requestAnimationFrame
回调时,您只需引用音频所在的时间即可。 - Jasper