Reason MIDI Remotecodecs

  • Автор темы Автор темы ljekio
  • Дата начала Дата начала

ljekio

хоныч
11 Дек 2007
5.837
6.908
113
51
Toksova
soundcloud.com
Небольшой тутор (и несколько кодеков моей работы) для тех, у кого миди-контроллер не имеет готового пресета в Ризоне (который можно выбрать во вкладке Keyboards & Controls Surface), или он есть, но охота поменять дефолтные значения.

Возьму пример моего Korg padKONTROL, в нем мало крутилок, объяснять проще.
Его не было в заводских установках Ризона, поэтому я решил сделать свой.

Для начала идем в эту папку:
c:\Documents and Settings\All Users\Application Data\Propellerhead Software\Remote\
В Висте (и, наверное, в w7) путь немного отличается от ХР, но, думаю, разберетесь.

Сперва заходим в Codecs\MIDI Codecs\ (есть еще lua codecs, но я с ними еще почти не разбирался).
Берем любой ближайший к вашему устройству шаблон с расширением *.midicodec и открываем в любом текстовом редакторе.

Видим это:

Код:
Universal MIDI Codec Control Surface Definition File
File Format Version 1.0.0
Control Surface Manufacturer [B]Korg[/B] // - изготовитель вашего прибора
Control Surface Model [B]NAME[/B]
Codec Version 1.0.2

Тут ничего особоважного, кроме фирмы-изготовителя и NAME - это название вашего прибора, которое должно совпадать с названием картинки и папки в другой директории, о которой поговорим позднее.

Код:
Setup Info Text X - Pitch Wheel
Setup Info Text Y - ModWheel

Здесь после секции Setup Info Text можно писать все что угодно, оно будет отображаться в меню выбора вашего девайса.

Далее интереснее:

Код:
Item Header	Name	Type	Min	Max
Item	Keyboard	keyboard	0	127
Item	X	value	0	16383
Item	Y	value	0	127
Item	Pedal	value	0	127
Item	Knob 1	value	0	127
Item	Knob 2	value	0	127
Item	User 1	button	0	1
Item	User 2	button	0	1
Item	User 3	button	0	1
Item	User 4	button	0	1
Item	User 5	button	0	1

Разберем построчно:
Item Header Name Type Min Max // это шапка, ничего не трогаем
Item Keyboard keyboard 0 127 // если у вас есть клавиатура или дрампэды, которые выполняют функцию midi note, то эта строчка необходима
Item X value 0 16383 // параметр Х корговского ХY-контроллера, т.к. контроллером там стоит питч-бендер, поэтому значение такое большое, а не 127. Но можно поставить 127 и использовать любой CC контроллер.
Item Y value 0 127 // параметр Y корговского ХY-контроллера, у меня это ModWheel.
Item Pedal value 0 127 // внешняя педаль, она может быть как контроллером, так и нотой, у меня контроллер.
Item Knob 1 value 0 127 // крутилка 1
Item Knob 2 value 0 127 //крутилка 2
Item User 1 button 0 1 - эти 5 кнопок - Global Messages моего Корга, это могут быть кнопки на вашей клаве или контроллере.

Немного о синтаксисе.
Ризон довольно строг к синтаксису и при любом неверном символе - кодек просто не отобразится в списке.
В каждой строчке разделения между Item Header Name Type, итд - не пробелы, а табуляция Причем их может быть две или три, так что лучше копировать промежутки из готовых шаблонов.
Item Header - любое имя, в имени как раз не должно быть табуляций, только пробел (если надо).

Переходим к назначениям.

Код:
Map Header	Pattern	Name	Value1	Value2	Value3  // тоже шапка.

Если у вас выше использовался тип keyboard, то добавляем эти строчки (подробнее про них напишу, если кто спросит):

Код:
Map	9? xx 00	Keyboard	0	x	64
Map	8? xx yy	Keyboard	0	x	y
Map	9? xx yy	Keyboard	1	x	y

