首页 > 解决方案 > 用于 MIDI 音序器的 Scala 中最准确的计时器

问题描述

我正在使用 Scala 中的音乐应用程序来实时生成 MIDI 序列。MIDI 消息被发送到另一个应用程序(Ableton DAW),甚至可能是外部硬件。对于这个用例来说,准确的时间是非常重要的,否则产生的音乐会听起来不合时宜。

我试着用java.util.Timer不同的序列来安排笔记,但显然那个计时器可以漂移数百毫秒。

在 Scala(或 Java)中使用的最准确的计时器是什么,这甚至是在 JVM 上尝试完成的合理任务吗?或者我可能会错了?

标签: javascalatimermidiableton-live

解决方案


通常的计时器实现基于调度程序。如果您需要准确性,您可以自己滚动:

def after(when: Duration)(f: => Unit) { 
  val deadline = when.fromNow
  while(! deadline.isOverdue) ()
  f
}

这会像疯了一样烧毁你的CPU,但没有比这更准确的了。


推荐阅读