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