Далее, контроллер питч-бендера. Это не стандартный СС, поэтому строка выглядит так:

Код:
Map	e? xx yy	X	y * 128 + x	0	0

Затем идут контроллеры, Control Change Messages, коих по миди-протоколу 128:
Код:
Map	b? 01 xx	Y	x	0	0
Map	b? 40 xx	Pedal	x	0	0
Map	b? 0b xx	Knob 1	x	0	0
Map	b? 07 xx	Knob 2	x	0	0

Контроллеры вводятся в шестнадцатиричном формате, просто узнайте номер своего контроллера, а потом в виндовом калькуляторе введите это число, и переключитесь на hex.
У меня используются 01, 64, 11 и 07 соответственно.

Дальше - кнопки.
У мидиклав часто имеются пресетные кнопки, посылающие сообщения формата Program Change.
Я забил в Global своего Корга пять штук (из пяти юзерских).

Код:
Map	c? 00	User 1	1	0	0
Map	c? 02	User 2	1	0	0
Map	c? 03	User 3	1	0	0
Map	c? 04	User 4	1	0	0
Map	c? 01	User 5	1	0	0

Все, наш файл готов, сохраняем его под именем padKONTROL.midicodec
Если хотите, найдите/сделайте картинку своего девайса в .png формате и вставьте ее в ту же папку под тем же именем.

Продолжение про маппинг напишу завтра (а так же выложу файлы примеров), там объяснять легче, а трудов больше.

UPD:
Если в вашем случае кнопки работают как СС, а не PC, тогда вводить их подобно крутилкам, с номером контроллера в хексах:

Код:
Map	b? 15 xx	User 1	x	0	0
Это назначен #CC 21 на выбранную кнопку User 1.
 
Последнее редактирование:
  • Like
Реакции: MaximuS
Продолжаем.

Далее все интересней.
В папке c:\Documents and Settings\All Users\Application Data\Propellerhead Software\Remote\ лежит папка maps, заходим в нее.
Смотрим на множество папок в ней и ищем производителя (или создаем отдельную папку с производителем).
Не забудьте сверить название папки производителя со строкой из вашего файла .midicodec - строка Control Surface Manufacturer.
В этой папке создаем файл с расширением .remotemap, а имя - из следующей строки файла мидикодека - Control Surface Model.
В моем случае - это padKONTROL.remotemap.

Условности соблюдены, переходим к вкусному.

Берем опять таки ближайший файл к требуемому или создаем пустой, опираясь на нижеследующие пояснения.

Код:
Propellerhead Remote Mapping File						
File Format Version	1.0.0					
Control Surface Manufacturer	Korg
Control Surface Model	padKONTROL
Map Version	1.1.2
Тут по аналогии с предыдущим файлом - важно имя девайса и производителя.

Далее идут назначения собственно на девайсы Ризона.
Они все устроены одинаковым образом.
Разберем Мастер-секцию.

Код:
Scope	Propellerheads	Master Keyboard			

//	Control Surface Item	Key	Remotable Item	Scale	Mode

Map	Keyboard		Keyboard		
Map	X		Pitch Bend		
Map	Y		Mod Wheel		
Map	Pedal		Damper Pedal 
Map	Knob 1		Expression
Правила синтаксиса здесь такие же, следим за табуляциями.
Тут видно, что я назначил клавиатуру (пэды), ХY контроллер и крутилку с педалью.
В строке Scope Propellerheads указывается название девайса Ризона, В котором мы назначим наши контроллеры.
Все это будут лишь дефолтные установки при создании нового девайса, а для каждого отдельного случая можно переназначать в режиме override remote mapping в самом Ризоне.
В колонке Control Surface Item указываем имя нашего контроллера, которое мы присвоили в предыдущем файле, в колонке Key - назначение в девайсе (их разные варианты можно подсмотреть в других кодеках, или прочитать имя крутилки во всплывающем хинте при наведении мыши на крутилку).

