Вы находитесь на странице: 1из 5

Бесплатный сыр крупным планом: MIDI OX

Червяков Александр
worm (a) artefakt.ru
А как вызвали меня –
я свял от робости,
А из зала мне кричат –
давай подробности!
Все, как есть!
А.Галич, «Красный треугольник»

Признаюсь честно, меня весьма порадовало, что цикл статей «Апология бесплатного сыра» (см. «Ш-М»
№№ 1, 3, 4 за 2005 г. и № 1 за 2006 г.) не прошел незамеченным, по крайней мере, если судить по письмам
читателей. Пользуясь случаем, хочу искренне поблагодарить всех, приславших свои отзывы, критические
материалы, дополнительную информацию, а также ссылки на новые интересные (и, естественно,
свободно распространяемые!) программы. Я, в свою очередь, также не прекращаю раскопки во Всемирной
паутине и слежку за новыми версиями существующих продуктов. Не сомневаюсь, что, как только нашими
общими усилиями будет найдено побольше материалов по новинкам бесплатного софта, цикл
«Апология…» будет продолжен.
Ну а пока давайте возьмем одну из представленных в Интернете бесплатных программ и рассмотрим ее
подробно со всех сторон, как положительных, так и отрицательных. Именно об этом меня просили многие
читатели – рассматривать хотя бы некоторые программы детально. Проще, например, с виртуальными
синтезаторами или секвенсерами – в конце концов все они в чем-то похожи друг на друга, как
коммерчески распространяемые, так и бесплатные. А вот с разнообразной «экзотикой» все далеко не так
радужно – поди разберись с какой-нибудь непонятной софтиной, что она из себя представляет, с чем ее
едят и зачем она вообще. В статье написано: хорошая, а чем конкретно хороша – два с половиной слова. В
общем, как в той песне, «а из зала мне кричат – давай подробности!».
Главный герой сегодняшней статьи – программа MIDI OX. Что такое MIDI – понятно, а слово OX с
английского переводится как «бык». Наверное, разработчики намекают на исключительную мощность
своего детища и, кстати, не без оснований. Что до меня, я предпочитаю последние две буквы названия
читать по-русски. Потому что программа ну просто ОХ… как хороша! Когда начинаешь понимать, какие
возможности она предоставляет музыканту в студии (да и на сцене), по спине прямо-таки холодок
пробегает. Самое поразительное заключается в том, что в ней нет никаких инопланетных технологий –
она действительно проста, как все гениальное!
Отдаленным предком MIDI OX является малюсенькая программа Midimon, выпущенная корпорацией
Microsoft в далеком 1991 году. Сказать по правде, тогдашняя Microsoft была ничуть не лучше теперешней
– и Midimon, как многие другие программные продукты, быстро прославился своей «глючностью». В дело
вмешался программист Джеми О’Коннел (Jamie O’Connell), который обнаружил причину возникновения
ошибки и опубликовал в Сети (Бог ты мой, она тогда уже существовала!) методы борьбы с ней. Позднее к
Джеми присоединился Джерри Йоргенруд (Jerry Jorgenrud), и вдвоем эти парни полностью переписали
код, отвязавшись тем самым от наследия Билла Гейтса и превратив туповатую утилиту в великолепное
средство для мониторинга и управления MIDI-потоками.
Комплект MIDI OX состоит из собственно программы MIDI Ox и мультиклиентного драйвера MIDI Yoke,
причем эти компоненты скачиваются и устанавливаются независимо друг от друга. Если не хотите
связываться с MIDI Yoke, никто не будет вас заставлять это делать. MIDI Ox и без Yoke-драйвера
представляет собой весьма неплохой инструмент. Однако в комбинации эта парочка позволяет творить с
синтезаторами и звуковыми модулями много чего умопомрачительного и сногсшибательного, так что
MIDI Yoke все-таки рекомендую установить.
Если это сделать, после перезагрузки Windows в системном списке MIDI-
устройств (Панель управления ё Звуки и аудиоустройства а Аудио,
«Воспроизведение MIDI») появится восемь новых портов, обозначенных как
MIDI Yoke (NT)* 1 – 8. Это самые обыкновенные мультиклиентные драйверы
(pipe-драйверы), в точности такие же, как Hubi’s LB4 или Multimid.
Обычно порт того или иного MIDI-устройства захватывается запущенным в
данный момент приложением, и при попытке другой программы обратиться
к нему будет получен грубый отказ. Именно поэтому чаще всего не
получается запустить одновременно, скажем, MIDI-секвенсер (например,
Cubase) и MIDI-редактор/библиотекарь (Sound Diver) или секвенсер в паре с
автономным программным синтезатором (Generator, VAZ и т.д.). 1
Мультиклиентные драйверы позволяют обходить это препятствие,
становясь как бы «посредниками» между реальным устройством и
использующей его программой. Каждый из восьми виртуальных портов
MIDI Yoke может принимать MIDI-сообщения одновременно с трех физических MIDI-портов или отсылать
MIDI-сообщения одновременно на три выходных MIDI-устройства. Точно так же, как LB4 и Multimid, один
и тот же Yoke-порт может быть одновременно и входом, и выходом.

