【问题标题】:Most accurate Timer in Scala for MIDI sequencer用于 MIDI 音序器的 Scala 中最准确的计时器
【发布时间】:2018-08-26 01:57:35
【问题描述】:

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

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

在 Scala(或 Java)中使用的最准确的 Timer 是什么?这甚至是尝试在 JVM 上完成的合理任务吗?或者,也许我做错了?

【问题讨论】:

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

标签: java scala timer midi ableton-live


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多