Код:
Scope	Propellerheads	Combinator
//	Control Surface Item	Key	Remotable Item	Scale	Mode

Map	Knob 1		External Controller
Map	Knob 2		Rotary 4
Map	User 1		Select Previous Patch		
Map	User 5		Select Next Patch
Здесь я присвоил Комбинатору удобные мне назначения, должно быть все понятно и без вопросов.

Интересные вещи происходят с девайсами, у которых множество крутилок - как их назначить если на приборе физических контроллеров куда меньше?
Можно делать, например, сцены, как на nanoKONTROL, а можно воспользоваться встроенной возможностью создания групп шорткатов.
Так как в файле padKONTROL мне это не было нужно, разберем пример из nanoKONTROL.
Сперва определим кнопки, которые будут листать эти группы.

Код:
Scope	Propellerheads	Reason Document			
//	Control Surface Item	Key	Remotable Item	Scale	Mode
Map	Button U9		Select Previous Keyboard Shortcut Variation
Map	Button L9		Select Next Keyboard Shortcut Variation

Здесь я присвоил двум крайним правым кнопкам наноконтрола листание групп.

Смотрим минимикшер:

Код:
Scope	Propellerheads	Line Mixer 6:2
Define Group	Keyboard Shortcut Variations	Pans	Sends
//	Control Surface Item	Key	Remotable Item	Scale	Mode	Group

Map	Knob 1		Channel 1 Pan			Pans
...
Map	Knob 1		Channel 1 Aux Send			Sends
...
Тут я на одну крутилку повесил две разные функции.
Строка Define Group Keyboard Shortcut Variations определяет сколько групп шорткатов и как они называются. В моем случае это группы Pans и Sends.
Соответственно, после назначения вводится название требуемой группы и дело в шляпе.

Кстати, в Рекорде та же система, к тому же, установка беты потерла все мои кодеки, так что будьте осторожны и сохраняйте их для надежности где-нибудь еще.

Осталось приаттачить мои файлики с примерами - это файлы padKONTROL и nanoKONTROL, а так же пресеты для корг-эдитора.
В padKONTROL надо будет загрузить приложенную сцену и глобал-дата.

nanoKONTROL использует lua кодек, его установил Рекорд, но я не стал его менять на миди-кодек, лишь отредактировал его так как мне было надо.
Он при первом запуске попросит перезаписать 1 сцену, после этого вы в корг нано эдиторе выберите приаттаченный сет.

Успехов.
 

Вложения

Последнее редактирование:
Несколько Remote-файлов

В зипе находятся мои свежие файлы кодеков для контроллеров:

Korg padKONTROL
Behringer FCB 1010
AKAI EWI (ну просто для красоты)))

Что имеем:

Behringer FCB 1010:

Remote codec для фабричных пресетов непрошитой UnO FCB 1010. Т.е. принесли из магазина и сразу пользуем. Используются 00, 01 и 02 заводские пресеты (которые, как известно, последовательно передают сообщения типа Program Change).
00 preset: Используется для различных переключателей на дивайсах Reason/Record), 8 и 9 кнопка как правило листает патчи в дивайсах, а 10я - tap tempo.
01 preset: Если кнопок в дивайсе оказалось больше, чем у нас на контроллере (более 7ми), тогда используется пресет 01, так же, в главном секвенсере Reason/Record включает-выключает режимы loop, auto-quantize и precount.
02 preset: Транспортная панель (кнопки 1<->5), пред./след. трек секвенсера (кнопки 8<->9) и New Overdub/New Alt Take (6,7).


Korg padKONTROL:

X - Pitch Bend (PB)
Y - Modulatoin (CC1)
Knob 1 - Expression (CC11)
Knob 2 - Volume (CC7)

Global data:
User 1 - PC 00 (prev patch)
User 5 - PC 01 (next patch)
User 2 - PC 02 (alternate take)
User 3 - PC 03 (prev track)
User 4 - PC 05 (next track)

Чтоб использовать глобал дата, необходимо установить файл с этим через редактор пресетов пэдконтрола. (в архиве)
 

