Управление FS через MIDI — Железо и программы

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

Т.к. я занимаюсь музыкой, есть у меня такой девайс Novation Remote Zero SL: (девайс)
Отличная штуковина, которая позволяет контроллировать практически любой VST-инструмент по MIDI и через собственный интерфейс. В распоряжении: 32 кнопки + 8 падов, 16 крутилок (knobs), 8 ползунков. Но главное преимущество, что у него есть два здоровых экрана, где высвечиваются функции назначенные контроллерам. Появилась идея прикрутить его к симу. Погуглил, полазил по форумам, и вобщем у меня получилось!

Настроил ползунки для управления двигателями, тормозами, спойлерами, закрылками. Ручки вместо педалей, а также настроек автопилота, кнопки назначил на все функции которые могут понадобиться во время полета. Теперь не надо сворачивать руки в узел, пытаясь одновременно держать джойстик и крутить мышкой. Более того, провожу полеты, не касаясь клавиатуры и мыши вообще.

Что мне понадобилось: эмулятор джойстика PPJoy, программа конвертации MIDI в сигналы джойстика — GlovePIE. После этого, большинство функций могут быть назначены напрямую на оси и клавиши в FS. Для всего остального (например в некоторых панелях некоторые вещи невозможно сделать никак иначе кроме кликов мышью) я сделал программку собственной разработки в Visual Basic, чтобы эмулировать клики мышкой и нажатия на клавиши внутри FS через FSUIPC.

Таким образом подсоединить в симу можно практически любое MIDI-устройство!

На этом откланяюсь. Если кому интересно, расскажу во всех подробностях.

Прикрепленные изображения

  • Photo-0007_1.jpg

Сообщение отредактировал xdye: 21 Декабрь 2010 — 04:13

Ответов: 9

На мой взгляд дорого как-то. Пульт нужен подешевле :)

INeoN (26 Апрель 2010 — 16:24) писал:

На мой взгляд дорого как-то. Пульт нужен подешевле :)

Так пульт-то для музыки приобретался, а не для сима.
Этот пост не рекомендация пульта, он о возможности подсоединить некое МИДИ устройство к FS :)

flugzug (26 Апрель 2010 — 19:05) писал:

ну поведайте нам как сделали.
кстати Сайтеки да и другие наверное джойстики можно использовать для написания музыки
например в Fruty Loops трансгейты крутить.

Угу, помню на форуме mixgalaxy кто-то предлагал рулём скретчить в FL. :)

ну поведайте нам как сделали.
кстати Сайтеки да и другие наверное джойстики можно использовать для написания музыки
например в Fruty Loops трансгейты крутить.

flugzug (26 Апрель 2010 — 19:05) писал:

ну поведайте нам как сделали.
кстати Сайтеки да и другие наверное джойстики можно использовать для написания музыки
например в Fruty Loops трансгейты крутить.

Да, через GlovePIE можно конвертировать сигнал от любого устройства в MIDI туда-обратно и использовать в т.ч. во фрути лупс :)

Теперь подробнее, что и как. Действовал методом проб и ошибок.

Сначала я поставил эмулятор PPJoy. Эта программа создает виртуальные джойстики в системе. Для Novation Remote Zero требуется эмуляция как минимум двух, т.к. лимит осей на одном джойстике — не больше 8ми, а тут их целых 24. С кнопками проще. Их может быть очень много, кажется 32 или 64 на одном джое. Но в итоге я сделал эмуляцию аж сразу трех, чтобы не заблудиться в номерах кнопок.

на одном создал 8 осей для ползунков + 16 кнопок (на фото в правой части контроллера)
на втором — оси для 8-ми верхних вращающихся ручек и 8-ми кнопок над ними (в левой части)
на третьем — оси для 8-ми нижних ручек и 8-ми кнопок над ними (опять же — слева)

Далее скачал программу GlovePIE.

Эта программа конвертирует MIDI-сигналы в сигналы джойстика. Для ее работы надо писать скрипт чем-то похожий на VB. Выглядит он примерно так:

