首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript: MIDI Sequencer应用程序中快速定时器的setTimeOut替代品

Javascript: MIDI Sequencer应用程序中快速定时器的setTimeOut替代品
EN

Stack Overflow用户
提问于 2018-10-27 00:21:11
回答 4查看 1.2K关注 0票数 3

我正在开发一个包含序列器的Javascript音乐应用程序。对于那些不熟悉的人,MIDI sequencers的工作原理是这样的:有一种叫做PPQ的东西:pulses per quarter note。每个脉冲被称为“滴答”脉冲()。它描绘了每个季度音符的“细分”,比如分辨率。因此,Sequencer一次一个节拍地“播放”音轨中的事件: Play Tick1、wait Tick Duration、Play tick2、Tick Duration等等。

现在,假设我们有一个带有PPQ=96 (标准)的120的BPM(每分钟跳数)。这意味着每个季度音符持续时间为500ms,每个滴答持续时间为5.20833ms。

我们在Javascript中有哪些计时器替代方案?

1)我们有旧的setTimeOut。它有几个问题:等待时间为4ms。(https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Minimum_delay_and_timeout_nesting)它也会受到抖动/时间变化的影响。它并不精确,而且要求很高,因为回调堆叠在偶数循环中。

2)有一个涉及使用requestAnimationFrame().的setTimeOut/setInterval替代方案它非常精确,CPU效率也很高。但是,可以设置的最小时间约为16.7ms (典型的60FPS监视器中一帧的持续时间)

还有没有别的选择?要精确地每2-5ms安排一次事件?

注意:在循环中完成的函数,playEventsAtTick()一点也不苛刻,所以它不会比Tick Duration花更多的时间来执行。

谢谢!丹尼·布洛

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53012768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档