Вложения

Кодек для Novation SL ReMOTE MkII

Нарисовал ремотекодек для Novation SL ReMOTE MkII как альтернативу использованию автомапа.
Работает только в advanced mode, не automap.
Для удобства есть пресеты для SL MkII Editor'a с проименованными контроллерами в соответствии с выбираемым инструментом Ризона/Рекорда.
На каждый инструмент получается отдельный пресет для SL MkII.

Кодек в стадии тестирования, загрузил все недостающие темплейты (16 штук) и исправил ошибки.
 

Вложения

Последнее редактирование:
  • Like
Реакции: Kunzat и IV22
Добрый день.

спасибо большое автору за проделанную работу и описание процесса.

подскажите пожалуйста, у меня миди контроллер behringer cmd dv-1. ризон 12 видит его с этим все ок, кнопки работают, но энкодеры при вращении делают 1 шаг и на этом всё.
насколько я понимаю, необходимо прописать для них диапазон и чувствительность, как я это делал при мэппинге в тракторе, только используя ремоут?

правильно я все понял и получится ли заставить энкодеры работать как надо?

прошу вашего совета как опытного пользователя.

хорошего вам дня!
 
подскажите пожалуйста, у меня миди контроллер behringer cmd dv-1. ризон 12 видит его с этим все ок, кнопки работают, но энкодеры при вращении делают 1 шаг и на этом всё.
Я не нашел специальный кодек для этого бехра в ризоновском комплекте.
Как ставили его?
1 шаг - должно быть поправимо (симптом бывает когда энкодер назначен на кнопку)
Но нужны подробности.
 
  • Like
Реакции: Kunzat
спасибо за ответ.

ставил просто подключив по усб.
после включения в закладке миди он его отображает внизу как устройства не требующие настройки. см скрин

специального я тоже не нашел, собираюсь под него писать сам.

энкодер назначал на крутилку, а не на кнопку. но ведет себя так же как если не меппить его в тракторе. пока не задаш чувсвительнось работает так же т. е. 1-2 шага и всё.

в теории как я понимаю над просто ему дипазон и шаг крутилки прописать в кодеке. создать новое устройство и подрубать с кодеком и ремоутом и так все должно зараработать.

ведь насколько я понял за сутки копания темы с ремоут можно это все закодировать.
 

Вложения

  • IMG_20210716_113947_180.jpg
    IMG_20210716_113947_180.jpg
    97,9 KB · Просмотры: 120
Можно попробовать добавить вручную стандартный, нажав кнопку add manually и выбрав в списке other midi controller и назначить уже в нем.
 
  • Like
Реакции: Kunzat
тоже пробовал, пробовал и доступные берхи в списке ризона ничего не помогло. видимо с энкодерами трабл т. к. они бесконечно вращающиеся и им надо добавить от и до.
я читал что посредством ремоута можно подрубить и разметить то чего нет в стандартном наборе ризона. у вас был такой опыт?
 
тоже пробовал, пробовал и доступные берхи в списке ризона ничего не помогло.
Остановимся на этом. Что именно пробовали? По шагам.
Я с безупорными энкодерами в основном на новейшне, а там автомап. Даже не помню, когда мудрил advanced mode (из этого топика) как вели себя энкодеры в моем кодеке. Если будет время - гляну. Мне кажется, все должно решаться диапазонами.
А кстати, есть редактор для пресетов самого бехра? Может там выставлено что-то типа -1 +1?
В любом случае, вслепую и не зная прибора, невозможно что-то определить.
 
  • Like
Реакции: Kunzat
да да все верно, у меня такой же новейшн как у вас, автомап чудесен. у берингов нет такого, я во всяком случае я не нашел.
вслепую конечно невозможно разобраться этим я займусь.