PPJoy1.Analog0 = MapRange(midi5.cc1, 0,1, -1,1)
PPJoy1.Digital0 = MapRange(midi5.cc11, 0,1, 0,1)
и т.д. copy-paste для всех осей и кнопок…

где:
PPJoy<x> — номер эмулиремого джойстика из PPJoy
Analog<x> — номер оси на нем
Digital<x> — номер кнопки
MapRange() — функция преобразования
midi<x> — номер миди устройства (у меня их несколько, чтобы узнать номер моего устройства в системе пришлось действовать наугад)
cc<x> — уникальный номер контроллера на MIDI-устройстве. Те, кто использует MIDI в музыке должен знать, что такое CC.
цифры в скобках после запятой — порядок конвертации значений. Для осей от -1 до 1. Для кнопок 0 и 1 соответственно, т.к. промежуточных значений у них быть не может — либо нажата, либо нет.

у GlovePIE есть графический интерфейс, но почему то отказался автоматически мапить миди-сигналы, так что писать код пришлось вручную. MIDI-сигналы могут принимать значение только от 0 до 127, когда как у осей джойстика спектр от 0 до 35999. Об этом преобразовании заботится GlovePIE.

При помощи штатной программы от Novation Remote Zero Editor создал template для сима, где прописал значение и CC-номер каждой ручки и кнопки, их индикацию на встроенном экране, после чего залил все это на устройство. На этом этапе нужно решить, за что какая ручка отвечает. Например у меня 2 ползунка — РУДы двигателей, еще 2 — дял реверса, следующие 2 — тормоза основных стоек, левой и правой, оставшиеся 2 — управляют спойлерами и закрылками. одна из ручек управляет колесами при рулении, другие 3 — триммированием. Кнопки назначены вообще для всего что можно — наружное освещение, парковочный тормоз, запуск двигателей и т.д.

Далее с включенным GlovePIE запустил MSFS и в нем назначил все настроенные оси и кнопки таким же образом как назначаются оси на обычном джое. Этого достаточно для полетов на дефолтных самолетах и простеньких панелях.

Для платников / сложных панелей, как например Pro-Tu и др. некоторые оси и кнопки отказыаются работать корректно и тут пришлось уже писать свою программу на VB6, которая перехватывает MIDI-сигнал и отправляет его в FS через FSUIPC. Соотвественно эти кнопки предварительно необходимо отключить от GlovePIE (удалением строки в скрипте) и снимать ее назначение в FS. Какие-то переменные можно отправить прямо в сим без проблем, а для некоторых функций пришлось заморочиться и эмулировать нажатие на клавишу / клик мышкой. Все это происходит за миллисекунды и не отвлекает от полета. Симулятору-то все равно, кем был повернут тумблер на панели, человеком или программой. В данный момент у меня написано таких преобразователя два — для вилковского Airbus и ERJ v2. Но в целом за пару часов его можно настроить под любую панель.

Вся эта на первый взгляд сумасбродная задача на самом деле представляла собой довольно интересное упражнение для смекалки :) Справиться с ней можно за пару вечеров. И теперь я с уверенностью могу заявить что к симу можно подключить любое MIDI-устрйоство, в т.ч. обычную MIDI-клавиатуру. Особенно если вы знаете CC-коды всех ручек и клавиш или данное устройство позволяет произвольно их менять. Идеальные кандидаты для этого: M-Audio USB Control Surface, серия Novation SL, микро- и макроконтроллеры от Korg и Akai.

Ну и главный вопрос: зачем это все нужно? Ответ: мы получаем простейшую альтернативу домашнему кокпиту и свободные от мыши и клавиатуры руки во время пилотирования. Если кто-то желает также заморочиться, готов предоставить дальнейшие подробности, советы и поделиться кодом.

Спасибо за внимание!

Сообщение отредактировал xdye: 27 Апрель 2010 — 04:32

Хочу поблагодарить товарища xdye за данный туторал.
Сам уже давно (лет так пять) являюсь обладателем подобного MIDI девайса – Behringer B-Control Rotary BCR-2000, и всегда хотел подружить его с симом, однако это не удавалось, и я юзал его только для музыки. К счастью, наткнулся на эту тему и теперь хочу поделиться своими результатами, вдруг кому будет интересно.

