Как постоянно изменять высоту звука в звуке Java? - PullRequest
1 голос
/ 10 января 2010

Я работаю с midi, используя звуковой API Java. В основном я пытаюсь добиться эффекта портаменто, когда я могу скользить между разными нотами. Самое близкое, что я получил, - это использование метода setPitchBend () в MidiChannel. Однако, это позволяет только диапазон 2 полутонов от примечания, с которого я начал. Есть ли другой способ добиться этого эффекта портаменто или, возможно, изменить диапазон изменения высоты звука?

Если есть способ сделать это в JFugue , это также будет приемлемо.

Ответы [ 5 ]

1 голос
/ 12 января 2010

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 герц для каждой ноты, потому что наши уши не могут различить такие небольшие частотные различия.

Если бы было более элегантное решение! Но посмотрите, поможет ли это.

0 голосов
/ 14 марта 2011

Регулятор высоты тона просто определяет диапазон; это зависит от принимающей стороны (например, синтезатора), как это интерпретировать. Если принимающая сторона поддерживает два полутона, то вы получаете два полутона - если только он не может быть перенастроен! На большинстве синтезаторов вы можете перенастроить диапазон изменения высоты звука; какое у тебя целевое устройство?

(я не знаком с JFugue.)

0 голосов
/ 21 января 2010

MIDI имеет управление портаменто для слайдов высоты тона. Попробуйте позвонить controlChange(65,127), чтобы включить портаметно, а затем сыграть две ноты. controlChange(5, xxx) должен изменить скорость скольжения высоты тона. controlChange(65,0) выключит портаменто.

0 голосов
/ 10 января 2010

Это может быть устаревшим - прошло почти два десятилетия с тех пор, как я отказался от MIDI и переключился на безладовый бас - но для более длинных слайдов вам приходилось играть одну ноту, сгибая ее высоту до половины Следующая нота, затем сыграйте следующую ноту, согнутую на полпути вниз, чтобы они встретились на той же высоте, затем повторите процесс.

0 голосов
/ 10 января 2010

Всего лишь предположение - можете ли вы сыграть две ноты последовательных высот и постепенно добавить одну, а другую другую?

...