MIDI контроллер Novation SL MkII

Когда загружен шаблон automap, надо в самом контроллере изменить порт отправки: edit → Routing → Port [U3] на [U2].
Automai is OFFLINE это "типа тупо заглушка", которая легко затирается любым другим текстом, или тупо отправкой SysEx`а очищающего экран. Мой «device definition» для виртуальника шлёт такие сообщения при инициализации (или когда программа определяет контроллер):
Код:
F00020290303120002000100F7F00020290303120002000101F7F0002029030312000200020203012E0104706F636B657473000120010421782C2000F7F00020290303120002000201250104546F702000011C01046000F7
Код:
F000202903051200000068010059000148F7F00020290303120002000201020304536F6D6520636F6E74726F6C7320617265206E65656420746F20756E686964652033726420706F727421204368616E676520696E2057696E646F77732052656769737472797E22446F6E74486964654175746F6D6170506F727473223D64776F72643A30303030303030310001000204484B4C4D202F2053595354454D202F2043757272656E74436F6E74726F6C536574202F207365727669636573202F204E766E557362417564696F202F20506172616D657465727300F7
В остальное поведение регулировок у меня для обоих режимов экрана отображение значений разделено на пять частей, как вверху, так и внизу, причём нижняя часть в "праворуком" режиме экрана чуть шире, т.к. я там располагаю значения трёх eq_crossfader (low, mid, high), которые назначены на ползунки, которые, собственно и активирует контроллер в праворукий режим (в леворуком режиме там уже, и просто отображается значение crossfader, кстати, взаимоуводилка ZeRO и активирует леворукий режим, иногда). Для VirtualDJ8\Devices\__.xml это так:
Код:
<text sysex="F000202903031200020002014104047E20202020202000F7" offset="16" size="6" scroll="no" name="[A] RH LCD_66-Low-71"/>
<text sysex="F000202903031200020002012D04040A2020202020202020202020202020202020202000F7" offset="16" size="19" scroll="no" name="[A] RH LCD_45-Low-64"/>
<text sysex="F000202903031200020002011B04042020202020200001210404202020202020000127040420202020202000F7"><sysex offset="15" size="6" scroll="no" name="[A] RH LCD_27-Low-32"/><sysex offset="26" size="6" scroll="no" name="[A] RH LCD_33-Low-38"/><sysex offset="37" size="6" scroll="no" name="[A] RH LCD_39-Low-44"/></text>
<text sysex="F00020290303120002000201070404202020202020202020202020202020202020200A00F7" offset="15" size="19" scroll="no" name="[A] RH LCD_07-Low-25"/>
<text sysex="F000202903031200020002010004042020202020207F00F7" offset="15" size="6" scroll="no" name="[A] RH LCD_00-Low-05"/>
<text sysex="F000202903031200020002014402042020202000F7" offset="15" size="4" scroll="no" name="[A] RH LCD_68-Top-71"/>
<text sysex="F000202903031200020002012D0204202020202020202020202020202020202020202020207F00F7" offset="15" size="22" scroll="no" name="[A] RH LCD_45-Top-66"/>
<text sysex="F0002029030312000200020127020420202020202000F7" offset="15" size="6" scroll="no" name="[A] RH LCD_39-Top-44"/>
<text sysex="F0002029030312000200020121020420202020202000F7" offset="15" size="6" scroll="no" name="[A] RH LCD_33-Top-38"/>
<text sysex="F000202903031200020002011B020420202020202000F7" offset="15" size="6" scroll="no" name="[A] RH LCD_27-Top-32"/>
<text sysex="F000202903031200020002010502042020202020202020202020202020202020202020202000F7" offset="15" size="22" scroll="no" name="[A] RH LCD_05-Top-26"/>
<text sysex="F00020290303120002000201000204202020207E00F7" offset="15" size="4" scroll="no" name="[A] RH LCD_00-Top-03"/>
<text sysex="F00020290303120002000201420104202020202020000142030420202020202000F7"><sysex offset="15" size="6" scroll="no" name="[A] LH LCD_66-Top-71"/><sysex offset="26" size="6" scroll="no" name="[A] LH LCD_66-Low-71"/></text>
<text sysex="F0002029030312000200020127030420202020202020202020202020202020202020202020202020207E00F7" offset="15" size="26" scroll="no" name="[A] LH LCD_39-Low-64"/>
<text sysex="F0002029030312000200020121030420202020202000F7" offset="15" size="6" scroll="no" name="[A] LH LCD_33-Low-38"/>
<text sysex="F000202903031200020002010603047F20202020202020202020202020202020202020202020202020202000F7" offset="16" size="26" scroll="no" name="[A] LH LCD_07-Low-32"/>
<text sysex="F0002029030312000200020127010420202020202020202020202020202020202020202020202020207F00F7" offset="15" size="26" scroll="no" name="[A] LH LCD_39-Top-64"/>
<text sysex="F0002029030312000200020121010420202020202000F7" offset="15" size="6" scroll="no" name="[A] LH LCD_33-Top-38"/>
<text sysex="F000202903031200020002010701047E202020202020202020202020202020202020202020202020202000F7" offset="16" size="26" scroll="no" name="[A] LH LCD_07-Top-32"/>
<text sysex="F00020290303120002000201000104202020202020000100030420202020202000F7"><sysex offset="15" size="6" scroll="no" name="[A] LH LCD_00-Top-05"/><sysex offset="26" size="6" scroll="no" name="[A] LH LCD_00-Low-05"/></text>
Все названия (а точнее, значения) настраиваются самим VirtualDJ, т.е. заносятся в Mappers\__ - {name}.xml
Естественно, automap на то и предназначен, чтобы на экране можно было помещать названия/значения так, как вам вздумается, ведь можно расположить имя параметра слева, а значение справа, а не сверху-снизу… но это кому как удобнее. Вот в моём случае, по краям экрана располагаются значения BPM для левого и правого проигрывателя, при нажатии одной кнопки там уже отображается их Pitch, другой кнопкой - значение первых ползунков эффекта, при третьей - значения других ползунков эффекта, а в праворуком режиме — оставшееся время проигрывания… И это всё настроено самим виртуальником, причём ещё на 7-ке, ну а некоторые всё же приходилось адаптировать под 8…

Я даже не представляю, как можно «перевести» значения… Ну, одну часть SysEx`а сохранить можно просто текстом, типа [F0][00][20][29][03][03][12][00][02][00][02][01][00][01][04]QuiCtrl1[00][01][00][03][04]значение[00][F7]… вместо QuiCtrl1, соответственно [51][75][69][43][74][72][6C][31], а вот значение... хмм... его нужно в текст переносить, а то будет слать 00~7F, и контроллер это неправильно поймёт… В виртуальнике для этого есть param_cast text или get text 'любой текст `get значение какого-нибудь параметра`', которое преобразовывает в цифры или даже добавляет буквы после цифр…