1
Каким образом все это работает на практике? У каждого секвенсера или
MIDI-редактора есть список активных входных (MIDI Input) и выходных
(MIDI Output) устройств. Обратите внимание, упоминавшийся выше
«захват» порта осуществляется программой не только при
непосредственной передаче данных! Если устройство есть в списке, оно
уже «занято».
Таблица 1. Типичная исходная конфигурация. Одновременный запуск
этих программ приведет к сообщению об ошибке
Поэтому нам следует удалить из списка устройств все реальные MIDI-
порты.
Почему мы так своеобразно «раскидали» номера Yoke-портов, чуть
дальше. Закроем теперь редактор и секвенсер и запустим, наконец, MIDI
Ox.
Для начала нам потребуется определить входные и выходные устройства.
В меню Options выберем команду MIDI Devices:
Теперь в окнах MIDI Inputs и MIDI Outputs необходимо указать все
входные и выходные MIDI-устройства, как физические, так и
виртуальные. При этом какая-то часть Yoke-портов устанавливается в
качестве входов, другая – в качестве выходов. На картинке, например,
Yoke 1 и 2 являются MIDI-входами, Yoke 3 и 4 – MIDI-выходами. В окне Port
Mapping содержится общая информация о текущей схеме связи между
портами (mapping) и параметрах фильтров, в окне Port Map Objects –
активные на текущий момент объекты.
Нажимаем OK. Теперь выберем в меню View пункт Port Routings.
Открывается окно коммутатора портов.
Теперь соединим входы Yoke 1 и 2 с синтезатором, в данном случае звуковой платой SW60XG:
Обратите внимание: те Yoke-порты, которые были входными для секвенсера и редактора, в MIDI Ox
являются выходными и наоборот. Ну что ж, теперь мы можем запустить секвенсер (в данном случае Digital
Orchestrator Plus) и MIDI-редактор (XG Edit).
При каждом запуске MIDI Ox загружается последняя работоспособная
конфигурация. Однако при первом запуске программы по странной
прихоти разработчиков все порты будут соединены между собой. В этом
случае следует нажать в окне Port Routing правую кнопку мыши и
выбрать команду «Disconnect All». Теперь коммутационная панель
девственно чиста, можем приступать к подсоединению.
Соединим порт MIDI-клавиатуры (в данном случае Delta AP MIDI) с
портами Yoke 3 и Yoke 4. Для этого достаточно просто нажать левую
кнопку мыши на пиктограмме нужного входного порта и «протянуть
виртуальный провод» куда надо. Как вы помните, порт Yoke 3 был
назначен входным для MIDI-редактора, а порт Yoke 4 – для секвенсера.

Замечательно: теперь мы можем одновременно записывать дорожки в


