Самый точный таймер в Scala для MIDI секвенсора - PullRequest
0 голосов
/ 26 августа 2018

Я работаю над музыкальным приложением в Scala для генерации MIDI-последовательностей в режиме реального времени. MIDI-сообщения отправляются в другое приложение (Ableton DAW) и, возможно, даже на внешнее оборудование. Точное время очень важно для этого случая использования, иначе полученная музыка будет звучать не вовремя.

Я пытался использовать java.util.Timer для планирования заметок для разных последовательностей, но очевидно, что таймер может дрейфовать на сотни миллисекунд.

Какой самый точный таймер использовать в Scala (или Java), является ли это разумной задачей для выполнения на JVM? или может я все об этом не так?

1 Ответ

0 голосов
/ 26 августа 2018

Обычные реализации таймера основаны на планировщике.Если вам нужна точность, вы можете бросить свои собственные:

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

Это сожжет ваш процессор как сумасшедший, но это не станет более точным, чем это.

...