по шагам делал по классике
1 врубил девайс в усб
2 запустил ризон
3 пошел в преференс запустил поиск миди, на всякий, ризон ничего не нашел.
4. в окошке что на скрине выше девайс виден как изи миди ризоном.
5. открыл рек, добавил окторекс, на кнопку громкости правой кнопкой, добавить управление в открывшемся окне с чекбоксом лёрн видим что при вращении энкодера есть сигнал и автоопределение девайса и энкодера, зелёный прогресс барр реагирует. нажимаем ок назначаем.
6. крутим и видим как ручка громкости окторекса делает 2-3 шага.
7. назначаемые кнопки работают ок как надо беда ток с энкодерами.

скорее всего все именно так как вы пишите там по умолчанию подхватывает - 1 +1. на следующей неделе засяду, выложу тут то что получится. Спасибо вам за поддержку!
 
3 пошел в преференс запустил поиск миди, на всякий, ризон ничего не нашел.
Не надо поиск, нужно нажать add manually
А там в списке выбрать <other> midi controller

Второй вариант - попробовать написать собственный кодек.
 
  • Like
Реакции: Kunzat
да добавить мануал тоже делал, так что остаётся только второй вариант
 
Доброго дня, приступил к работе над кодеком, я так понима, что именно там можно задать диапазон крутилок.
План такой :
1. Взять стандартный кодек для клавиатуры MIDI Keyboard.midicodec
2. В нем попробовать изменить параметры 1й крутилки чтобы увидеть результаты
3. Переписать остальные крутилки.

По процессу:

5. У меня винда 10 указанные папки лежат у меня тут:
C:\Program Files\Propellerhead\Reason 12\Remote\DefaultCodecs\Midi Codecs
C:\Program Files\Propellerhead\Reason 12\Remote\DefaultMaps

Но в 10 ке теперь это добро надо складывать тут C:\Users\***username****\AppData\Roaming\Propellerhead Software\Remote
внутри по умолчанию пусто , поэтому создаем дефолтные папки как в программ файлз и там уже кладем свои кодеки и мэпы, тогда ризон начинает их видеть.

6. по мой проблеме нашел такой мануал https://www.soundonsound.com/techniques/hacking-remote-files-reason

в нем конкретно это:

Map b? 0a xx Knob 1 x 0 0
The three hex MIDI data entries represent the MIDI Channel, Control number, and Control value from knob one. The '?' is a wildcard value, and in this case tells Reason to ignore the MIDI channel. The second value (0a) is the controller number, telling Reason that the knob transmits Controller 10 (the decimal equivalent of 0a). The third value is the value representing the knob's position. This has been written as 'xx', because it is a variable: ie. this value will change from one message to the next as you turn the knob. The next entry in the line is, obviously, the name of the hardware control. The final three values determine what is going to be sent to Reason. In the example, we have a single value 'x', which simply means that the 'xx' value in the message is passed on to Reason. You could have Remote pass on something different, such as a constant (for example,1), or a function (for example, try 128 x), but a simple 'x' is the most common case for knobs and faders.

7. Теперь собираюсь начать эксперименты со значениями крутилок. Буду обновлять пост, может будет кому полезно.
Автора треда прошу если что направлять меня ибо у вас больше опыта =)
 
ура, стало понятно что через кодек можно управлять физикой крутилок , но вот тут уже попрошу помощи автора ибо не могу понять как задавать им параметры, методом тыка не получилось заставить плавно ходить
Map Header Pattern Name Value1 Value2 Value3
Map b? 14 xx CC 20 x 0 0

перечитывая ваши описания и описания их статьи не могу сделать =( так что прошу вас о помощи
 
К вечеру победил это дело =)

Итого:

1. Забиваем на кодеки и идем сюда https://developer.reasonstudios.com/downloads/other-products
это связано с тем, что пропеллеры не поддерживают и не развивают тот формат кодеков, перейдя на новый на языке ЛУА.

2. Качаем оттуда SDK в котором в папке докс лежат : мануалы и примеры готовых шаблонов. Там же находится тестер для работы, он оказался очень полезен т.к. чтобы увидеть вносимые в код изменения надо перезапускать ризон а это гиморно.