секвенсере и накручивать звуки в редакторе безо всяких гнусных сообщений
об ошибках. Пожалуй, стоит только отключить опцию MIDI Through в
редакторе, чтобы при игре на MIDI-клавиатуре ноты не «раздваивались». И
все? Ведь это могли делать и обыкновенные pipe-драйверы, зачем вся эта
акробатика? Нет, это не все, а только начало.
Добавим еще один ма-а-аленький проводочек и соединим порт Yoke 1
(т.е. выход редактора) с портом Yoke 4 (т.е. входом секвенсера). Мы
можем делать это совершенно спокойно: все порты Yoke являются
мультиклиентными.
Что при этом произойдет? Теперь MIDI-сообщения редактора отсылаются
не только на вход синтезатора, но и непосредственно в секвенсер. А это
означает, что мы получили возможность записывать на дорожки
секвенсера все без исключения манипуляции с MIDI-редактором, включая
выбор патчей, редактирование параметров, изменение глобальных
настроек и даже игру мышкой на экранной клавиатуре. Согласитесь,
здесь есть существеннейшая разница: до этого момента мы могли
загрузить нужный алгоритм обработки, например, фленжер, и настроить
какие-то его параметры – один раз на всю песню. И при этом нам необходимо было сохранять два файла:
один, содержащий данные секвенсера, и второй, содержащий данные редактирования. А теперь нам
можно запросто прописать в трек изменения всех параметров всех эффектов (частота/глубина/обратная
связь и т.д.) или вообще сменить эффект «по ходу пьесы», и все это в реальном времени! Таким образом
можно даже из Yamaha PSR 550 «выжимать» совершенно убойные звуки и спецэффекты, а уж про
«взрослые» синтезаторы я молчу. При этом для сохранения всего роскошества в одном файле достаточно
установить секвенсер на запись (естественно, от начала) и нажать кнопку Refresh Synth (или
аналогичную) в редакторе. Снимок состояния синтезатора записан – и теперь все настройки будут
аккуратно сохранены в одном MIDI-файле с данными треков.
Здесь стоит, однако, сказать об одной весьма важной вещи и ответить на
один весьма важный вопрос, который наверняка уже задает пытливый
читатель. Начнем с вопроса: поскольку каждый Yoke-порт может быть и
входом, и выходом, почему бы нам не установить в секвенсере вход Yoke 1
и выход Yoke 1 и сделать то же самое в редакторе? Картинка будет
приблизительно вот такая:
У нас освободилось три виртуальных порта, не говоря о том, что схема
маршрутизации упрощается. Или здесь какой-то подвох?
Поздравляю, такая схема вполне работоспособна, и в принципе имеет
право на существование. Но! Тогда мы будем вынуждены отключить
опцию MIDI Through и для редактора, и для секвенсера. Иначе любая нота
на выходе будет продублирована, копия будет отправлена на вход, оттуда
на выход, снова дублирование – в общем, процесс «раскручивается» практически моментально, забивая
при этом полифонию и вешая намертво процессор. Это явление называется «MIDI feedback», или обратная
связь. (Слышали, как микрофоны заводятся? Ну так вот, это почти то же самое, только в цифровой среде.)
Стоит отметить, что MIDI Ox отслеживает возникновение обратной связи и отключает соответствующий
Yoke-порт (а заодно выводит грозное предупреждение на экран).
А что произойдет, если опцию MIDI Through отключить везде? Такая схема работоспособна, следует
только соблюдать следующие правила:
• При записи в секвенсере обязательно указывать канал записи для трека, например, MIDI Channel 1, а не
MIDI Omni или что-то подобное. В противном случае на новые треки будет аккуратно переписано
содержимое ранее записанных дорожек.
• Проследить, чтобы функция LOCAL на синтезаторе была отключена.
• При работе с различными треками соответственно изменять рабочий MIDI-канал синтезатора (Global
Channel) на соответствующий.
• Помнить, что запись «внакладку» на один и тот же канал в этом случае становится невозможной – все
уже сыгранные ноты будут записываться повторно, сами на себя.
Но я рекомендую все-таки первый вариант подключения. Виртуальных портов мы, безусловно, «съедаем»
в три раза больше, но зато при записи не потребуется лишних телодвижений и никаких ограничений нет.
Да и с обратной связью проблем гораздо меньше. Итак, мы можем подвести первые итоги. Окно
маршрутизации Port Routing позволяет свободно коммутировать между собой разнообразные программы
и MIDI-устройства. Это, безусловно, здорово – однако мы в нашем знакомстве с MIDI Ox еще даже до
середины не дошли. Так что дышите глубже :)

