Bome MIDI Translator Pro и BomeBox

Все равно не понимаю, зачем выключать пресеты. Выключить несколько пресетов разом можно через механизм моментального таймера, но что-то это как-то... не для новичка, в общем :)
Хорошо, давайте по другому. Можно ли использовать Питч-бенд вместо MW? Хочу чтобы "пружинило":)
Полоска MW ведь не возвращает в ноль, а PB возвращает.
 
Последнее редактирование:
Питч-бенд вместо MW?
Код:
Incoming: MIDI E0 00 pp
// no rules needed here
Outgoing: MIDI B0 01 pp

Сообщения Питчбенда превратились в сообщения СС1.

P.S. Я понимаю, что ответил не по существу, но существо мне так и не удалось уловить.
Опишите на бытовом языке, или я сдаюсь. Например: я использую M32 стандартным образом (каким? как простейший миди-контроллер или через софт от NI?). Я хочу чтобы при удерживании вот это фитюлечки и при нажатии вот этой пимпочки происходило — что? А когда я отпускаю пимпочку с фитюлечкой, все должно вернуться — к чему? Или не должно вернуться а должно весь настрой перевести в другой режим? В какой? И т.д..
 
  • Like
Реакции: mcvall
@dr-music, Да это я уже зажрался:) Хочется и то и другое, не знаю зачем. Сейчас сижу назначаю основные функции. Нужно поработать в редакторе денёк-другой и понять что мне нужно. Спасибо!
 
  • Like
Реакции: dr-music
@dr-music, Добрый день. А не подскажете как настроить на энкодер (один из 8ми) эмуляцию колеса мышки? Я создал для этого 2 транслятора, на каждом на выходе указал "колесо" со значением 10 и -10. Если включать трансляторы по отдельности, работает, если включить оба - происходит конфликт туда-сюда) Какое правило нужно создать? Спасибо.
 
@mcvall, я вижу проблему, которую едва ли удастся решить. Дело в том, что внутри M32 эти восемь ручек, скорее всего, действительно энкодеры (физически, как радиодетали). Но то, что посылает M32 наружу, это, увы, сообщения СС, т.е. нечто в диапазоне 0-127. Понятно, что при помощи БТ мы можем перехватить только то, что M32 посылает наружу, а не то, что у него внутри. И поскольку у нас не настоящий энкодер, бесконечно посылающий «+1, +1, +1», или «-1, -1, -1», то колесо мышки будет ограничено диапазоном.
Пример. Мы двигаем колесо вниз, истратили путь, скажем, от СС=127 до СС=24. Потом мы перенесли мышь и снова в другом месте хотим крутить вниз. Но все, что у нас осталось, это путь от СС=23 до СС=0. После того, как и этот путь пройден, M32 при кручении «энкодера» уже ничего не посылает наружу, и превращать в колесо мыши нечего. Такие затыки будут в работе страшно раздражать, а случатся они неминуемо. Ну или придется привыкнуть к тому, что мышь нужно будет убирать от точки приложения колеса, прокручивать его в противоположную необходимой сторону, и тогда оно снова будет какое-то время работать. Честно, я бы оценил такой воркфлоу на «троечку» даже в свой самый добрый день.
Настоящим энкодером является только правая, большая крутилка на М32. Посмотрите, какие сообщения она посылает. Совсем другие.

Было бы хорошо, чтобы Вы выкладывали код сюда. Или в, крайнем случае, в личку, если у Вас в коде ноу-хау незапатентованное :) По коду мне будет проще понять задачу, которую Вы решаете, и мне не придется лезть в БТ только ради того, чтобы посмотреть, что он там от какой управлялки посылает.

Чтобы выложить быстро код, надо экспортировать проект в текстовый файл (File ► Export project as a text), открыть его в Wordpade (не в Notepade!) и скопировать нужный фрагмент на форум, обрамив тегом «вставить код» (этот тэг находится над постом — там, где многоточие со стрелочкой вниз).

