我正在Scala中开发一个音乐应用程序,以实时生成MIDI序列。 MIDI消息被发送到另一个应用程序(Ableton DAW),甚至可能发送到外部硬件。在这种情况下,准确的时间安排非常重要,否则产生的音乐将在非工作时间听起来。
我尝试使用java.util.Timer
将音符安排在不同的序列上,但显然计时器可能会漂移数百毫秒。
在Scala(或Java)中使用的最准确的Timer是什至可以尝试在JVM上完成的合理任务吗?还是我要解决所有这些错误?
答案 0 :(得分:0)
通常的计时器实现基于调度程序。 如果需要准确性,可以自己滚动:
def after(when: Duration)(f: => Unit) {
val deadline = when.fromNow
while(! deadline.isOverdue) ()
f
}
这将使您的cpu像疯了似的,但是没有比这更准确的了。