В этой заметке я расскажу, как с помощью визуального языка программирования Pure Data переназначить midi-команды note on/off на control change на устройствах, для которых нет специального ПО от производителя для этого. Получится заготовка для MIDI Note to CC converter. Результат на видео:
В обычной работе диджеем на мероприятии со своим оборудованием мне нужно 3 канала пульта: 2 микрофона и 1 стерео. У серии микшеров Behringer X Air отсутствуют физические регуляторы, и по умолчанию всё управление производится через программу X Air Edit, но также можно управлять по midi. На контроллере Denon MC6000 я не пользуюсь некоторыми регуляторами и кнопками, и поэтому возникла идея применить их для управления XR-ом:

Вот такой набор:
- 6 кнопок слева: 2 mic on, 2 echo on, ducking, post
- 7 регуляторов на передней панели
- 3 регулятора справа
В процессе настройки от кнопок mic on пришлось отказаться, т.к. они включают встроенные преампы, которые добавляют шум на выход с контроллера даже при -∞ уровне.
Подготовка
Behringer XR18 имеет встроенный usb-интерфейс, который также работает как midi in/out, поэтому просто подключаю пульт и контроллер к ноутбуку по USB. В системе появятся два midi-устройства.
Установим язык Pure Data. Для этого нужно скачать версию для соответствующей операционной системы https://puredata.info/downloads/pure-data и распаковать куда-нибудь. Запускаем bin/pd.exe на Windows или Pd-0.46-7-64bit.app на OS X.

В меню Media -> MIDI Settings… задаем, откуда pd будет принимать midi-команды и куда после обработки отправлять.

Программирование
В midi-контроллерах команды note обычно назначены на клавиатуру. Note срабатывает два раза — note on и note off. Пока клавиша нажата, передается note on и номер (остальное содержимое midi-сообщения мне в данном случае не нужно). Клавишу отпустили — передалась note off.
Если сделать переназначение note на control change напрямую, то требуемое действие будет выполняться так: держим — канал мутируется, отпустили — перестал мутироваться. Это хорошо для синтеза звука, но плохо для управления устройствами. Чтобы получить «залипание» кнопки, второе срабатываение (note off) надо отрезать.
Основы Pure Data можно найти в интернете и в самой программе в меню Help -> Browser…, поэтому я просто пошагово опишу получившуюся у меня программу.

Блок кнопок слева — Mute CH1, CH2, FX1, FX2
1. Прослушиваем все входящие ноты.
notein
2. Отрезаем note off.
stripnote
3. Отбираем только нужные ноты по номерам и соответственно распределяем по элементам управления микшером. #68 и #69 — кнопки контроллера echo on 1 и 2, #42 — ducking, #70 — post.
select 68 69 42 70
4. Красные квадраты — ряд программных кнопок (toggle). Первое входящее сообщение в кнопку переключает её значение на 1, второе — на 0.
5. В зависимости от того, какое значение получено от кнопки выше, отправляем на микшер control change (CC) на канале 2 со значением 0 или 127.
select 0 1 | | 0 127 | / ctlout 0 2
Блок регуляторов справа — управление уровнем CH1, CH2, CH17-18, Main
1. Берем входящие CC с соответствующими номерами от регуляторов.
ctlin 65
2. Умножаем уровень CC на 1.5, чтобы в среднем положении регуляторов контроллера получился 0 на фейдере xr18.
* 1.5
3. Отфильтровываем уровень CC больше 97. Это такая защита — выше 0 с контроллера поднять не получится, только через X Air Edit.
moses 97
4. Отправляем CC на midi-номера 1, 2, 17-18 и main фейдеров микшера
ctlout 0
Блок регуляторов на передней панели — управление уровнем FX1-FX3
1. Берем входящие CC с соответствующими номерами
ctlin 49
2. Отправляем CC на midi-номера фейдеров fx1-fx3 return
ctlout 17
Заключение
Надеюсь, эта статья окажется полезной и поможет переназначить команды note on/off на control change какого-нибудь midi-контроллера без встроенных возможностей такой настройки. Задавайте вопросы в комментариях.