P.S. Идея. Попробуйте каким-нибудь образом (например, превратив какую-нибудь ноту при помощи БТ) послать сообщение B0 0E 64 (СС14=64, т.е. примерно средняя точка) в порт M-DAW, предварительно сдвинув первый из восьми энкодеров из среднего положения. Если M32 поймет команду (в мини-окошке появится информация, что контроллер стал 64, и любой последующий поворот этой ручки даст 65, 66, 67... (или 63, 62, 61...), то тогда задача решаема. Надо придумать, по наступлению какого условия будет происходить сброс энкодера на среднее положение.
Программа Komplete Kontrol умеет сбрасывать положения всех ручек при переходе с дорожки на дорожку (с синта на синт) в DAW, но какой командой она это делает, я не знаю. Надеюсь только, что тем же самым СС, который идет от клавиатуры к программе.
 
Последнее редактирование:
  • Wow
Реакции: «G~Li†ch»
Настоящим энкодером является только правая, большая крутилка на М32. Посмотрите, какие сообщения она посылает. Совсем другие.
Да, он дает одно и то же значение при прокрутке, работает как обычная кнопка. Он у меня работает как стрелка вправо-влево.
Попробуйте каким-нибудь образом (например, превратив какую-нибудь ноту при помощи БТ) послать сообщение B0 0E 64 (СС14=64, т.е. примерно средняя точка) в порт M-DAW, предварительно сдвинув первый из восьми энкодеров из среднего положения. Если M32 поймет команду (в мини-окошке появится информация, что контроллер стал 64, и любой последующий поворот этой ручки даст 65, 66, 67... (или 63, 62, 61...), то тогда задача решаема.
Назначил ноту, только B0 0E 64 это не центр, центр это B0 0E 40 в Incoming, а на экране М32 это 64, но не важно. Нота звучит на 64. Все ок. Когда ставим B0 0E pp, эта нота звучит 127 раз, от 0 до 127.
Было бы хорошо, чтобы Вы выкладывали код сюда.
Код из правил или полностью?
 
центр это B0 0E 40
Конечно, это я подтупливаю. Я тут между тремя детьми с дистанционным обучением, только что сгоревшим детским ноутом и попытками работать...

Сейчас не буду на ходу вспоминать MIDI коды, все равно где-нибудь ошибусь. Затея вот в чем. M32 при кручении крутилок посылает СС14 — СС21. Чтобы хорошо работало колесо мыши, нужно периодически сбрасывать контроллеры на середину. Для этого надо заставить М32 понимать, что мы хотим. Поскольку полный MIDI Implementation Chart для KK-клавиатур не опубликован (и никогда не будет опубликован), то приходится действовать методом научного тыка: надо попробовать посылать сообщения СС14 — СС21 обратно из БТ в M32 (порт M-DAW, разумеется) и посмотреть, реагирует ли.

Код из правил или полностью?
Я же должен видеть, что на входе, что на выходе. Строчки вроде «Swallow event» не очень важны, но и места не занимают. И только задействованные трансляторы, разумеется. Под спойлером это никому не будет мешать.

Update: 1) Не-а, с СС у меня не получилось (cобытия с 1-й ручки M32 отправлял через БТ на вторую, меняя СС). Надо найти сообщение, которым можно внутри M32 значения ручек прописывать — если оно вообще существует. Если это при помощи SysEx делается, то поиск бесконечен.
2) При запущенном Кубе клавиатура интегрируется, и я не знаю, как отключить эту интеграцию.
 
Последнее редактирование:
  • Sad
Реакции: «G~Li†ch»
А зачем в Куб запускать?
Куб — моя родная DAW. Самый простой способ отправить контроллеры в порт M-DAW — нарисовать их в Кубе. Но интеграция с Кубом неотключаема, а M32 при запуске интегрируемой DAW переходит в другой режим и посылает другие команды. Соответственно, нарисовываются некоторые проблемы с использованием оскриптованной M32 с DAW.

Надо искать в справке, можно ли горячими клавишами на самой M32 принудительно переходить в режим «просто MIDI-контроллера».

Похожая история была, когда я Steinberg CMC-FD программировал, у них тоже «специфический» драйвер. Но там было проще — при каждом запуске Куба достаточно было заходить в Studio Setup в Кубе и отключать порты, причем сам CMC-FD в другой режим не переходил, MIDI-команды оставались теми же.
 
