Java 用于MIDI音序器的Scala中最精确的计时器

Java 用于MIDI音序器的Scala中最精确的计时器,java,scala,timer,midi,ableton-live,Java,Scala,Timer,Midi,Ableton Live,我正在用Scala开发一个音乐应用程序,实时生成MIDI序列。MIDI消息被发送到另一个应用程序(Ableton DAW),甚至可能是外部硬件。对于这个用例来说,准确的计时非常重要,否则产生的音乐会在一段时间内响起 我试着使用java.util.Timer来安排不同序列的注释,但显然计时器可能会漂移数百毫秒 在Scala(或Java)中使用的最精确的计时器是什么?在JVM上尝试完成这项任务是否合理?或者我可能完全搞错了?通常的计时器实现都是基于调度程序的。 如果您需要准确度,您可以自己滚动: d

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

我试着使用
java.util.Timer
来安排不同序列的注释,但显然计时器可能会漂移数百毫秒


在Scala(或Java)中使用的最精确的计时器是什么?在JVM上尝试完成这项任务是否合理?或者我可能完全搞错了?

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

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

这会让你的cpu消耗殆尽,但没有比这更精确的了。

实际的MIDI合成不是由下游音序器处理的吗?将此理解为:在特定时间发送单个“指令”听起来并不有趣,而发送具有逻辑定时的流(并让“其他东西”,如本机操作系统驱动程序)处理到硬件的转换是完全可行的,但这并不需要严格的“定时器”用法……我认为你是对的。我目前发送的是单独的MIDI消息(即:Note On,Note Off),并希望我的DAW立即播放它们。我可能需要重新考虑我的方法。