3. Читаем мануал, за основу взял акаи ЛДП8 ибо там мало кода и подключен Мэппинг. Из готовых решений забрал код под энкодер:
{name="Encoder 1", input="delta"},
{pattern="b? 50 <???y>x", name="Encoder 1", value="x*(1-2*y)"},

4. Подставил в акаи, в тестере обнаружил что у меня отрицательный шаг больше на 15 пунктов , начал играть с формулой. С математикой у меня не очень но в результате получил вот это

{pattern="b? 40 xx", name="Knob 1", value="(x-64)*(1-2*(y-4))"},

меняя значения в формуле можно регулировать шаг поворота энкодера.

5. В ближайшие дни займусь индикацией, которой тоже можно управлять . Как описано в доке аппаратам с дисплеями можно и инфу в них назначать, так же и для пультов с механическим откликом. Короче можно всё было бы желание =)
 
за основу взял акаи ЛДП8 ибо там мало кода и подключен Мэппинг. Из готовых решений забрал код под энкодер
Вот это верный метод. Я тоже, абсолютно не шаря в луа, брал готовые кодеки от других устройств и переписывал для себя. Там, где начинается жосткий и непонятный программинг, как в том же автомапе, приходилось притормаживать, но базовые функции получать удавалось. Так что хорошо, когда у нас есть примеры :)
Еще рекомендуетя иметь какой-нибудь миди-монитор типа midi-ox, чтобы смотреть наглядно, что именно посылает сам контроллер и в каком формате.
 
  • Like
Реакции: Kunzat
да я его ставил но мне хвfтило midiview а потом в самом тестер от ризона, входящем в состав СДК оказалось есть встроенный. Они молодцы что все предусмотрели для разрабов. С ним дело пошло куда как быстрее чем после каждого изменения кода для получения результатов приходилось перегружать ризон. Сегодня займусь индикацией.

Спасибо вам за поддержку. Без вашей статьи вряд ли вообще додумался что так можно =)
 
Коллега прошу о помощи =)

Пытаюсь вывести индикацию кнопок

Код:
function remote_init(manufacturer, model)

    if model=="In Control II" then

        local items={

            {name="Button 1", input="button", output="value"},

        }

        remote.define_items(items)

    else

        local items={

            {name="Button 1", input="button"},

        }

        remote.define_items(items)

    end



    local inputs={

        {pattern="9? 5c ?<???x>", name="Button 1"},

    }

    remote.define_auto_inputs(inputs)



    if model=="In Control II" then

        local outputs={

            {name="Button 1", pattern="90 5c 0<000x>"},

        }

        remote.define_auto_outputs(outputs)

    end

end



function remote_probe(manufacturer,model)

    if model=="In Control II" then

        return {

            request="f0 7e 7f 06 01 f7",

            response="f0 7e 7f 06 02 56 66 66 01 02 ?? ?? ?? ?? f7"

        }

    else

        return {

            request="f0 7e 7f 06 01 f7",

            response="f0 7e 7f 06 02 56 66 66 01 01 ?? ?? ?? ?? f7"

        }

    end

end

конопка шлет при нажатии 86 24 00 при отпуске 96 24 7F

слуйчайно мне сегодня как-то удалось ее зажечь но повторить к сожалению так и не удалось ....

может проходили через это ?
 
Я, честно говоря, не понимаю, зачем там условие выставлено.
И еще не знаю, почему у вас кнопки привязываются не к контроллерам, а к клавиатурным сигналам (9? - это клавиатура любого канала, если нужен канал определенный, то ставится нужная цифра в хексах). Обычно кнопки привязывал либо к СС (указывается b?), либо к PC (program change, указывается c?)
Хм, посмотрел миди мап этого бехра, действительно, кнопки зачем-то на клавиатурные ноты завязаны...

Попробуйте так (это пример для одной кнопки под ноту С2, которая на нижнем левом пэде 1. Номер ее 36, в хексах стало быть 24):