В общем, мне удалось настроить его на работу только с сервисным прибором Ту-154М.
Вот скрипт для GlovePIE:

  

debug = midi.cc104
PPJoy1.Analog0 = -MapRange(midi.cc104, 0, 1, -1, 1)
PPJoy1.Digital1 = MapRange(midi.cc108, 0, 1, 0, 1)
PPJoy1.Digital2 = MapRange(midi.cc105, 0, 1, 0, 1)
PPJoy1.Digital3 = MapRange(midi.cc106, 0, 1, 0, 1)
PPJoy1.Digital4 = MapRange(midi.cc73, 0, 1, 0, 1)
PPJoy1.Digital5 = MapRange(midi.cc74, 0, 1, 0, 1)
PPJoy1.Digital6 = MapRange(midi.cc75, 0, 1, 0, 1)
PPJoy1.Digital7 = MapRange(midi.cc76, 0, 1, 0, 1)
PPJoy1.Digital8 = MapRange(midi.cc77, 0, 1, 0, 1)
PPJoy1.Digital9 = MapRange(midi.cc78, 0, 1, 0, 1)
PPJoy1.Digital10 = MapRange(midi.cc79, 0, 1, 0, 1)
PPJoy1.Digital11 = MapRange(midi.cc80, 0, 1, 0, 1)

Итого задействовано 11 кнопок + 1 вращающийся энкодер (aka «крутилка»).
Команда debug нужна, чтобы удостовериться, что после нажатия кнопки Run в GlovePIE скрипт действительно запустился. А то бывает что режим Run включен а сообщения в сим не идут, а здесь я сразу проворачиваю крутилку cc104 и смотрю, изменяются ли параметры в появившемся окошке. Очень часто скрипт запускается только со второго раза – наверно баг программы.
Также мне понадобилось инвертировать MapRange для аналоговой оси с помощью минуса.
Далее, в сервисном приборе Туполя, всё это дело настраивается как на обычном джое.

Очень важно установить кнопки на миди-девайсе в режим Toggle Off (см. в мануал к аппарату) перед назначением их на кнопки захвата Курса и Глиссады, иначе логика панели (а именно захват глиссады) будет воспринимать нажатую кнопку как непрерывно посылаемый поток команд нажатия, и крафт спикирует (попробуйте мышкой нажать и не отпускать на панели кнопку Захват Глиссады – поймете о чем я).

Правда я не смог приладить девайс к иномаркам (level-d 767 и pmdg 737), а было бы весьма кстати крутилкой управлять Heading’ом и скоростями автопилота на MCP.
Также было бы неплохо научить управлять частотами радио на Цесснах всяких.

К сожалению, в программировании не силён, поэтому обращаюсь к xdye — может вы подскажите, как это сделать?


Сообщение отредактировал Seagull: 30 Август 2011 — 11:12

Здорово! Идея понравилась. Вопрос: диджейский пульт вроде такого работает по интерфейсу MIDI или нет? Привлекает то, что цена более-менее бюджетная (музыкой я не занимаюсь, так что если покупать — то только для сима), того же порядка, что у джойстиков, а если работает по MIDI — получается, можно «виртуальный джойстик» из него сделать по предложенной выше технологии.

Вот здесь написано, что это миди-контроллер, соответственно он тоже может так работать.

Сообщение отредактировал Seagull: 31 Август 2011 — 16:02

Тема интересная тем, что решает проблемы создания собственного Routera под любые варианты кокпита.  А MIDI -устройства можно или встраивать в систему или разбирать, и ручки, кнопки и движки устанавливать там, где это удобно. Это — поле деятельности для тех, кто посещает раздел «Железные кокпиты»,- там тусуются серьёзные конструкторы, умеющие работать не только отвёрткой и паяльником, но и программаторами. Думаю, что это направление нужно развивать несмотря на то, что имеются уже совершенные разработки под RS-232, USB и др. интерфейсы. Тем более, что профессиональные тренажёры используют по несколько разных систем.