что это такое? и как это убрать? появилось после не помню какой инсталяции)!
 

Вложения

  • IMG_20200418_132943.jpg
    IMG_20200418_132943.jpg
    5,6 MB · Просмотры: 178
что это такое? и как это убрать?
Лучше бы поточнее задавать вопрос. А то пойди пойми, спрашивается про двадцать неведомых однотипных устройств или про один из двух с восклицательными знаками.

Bome лицензирует свой виртуальный MIDI-драйвер куче разных производителей (вплоть до Native Instruments), и эти MIDI-порты пришли с каким-то сторонним софтом (скорее всего с OrbComposer'ом), а не с BOME Транслятором. Соответственно, дальнейшее обсуждение этой темы будет здесь оффтопом.

Тут люди на аглицком обсуждают что-то похожее: https://audiosex.pro/threads/bome-midi-ports-in-ableton-live.45427/. Краткое содержание: можно задизейблить эти устройства, если не нужны. Можно удалить OrbComposer вместе с BOME-драйвером. Можно удалить только драйвер (C:\ProgramData\Bome Software\Bome Virtual MIDI\unins000.exe).
 
Последнее редактирование:
  • Like
Реакции: Vadya
Лучше бы поточнее задавать вопрос. А то пойди пойми, спрашивается про двадцать неведомых однотипных устройств или про один из двух с восклицательными знаками.

Bome лицензирует свой виртуальный MIDI-драйвер куче разных производителей (вплоть до Native Instruments), и эти MIDI-порты пришли с каким-то сторонним софтом (скорее всего с OrbComposer'ом), а не с BOME Транслятором. Соответственно, дальнейшее обсуждение этой темы будет здесь оффтопом.

Тут люди на аглицком обсуждают что-то похожее: https://audiosex.pro/threads/bome-midi-ports-in-ableton-live.45427/. Краткое содержание: можно задизейблить эти устройства, если не нужны. Можно удалить OrbComposer вместе с BOME-драйвером. Можно удалить только драйвер (C:\ProgramData\Bome Software\Bome Virtual MIDI\unins000.exe).
ок! спасибо! помогло)
 
  • Like
Реакции: dr-music
Добрый человек,хоть и не совсем по теме,подскажи пожалуйста.Есть такой пресет-WorldE-Macki-Emulation.(WorldE-миди контроллер)Меня почти всё в нём устраивает. С программой только первое знакомство да и "программист" с меня... По миди командам в этой программе в основном понятно,читаю ваши посты.Вопрос: для чего в этом пресете init? Что он инициализирует? Всегда его нужно прописывать?Был бы вам очень признателен...
 

Вложения

для чего в этом пресете init? Что он инициализирует? Всегда его нужно прописывать?
Только сейчас добрался до компа. Ездил проведать Собянина, ментов потестировать, и вот — вернулся в дачную эмиграцию.

Краткий ответ: нет, не обязательно. Собственно, этот скрипт — яркий пример того, что не обязательно: в третьем трансляторе первого пресета вообще ничего нет. Но там могло бы что-то быть, если при старте проекта требуется иметь глобальные переменные, отличные от нуля. Уже писал раньше: глобальные переменные не создаются в проекте, а только используются, все они существуют с момента запуска программы с нулевым значением. Товарищ, который сочинял этот скрипт, просто взял чужой проект, и оттуда этот первый пресет и унаследовался.

Первый транслятор — исполняется при открытии скрипта (файла) или при запуске БТ. У него во входящих так написано, никакого MIDI-события на входе для исполнения этого транслятора не требуется. На выходе у этого транслятора таймер под названием 'Init'. Имя таймера может быть любым, оно вписывается при создании таймера.
Таймеры в БТ используются в двух основных случаях. Первый — очевидный, когда нужна отсрочка исполняемого события. Второй — когда нужно на одно входящее событие запустить (после работы скрипта или без нее) несколько исходящих, ведь у каждого транслятора возможно только одно исходящее событие. В этом случае в трансляторе на выход ставится таймер, а дальше можно создавать сколько угодно трансляторов, которые запустятся от таймера с этим именем (у которых этот таймер будет во входящих) и получить сколько угодно исходящих событий. В большинстве таких случаев таймер ставится с нулевой задержкой.
Кстати, таймеры могут запускать другие таймеры, в каждом из которых могут стоять разные условия (правила).

Смотрим теперь на весь первый пресет. Первый транслятор при открытии программы/файла запускает некий одноразовый таймер с именем 'Init'. ('Once' — таймер исполнится один раз и самоубьется, таймер Infinitely можно/нужно убивать другим транслятором.) Второй транслятор запускает тот же самый таймер по другому условию — по нажатию клавиши Escape (т.е. не в начале работы, а в любой момент в ее середине, когда по каким-то причинам захотелось сбросить все значения глобальных переменных к изначальным). А третий транслятор включается при активации (чем угодно, любым другим транслятором) таймера 'Init' и перепрописывает значения глобальных переменных (в нашем случае как при открытии скрипта, так и по нажатию клавиши Escape).
Это, кстати, хороший пример оптимизации кода: несколько разных событий вызывают одно и то же действие, и вовсе не нужно создавать копии трансляторов с одним и тем же выходом. Править код так точно легче.

Я бы в третий транслятор вписал все используемые в проекте глобальные переменные и приравнял их нулю (раз в нем ничего другого и не написано, значит на старте они должны быть равны нулю). Это помогает, когда, например, при ошибке скриптования скрипт работает, пока какая-то глобальная переменная растет, а потом переменная упирается в крайнее значение и больше не растет, и скрипт начинает глючить или вовсе перестает работать. По нажатию клавиши Escape (разумеется, при активном окне БТ) я смог бы начать искать ошибку с чистого листа, как при перезапуске программы.

Как-то так.

P.S. Лучше бы на форум выкладывать не проект, а код. У меня свои скрипты работают, не хотелось бы их прерывать по не очень значительным поводам.
Чтобы выложить быстро код, надо экспортировать проект в текстовый файл (File ► Export project as a text), открыть его в Wordpade (не в Notepade!) и скопировать нужный фрагмент на форум, обрамив тегом «вставить код» (этот тэг находится над постом — там, где многоточие со стрелочкой вниз).
 
Последнее редактирование:
Спасибо за развёрнутый ответ,учусь...Последний практический вопрос: нужно управлять балансом(панорамой) одной "железяки"."Железка" (первая ручка баланса)при мониторинге выдаёт: general 1, lsb 1/11, b0 30 01 и b0 30 0b(крайне левое и крайне правое положение).Как правильно записать эту исходящую команду(команды) в трансляторе? Из "моего" прикреплённого пресета,только баланс и не управляется...Ещё раз вам спасибо,что расписали всё,читаю,изучаю по не-многу...
 
Последний практический вопрос:
Пока мои вопросы, патамушта я ничего не понял.
1) Какая железка должна управлять какой железкой? Это одна и та же железка? Если не одна и та же, то надо отдельно смотреть, а) что выдает первая железка-контроллер при кручении ручки, и б) какого управления «ждет» вторая (синтезатор?), на каком языке она поймет, что от нее нужно. Если одна и та же, то — не понимаю.
2) Там рядом с окошком MIDI-мониторинга есть кнопка «Clear». После нажатия на нее подвиньте проблемную ручку на два-три щелчка в одну сторону, потом в другую. Содержимое окна MIDI-мониторинга запринтскриньте. Если я смогу понять Ваш отчет на первый вопрос, то, глядя на картинку, возможно, смогу что-то сказать и по-второму. Я сам «программист» тот еще...
=======
Как я понял задачу. Ну вдруг угадал...
Если у ручки на первом устройстве всего 11 возможных значений (от 01 hex до 0B hex, или от 1 до 11 в десятичном изложении), а на выходе нужно получить стандартные значения СС10 (Panorama) от 0 до 127, то есть два способа.
Пишу без БТ под рукой, так что синтаксис и hex-числа надо проверить.
Табличный способ — входящих значений немного, можно тупо их перечислить (и подправить, если захочется, по ходу использования):
Входящие: MIDI B0 30 pp