Давайте перейдем к тому, из чего «вырос» MIDI Ox – к мониторингу MIDI-данных.


Для этого у программы есть целый арсенал самых разнообразных инструментов.
Начнем с окон Monitor Output и Monitor Input. Первое присутствует на экране
MIDI Ox всегда (при попытке его закрыть оно сворачивается), а второе
вызывается с помощью команды меню View ё Input Monitor. Теперь выбираем
команду Actions ё Start Display, и в окне монитора начинают отображаться все
MIDI-данные, поступающие на выходы MIDI Ox (если таковые есть). Загрузите в
секвенсер какой-нибудь файл, подвигайте виртуальным фейдером в редакторе
или просто побренчите на клавиатуре – все MIDI-события будут немедленно
отображены на экране.
Как показано на иллюстрации, в окне монитора отображается информация
в виде шестнадцатеричного кода и расшифровка событий. Однако при
интенсивной работе с контроллерами эта информация прокручивается с
совершенно сумасшедшей скоростью, в этом потоке невозможно что-либо
разглядеть! Для того чтобы осуществлять мониторинг только
определенного MIDI-канала и/или MIDI-сообщений определенного типа,
используется фильтр. Кликните правой кнопкой мыши на окне монитора и
выберите команду MIDI Filter.
В раскрывшемся диалоговом окне расставьте галочки напротив тех типов
сообщений и MIDI-каналов, «слежка» за которыми вам ни к чему.
В окне MIDI Status (меню View ё MIDI Status) отображается сводная
информация о значениях наиболее важных контроллеров в данный
момент.
Окно MIDI Port Activity (меню View ё Port Status) показывает, по каким
портам и MIDI-каналам в текущий момент происходит передача данных.
Следует отметить, что отображение всех этих данных достаточно интенсивно «кушает» быстродействие
процессора. Поэтому не стоит держать MIDI-мониторинг включенным постоянно. Для его остановки
выберите в меню Actions команду Stop Display.
В окне монитора исключительно удобно «отлавливать» управляющие низкоуровневые системные
сообщения. Не секрет, что обычно синтезаторы позволяют записывать в секвенсер далеко не все
манипуляции с ручками, кнопками, настройками и т.д. Например, чтобы воспроизводить MIDI-файлы на
моем Roland Juno-D, его требуется перевести в режим Performance, а по умолчанию после включения он
находится в режиме Patch. В руководстве по эксплуатации и на сайте разработчика информация
отсутствовала, однако с помощью MIDI-монитора нужные мне Sysex-сообщения были выловлены в
течение 10 секунд. Теперь в начале каждого MIDI-файла я прицепляю вот такой вот свежевыловленный
Sysex:
F0 41 10 00 64 12 00 00 00 00 00 00 F7
И при нажатии на кнопку секвенсера PLAY, синтезатор в каком бы режиме он у меня ни находился,
обязательно перейдет в режим Performance. Сам, без напоминаний.
Мелочь, но как приятно!

Для того чтобы познакомиться со следующей группой инструментов MIDI Ox,