По поводу Out of range, так это потому, что SL MkII Editor не видит все 90 возможных органов управления (например, тот же crossfader, который по-умолчанию шлёт CC#66 на ZeRO MkII — из-за этого несоответствия справочнику некоторые скрипты даже неправильно сделали — всё потому, что поленились банально открыть автомапный шаблон в шестнадцатеричном редакторе, и посмотреть, какие на самом деле у каждого органа управления назначены CC, правда, чтобы и это понять, нужно изучить структуру по этим двум справочникам: SLMkII Template Offsets .pdf и SL Control Members etc..pdf), а только те, что "типа видны на самом контрллере". Да ещё у некоторых крутилок/бегунков/кнопок может быть настроен тот тип, который невозможно настроить ни самим контроллером, ни SL MkII Editor`ом. Только с помощью SysEx`ов или же ручной правкой в шестнадцатеричном редакторе.
Надёжнее всего получать шаблон в MIDI-OX`е.

Кстати, можно заставить контроллер НЕ ВХОДИТЬ в automap universal template по F00020290303120002000101F7, просто нужно изменить в globals его местоположение, например, на 45-й шаблон (F0002029 0305 12000000 6802 0060 0001 2C F7), при этом сам шаблон с контроллера не удалять. Контроллер будет пытаться вызвать этот шаблон по этому номеру, но просто моргнёт «текущим» и вернётся назад, так его и не загрузив. Но, главное, после изменения его местоположения, случайно не войти в этот шаблон, т.к. сразу после этого контроллер перепишет в globals его «настоящее» местоположение и в следующий раз по этому SysEx`у контроллер уже войдёт в этот шаблон.
 
Последнее редактирование:
  • Like
Реакции: Jafaroff и Beckoff
Automai is OFFLINE это "типа тупо заглушка", которая легко затирается любым другим текстом, или тупо отправкой SysEx`а очищающего экран.
Естественно, automap на то и предназначен, чтобы на экране можно было помещать названия/значения так, как вам вздумается, ведь можно расположить имя параметра слева, а значение справа, а не сверху-снизу… но это кому как удобнее.
Воооот, что я как раз и хотел узнать. Если я всё правильно понял, то на стороне именно самопального автомапного "клиента" скриптится весь вывод инфы на экранчик Ремоута и отправляемые кнопкам-крутилкам значения (+ симуляция физического действия), а получить сразу готовый элемент управления, как в Advanced режиме, судя по всему, не выйдет. С одной стороны, полная свобода и полный контроль, но, судя по всему, придётся заново изобретать в какой-то мере велосипед :D И "спасибо" Кубейсу, который нихрена нормально не скриптится и у которого нет родного транслятора сигналов :rolleyes:

И ещё неприятный момент. К моему сожалению, Кубейс через Generic Remote отправляет ровно только то "зеркальное", что было им принято от контроллера, т.е. получил он, к примеру, на порт 16 CC 105 значением 20, обратно отправится на контроллер то же самое, никаких других вариантов нет. В теории всё это можно сделать через Bome, принять BE 57 3F какой-нибудь, и отправить обратно уже SysEx нужный, но невозможность через Generic Remote "вытащить" название крутилки в VST-плагине, привязанное к Quick Controls, убивает напрочь всю прелесть вывода инфы на экран, эх. Плюс, в Bome как-то запарновато сделана работа с общими переменными на весь проект, пока не могу разобраться.
 
Последнее редактирование:
  • Like
Реакции: «G~Li†ch»
Что-то так и не получается заставить контроллер слать только NRPN MSB (CC#99) + Data Entry (CC#6). Получалось заставить слать а) CC#6 без CC#38, б) CC#38 ВМЕСТО CC#6, в) вовсе всегда значение 0… но во всех случаях контроллер шлёт пару CC#99+CC#98… А то хочу забить CC#98 с кокретными номерами Drum-нот на каждый DrumPad, а на крутилку – конкретный параметр NRPN MSB + значение CC#6 — не хочется задействовать кнопки для выбора конкретных параметров (фиксированные значения CC#99 для каждой кнопки) и всего одну крутёлку на CC#6…
в TTS/Cakewalk – Generic Remote (CWProAudio '99/Sonar…
Что-то путаю всё: то Mackie Control Universal с Microcontroller unit (то самое сокращение – MCU), то Generic Remote (Steinberg) с Generic Surface (TwelveTone Systems)…
crossfader, кстати, взаимоуводилка ZeRO и активирует леворукий режим, иногда
Вру, в Advanced Mode, точно так же, как и со Speed-Dial, если включен TouchSel (он же «выполнение RowSelect при касании») активирует (всегда) ползунки (само же событие RowSelect Sliders не шлётся, как в Advanced, так и в Automap) – просто загорается светодиод возле ползунков (соответственно, на и дисплее их значения), т.е. всё-таки праворукий режим. При выключенном TouchSel в Advanced Mode такого не происходит (остаётся выбран предыдущий ряд).
адский сёр MIDI-сообщениями туда и обратно
У меня похожее было из-за виртуального MIDI-кабеля: кнопки page, из-за их перепутанности, быстро моргали поочерёдно – то одна то другая.
Нажав кнопку page right, хост слышит этот CC# и шлёт контроллеру другой CC#, который зажигает светодиод page right. Но виртуальный MIDI-кабель тоже услышал этот CC# и послал обратно его в хост (а отрубить его хост не позволял, хз почему), где этот CC# определён как page left, и отправляет "зажигание светодиода page left" (первый CC#) — и, так всё пошло всё по-кругу… Поэтому пришлось задать отправку CC для светодиодов на какой-нибудь канал подальше (не 1-й и не 16-й), чтобы в хосте не срабатывал приём "другой кнопки"…
в Bome как-то запарновато сделана работа с общими переменными на весь проект
Переменных таких, как я понимаю, всего 36 (26 букв + 10 цифр)? Плюс ещё капля "локальных переменных", и… выходит, что даже одну Mackie//LogicXL не может перевести? Какой же с него тогда "переводчик"?… Лучше уж "поглядывать" в сторону ReceiveMIDI (поддерживает JS) → SendMIDI
Как «варить» JSценарии – пока всё ещё не понимаю… Надо обратиться за помощью к @Aleksandr Oleynik
Обидно, что MIDI-OX не умеет переназначать входящие SysEx`ы…
 
Последнее редактирование:
  • Like
Реакции: Jafaroff
У меня похожее было из-за виртуального MIDI-кабеля
Пока что сиё было в единичном случае и более не повторялось, но там был MIDI OX.

Переменных таких, как я понимаю, всего 36 (26 букв + 10 цифр)?
Тоже об этом подумал. Получается, если я захочу реализовать полный LED-фидбэк ВСЕХ ручек и кнопок посредством Bome, то придётся очень сильно извращаться.

Встряла, кстати, ещё одна проблема. Очень много привязок MIDI к командам в Кубейсе реализованы как "momentary", но не как "toggle". Вот о чём я:
- включаю loop (cycle) в Кубейсе, секвенсор шлёт на контроллер, к примеру, CC сигнал со значением 127, выключаю - 0, тут всё прекрасно, это спрограммить не сложно будет в итоге, ибо по сути toggle
- а вот включаю метроном - Кубейс, собака такая, шлёт и при включении и при выключении сигнал со 127!!! Может быть, я ещё не до конца исследовал Generic Remote в Кубе и где-то мне нужное есть, но пока что мои поиски именно Toggle-команд не увенчались успехом :((( Это сильно снижает привлекательность Кубейса для ручного скриптинга.
(Я, правда, не копал в сторону MMC ещё, но MMC-slave в Кубе не спрограммировать от слова совсем, лол)

Кстати, а вот интересный вопрос. Я много где на видосах с разными контроллерами видел, что шлются на контроллер по протоколу Mackie Control Universal названия ручек из плагинов для последующего отображения на экране. Это как реализовано, интересно? Я попробовал через MCU что-то попосылать на Новейшн из Кубейса через Bome - ничего даже близко подобного при кручении ручек по MCU на контроллер не шлётся, к сожалению. Подумал как-то нечто подобное реализовать через Quick Controls/Track Quick Controls Кубейса, но они обратно шлют строго зеркально тот же сигнал, что и получили :(
 
Для кнопочных LED как раз проблем нет, а вот с кольцом светодиодов энкодеров это да…
Мне когда-то не удавалось сделать некоторые команды Momentary (например, перемотку), т.е. нужно программить кнопку контроллера так, чтобы та слала 127 и при нажатии и при отпускании кнопки (кстати, судя по программистскому справочнику, это должно быть возможно), но в Mackie Control почему-то та же перемотка работает до тех пор, пока кнопка держится… Потом, скачав с сайта Novation готовые шаблоны под Cubase SX2, SX3 (благо эти версии кубика у меня ещё валяются)…оу, вру… и тут "toggle" (точнее, Normal – тупо всегда 127, и всегда при нажатии), пока вручную не переключишь на Momentary и в контроллере и в Generic Remote (т.е. придётся допиливать и .XML-«сценарий» и .syx-шаблон)… Может с метрономом тоже так же, у контроллера эта кнопка на самом деле настроена в Normal (ну мало ли, случайно крутанули с momentary)?
есть отдельные шаблоны от ReMOTE SL и ReMOTE (Original) и скриптами для разных DAW (Sonar 1 и 2, Cubase SX~SX3 и 4/Nuendo 3, Digidesign ProTools, Logic 6 (Emgaic), 7 и GarageBand), но, как я понимаю, все они там не автомапные (без обратной связи)…
А есть же ещё и сборка шаблонов под ReMOTE LE


Про отображение названий ручек – это делает оболочка Mackie Control в DAW, но разве она позволяет отобразить абсолютно разные типы параметров (не только одних Volume, или одних Sends, EQ, Pan(Surround), а сразу помесь типов)? В идеале, хотелось бы создавать свои группы для отображения нескольких параметоров каких-то определённых двух-трёх дорожек (напр. одна часть – MIDI, другая – их инструменты, третья – дорожка возврата эффекта), и конечно же, сохранять сохранять настроенные группы прямо в проекте.…
через MCU что-то попосылать на Новейшн из Кубейса через Bome - ничего даже близко подобного при кручении ручек по MCU на контроллер не шлётся, к сожалению. Подумал как-то нечто подобное реализовать через Quick Controls/Track Quick Controls
А чего ж вы не попробовали Mackie HUI на ReMOTESL? Там же из коробки должна быть поддержка HUI Simulation (как минимум два шаблона: ProTools SL Automap и MOTU DP SL Automap, не знаю, где достать HUI`шный "Logic SL Automap, etc.", поэтому в архиве лежит лишь моё мнение, как бы этот шаблон выглядел бы). Формат SysEx`ов Mackie HUI оказывается даже ближе подходит к Novation, чем Macke Control, однако, HUI отправляет всего 4 буквы названия дорожки (судя по тому, что принимается в MIDI-OX)…
На ZeRO MkII правда во всех случаях пишет "is OFFLINE", но что-то хоть на светодиоды хоть отдаёт, но интересно, что же на ReMOTE SL… С Mackie Control у меня успехи тоже кое-какие есть (понятно, ноты заводят транспорт, Cursor Up/Down, Zoom In/Out), оказалось, найти подходящую таблицу параметров из справочника не так-то просто, не хотелось бы перебирать каждую ноту в каждом режиме (да и вообще, как понять, какой именно режим (или режим чего?) меняется – часть светодиодов загорается при определённых кнопках, а что они значат – хз)… Могу выложить и эти "наработки", если интересно, но чуть попозже, а то оказалось там две кнопки сохранения проекта, отмен/redo (видимо те, что «типа F1—F16»), а пока попробуйте на ReMOTE SL эти HUI Simulation шаблоны с Mackie HUI (но не MCU, и тем более не HUI Baby)
 

Вложения

Последнее редактирование:
  • Like
Реакции: Jafaroff
Крч, товарищи, у меня получилось "наскриптить" (громко сказано, на самом деле) взаимодействие некоторых действий Кубейса и Новейшна в режиме Automap через Generic Remote + Bome. В частности, я смог довести до ума транспортную панель и теперь Play/Loop/Record/Metronome работают с полным LED-фидбэком и прекрасно управляются.
- а вот включаю метроном - Кубейс, собака такая, шлёт и при включении и при выключении сигнал со 127!!!
Тоже пофиксилось. Надо было юзать управление метроном в Generic Remote то, что в секции Transport (metronomeOn).

Теперь вопрос по экранчику. Шлю через MIDI OX текст по SysEx - на экранчике выводится, отлично. Теперь хочу сделать тоже самое через Bome с использованием переменных. Вроде и работает, но возникло две проблемы:
1) тексты на экранчике как будто привязаны к конкретной секции ручек, как-то непонятно работает, вроде послал текст при последних тронутых энкодерах, потом тронул транспортную панель - текст пропал, вернулся к энкодерам, тронул 2 (!) раза - вернулся старый текст. о_О
Подозреваю, что можно пофиксить просто регулярной отправкой нового текста в связи со всеми происходящими в DAW/на контроллере событиями.
2) Не могу разобраться с используемой кодировкой и с быстрым переводом текста в Hex-сообщения SysEx. Ткните меня, пожалуйста, мордой в ту часть мануала, где об этом сказано :D
3) Bome, судя по всему, весьма ограничен по фукнционалу и одновременный посыл данных разных переменных с разных крутилок реализовать не получится, судя по всему. Есть варианты с альтернативным софтом и более продвинутым? Возможен ли скриптинг в MIDI OX? Ткните, пожалуйста, носом в мануал, если таковой есть. Меня MIDI OX поражает своим функционалом, но я в нём не могу разобраться, плюс, весь арсенал меня не особо интересует - нужно лишь принятие MIDI-сообщений с контроллера/с DAW, трансляция их в CC/SysEx и всё. Может помочь тут Cycling Max?

Cursor Up/Down, Zoom In/Out
Это через одно место, но получилось настроить в Advanced режиме. Изначально мой расчёт был на RPN/(n)RPN, но Новейшн, собака такая, Incr/Decr сигналы не шлёт :(( В итоге сделал так - необходимые мне энкодеры для NudgeFrame и HZoom и VZoom я сделал в виде крутилки с типом REL1 (шлёт 63 при кручении в минус, 65 при кручении в плюс) с посылом сигнала на определённый CC, далее через Bome при принятии значения 63 в Кубейс отправляется на один СС#, к которому привязано действие уменьшение зума или нюджа, при значении 65 на другой CC#, к которому привязано действие увеличения зума или нюджа. Жопно, да, но работает безотказно, в режиме Advanced оно юзается каждый день.

Учитывая, что такие же варианты крутилок доступны и для автомапа - можно средачить автомапный темплейт и юзать так же, думаю. Пока ещё сам такое не делал.
 
текст пропал, вернулся к энкодерам, тронул 2 (!) раза – вернулся старый
Это и есть RightHand и LeftHand mode. Где-то рассказывалось, что на ReMOTE SL / ZeROSL (с двумя экранами) была проблема похлеще: при одновременном управлении крутёлкой и ползунком моргали «как угорелые» прямоугольные скобки возле индикации значения. В MkII решили убрать второй экран, якобы, чтобы проблемы была менее заметна, но саму проблему-то так и не решили… И просто когда нажимаются левые кнопки/крутёлки — отображается содержимое левого экрана (01 — верхняя и 03 — нижняя), а когда нажимаются правые кнопки/ползунки, тогда отображается содержимое правого экрана (02 — верхняя и 04 — нижняя). Можете просто слать одновременно одну и ту же верхнуюю строчку как для 01 так и для 02, и одну и ту же нижнюю строчку для 03 и 04.
По тексту — что подразумевается под "быстрым переводом"? В System Exclusive не должны попадаться символы за пределами ASCII кодировки (диапазона знаков 0…7F), т.е. только латиница и только упрощённая, не говоря уже о русских и др.
7E — стрелочка вправо вместо тильды, а 7F, вроде стрелка влево. А вот вместо "\" символ йены и для обратной косой кода не предусмотрено. Естественно, всё это определялось методом тыка.

(N)RPN… — Да, вот с ними уж точно беда. Нельзя разъединить / прибавлять/отнимать значения/установить ШАГ для вращалок).
можно средачить автомапный темплейт и юзать так же, думаю. Пока ещё сам такое не делал.
Можно, кстати, даже НОТУ отправлять с "горшков" как Relative! Мне хотелось привязать некоторые "переключалки" на Pot, т.к. Encoder`ы в основном заняты на 8 "параметров". Была идея сделать ещё один Mackie-Automap-`ный шаблон с поддержкой JOG Scroll/Zoom, но не знаю, стоит ли лишать какого-нибудь (первого/восьмого) параметра или вообще стереть все Encoder`ы… С 5-го марта ничего придумать не могу… Только лишь дополяю таблицу Mackie-параметров для Reaper и Studio One с Behringer WING (который может работать как с Mackie HUI так и Mackie Control)… И ещё никак толком не понимаю, что в .js сделать, чтобы receiveMIDI возвращало уже «переведённый» SysEx, т.к. хз какой там ECMA, видимо придётся пробовать "костылить" много раз по-разному, что-бы хоть раз что-то похожее получить (какие возможны методы работы с массивами и т.п.)…

в единичном случае и более не повторялось, но там был MIDI OX.
MIDI-OX мог сам назначить вход на выход (поэтому и вирт.MIDI-кабель не нужен был), поэтому чтобы такого впредь не происходило, в Port Routing разъединяйте вход novation`ов в выход…
С Максом когда-то давно мне тоже хотелось познакомиться, но что-то не тянут меня ноги к нему…
 
Последнее редактирование:
  • Like
Реакции: Jafaroff
Можете просто слать одновременно одну и ту же верхнуюю строчку как для 01 так и для 02, и одну и ту же нижнюю строчку для 03 и 04.
Спасибо огромное. Без вас бы хрен догадался вообще. В мануале что-то про левый и правый экран сказано, но не очень ясно.

"быстрым переводом"?
Скорее имел ввиду "чем можно удобно перевести текст в Hex", т.е. через Windows'овский Charmap это туповато, мб что-нибудь более удобное есть. Но это не такая уж и большая проблема, собственно :)
 
через Windows'овский Charmap это туповато
оо…аАа-а… Я обычно ввожу в HxD нужный текст и тупо копирую числа из области байтов. Хотя, по-умолчанию, у меня теперь 4 байта в группе вместо одного, но можно там и 16 сгруппировать (чтоб меньше пробелов копировать)…
А то мне подумалось, что потребовалось в Bome перевести числовое значение в отправляемый текст… тут-то и я не знаю. Для VirtualDJ делается в макро, типа deck 1 get text 'EQ deck1 ~ `eq_mid & param_multiply 12 & param_cast text` | `var $переменная ? gain : eq_high & param_multiply 12 & param_cast text`'. Но там уже заранее заготавливается полный SysEx, размер текста и позиция, откуда в SysEx`е его "вводить", т.о. виртуальник определяет, как располагать байты. Bomeґ до такого не додумается (ведь число то может занимать варьируемый размер, соответственно смещая весь текст)… Ну, если брать только какую-то часть экрана вместо целой строки… хм… для каждого "разбитого" текста на несколько SysEx`ов использовать одни и те же переменные… О! Оказывается (как написано в Bome's Midi Translator\help\rules.html) не 36, а аж целых 72 глобальных переменных возможно в этом «переводчике»: ga…gz, g0…g9, ha…hz, h0…h9! Но всё равно — не 144 (а для нашего «идеала» должно быть 288, т.к. 2 экрана, вернее режима экранов)… Хотя, у Mackie (HUI/Control) вообще 56 ячеек в строке (итого 112), и, теоретически, можно просто текст после каждого 7-го символа разрывать пробелом…
 
Последнее редактирование:
  • Like
Реакции: Jafaroff
За сегодня много с чем разобрался. Даже запилил некоторое подобие переключаемого surface - один под контроль проекта, другой под контроль микшера, третий под контроль ручек через Quick Controls и т.д.
Однако, возник кое с чем вопрос. Если поведение кнопок и LED'ов мне теперь практически на 100% понятно, а так же я разобрался с симуляцией нажатий кнопок, то остаётся непонятным поведение энкодеров, а точнее, неясен пока что способ присвоить энкодерам именно ЗНАЧЕНИЕ, а не состояние LED. Т.е. я хочу из Кубейса послать значение крутилки Quick Controls на Новейшн, а оно, судя по мауналу, посылается с помощью чьей-то матери, цитирую:
66h 03 1-9 +/- 64 Simulate Encoder Change = number of ‘clicks’
Т.е. оно имитирует сдвиг на определённое значение, а не присвоение конкретного значения.
Опытным путём установил, что значения от 01 до 3F означают прибавление значения, а от 40 до 7F - уменьшение, но почему-то никакой возрастающей логики по степени прибавления нет :rolleyes: Мб есть какой-то более элегантный способ?
 
Simulation — это выполнение контроллером операции без физического прикосновения.
Мне было интересно хотя бы в Bome забить индикацию, но из-за того, что там очень топорно сделаны переменные (т.е. целому байту — нельзя назначить только конкретным битам этого байта), приходилось вбивать лишь для одного "точечного" — 88 строк. А ещё остались "заливные" от крайнего левого и от центра (т.е. ещё 176)… В Advanced значение Encoder`ы всегда в REL1 показывают только +1/-1, в APOT/REL2 — -1…-18/+1…+18 (сильнее кратунуть не получалось). Если нужно значение, Encoder`ы должны быть конкретно: -63/+64, 127, 16K, но никак не REL1/REL2/APOT (он же VPOT в Mackie). А в этом случае, сам смысл Encoder`ов уже теряется. Т.е. для индикации значения нужен режим automap…
 
Если нужно значение, Encoder`ы должны быть конкретно: -63/+64, 127, 16K, но никак не REL1/REL2/APOT (он же VPOT в Mackie). А в этом случае, сам смысл Encoder`ов уже теряется.
Я энкодеры уже перевёл в режим 127, он меня для контроля Quick Controls вполне устраивает. Попробую более правильно и ясно объяснить, что я хочу:
- в Кубейсе открывается плагин;
- QuickControl1 для этого плагина содержит значение, к примеру, 78;
- Кубейс шлёт данные с 78 в Бом;
- Бом транслирует это в данные для подсветки LED первого энкодера (получилось реализовать без проблем, отправил контроллеру BF 70 pp)
- Бом транслирует это в данные для собственно принятия энкодером значения 78.
С последним пунктом как раз завтык. Поскольку я не нашёл, как именно установить нужное текущее значение энкодера (а не LED'a), кручение в Кубейсе Quick Controls'ов прекрасно управляет LED, но никак не управляет собственно актуальным значением самого энкодера. Т.е. я покрутил в Кубейсе с 78 на 52, к примеру, LED это принял, кручу уже на Новейшне - он опять с 78 крутит.
Нашёл в маунале команду на симуляцию нажатия F0 00 20 29 03 05 12 00 02 00 66 03 01 ?? F7, где вместо вопросов - значение, но эта команда именно симулирует сдвиг на определённое значение, но никак не ставит энкодер в нужное значение.

Судя по всему, во всём темплейте Автомапа LED конкретного элемента управления живёт отдельной жизнью от собственно самого значения, передаваемого энкодером по MIDI.

Есть пара идей.
1) Отправлять столько SysEx сообщений с эмуляцией нажатия, сколько нужно для достижения нужного значения. Как реализовать на старом Боме версии 1.72 - не знаю, надо изучить внимательно синтаксис блока Rules в Боме.
2) Вернуть энкодеры в режим REL1. С помощью пары глобальных переменных, возможно, этот вопрос получится решить.
 
  • Like
Реакции: «G~Li†ch»
Получилось-таки, собака!

Делюсь, вдруг кому пригодится.
Я отправляю Quick Controls из Кубейса на родные CC#21-28, но на канал 15-ый, чтобы не пересекалось. Энкодер в режиме REL1!

- Первый транслятор Encoder 1 MIDI from DAW to LED
принимает из DAW BE 15 pp,
ga=pp+0,
pp=pp/11,
отправляет BF 70 pp на контроллер на LED (pp делим на 11, поскольку лампочек вокруг энкодера 11, таковы правила синтаксиса);
- Второй транслятор Encoder 1 REL1 to DAW
принимает с контроллера BF 78 pp,
if pp==65 then ga=ga+1
if pp==63 then ga=ga-1,
if ga>127 then ga=127,
if ga<0 then ga=0,
отправляет BE 15 ga в DAW (если энкодер крутится влево - глобальная переменная идёт в минус, вправо - в плюс, крутим в пределе вправо - переменная будет 127, в пределе вниз - будет 0);
- Третий транслятор Encoder 1 REL1 to LED
принимает с контроллера BF 78 pp,
pp=ga/11
отправляет на контроллер BF 70 pp.

Осталось только вывести содержимое переменной ga на экранчик, что уже не составит никакой сложности.
 
  • Like
Реакции: «G~Li†ch»
Временно перепрограммировать нужный encoder на отправку MIDI-сообщения можно и ВНИКУДА (т.е. ни на U1, ни на U2, ни на U3 — F00020290305000000006800 01 12 0001 40 F7, где жирным выделен первый энкодер, сразу после этого SysEx`а — симуляция вращения, потом вернуть в ComnPort (F00020290305000000006800 01 12 0001 00 F7)… Да, вчера у меня был затуп, т.к. симуляцию вращения выполнять бессмысленно, особенно для 16K — нужно слать больше пары сотен раз один и тот же SysEx!
Проще прописать само значение энкодеру, т.е. то значение, которое контроллер помнит после физического вращения/симуляции/прописанное в шаблоне! Вот для самого регулятора:
F00020290305000000006800 01 15 0001 xx F7 (первый)

F00020290305000000006800 08 15 0001 xx F7 (восьмой)

Если режим (тип? вид?) encoder`а 16K, то надо так:
F00020290305000000006800 01 14 0002 xxxx F7

F00020290305000000006800 08 14 0002 xxxx F7
А по смещениям самого шаблона:
Enc.1: F00020290305000000006801 032A 0002 xxxx F7
Enc.2: F00020290305000000006801 0353 0002 xxxx F7
Enc.3: F00020290305000000006801 037C 0002 xxxx F7
Enc.4: F00020290305000000006801 0425 0002 xxxx F7
Enc.5: F00020290305000000006801 044E 0002 xxxx F7
Enc.6: F00020290305000000006801 0477 0002 xxxx F7
Enc.7: F00020290305000000006801 0520 0002 xxxx F7
Enc.8: F00020290305000000006801 0549 0002 xxxx F7

В Advanced режиме нужно "дёрнуть" регулятор, чтобы обновилось новое значение, либо снова "отсимулировать", итого получаем:
F00020290305000000006800 01 12 0001 40 F7 F00020290305000000006801 044F 0001 44 F7 F00020290305000002006603 05 00 F7 F00020290305000000006800 01 12 0001 00 F7
Работает! С MIDI-OX, правда, у меня слалось это как-то долго, т.к. значение пятого encoder`а (7-бит — смещено на 1 байт и размер 1 байт) обновилось (т.е. стало 68!) не сразу (где-то через секунду-полторы), но хоть какой-то костыль для Advanced!
Правда, если "непрерывно" изменять значение… это насколько будет порт засираться… Мда, наверно, лучше вовсе без симуляции (а соответственно и вывода "вникуда" повторно-высылаемого значения с контроллера)…

А где прописывается if … then ? В 1.6.1 такого не попадалось
pp=pp/11,
отправляет BF 70 pp на контроллер на LED (pp делим на 11, поскольку лампочек вокруг энкодера 11, таковы правила синтаксиса)
А вот что если регулятор у DAW типа "-63=65, +64 = 64, 0 = центр", и я хочу расположить центральное по центру, а не выключать светодиодное кольцо (т.е. переключив режим BF 78 20, BF 79 20, … BF 7F 20)? if pp == 64, then ge = 6, а if pp == 0, then ge = 1? Осталось только понять, в каких случаях должна работать именно эта часть кода вместо "обычного"… Ведь чтобы перевести режим светодиодного кольца энкодера в BF 78 20 должно быть какое-то "подходящее" сообщение из DAW, а это может только Mackie Control/HUI… С Quick Control, возможно такое не предусмотрено, но с Generic Remote, теоретически, можно…
 
Последнее редактирование:
  • Like
Реакции: Jafaroff
Проще прописать само значение энкодеру, т.е. то значение, которое контроллер помнит после физического вращения/симуляции/прописанное в шаблоне! Вот для самого регулятора:
Скажите, пожалуйста, а откуда эти сообщения, а точнее, их синтаксис? В мануале по программингу SLmkii я таких не упомню :oops: Ну или же я читаю не лицом, а кое-чем более круглым и мягким. Или же это которые SysEx Data Block коды? Я их стараюсь вообще не трогать, дабы не порушить что-нибудь окончательно, поэтому пока что варганю костыли без их использования именно для Automap режима.

Кстати, да, я был удивлён тому, что в Advanced режиме коды на подсветку работают, саппорт Новейшнов не упомянул о том, что есть возможность этого, прям отрицали это :rolleyes: И на симуляцию, походу, тоже оно работает... А дисплей? Впрочем, ситуацию это сильно не облегчает - всё равно Кубейс нельзя заставить послать по MIDI конкретные SysEx'ы, Bome всё равно в итоге пригодился бы...

А где прописывается if … then ? В 1.6.1 такого не попадалось
В блоке Rules. В моём Боме 1.7.2 оно есть, по крайней мере.

С Quick Control, возможно такое не предусмотрено, но с Generic Remote, теоретически, можно…
Честно говоря, мне вообще не нравится Generic Remote в Кубейсе в том плане, что там никакого скриптинга, даже намёка на это нет. Т.е. виртуальный "энкодер" из Quick Controls будет слать от 0 до 127 в любом случае, никаких альтернативных вариантов нету, ни обратного порядка посыла чисел, ни процентного уменьшения посылаемого значения, ни параллельно посылаемых дополнительных значений на другие CC при необходимости... можно только ограничить верхний предел значения СС. Собственно, поэтому у меня по сути ВООБЩЕ ВЕСЬ surface, а точнее, его подобие, оказывается проскрипчен в Bome, притом капитально костыльно проскрипчен (хотя и работает, собака). Количество трансляторов уже перевалило за 40. А в Кубейсе самом даже элементарно разную реакцию на один и тот же CC с разными значениями сделать уже невозможно - как так-то? Уже приводил в пример с энкодерами под действия Zoom и Nudge.
 
  • Haha
Реакции: «G~Li†ch»
дабы не порушить что-нибудь окончательно
Ну у меня всего лишь один раз контроллер повис, при попытке "симулировать нажатие несуществующей кнопки" (приходилось выключать-включать, перепроверив это снова — да, опять виснет). Подмена блоков данных опасна только в Globals, и то, когда Memory Protect отключен, но не смертельно. А для template/SL Control Member — одно удовольствие подменять данные… Да, бывало, когда по ошибке шлёшь значения за пределами 7 бит (т.е. 80…FF внутри SysEx`а), но пока что контроллер живой (да и вообще, похоже он их автоматом преобразует в какие-то другие числа.. Например, случайно сохранишь F0… запрашиваешь — а там 77 (или 76, уже не помню точно). В разделе про Data Blocks есть пример для SL Control Member, и по нему мне стало понятно, где какой байт за что отвечает (а какой всегда 00)…
Вот если б была расшифровка OS…
саппорт Новейшнов не упомянул о том, что есть возможность этого, прям отрицали это
Ничего, если скинем мы им свои template (особенно с Mackie) — они-то может даже и не заметят ничего, ну подумаешь, шаблон какой-то… А когда другие люди скачают и начнут долбить поддержку (вынуждая их самих опробовать наши шаблоны) может и офигеют… Хотя, зная их, они просто забьют кирпич и "пошлют" (если не выкинут наши шаблоны из пакета)… Собственно поэтому-то и хочется довести всё до ума, да и приделать пару «путеводителей» по кнопкам/шаблонам — ведь когда на экране Mackie is OFFLINE ничего ж не понятно (нужно жать edit и каждую кнопку, чтобы увидеть их название, причём в разных шаблонах они тоже разные)… Вот бы только понять, как сделать эти три шаблона максимально удобными — нужно просто поработать… Думаю, мне будет достаточно когда-нибудь выложить их, а знающие программисты может приделают обратную связь… Вот же заинтриговали меня «связкой с MCU»…
Хм, а ведь и правда, что-то об Conditional написано… Видимо просто в Classic (нерегистрированном) этого нет: отсутствует вкладка с [F7]…

пример с энкодерами под действия Zoom и Nudge.
Ага, это точно. Но в Mackie всё-таки когда включен режим Zoom - кнопки "курсоров" расширяют дорожки и временную шкалу. А когда Zoom выключен, тогда просто переключает дорожки по-одной (причём в микшере тоже, т.е. стрелки вверх/вниз)…
 
Последнее редактирование:
  • Like
Реакции: Jafaroff
Запилил на HTML/JS себе небольшой транслятор текста ASCII в SysEx-сообщения для экранчика. Пока что не стал заморачиваться с позицией текста на экране, всё через пробелы, но мне лично так даже удобнее. Без изысков и проверок на корректность вводимых данных пока что и с посылом в первую очередь циферки на полную чистку обеих экранов. Мб потом допилю чуток.
Код:
<html>
    <head>
        <title>
            Novation ReMote SysEx Display Message Coder by Jafaroff
        </title>
        <style>
            body {
                font-size: 16px;
                font-family:"Courier";
                background-color: #dddddd;
            }
            input[type=text] {
                font-family:"Courier";
                font-size: 16px;
                color:white;
                background-color:#4444ff;
            }
            input[type=button] {
                background-color:white;
                font-family:"Courier";
                font-size: 16px;
            };
        </style>
    </head>
    <body>
    <font style="font-size:24px;">
        <b>
            Novation ReMote SysEx Display Message Coder by Jafaroff
        </b>
    </font>
    <br>
    <br>
    Top Left &nbsp;&nbsp;&nbsp;<input id = "topleft" type= "text" size= "71" maxlength = "71"></text>
    Top Right &nbsp;&nbsp;&nbsp;<input id = "topright" type= "text" size= "71" maxlength = "71"></text><br>
    Bottom Left <input id = "botleft" type= "text" size= "71" maxlength = "71"></text>
    Bottom Right <input id = "botright" type= "text" size= "71" maxlength = "71"></text>
    <br>
    <br>
        <input type = "button" value = "Duplicate Left to Right" onclick="
document.getElementById('topright').value = document.getElementById('topleft').value;
document.getElementById('botright').value = document.getElementById('botleft').value;
        ">
        </input>

        <input type = "button" value = "Clear all fields" onclick="
document.getElementById('topleft').value = '';
document.getElementById('topright').value = '';
document.getElementById('botleft').value = '';
document.getElementById('botright').value = '';
        ">

        <input type = "button" value = "Translate to SysEx" onclick="
document.getElementById('result1').innerHTML = '';
var strlen1 = document.getElementById('topleft').value.length;
var step = 0;
for (step = 0; step < strlen1; step++) {
    var templetter = document.getElementById('topleft').value.substring(step, step+1);
    var code = templetter.charCodeAt(0);
    var hexString = code.toString(16);
    var hexString = hexString + '&nbsp';
    var hexString = hexString.toUpperCase();
    document.getElementById('result1').innerHTML += hexString;
};
document.getElementById('result2').innerHTML = '';
var strlen1 = document.getElementById('topright').value.length;
var step = 0;
for (step = 0; step < strlen1; step++) {
    var templetter = document.getElementById('topright').value.substring(step, step+1);
    var code = templetter.charCodeAt(0);
    var hexString = code.toString(16);
    var hexString = hexString + '&nbsp';
    var hexString = hexString.toUpperCase();
    document.getElementById('result2').innerHTML += hexString;
};
document.getElementById('result3').innerHTML = '';
var strlen1 = document.getElementById('botleft').value.length;
var step = 0;
for (step = 0; step < strlen1; step++) {
    var templetter = document.getElementById('botleft').value.substring(step, step+1);
    var code = templetter.charCodeAt(0);
    var hexString = code.toString(16);
    var hexString = hexString + '&nbsp';
    var hexString = hexString.toUpperCase();
    document.getElementById('result3').innerHTML += hexString;
};
document.getElementById('result4').innerHTML = '';
var strlen1 = document.getElementById('botright').value.length;
var step = 0;
for (step = 0; step < strlen1; step++) {
    var templetter = document.getElementById('botright').value.substring(step, step+1);
    var code = templetter.charCodeAt(0);
    var hexString = code.toString(16);
    var hexString = hexString + '&nbsp';
    var hexString = hexString.toUpperCase();
    document.getElementById('result4').innerHTML += hexString;
};
        ">
        </input>

    <br>
    <br>
    <font style="font-size:24px;">
        <b>
            Display LED SysEx Message:
        </b>
    </font>
    <br>
    <br>
    <div>
        F0 00 20 29 03 03 12 00 02 00 02 02 01 01 01 01 04 <font id = "result1"></font>00 01 01 02 04 <font id = "result2"></font>00 01 01 03 04 <font id = "result3"></font>00 01 01 04 04 <font id = "result4"></font>00 F7</div>
    <br>
    </body>
</html>
 
  • Wow
Реакции: «G~Li†ch»
Ага, это точно. Но в Mackie всё-таки когда включен режим Zoom - кнопки "курсоров" расширяют дорожки и временную шкалу. А когда Zoom выключен, тогда просто переключает дорожки по-одной (причём в микшере тоже, т.е. стрелки вверх/вниз)…
На правах оффтопа.
Насчёт Mackie - я очень хочу попробовать всё же сделать посыл названий ручек и их регуляцию плагинов через MCU или хотя Mackie HUI, потому что Кубейс, собака такая, в сравнении с Рипером, других адекватных элементов для ремоут-контроля ручек в VST, судя по всему, не имеет, а Quick Controls, ещё большая собака, требует РУЧНОГО переключения фокуса в проекте для регуляции ручек. Пока что я не очень понимаю, как работает MCU - при использовании оного Кубейс посылает в Бом при добавлении какого-нибудь плагина почти 200 MIDI-сообщений, а при работе с ручками у меня не шлётся ничего. Данные выглядят довольно интересно - какие-то сообщения в нём идут цифрами подряд, а другие - уже не подряд, на досуге как-нибудь попробую это перевести в ASCII, вдруг получится.



У этого умельца есть скрипт свой на базе AutoHotkey, которым он выводит на экран (монитора) всплывающее окно с названиями плагина и ручек в купе с чужеродным для MCU протокола контроллером. У него всё прям как надо. Беда только в том, что из коробки у меня его скрипт не работает с ручками, я вижу со скриптом только вывод названия плагина. В общем, пока для меня MCU - тёмный лес. Вроде бы как я слышал, что можно подобное сделать через Mackie HUI и на него есть хоть какая-то информация за синтаксис. С MCU в Гугле за синтаксис всё очень плохо, тухло и мёртво, все спрашивают на форумах, но никто не знает.
 
  • Like
Реакции: «G~Li†ch»
По синтаксису HUI : больше 10 лет назад уже выкладывали "результат двухдневного reverse-engineering`а"… Там и кодировка символов, для двух "типов" экранов разные… На риперфоруме валяется "конвертер" HUI/MCU, требующий Pro`шный Bome MIDI-переводчик, но SysEx`ами для перевода там "и не пахнет" (а надо бы)… ещё там как-то упомянули про "опыт работы с Pure Data, включая SysEx`ы"… Я всё никак не могу начать в него вникать из-за неизмеяемого белого фона прямо как в Ctrlr — тоже долгое время никак не могли сделать, но так и недопили как положено — всё равно остался белый текст на белом фоне… да, способов с раздражающими минусами довольно не мало… Мне уже так не хочется разгребать другие "аналоги" Max/MSP…
ahk — это тот ещё изврат… Мне было проще прописать шаблон с конкретными командами, чем "расширять" поведения "мышки/клавы", и как добраться курсором до кнопки Bypass и пр. - уф жесть…
при добавлении какого-нибудь плагина почти 200 MIDI-сообщений, а при работе с ручками у меня не шлётся ничего
Ожидается, что на самом Mackie нужно что-то нажать… Что за нота должна придти в cubase/nuendo (по выбранному порту в настройках Mackie Control/Mackie HUI), чтобы получить в контроллер ответ с нужным текстом, описывающего "параметры" этого plug-in`а? Есть целая (скорее неточная) таблица сопоставления кнопок и параметров Mackie Control (?HUI?) разных DAW, но там есть Assign Page L (№44) и Assign Page R (№45), что является «кнопками» Assign EQ и DYN/FX/Send соответственно для Cubase/Nuendo. Так вот, оказывается, нужно слать Assign IO (Pan, Track) и Assign Sends (Plug-in, Aux) — это ноты №40 и №41 (в той таблице в столбце Steinberg указаны как First и Last)… Вот тогда-то DAW доправит один символ в правой верхней части LCD (Page:0_/##) и перепишет остальную часть LCD, описав, какие параметры становятся доступны для регулировки на самом Mackie (или того, что его "симулирует", как в нашем случае, ZeRO/SLMkII). Абы-какую ручку plug-in`а просто не поводшь (чтобы заставить вывести его в Mackie)… Вот так "натупили"…

В общем, вот пока только первый шаблон (сегодня был полнейший затуп с ними, пришлось трижды "переисправлять", в итоге, этот ещё более-менее, по-крайней мере для кубейса, поэтому "переключалка шаблонов" временно намеренно сломана):
Код:
F000202902037F00001102001B4D61636B696520202F4C6F6769632F20436F6E74726F6C20556E6976657273616C20204D61636B69652F456D61676963000000060301005A290670000066141200000000001900010021000900390011002900310305004B00580000020300000700004502007F4007000000014202007F40070000000945020C5434030000000B4002007F40070000000101000000110011001100110011001100110011000000000000000001014E404E0066000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056506F742031202001004100010058110010000000400000000000000000000000000000000000000056506F742032202001004100010058110011000000400000000000000000000000000000000000000056506F742033202001004100010058110012000000400000000000000000000000000000000000000056506F742034202001004100010058110013000000400000000000000000000000000000000000000056506F742035202001004100010058110014000000400000000000000000000000000000000000000056506F742036202001004100010058110015000000400000000000000000000000000000000000000056506F742037202001004100010058110016000000400000000000000000000000000000000000000056506F7420382020010041000100581100170000004000000000000000000000000000000000000000492F4F547261636B060028007F0010100040000000000000000000000000000000000000000000000053656E6473202020060029007F0010100041000000000000000000000000000000000000000000000050616E5375726E6406002A007F00511000000000000000000000000000000000000000000000000000506C75672D696E7306002B007F00501000320000000000000000000000000000000000000000000000496E2E204551204C06002C007F001010006F00000000000000000000000000000000000000000000004F7574496E73745206002D007F001010006E00000000000000000000000000000000000000000000002020454449542020060033007F005110000000000000000000000000000000000000000000000000004D614661544063680600700000007010007C000000000000000000000000000000000000000000000066616465722031200A00007F7F0370090000004000000000000000000000000000000000000000000066616465722032200A00007F7F0370090000004100000000000000000000000000000000000000000066616465722033200A00007F7F0370090000004200000000000000000000000000000000000000000066616465722034200A00007F7F0370090000004300000000000000000000000000000000000000000066616465722035200A00007F7F0370090000004400000000000000000000000000000000000000000066616465722036200A00007F7F0370090000004500000000000000000000000000000000000000000066616465722037200A00007F7F0370090000004600000000000000000000000000000000000000000066616465722038200A00007F7F037009000000470000000000000000000000000000000000000000002020556E646F2020060046007F045010007F000000000000000000000000000000000000000000000020205265646F2020060047007F045010007F00000000000000000000000000000000000000000000004355525352205550060060007F045010007F00000000000000000000000000000000000000000000005265767274416C74060049007F045010007F000000000000000000000000000000000000000000000042616E6B4C65667406002E007F045010007F000000000000000000000000000000000000000000000042616E6B5269746506002F007F045010007F00000000000000000000000000000000000000000000003C20437572736F72060062007F045010007F0000000000000000000000000000000000000000000000437572736F72203E060063007F045010007F000000000000000000000000000000000000000000000020204C6566742020060054007F045010007F00000000000000000000000000000000000000000000002020526967687420060055007F045010007F0000000000000000000000000000000000000000000000435552535220444E060061007F045010007F00000000000000000000000000000000000000000000004379636C65416C74060056007F045010007F00000000000000000000000000000000000000000000003C20436842616E6B060030007F045010007F0000000000000000000000000000000000000000000000436842616E6B203E060031007F045010007F0000000000000000000000000000000000000000000000536F6C6F44656674060052007F045010007F00000000000000000000000000000000000000000000005E20536869667420060053007F045010007F00000000000000000000000000000000000000000000004631202020202020060036007F045010007F00000000000000000000000000000000000000000000004632202020202020060037007F045010007F00000000000000000000000000000000000000000000004633202020202020060038007F045010007F00000000000000000000000000000000000000000000004634202020202020060039007F045010007F0000000000000000000000000000000000000000000000463520202020202006003A007F045010007F0000000000000000000000000000000000000000000000463620202020202006003B007F045010007F0000000000000000000000000000000000000000000000463720202020202006003C007F045010007F0000000000000000000000000000000000000000000000463820202020202006003D007F045010007F0000000000000000000000000000000000000000000000463920202020202006003E007F045010007F0000000000000000000000000000000000000000000000463130202020202006003F007F045010007F00000000000000000000000000000000000000000000004631312020202020060040007F045010007F00000000000000000000000000000000000000000000004631322020202020060041007F005010007F00000000000000000000000000000000000000000000004631332020202020060042007F045010007F00000000000000000000000000000000000000000000004631342020202020060043007F045010007F00000000000000000000000000000000000000000000004631352020202020060044007F045010007F00000000000000000000000000000000000000000000004631362020202020060045007F045010007F000000000000000000000000000000000000000000000041737369676E20310B0028007F1850100000000000000000000000000000000000000000000000000041737369676E20320B0029007F1850100000000000000000000000000000000000000000000000000041737369676E20330B002A007F1850100000000000000000000000000000000000000000000000000041737369676E20340B002B007F1850100000000000000000000000000000000000000000000000000041737369676E20350B002C007F1850100000000000000000000000000000000000000000000000000041737369676E20360B002D007F1850100000000000000000000000000000000000000000000000000050756E63682D494E0B0057007F1850100000000000000000000000000000000000000000000000000050756E63684F55540B0058007F18501000000000000000000000000000000000000000000000000000457874436E74726C010000007F005011002E0020000000000000000000000000000000000000000000466F6F74537763680100000058045010004000000000000000000000000000000000000000000000004D6F64576865656C010000007F005000000145200000000000000000000000000000000000000000005069746368426E640A0000007F005011000021200000000000000000000000000000000000000000005450585A6D53636201007F0000005911003C0000004000000000010606000066151A7F0000000000005450595A6D5363620100000000005911003C00000040000000000106060000661F7A7F00000000000054505853637275620100410000005911003C00000040000000000107070000662A01547F0000000000545059536372756241007F0000005911003C00000040000000000107070000662601547F0000000000526577696E64202006005B007F045010007F0800000000000000000000000000000000000000000000466173743457726406005C007F045010007F080000000000000000000000000000000000000000000053746F702020202006005D007F045010007F0800000000000000000000000000000000000000000000506C61792020202006005E007F045010007F08000000000000000000000000000000000000000000005265636F7264202006005F007F045010007F08000000000000000000000000000000000000000000005357434854454D500E001B007F00500F00000000001B00014E00000D0D537769746368546F4E65787421436D7063744A47010000007F005811003C0000000000000000000000436F6D7061637420456E6344215A72534C322020000000007F00510000000000000000000000000000000000000000000000000000215A72534C332020000000007F00510000000000000000000000000000000000000000000000000000215A72534C342020000000007F00510000000000000000000000000000000000000000000000000000215A72534C352020000000007F00510000000000000000000000000000000000000000000000000000215A72534C362020000000007F00510000000000000000000000000000000000000000000000000000215A72534C372020000000007F005100000000000000000000000000000000000000000000000000005A726F43726F737306005000001059107F7F000000000000000000000000000000000000000000000020756E7573656420000000007F57777900004060000000000000000000202E3A4D61636B69653A2E00202D2D2F2F2D2D20000000007F57777900004060000000000000000000202E3A456D616769633A2E00202D2D2F2F2D2D20000000007F577779000040600000000000000000004D435520537572666163652E202D2D2F2F2D2D20000000007F57777900004060000000000000000000000000537465696E626572671234F7
Так вот, хочу узнать, есть ли у кого TouchPad на SL`ках? Возможны ли там "относительные" изменения? Или они там просто банально не нужны (т.е. «и так работают»)? Просто чисто для JOG`а… В этом же шаблоне для COMPACT`ов в режиме Encoders-D первая вращалка должна выполнять роль JOG`а… но, кого ж с Compact`ом встретишь в этой теме?… В общем, тестируйте. Для "без обратной связи" (т.е. как Advanced), Ctrl+F: 06 — первую же попавшуюся заменяем на 00
(пфф… ошибочное вложение отправилось (т.к. .xls-таблицу форум приложить не даёт — выбралось не то)… выкинуто)
 
Win x64 DLL. Сейчас работаю над режимом микшера. Есть мультифункциональный Speed Dial (центральная крутилка), банки треков (громкость, панорама, mute, solo, rec arm, rec monitor, automation mode и в целом почти всё возможное что относится к треку). Индикация нажатых кнопок. На дисплей выводятся треки в банке (вчера сделал сокращение названий), громкость. Транспорт работает, включая некоторые дополнительные фишки, типа световой индикации метронома. Короче, долго перечислять, что уже сделано и что ещё планируется. Вкратце, планируется ещё три режима - работа с конкретным треком, с конкретным экффектом и отдельный режим для редактора миди (возможно, совмещенный с редактором итемов/автоматизации).
Поскольку изучать С++ и писать плагин я начал только в январе, сроков по выпуску хотя бы альфа-версии у меня нет.

Только что разобрался с плагином, оставленным нам Фандориным. :)
Пользователям Рипера под Виндоуз и Sl MKii могу подсказать если понадобится.
Вкратце описываю ниже.

Dll кидаем в User plugins

По файлу DontHideAutomapPorts даблклик и согласиться с внесением данных в реестр. Под админом.

После этого удаляем или деактивируем автомап и запускаем рипер.

Заходим в /Preferences/ Control/OSC/web / add.
Select 'Novation SL MkII (fundorin)'.
Set MIDI input to 'MIDIIN3 (SL MkII)'.
Set MIDI output to 'MIDIOUT3 (SL MkII)'.


при горящей кнопке transport
<< (кнопка под 1м фейдером во 2м ряду) // Markers: Go to previous marker/project start
<< clickHold // Go to start of time selection
<< dblClick // SWS: Select previous region
<< dblClickHold // Transport: Go to start of project

>> (2 во втором ряду) // Markers: Go to next marker/project end
>> clickHold // Go to end of time selection
>> dblClick // SWS: Select next region
>> dblClickHold // Transport: Go to end of project

Stop (3 во втором ряду) // Transport: Stop

Play (4 во втором ряду) // Transport: Play
Play при воспроизведении // Transport: Play/pause

Repeat (5 во втором ряду) // Transport: Repeat

Rec (6 во втором ряду) // Transport: Record

С зажатой кнопкой слева от энкодеров (вторая из пяти слева)
<< // View : Move cursor left one pixel
>> // View : Move cursor right one pixel
Stop // Track: Toggle lock / unlock track controls

Со следующей зажатой кнопкой слева от энкодеров (третья из пяти слева)
<< // View : Move cursor left 8 pixels
>> // View : Move cursor right 8 pixels

С зажатой кнопкой слева от потенциометров (четвертая из пяти слева)
<< // View : Move cursor left to grid division
>> // View : Move cursor right to grid division

С зажатой кнопкой слева от падов (пятая из пяти слева)
<< // Transport: Rewind a little bit
>> // Transport : Fast forward a little bit
Stop // Transport: Stop(DELETE all recorded media)



Кнопка под первым фейдером // Transport: undo
Подержать её же чуть дольше // File: Save project
Двойной клик на ней // Transport: undo
Двойной клик и задержать // File: Save project as...

Кнопка под вторым фейдером // Transport: redo


Кнопка под третьим фейдером во время записи // Transport: Stop (DELETE all recorded media)

Кнопка под четвертым фейдером // Track : Cycle folder collapsed state
Она же нажать и подержать // Track: Cycle track folder state


Кнопка под пятым фейдером // Screenset: Load window set #01
Она же нажать и подержать // Screenset: Save window set #01

Кнопка под шестым фейдером // Screenset: Load window set #02
Она же нажать и подержать // Screenset: Save window set #02

Кнопка под седьмым фейдером // Screenset: Load window set #03
Она же нажать и подержать // Screenset: Save window set #03

Кнопка под восьмым фейдером // Metronome toggle
С зажатой соседней кнопкой справа // Transport: Tap tempo


Speed Dial ------------------------------------

Спид дайл по умолчанию двигает курсор по заданной сетке. Сетку можно задавать стуча по падам одновременно касаясь спиддайла (в одной из версий плагина). Восьмой пад - сетка целыми, седьмой половинными, шестой четвертными и т.д.

Крутить нажатый спиддайл // Select time



При зажатой кнопке слева от энкодеров (вторая из пяти) // View : Scroll view up/down
То же самое, но с нажатым спиддайлом // View : Zoom vertically


При зажатой кнопке слева от энкодеров (третья из пяти) // View : Scroll view left/right
То же самое, но с нажатым спиддайлом // View: Zoom horizontally

С зажатой кнопкой слева от потенциометров // Exclusive select track
То же самое, но с нажатым спиддайлом // Track: Go to next/prev track (leaving other tracks selected)


Кнопки слева от экрана двигают информацию на экране и все управление энкодерами и кнопками на один шаг.
Кнопки справа вверху двигают информацию на экране постранично.

Энкодеры в режиме миксера регулируют громкость на соответсвующих трэках
В режиме fx можно назначить их на управление открытого эффекта, так же как и кнопки, фэйдеры и потенциометры
Это делается в текстовых файлах в папке REAPER\UserPlugins\SLPlugmaps\. Автомаппинг тоже работает, но не всегда удобно.

В режиме Instr
Первый энкодер двигает левый край выделенного айтема
Второй энкодер двигает правый край выделенного айтема
Третий энкодер двигает весь айтем
Четвертый энкодер копирует айтем (с зажатой правой нижней кнопкой копирует через 4 такта)
Пятый энкодер - горизонтальный зум
Шестой энкодер двигает левую границу выделения времени
Седьмой энкодер двигает правую границу выделения времени
Восьмой энкодер управляет гридом.


Потенциометры в режиме миксера управляют панорамой.

Удерживая вторую из трех правых кнопок и нажав на спиддайл включаем выключаем Solo in Front , а вращая спиддайл настраиваем баланс громкости Solo in Front .

В режиме миксера первый ряд кнопок выделяет трэки, второй ряд кнопок включает рекарм, кнопки под потенциометрами при погашенной кнопке transport включают выключают mute solo на соответствующих трэках.

В режиме fx первый ряд кнопок переключает эффекты выделенного трэка, а энкодеры позволяют управлять ими, глядя на параметры выведенные на экран. Долгим нажатием можно включить выключить отображение плагина на мониторе. Двойным кликом соответствующей кнопки в первом ряду можно перевести плагин в байпасс.

Всё это находится и редактируется в файле SLMkII-Reaper-CSurf-0.0.1\src\routines\sl_cmd.cpp в исходниках (прилагаю архив)
Чтобы из исходников получить dll нужно установить Visual Studio 2017 около 30 Гб и поучиться немного с ним управляться.
 

Вложения

Последнее редактирование:
  • Like
Реакции: Beckoff
В общем, мои попытки создать "прослойку-транслятор" для получения на экран Новейшна названий ручек плагин и их регулирования через MCU в Кубейсе не увенчались успехом по целому ряду причин.
1) Несмотря на то, что я купил себе Bome Midi Translator Pro последнюю версию, легче не стало - Bome не может обработать и транслировать ОЧЕНЬ длинные сообщения, а MCU при добавлении плагина в проект шлёт просто лютое количество данных, часть из которых, судя по всему, ASCII, но Bome их разбирает на целую тучу сообщений в итоге, а как их проанализировать в купе и вычленить из этого потока почти в 600 байтов ASCII-текст с названием плагина хотя бы - хрен его знает, всё очень муторно и непонятно. Модератор с форума Bome, который всем помогает, предложил для этого дела использовать ещё одну, стороннюю софтину, но для меня это слишком сложно и неоправданно по времени.
2) Реверс-инжинеринг MCU без самого MCU, основывающийся лишь на имеющемся MIDI-синтаксисе, который мне удалось стянуть из Интернета - гиблое дело. В итоге выяснилось, что для управлениями ручками, к примеру, третьего плагина в инсерте на нужной дорожке надо на настоящем MCU:
- выбрать нужную дорожку;
- нажать Assignment кнопку (симулируется через ноту G2 на канале 1, судя по активной реакции протокола MCU - успешно симулируется);
- из появившегося списка плагинов на экране MCU нужно выбрать необходимый;
- и только после этого мы на экран получим собственно имена ручек.
Всё это в итоге - лютый гемор. Решил просто этого не делать, ибо уже работать надо, собственно. Лучше добью удобное управление Track Quick Controls Кубейса и дождусь MIDI API в новой версии, там, глядишь, получится и заскриптить всё, как в Рипере.
 
В общем, мои попытки создать "прослойку-транслятор" для получения на экран Новейшна названий ручек плагин и их регулирования через MCU в Кубейсе не увенчались успехом
Вроде, Вы ещё года три назад утверждали, что в Кубе проблем нет, а имеются они лишь в FL?!
В Кубейсе Novation SL Mkii 49 мой работает идеально, а вот в FL Studio, походу, только Automap пашет.
Может, тогда вообще портироваться в Reaper или Ableton? )))
 
Вроде, Вы ещё года три назад утверждали, что в Кубе проблем нет, а имеются они лишь в FL?!
С Автомап-сервером на тот момент проблем действительно не было, работало, не без багов, но пользовался практически постоянно. Но времена поменялись - поддержка Автомапа в старом варианте была дропнута Новейшнами, новые SL mkiii уже с базовой поддержкой MCU, старым - шиш. Если для 10-ой версии Кубейса на бета-сайте Новейшнов ещё как-то вроде выложили один недоделанный бета-билд, то для текущего моего Cubase 11 Pro приходится брать клиент из 10-ого, и там довольно много неприятных мелких багов, не говоря уже о том, что всё же создание копий плагинов с пометкой (Automap) весьма неудобно в итоге.

Поэтому, собственно, ищу альтернативные варианты и пока что пилю свой surface к автомапному режиму контроллера. Удалось сделать транспортную панель с LED-фидбэком, Track Quick Controls с фидбэком значений крутилок, контроль микшера и панорамы с фидбэком и прочее. Но хотелось бы ещё посылать на экранчик Новейшна имена крутилок в том плагине, который сейчас открыт в DAW и эти же крутилки регулировать. Я сильно рассчитывал на MCU, но, там лютый гемор и всё очень сложно.

Жду Cubase MIDI API. Правда, походу, оно в 11.5 версии только будет.

Может, тогда вообще портироваться в Reaper или Ableton? )))
Пытался. Не моё. Если Рипер ещё как-то я могу рассмотреть как будущий вариант переходной DAW, то Аблетон точно нет. Плюс, на Кубейсе сейчас у меня завязаны с дюжину текущих клиентских проектов, даже времени нет осваивать что-то новое из DAW.
 
но Bome их разбирает на целую тучу сообщений в итоге, а как их проанализировать в купе и вычленить из этого потока почти в 600 байтов ASCII-текст с названием плагина хотя бы
Эм… А посылал ли этот surface вообще название той ручки? Скопировав с MIDI-OX`а полученные SysEx`ы и вставляя в HxD, "читаю", что же должно появиться на экране у Mackie… Кручу другие "горшки" (на них у меня Assign`ы), и только тогда понимаю, в каких случаях encoder`ы настраиваются на эквалайзер, в каком на Send`ы эффектов, а в каком Insert`ы… И всегда рядышком с номерами этих EQ/Send/Insert`ов шлётся ещё и отдельный SysEx, в котором указана текущая страница (т.е. меняет всего один байт при переключении страницы, либо сразу несколько байт, где указывается количество доступных страниц), В таблице кнопок Mackie Control с "реакциями на них в конкретных DAW" для Cubase раскладки (наклейках) указано, что страницы переключаются кнопками "First" (нота 28h) и "Last" (нота 29h)… А вот у других DAW, Page Right и Page Left стоят на нотах 2Bh и 2Ch, что Cubase воспринимает как "Assign EQ" и "Assign Instrument" соответственно… Но вот сколько же ручек Plugin`а он может "разместить", и на сколько страниц, и можно ли их как-то перенастроить – без понятия! После этого "вопроса" мне сразу показалась эта затея очень "непереспективной", т.к. уже представляю, сколько раз мне придётся крутить "бочонок", чтобы найти название нужной ручки, если у этого Plug-in`а их больше сотни…
Кнопок-то на mkII совсем немного, и так всё более нужное занятно: два ряда с F1…F16; shift на кнопку preview же не назначить (ZeRO MkII, как и на RowSelect`ы у SLMk2), стрелки Bank/Channel±8 и ±1, курсоры, shift, Ctrl, ну и куда уже Assign`ы пихать?)… А ещё контроллер не позволяет назначить отправку разных нот c одного Pot… После такого, кажется, что для управления plug-in`ами лучше уже automap / специальная для конкретного Plugin`а группа шаблонов, чем рулить через Mackie — ведь 24 готовых регулятора на 5 шаблонах гораздо лучше пяти переключателей и крутёлок, раскинутых на полсотни страниц? Или я может чё недопонимаю, и в первой странице могут указываться Quick Controls, а последующие – всё остальное?
 
Эм… А посылал ли этот surface вообще название той ручки?
Я тут потестил скрипт одного умельца на AHK с MCU в Кубейсе - вы правы, не посылал, на экран не вывелось названий ручек. Только название плагина и всё. В общем, пытаться "сэмулировать" прослойку под MCU - очень сложная и не стоящая того затея по целому ряду причин.

В общем, я пока что остановился (временно) в допиливании своего surface для Кубейса и вернулся к родному Automap для кое-каких тестов. Главная причина недовольством самопальной прослойкой вот какая - Кубейс, собака такая, даже при пометке Transmit в Generic Remote на некоторые параметры ВООБЩЕ ничего не шлёт в обратку на контроллер или Bome MIDI Translator.
Т.е. к примеру, мне удалось сделать полный LED-feedback на кнопки Loop/Record/Click, поскольку при включении Transmit на этих действиях Кубейс в обратку шлёт их состояние на данный момент и можно настроить Bome MIDI Translator на отправку нужных CC и SysEx сообщений Новейшну в режиме Automap и на основе этого можно (и вполне себе оно получилось) LED-feedback именно на эти кнопки. Так же получилось сделать полный фидбэк с LED-кольцом вокруг энкодеров в случае работы с Track Quick Controls.
Однако, к подавляющему большинству других действий и параметров Кубейс не шлёт трансмитом в обратку НИЧЕГО, собака такая. Зум, состояние открытых-закрытых окон в проекте, solo/monitor/mute и кучу всего остального - Кубейс тупо ничего в обратку не шлёт со своего Generic Remote, который действительно оказался весьма и весьма generic в плохом смысле.

В связи с чем вопрос. В Автомапе родном есть среди "темплейтов": user/fx/inst/mixer. Если с mixer/fx/inst я сейчас всё ещё раз протестировал - более или менее всё работает, то я пока не разобрался с User. При нажатии View там пусто, Learn не работает. Более того, такое ощущение, что к этому User как-то надо присобачить "карту" крутилок-энкодеров-кнопок-фейдеров, ибо там её тупо нет. Пока курю гайд - не понимаю, как оно пашет. Есть мысль отправить в User те действия в Кубейсе, которые бывают частенько нужны (зумы, нюджы, работу с аудиоклипами, которую я делал на кнопках и т.д.), но для этого потребуется, судя по всему, опять открытый порт MIDIIN3, снова богомерзкий Generic Remote. Или есть другие варианты?
 
  • Wow
Реакции: «G~Li†ch»
User/inst/mixer/fx не меняют посылаемые с контроллера (да и на контроллер) сообщения. Они всего-лишь сообщают Automap server`у какой задействовать CC-«remapping» автомап-сервера. Может быть, что в каком-то из этих режимов обратный "feedback" блокируется, но это очень маловероятно…
В User по идее и должно быть всё пусто, т.е. должно назначаться пользователем, правда, до меня тоже так и не дошло, как туда что назначать…

С масштабом я ещё пойму (градация значений там явно должна быть больше 128, м.б. даже больше 16384), но вот с on/off (0/127 или 1), где состояние активности проекта, mute/solo/monitor – вот это прямо взрыв мозга! Для меня это тоже оказалось нежиданностью, сложно поверить, что не шлются…

По кольцам, как я понимаю, параллелили принимающие CC с отправляющими (т.е. CC#119…#127 с контроллера и CC#111…#118 на контроллер)? А "режим" колец задавали чем-нибудь (те, что по CC#119…#127)? Или всегда "заливание по-часовой"?

У меня оказался "doublepost" (ранее уже сказанное повторилось в последнем моём сообщении), только в последнем неправильное название второй кнопки (45-я нота): не Assign Instrument (старый вариант таблицы названий кнопок Mackie), а "Assign DYN/FX/AUX". Мне всё ж захотелось всколупнуть тот ahk-сценарий, более-того, он у меня запустился (предварительно выпилив с его parse_midi_with_autohotkey.zip ненужные send`ы на отсутствующие cmc-ch/cmc-qc device), только у "подсказчика", вызываемого по комбинации Alt+F7, почему-то сильно закруглёны углы (что аж съедает часть Mackie-текста). В принципе, с ним-то было понятно, что туда шлётся, и, кажется, даже лучше, чем на реальном MIDI-контроллере, тем более, что на контроллере весь текст смещался бы на 2 знака каждые 7 символов (т.е. не соответствовуя кнопкам/крутёлкам) и немного бы вводил в заблуждение… В принципе, если использовать только данный AHK (исправив имена портов в его сценарии), то достаточно и такого шаблона для novation SLMkII/ZeROMkII/Compact*
Код:
F000202902037F00001102001B4D61636B696520202F4C6F6769632F20436F6E74726F6C20556E6976657273616C20204D61636B69652F456D61676963000000060301005A290670000066141200000000001900010021000900390011002900310305004700580000020300000700004502007F4007000000014202007F40070000000945020C5434030000000B4002007F40070000000101000000110011001100110011001100110011000000000000000001014E404E0066000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056506F742031202001004100010058110010000000400000000000000000000000000000000000000056506F742032202001004100010058110011000000400000000000000000000000000000000000000056506F742033202001004100010058110012000000400000000000000000000000000000000000000056506F742034202001004100010058110013000000400000000000000000000000000000000000000056506F742035202001004100010058110014000000400000000000000000000000000000000000000056506F742036202001004100010058110015000000400000000000000000000000000000000000000056506F742037202001004100010058110016000000400000000000000000000000000000000000000056506F74203820200100410001005811001700000040000000000000000000000000000000000000004175746D5265616406004A007F001010004000000000000000000000000000000000000000000000004175746D5772697406004B007F001010004100000000000000000000000000000000000000000000004D2E7C4C6174636806004E007F0051100000000000000000000000000000000000000000000000000053656E6473556E6406004C007F005010003200000000000000000000000000000000000000000000004D7472555265646F06004F007F001010006F0000000000000000000000000000000000000000000000496E73747255746C060050007F001010006E00000000000000000000000000000000000000000000002020454449542020060033007F005110000000000000000000000000000000000000000000000000004D614661544063680600700000007010007C000000000000000000000000000000000000000000000066616465722031200A00007F7F0370090000004000000000000000000000000000000000000000000066616465722032200A00007F7F0370090000004100000000000000000000000000000000000000000066616465722033200A00007F7F0370090000004200000000000000000000000000000000000000000066616465722034200A00007F7F0370090000004300000000000000000000000000000000000000000066616465722035200A00007F7F0370090000004400000000000000000000000000000000000000000066616465722036200A00007F7F0370090000004500000000000000000000000000000000000000000066616465722037200A00007F7F0370090000004600000000000000000000000000000000000000000066616465722038200A00007F7F037009000000470000000000000000000000000000000000000000002020556E646F2020060046007F045010007F000000000000000000000000000000000000000000000020205265646F2020060047007F045010007F00000000000000000000000000000000000000000000004355525352205550060060007F045010007F00000000000000000000000000000000000000000000005265767274416C74060049007F045010007F000000000000000000000000000000000000000000000042616E6B4C65667406002E007F045010007F000000000000000000000000000000000000000000000042616E6B5269746506002F007F045010007F00000000000000000000000000000000000000000000003C20437572736F72060062007F045010007F0000000000000000000000000000000000000000000000437572736F72203E060063007F045010007F000000000000000000000000000000000000000000000020204C6566742020060054007F045010007F00000000000000000000000000000000000000000000002020526967687420060055007F045010007F0000000000000000000000000000000000000000000000435552535220444E060061007F045010007F00000000000000000000000000000000000000000000004379636C65416C74060056007F045010007F00000000000000000000000000000000000000000000003C20436842616E6B060030007F045010007F0000000000000000000000000000000000000000000000436842616E6B203E060031007F045010007F0000000000000000000000000000000000000000000000536F6C6F44656674060052007F045010007F00000000000000000000000000000000000000000000005E20536869667420060053007F045010007F00000000000000000000000000000000000000000000004631202020202020060036007F045010007F00000000000000000000000000000000000000000000004632202020202020060037007F045010007F00000000000000000000000000000000000000000000004633202020202020060038007F045010007F00000000000000000000000000000000000000000000004634202020202020060039007F045010007F0000000000000000000000000000000000000000000000463520202020202006003A007F045010007F0000000000000000000000000000000000000000000000463620202020202006003B007F045010007F0000000000000000000000000000000000000000000000463720202020202006003C007F045010007F0000000000000000000000000000000000000000000000463820202020202006003D007F045010007F0000000000000000000000000000000000000000000000463920202020202006003E007F045010007F0000000000000000000000000000000000000000000000463130202020202006003F007F045010007F00000000000000000000000000000000000000000000004631312020202020060040007F045010007F00000000000000000000000000000000000000000000004631322020202020060041007F005010007F00000000000000000000000000000000000000000000004631332020202020060042007F045010007F00000000000000000000000000000000000000000000004631342020202020060043007F045010007F00000000000000000000000000000000000000000000004631352020202020060044007F045010007F00000000000000000000000000000000000000000000004631362020202020060045007F045010007F000000000000000000000000000000000000000000000041737369676E20310B0028007F1850100000000000000000000000000000000000000000000000000041737369676E20320B0029007F1850100000000000000000000000000000000000000000000000000041737369676E20330B002A007F1850100000000000000000000000000000000000000000000000000041737369676E20340B002B007F1850100000000000000000000000000000000000000000000000000041737369676E20350B002C007F1850100000000000000000000000000000000000000000000000000041737369676E20360B002D007F1850100000000000000000000000000000000000000000000000000050756E63682D494E0B0057007F1850100000000000000000000000000000000000000000000000000050756E63684F55540B0058007F18501000000000000000000000000000000000000000000000000000457874436E74726C010000007F005011002E0020000000000000000000000000000000000000000000466F6F74537763680100000058045010004000000000000000000000000000000000000000000000004D6F64576865656C010000007F005000000145200000000000000000000000000000000000000000005069746368426E640A0000007F005011000021200000000000000000000000000000000000000000005450585A6D53636201007F0000005911003C0000004000000000010606000066151A7F0000000000005450595A6D5363620100000000005911003C00000040000000000106060000661F7A7F00000000000054505853637275620100410000005911003C00000040000000000107070000662A01547F0000000000545059536372756241007F0000005911003C00000040000000000107070000662601547F0000000000526577696E64202006005B007F045010007F0800000000000000000000000000000000000000000000466173743457726406005C007F045010007F080000000000000000000000000000000000000000000053746F702020202006005D007F045010007F0800000000000000000000000000000000000000000000506C61792020202006005E007F045010007F08000000000000000000000000000000000000000000005265636F7264202006005F007F045010007F08000000000000000000000000000000000000000000005357434854454D500C001B007F00500F00000000001B00014E00000D0D537769746368546F4E657874215A6F6F6D4A4F47010000007F005811003C0000000000000000000000436F6D7061637420456E6344215A72534C322020000000007F00510000000000000000000000000000000000000000000000000000215A72534C332020000000007F00510000000000000000000000000000000000000000000000000000215A72534C342020000000007F00510000000000000000000000000000000000000000000000000000215A72534C352020000000007F00510000000000000000000000000000000000000000000000000000215A72534C362020000000007F00510000000000000000000000000000000000000000000000000000215A72534C372020000000007F005100000000000000000000000000000000000000000000000000005A726F43726F737306005000001059107F7F000000000000000000000000000000000000000000000020756E7573656420000000007F57777900004060000000000000000000202E3A4D61636B69653A2E00202D2D2F2F2D2D20000000007F57777900004060000000000000000000202E3A456D616769633A2E00202D2D2F2F2D2D20000000007F577779000040600000000000000000004D435520537572666163652E202D2D2F2F2D2D20000000007F57777900004060000000000000000000000000537465696E626572671234F7
*не проверено, но по идее, в режиме Encoders-D, должна быть доступна регулировка Zoom по первому Encoder`у
Сам шаблон более-менее универсален – подходит для большинства DAW, но не у всех удобен, т.к. surface-разрабы могут по-своему забить команды.
novation MkII-SteinbMackie.png
Не знаю, к чему припилить Crossfader (ZeRO MkII) или ModWheel с PitchBend`ом (SL MkII), но не на Master уж точно!… Хотя, наверное лучше не трогать их, пусть вместе с клавой на первом порту побудут…

Кстати, если полазить по папкам того сайта, можно найти более свежейшее: AHK_Platform_M_mods_basic_180402.zip и AHK_Platform_M_mods_basic_with_4LCD_191014.zip
 
Последнее редактирование:
В User по идее и должно быть всё пусто, т.е. должно назначаться пользователем, правда, до меня тоже так и не дошло, как туда что назначать…
У меня есть мысль, как это можно реализовать. Мои попытки прикрутить для использования Generic Remote в Кубейсе порт MIDIIN3 не увенчались успехом - с MIDIIN3 шлются сообщения постоянно вне зависимости от активированных user/fx/inst/mixer, а не только при User, как хотелось бы. Так что можно с помощью Bome запросить состояние кнопок user/fx/inst/mixer у Новейшна и при активной кнопке User (только она моргает, собака!) активировать всё то, что я наработал в собственной прослойке.
 
@Jafaroff, "с MIDIIN3 шлются сообщения постоянно вне зависимости от активированных..."
- ну, это же естественно: по третьему Порту шлётся вся та же, управляющая информация, что и по второму (только на 16-ом канале, а не на 1-ом)...
User-Mixer лишь передаёт Automap-серверу СС#72-СС#77 с диапазоном Velocity 65/64 (которые мы с вами можем вместо него использовать под свои собственные нужды).
 
Если проблема заключается лишь в том, чтобы отфильтровать команды управления так, чтобы через третий Порт они подавались в хост только при нажатой кнопке User, то я бы вначале вообще запретил прохождение данных команд в хост (непосредственно с Порта 3), а направил бы их вначале в Bidule, назначил бы в ней кнопку User на включение MIDIOutput Selector-a, и затем уже - подавал бы в хост команды с его выхода через LoopMIDI. В таком случае, при ненажатой кнопке User, хост предсказуемо не получал бы никаких команд... В Ableton подобная тактика работает.
 
Получилось.

В общем, кнопка User при нажатии шлёт BF 4A 41, на это сообщение с MIDI-порта завязал активацию своей прослойки в Bome MIDI Translator. При нажатии других кнопок FX/INST/MIXER там тоже самое, только вторые байты уже 4B, 4C, 4D - на них деактивация прослойки. Немного пришлось поскриптить ещё и тот момент, что при повторном нажатии User всё сбрасывается обратно в последнюю активную прослойку Автомапа. Кроме того, при открытии в Кубейсе плагина с Автомапом без нажатия кнопок происходит переброска в FX или INST, сперва подумал, что это всё и не получится деактивировать пользовательскую прослойку в Bome при программном переключении, но контроллер шлёт с MIDIIN3 при программном переключении 5 SysEx-сообщений (всегда одинаковые), последнее из которых:
F0 00 20 29 03 05 00 00 00 00 69 04 00 5E 00 01 00 F7
На него привязал деактивацию своей прослойки.

Всё работает.
 
  • Like
Реакции: Antonio

Сейчас просматривают