Правила:
if pp==01 then tt=0
if pp==02 then tt=13
if pp==03 then tt=25
if pp==04 then tt=38
if pp==05 then tt=51
if pp==06 then tt=64
if pp==07 then tt=76
if pp==08 then tt=88
if pp==09 then tt=102
if pp==10 then tt=114
if pp==11 then tt=127

Исходящие: MIDI B0 0A tt
Арифметический способ:
Входящие: MIDI B0 30 tt

Правила:
tt=tt-1
//эта строка сдвигает возможные значения tt с диапазона 1...11 на диапазон 0...10
tt=tt*128
tt=tt/10
// Здесь еще два действия с tt: умножение на 128 и деление на 10. Проверьте, подставив
// разные входящие: если на входе 1, то на выходе после трех арифметических
// операций 0, если на входе 11, то на выходе 128. Все остальные
// значения будут посередке (если 6, то 64, и т.д.).
if tt==128 then tt=127
// У нас получился диапазон 0...128, а нужен 0...127. Исправили, сдвинув последнее значение.
// Вариант этой же строки, он уменьшает все значения на единицу, кроме первого (равного нулю):
// if tt!=0 then tt=tt-1
// Ну или еще такой вариант: if tt>64 then tt=tt-1
// он сдвигает на единицу все значения больше 64 (середины).