прежде всего необходимо вернуться к окну MIDI Port Routing. Это можно
сделать через меню, а также с помощью кнопки быстрого доступа. Нам нужен
порт MIDI-OX Event Port, позволяющий MIDI Ox самому генерировать MIDI
сообщения. Соединим его со входом нашего синтезатора:
Окно Control Panel (меню View ё Control Panel) позволяет послать по
какому-либо MIDI-каналу (или сразу по всем) сообщения типа Patch
Change и Control Change. Иногда крайне полезная вещь. К примеру, в
случае возникновения «повисших» нот и прочего музыкального мусора,
пошлите по всем каналам сообщение «All Notes Off» (СС #120):
Окно Instrument Panel (View ё Instrument Panel) предоставляет
возможность выбирать патчи из поименованных банков в соответствии с
информацией, содержащейся в специальном ins-файле.
Команда NRPN Calculator из меню View позволяет легко и быстро
преобразовывать значения типа «старший байт/младший байт»
(MSB/LSB) в 14-битовые MIDI-сообщения Bank Change, RPN и NRPN.
Панели MTC Transport (View ё MTC Transport) и MIDI Sync Transport (View
ё MIDI Sync Transport) служат для того, чтобы генерировать
синхронизирующие сигналы форматов MTC (MIDI Time Code) и MIDI (MIDI
Sync). Таким образом, с помощью MIDI Ox вы можете не только запускать
несколько программ одновременно, но и синхронизировать их между собой, задав нужный темп, размер,
разрешение в тиках (PPQN) и формат SMPTE. Только не забудьте предварительно соединить порт MIDI OX
Event со входами программ и включить там синхронизацию нужного типа
(MTC/SMPTE или MIDI).

Команда Sysex из меню View вызывает на дисплей окно для работы с


системными сообщениями формата System Exclusive. Здесь вы можете
принимать Sysex с синтезатора, осуществлять в его теле операцию поиска и
замены значений, сравнивать между собой два Sysex-сообщения, а также
распечатывать Sysex-дамп на принтере.
Ну что же, с мониторингом и сервисными функциями мы разобрались.
Однако и это еще не все! Дело в том, что MIDI Ox позволяет различным
образом преобразовывать MIDI-данные, шныряющие туда-сюда между
входами и выходами!
Выберем в меню Options пункт Data Mapping. На экране отобразится
диалоговое окно преобразования данных.
Каждая строка представляет собой очень мощный фильтр, позволяющий
трансформировать MIDI-данные самым неожиданным образом. Карта преобразования, показанная на
иллюстрации, осуществляет разделение (split) клавиатуры на две зоны. Она состоит из двух фильтров, по
одному в каждой строке – один для сообщений Note On, второй для сообщений Note Off.
Если нажать на кнопку Edit, раскроется окно редактирования фильтра. В нашем примере если нажимается
клавиша с номером ноты от 0 до 48 (нижняя половина MIDI-клавиатуры), соответствующие MIDI-события
будут переброшены на канал 2. Таким образом, клавиатура оказывается
разделенной на две зоны.
Однако разве кто-то ограничивает нас в количестве фильтров? Нажмем
на кнопку Cancel и создадим еще два с помощью кнопки Insert. Укажем в
качестве диапазона ноты с номерами от 49 до 61, а в качестве канала
переадресации – канал 3. Теперь клавиатура нашего инструмента
поделена уже на три зоны! Количество зон ограничено только
количеством MIDI-каналов.
Итак, еще раз вдумайтесь: мы можем в реальном времени преобразовывать одни типы MIDI-сообщений в
другие! Например, фильтр вот с такими установками:
превращает сообщения от Pitch-колеса (Pitch Bend) в сообщения Control
Change #74 (Filter Cutoff). Теперь при манипуляциях с колесом будет
изменяться частота среза обрезного фильтра. Если поставить галочку
напротив отметки “Pass original value in (Clone)”, колесо будет управлять
одновременно и высотой тона, и частотой среза. Аналогично добавим на
колесо модуляции (CC #1) управление глубиной резонанса (CC #71). А кто
нам мешает это сделать?
Вот еще один любопытный фильтр – он переворачивает клавиатуру «вверх ногами»:
Сообщения Note On с номерами от 0 до 127 преобразуются в сообщения с номерами от 127 до 0, в
результате нижние ноты оказываются сверху, а верхние – снизу. Возможности поистине безграничные.
Вам нужно осуществлять быстрое переключение между двумя тембрами? Нет ничего проще – создайте
фильтр, преобразующий нажатие на крайнюю нижнюю клавишу (Note On # x) в событие Patch Change # y1,
а нажатие на соседнюю с ней клавишу (Note On # x+1) – в сообщение Patch Change # y2. Все, можно
начинать колбаситься! Для игры на органе сустейн-педаль обычно не требуется – ну так и что, повесьте на
нее скорость вращения Лесли-эффекта! Главное, чтобы в движке синтезатора этот эффект присутствовал,
остальное – дело техники.
Нажатием на кнопку Save готовые карты преобразования со всеми
входящими в них фильтрами могут быть сохранены в файле формата
*.oxm для дальнейшей загрузки. Потому что (вы будете смеяться) это
тоже еще не все!
Вернемся к тому, с чего все, собственно говоря, начиналось, – к окну
Routing Map.
Оно сейчас, правда, выглядит немного по-другому. Вы обратили
внимание на серые квадратики на проводах? Так вот, если щелкнуть по
этому квадратику правой кнопкой мыши и выбрать команду Properties,
на экране появится вот такой диалог:
Как видите, для каждого виртуального «проводка» мы можем
отфильтровать определенные MIDI-каналы и типы системных
сообщений, но самое главное – можем назначить на этот провод фильтр, созданный нами при работе в
окне Translation Map. Это просто – раскройте список Map File и выберите сохраненный ранее (или
библиотечный) файл *.oxm. Если включена обычная фильтрация, верхний левый уголок у серого
квадратика будет окрашен в синий цвет. Если включена карта преобразований, нижний правый уголок
становится зеленым. Но цвет тут, безусловно, не главное. В данном примере MIDI-клавиатура
подсоединена к портам Yoke 1, 2 и 3. На первый провод не повешено никаких фильтров. На втором и
третьем отключены системные сообщения и установлены две карты преобразования. Первая просто
«перекидывает» сообщения Note On/Off с канала 1 на канал 2. Вторая копирует ноты с канала 1 на канал
3, причем только в нижней половине клавиатуры, плюс транспонирует эти ноты на октаву вниз. Затем,
порты Yoke 1, 2 и 3 соединены со входом синтезатора, где на каналах 1, 2 и 3 установлены синтетические
струнные, аккордеон и бас-гитара. И вот результат – самая настоящая интересно звучащая комбинация в
духе Korg Triton. Хотя при чем тут Triton?! Triton отдыхает – у него на каждую комбинацию до восьми
программ можно вешать. А здесь – шестнадцать! Нет, я на самом деле не шучу – карты Translation Map
могут разделять данные как по высоте нот (Keyboard Split), так и по скорости нажатия на клавиши
(Velocity Split)! Это же революция, граждане! Теперь многослойные динамичные комбинации можно
делать на любых синтезаторах – лишь бы хватило полифонии (и быстродействия у ПК)! На один провод
(он же канал, он же тембр) повесим тот самый «переворачивающий клавиатуру» фильтр, на другом –
заставим колесо модуляции управлять глубиной DSP и т.д. и т. п.
Для полного «отритонивания» нам не хватает только арпеджиатора,
правда? Увы, встроенного арпеджиатора у MIDI Ox нет. Но есть средства
для его создания!
Дело в том, что MIDI Ox оснащен COM-интерфейсом, совместимым с
языками программирования Visual Basic, C++ и Windows Script Host.
Подробное описание всех функций интерфейса и примеры работы
находятся в справочном файле MIDI Ox. На сайте программы выложены
два скомпилированных приложения (с исходниками), написанные на
Visual Basic, – небольшой Sysex-менеджер и тот самый долгожданный
арпеджиатор:
Правда, в реальной работе арпеджиатор оказался несколько «глюковат»,
да и функций с режимами, откровенно говоря, хотелось бы побольше… Но
это я, по-моему, уже ударился в занудство :). Переменные и функции
программного интерфейса MIDI Ox предоставляют программисту полный
доступ к MIDI-портам и проходящим через них потокам данных. То есть,
говоря по-русски, при желании можно не то что арпеджиатор – секвенсер
написать, свой собственный! Или MIDI-редактор. Или драм-машину. В
общем, все, что душе угодно.
Ну что же, подведем итоги. Перед нами мощная, гибкая, открытая для
всевозможных расширений, да еще и бесплатная программа. Программа, с помощью которой практически
любой синтезатор или MIDI-модуль приобретает совершенно потрясающие возможности. MIDI Ox
позволяет заниматься созданием собственных звуков, записывать убойные спецэффекты, интегрировать
между собой MIDI-инструменты, секвенсеры, редакторы с непревзойденной доселе гибкостью и
удобством. Я кого-то еще не убедил? :)
Мне кажется, я забыл сказать о чем-то важном. А, ну конечно: http://www.midiox.com. Скачивайте,
разбирайтесь – и удачных вам творческих поисков, дорогие читатели!

26 декабря в 00:05 Программное обеспечение 2 2006 (45)