JFugue поддерживает микротоны. (Это делается через API JavaSound, в сочетании с большим количеством математики)
Может ли он делать именно то, что вы ищете, это другой вопрос. Я полагаю, что проблема, с которой вы столкнетесь, состоит в том, что каждая новая нота, которую вы играете, будет звучать как новая нота, а не как куча нот, связанных вместе. Это будет особенно заметно, когда нота имеет значение атаки и затухания, отличное от 0, или если инструмент имеет изначально отличающиеся звуки в начале и конце ноты.
В JFugue вы можете установить атаку и затухание ноты, добавив 'a' и 'd', после значений после 0-128 значения: 0-128:
C5wa0d0
- до-нота, 5-я октава, вся длительность, атака = 0, затухание = 0.
Микротоновый помощник, как написано в данный момент, позволяет вам определить одну частоту для строки; например, вы можете сопоставить 400 с "A400". Затем, чтобы использовать это, вы бы сказали player.play("[A400]w")
(обратите внимание на квадратные скобки).
Один из способов получить то, что вы ищете, - это определить частоты и строки для любого количества микротонов, а затем создать шаблон, используя цикл for ... Pattern p = new Pattern("[A400]wa0d0 [A410]wa0d0 [A420]wa0d0"...);
Вы, вероятно, можете использовать шаг больше, чем 1 герц для каждой ноты, потому что наши уши не могут различить такие небольшие частотные различия.
Если бы было более элегантное решение! Но посмотрите, поможет ли это.