Исходящие: MIDI B0 0A tt

Оба способа, разумеется, не дадут настоящих 128 значений. Если jpg-картинка уже ужата до размера 100*100 пикселей, то плакат с нее не напечатать...
 
Последнее редактирование:
С помощью контроллера Korg Nano control мне нужно рулить программный микшер MOTU 828 MK2 (звуковая карта,миди интерфейс коей работает в Mackie control), естественно используя транслятор. Соответственно предварительно миди сигнал с MOTU подал на вход транслятора,что-бы крутя и двигая ручки программного микшера MOTU посмотреть какие миди команды выходят из карты(даже выписал отдельно). Короче с вышеупомянутым пресетом почти всё совпадает и прекрасно работает, кроме регулировки баланса(изменяется скачкообразно).Понятно, что Mackie control это двухсторонний обмен данными,да ещё и секретный...Ну хотя бы так работало,и то сносно. 8 ручек баланса в программном микшере MOTU,первая из которых и выдаёт: general 1, lsb 1/11(это должен впоследствии отправить транслятор в MOTU,чтоб изменять баланс) а вот как вписать такую исходящую команду и чтоб правильно без скачков вращался баланс...Не простой этот транслятор для простого пользователя,хотя программа безусловно хороша.Если не получится ничего с этим транслятором,перейду на эмулятор Mackie control -Touch Daw.Программа под андроид,с управлением по WiFi секвенсорами и железками (с предварительной настройкой).Попробовал-полностью управляет моей картой.Тем не менее хотелось бы разобраться всё таки с этими lsb...Задача,при вращении ручки на контроллере Korg, получить на выходе транслятора general 1, lsb 1/11... Правило в "моём" пресете для "исходящего баланса"
if pp<64 then Goto "Down"
if pp>64 then Goto "Up"
Label "Up"
pp=pp-64
exit rules, execute Outgoing Action
Label "Down"
pp=pp+64
exit rules, execute Outgoing Action
Вот с ним и не работает...
 
Последнее редактирование:
Разобрался!!! Нужно отправить в MOTU General Purpose Controller. А какой номер этого контроллера я не знал...(миди транслятор не показал при мониторинге номер контроллера,пользуюсь пиратской версией 1.7.2 транслятора). Вот тут всё и прояснилось: http://www.musicforums.ru/klavishnik/1408265219.html. Т.е. первые 4 ручки баланса General Purpose Controller будут иметь номера с 16 по 19. Назначаем в Korg nano control эти номера на первые 4 кноба (с параметрами 1-11,вместо 0-127), а в трансляторе делаем так, что-бы приходящий с Korg nano control-General Purpose Controller проходил насквозь через транслятор без изменений и всё будет работать.Прошу прощенья,сбил вас с толку и сам запутался.Тем не мене ваши ответы бесценны,поскольку знаний по транслятору ну совсем мало...
 