Код:
function remote_init()

local items=

{
  {name="Pads", input="keyboard"},
  {name="Button 1", output="value", min=0, max=127},

}

remote.define_items(items)

local inputs=

{
{pattern="<100x>? yy zz", name="Pads"},

}

remote.define_auto_inputs(inputs)

local outputs=
        {
      
        {name="Button 1", pattern="9? 24 xx"},
            
        }
    remote.define_auto_outputs(outputs)

end

Сохранена отдельно функция клавиатуры (в данном случае названа Pads)
Кнопка Button 1 как отдельная кнопка не работает, работает только как нота, но при этом должна подсвечиваться.
И remote_probe я обычно удаляю, так как не умею этим пользоваться :)

Вероятная проблема - кнопка будет зажигаться (и выдавать ON) только в нажатом состоянии, а при отпуске тухнуть.
Если там есть редактор патчей, я бы перебил все кнопки на CC или PC (кроме нижних 16-ти пэдов)
 
  • Like
Реакции: Kunzat
п.с сорри, я по миди мапу cmd dс-1 смотрел, там ноты другие.
Правильная нижняя левая это G#6, тобишь 92, тобишь 5C
 
  • Like
Реакции: Kunzat
Доброго дня!
Итак , в пятницу я его все же победил. И дело было не только в коде, но и в методах тестирования и проверки. Начну по порядку.

В моем случае отработала вот такая модель:

Код:
function remote_init(manufacturer, model)

    if model=="In Control II" then

        local items={
            
            {name="Encoder 1", input="delta", output="value", min=0, max=127},

            {name="Button 1", input="button", output="value"},
            
        }

        remote.define_items(items)

    else

        local items={

            {name="Encoder 1", input="delta"},

            {name="Button 1", input="button"},
        }

        remote.define_items(items)

    end



    local inputs={

        {pattern="b? 14 xx", name="Encoder 1", value="(x-64)*10"},
        {pattern="96 14 ?<???x>", name="Button 1"},
    }

    remote.define_auto_inputs(inputs)



    if model=="In Control II" then

        local outputs={

            {name="Encoder 1", pattern="b6 14 0x", x="enabled*(value/10-63)"},
            {name="Button 1", pattern="96 14 0<000x>"},

        }

        remote.define_auto_outputs(outputs)

    end

end

Она отличается от примеров указанных в мануале только паттернами и формулами. Их я подставлял перебирая примеры из других кодеков и того же мануала. Но если немного почитать доки по принципам работы миди можно и разобраться в них и понять кто что вызывает.

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

Для индикации, согласно мануалу мы должны иницировать второй интерфейс аппарата для работы в 2 стороны - посыл/возврат. Т.е. у нас как бы 2 контроллера, если я правильно понял.

204661


Моя ошибка была в том, что когда я включал контроллер в тестере или ризоне, я по привычке включал In Control а не In Control II %) поэтому и не видел результатов

204662


т.е. при выборе 1го кнопки и крутилки работали, но без подсветки и любого признака ее присутствия.

По итогу все работает. Прикладываю свой кодек для Behringer CM DV-1 для Reason. Может кому пригодится. Нижние кнопки не стал оставлять как пэды или клавиатуру, не очень это мне показалось удобным. Зато я нашел им применение в качестве паттерн переключателя, разметив их просто кнопарями.. Паттернами пользуюсь часто, собственно этот контроллер и брался чтоб, работать в поездках только с кнопками и безупорными энкодерами коих на нем благодаря fx и а б ц д предостаточно.

Итого:
Благодаря луа можно переписать под себя любой контроллер или прицепить к ризону то что он не поддерживает.
Автору этой темы огромное спасибо за освещение данной темы, по которой очень мало инфы на английском и вообще нет на русском.
Так же большое спасибо за поддержку в процессе моих потуг =)

PS
Если напишу под него маппинг то дополню свой пост.

Всем удачи и главное не сдаваться!
 

Вложения

  • Like
Реакции: ljekio

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