Последнее редактирование:
Нужно отправить в MOTU General Purpose Controller. А какой номер этого контроллера я не знал...(миди транслятор не показал при мониторинге
БТ даже теоретически не может показать (предсказать) какое сообщение требуется на выходе, тут дело не в пиратке. Это пользователь должен (откуда-то) узнать, на каком языке разговаривает управляемое устройство, а БТ поможет сконвертировать сообщения, поработать переводчиком.
Рад, что у Вас все заработало :)
 
@dr-music, Добрый вечер. А как у них там покупка происходит? Оплачиваешь и они дают ссылку на файл и ключ в виде цифр?
 
Оплачиваешь и они дают ссылку на файл и ключ в виде цифр?
Ключ — именной (по сути — текстовый) файл, который должен лежать в правильной директории. Механизма активации «запрос — ответ» нет. Сколько раз файлик скопируешь, на такое количество машин и поставишь. Конечно же, если нет пиратских планов, лучше писать свои настоящие имя-фамилию. В остальном же это самая обычная покупка.
-----
Я бы попытался узнать, когда выйдет БТ 2.0 (у меня такой информации нет). Примерно в то же время, когда проходила NAMM-2020, был утвержден стандарт MIDI 2.0, а Флориан Бомерс (автор БТ) активнейший участник всей этой MIDI 2.0 движухи. Пора уже ему новую версию выкладывать с поддержкой нового стандарта, он обещал. Короче, если это вопрос месяца-двух, то было бы хорошо в грейс-период попасть.
 
Steinberg CMC-FD + Bome MIDI Translator Pro = generic MIDI-controller

213257


Этот пост может интересен прежде всего владельцам контроллера Steinberg CMC-FD, а также всем, кто интересуется написанием своих скриптов в программе Bome MIDI Translator Pro. Пост, конечно же, немного устарел — эти замечательные контроллеры давно уже не производятся Yamaha/Steinberg. Но мне необходимо было потерять почти все свои композиторские и аранжировочные заказы в эту дивную к'овидную эпоху, чтобы найти время на окончательную отладку скриптов, на написание мануала, на то, чтобы перевести его на английский. Впрочем, контроллер настолько компактный, удобный в дороге и неубиваемый, что может заменить кучу других контроллеров.

Кратко: при помощи скриптов, написанных в программе Bome MIDI Translator Pro, CMC-FD был превращён в generic MIDI-контроллер. Он теперь работает с любой DAW. Он умеет посылать пару десятков различных сообщений Control Change, умеет работать ПитчБендом с расширенным функционалом, умеет эмулировать нажатие клавиш компьютерной клавиатуры и вращение колеса мыши. После предварительной настройки программа Bome MIDI Translator Pro работает в фоновом режиме, практически весь функционал можно вызвать с самого контроллера.
Изначально мною было написано два скрипта с разным функционалом, которые исполнялись на двух контроллерах, но позже я нашел способ объединить оба скрипта в один, и сейчас этот скрипт умеет работать и на двух контроллерах, и на одном-единственном.

Скрипты распространяются бесплатно и «как есть». Делайте с ними, что хотите — переписывайте, ломайте, используйте частично или целиком для написания музыки или своих скриптов. Если вам понравилась работа скриптов, я не буду против небольшого доната.

В архиве по ссылке находятся три файла:
— CMC-FD x2.bmtp
— CMC-FD x2 Manual (English).pdf
— CMC-FD x2 Manual (Russian).pdf

У кого есть друзья — обладатели такого контроллера, проинформируйте их. Небесполезная вещь получилась, а теперь ещё и с более-менее нормальным мануалом.
 
  • Like
Реакции: Musicman3 и Antonio
Апдейтик долгожданный, наконец-то HiDPI поддерживается.

Version 1.9.1
Minimum OS versions: Windows 7, macOS 10.10

New Features
New Action: Perform: Directly trigger Incoming Actions from an Outgoing action and pass parameters along.
Rules: ELSE statement: an alternative path for IF statements, and can combine with ELSE IF.
HiDPI support (high resolution look & feel), with option to scale the entire user interface. Either OS default or a custom zoom up to 300%.
 

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