virtual midi driver что это
Virtual midi driver что это
В Windows, устройства миди автоматически соединяется с выходом MIDI по умолчанию, которым обычно является тон генератор «Microsoft GS Wavetable Synth», идущий в комплекте со всеми версиями Windows. Этот синтезатор MIDI производит звук очень низкого качества и обладает большими задержками между нажатием клавишей и воспроизведением звука. Лучшей (и свободной) альтернативой является CoolSoft Virtual MIDI Synth.
Для соединения аппартатных MIDI устройств используются миди кабели, и USB миди кабели.
Для использования популярных VST синтезаторов совместно с миди плеером или программным миди контроллером необходим виртуальный миди кабель. В Windows можно использовать такие MIDI кабели, как например: MIDI Yoke, Maple, LoopBe1, Sony Virtual MIDI Router или loopMIDI.
В процессе установки виртуального MIDI кабеля будут установлены драйвер и апплет панели управления, в котором можно изменять доступное количество MIDI портов.
Виртуальный MIDI кабель работает, посылая каждое событие MIDI, записанное на OUT порт, на соответствующий IN порт. Например, MIDI Assist можно соединить с выходом порта 1, а другая программа, к примеру VST Host, может считывать события с порта 1.
В данном случае рассмотрим это на примере loopMIDI
Здесь можно добавить миди порты:
На этой вкладке можно настроить дополнительные опции:
Tobias Erichsen
private stuff & software for audio, midi and more
virtualMIDI
Virtual MIDI driver for Windows 7 up to Windows 10, 32 and 64 bit with the ability to dynamically create and destroy freely nameable MIDI-ports.
The necessity for virtualMIDI came along when I implemented my rtpMIDI-driver. Later I also used this driver when I created loopMIDI for people who only need simple loopback MIDI-ports.
I had some pretty specific requirements:
• Compatibility from Windows XP to Windows 10
• Both 32bit and 64bit operation
• On-the-fly creation (and destruction) of freely nameable virtual MIDI-ports
• Only one side of the ports was supposed to be visible to the public
• The other side only visible via a private interface
• Multi-client-capability
Since I had been hanging around on the wdmaudiodev mailinglist for quite some time due to my interest in kernel-streaming, I had already read quite a bit on the topic over there.
All of the people there suggested to use the DMusUart and the MPU401 sample as a starting-point. So that’s what I did and creating the actual driver had been not too hard after getting enough insights at the WDK-documentation.
Nevertheless all the stuff people had done prior to my attempts would not quite achieve what my requirement were.
All of those other virtual MIDI miniport driver implementations actually developed simple static “loopback” MIDI-ports. Loopback meaning that both ends of this port would be public. Static meaning that the number of ports and their names would be fixed at install-time of the driver (via the inf-file of the driver).
This was not satisfactory, so I looked some more and I found references to dynamic creation of sub-devices. But this was a hard nut to crack. Finally I had been able to locate a guy who was doing something similar for a virtual soundcard-driver for digital-audio-broadcast.
His insights have been invaluable. It still took quite some time to get everything going smoothly, but I finally succeeded in creating this driver.
One problem remained: Since Microsoft introduced Vista, all drivers for 64bit need to be code-signed. Though the idea itself is pretty nifty – to know the specific company that the code running in the kernel comes from – it had a severe drawback:
Only companies incorporated could apply for such a code-signing-certificate. Many people in the driver-development-community urged Microsoft to rectify this. And finally in May of 2010 it has been done. Since that time it is also possible for individuals to get their own code-signing certificate to be able to run their drivers on the 64bit versions of Vista and Windows 7.
The driver is currently part of the rtpMIDI-driver network-MIDI driver and the loopMIDI virtual loopback MIDI cable. But it can be used for other tasks as well.
If you have a music-application that needs to create its own freely named MIDI-devices on-the-fly – virtualMIDI is exactly the right tool. I have prepared a small & simple to use SDK with bindings for C/C++, Delphi, Java and C#.
MIDI и OSC — основные протоколы взаимодействия музыкальных приложений
Часть 1. MIDI
1 Предпосылки
Необходимость в таком стандарте возникла примерно к концу 70-х годов. В то время синтезаторы управлялись напряжением с помощью интерфейса CV/Gate. Существовало несколько его видов, однако, наибольшую популярность получил вариант, предложенный фирмой Roland: в нем при увеличении напряжения на 1 В, частота генерируемого тона увеличивалась на одну октаву. Главным недостатком такого интерфейса является то, что с помощью него можно управлять только одним голосом полифонии. Для извлечения дополнительной ноты нужно добавлять еще один интерфейс CV/Gate. Кроме того, таким способом передается только сам факт нажатия клавиши и ее высота, чего однозначно мало для выразительной игры.
Другим недостатком синтезаторов того времени была сложность настройки. Для каждого нового звука музыкантам приходилось настраивать инструмент заново, что было очень не удобно на живых выступлениях. На концертах тех времен часто можно было увидеть целые стеллажи из синтезаторов — так музыканты выходили из ситуации. Со временем в инструменты были встроены мини-компьютеры, с помощью которых можно было сохранять положения ручек в пресеты.
Однако, есть еще один момент, который оказал большое влияние на разработку MIDI.
Несомненно, у каждого синтезатора свой характер звучания, каждый из них был силен в определенных типах звуков. Поэтому многие музыканты того времени практиковали игру сразу на двух инструментах, как бы используя лучшее из разных моделей. Наслоение звуков из различных синтезаторов стало исполнительским приемом, визитной карточкой многих музыкантов. [1]
2 История появления
К началу 80-х большинство производителей осознали необходимость создания единого интерфейса. Задача стояла такая: разработать стандарт передачи действий исполнителя в цифровой форме между всеми типами электромузыкальных инструментов. [1]
3 Основы
MIDI — это протокол последовательной передачи данных между главным и подчиненным устройством. Главное устройство генерирует сообщения и отправляет их подчиненному устройству, который выполняет полученные команды. Последовательный — значит информация передается по одному биту, бит за битом. Отсюда следует невозможность передачи нескольких сообщений одновременно.
Сам протокол состоит из трех частей [1]: спецификация формата данных, аппаратная спецификация интерфейса и спецификация хранения данных. В данной статье будет идти речь только о первой части.
MIDI сообщения делятся на два типа: сообщения канала (channel messages) и системные сообщения (system messages). Первые управляют звукообразованием, а вторые выполняют служебные функции, например, синхронизация.
Сообщение обычно состоит из двух или трех байт. Первый байт называется статус байтом. В нем задается тип сообщения и номер канала, к которому оно относится. Все последующие байты называются байтами данных. Статус-байт всегда начинается с единицы, а байт-данных с нуля — таким образом система их различает. Получается, что для MIDI информации остается только 7 бит, с помощью которых можно закодировать целые числа от 0 до 127, — вот откуда берется это «знаменитое» ограничение на количество нот и значения контроллеров.
Как видно из рисунка, информации о типе сообщений отводится всего 3 бита, в которых можно закодировать только 8 чисел. 7 из них отведены под наиболее часто используемые команды, а последнее используется для системных сообщений. Когда передается системное сообщение, последние 4 бита статус байта (в которых обычно передается номер канала) определяют тип системного сообщения.
Табл. 1. Сообщения канала.
Сообщение | Статус-байт | Байт данных 1 | Байт данных 2 |
Note Off | 1000nnnn | Номер ноты | Velocity |
Note On | 1001nnnn | Номер ноты | Velocity |
Polyphonic Key Pressue | 1010nnnn | Номер ноты | Давление |
Control Change | 1011nnnn | Номер контроллера | Значение |
Program Change | 1100nnnn | Номер программы | — |
Channel Pressure | 1101nnnn | Давление | — |
Pitch Wheel Change Change | 1110nnnn | Номер программы | — |
Системные сообщения | 1111nnnn | . | . |
Табл. 2. Системные сообщения
Сообщение | Статус-байт | Байт данных 1 | Байт данных 2 |
System Exclusive (SysEx) | |||
System Exclusive | 11110000 | ID | . |
System Common | |||
MTC Quater Frame | 11110001 | Тайм-код | — |
Song Position Pointer | 11110010 | LSB | MSB |
Song Select | 11110011 | Номер песни | — |
Tune Request | 11110110 | — | — |
End Of Exclusive (EOX) | 11110111 | — | — |
Real Time | |||
Timing Clock | 11111000 (248) | — | — |
Start | 11111010 (250) | — | — |
Continue | 11111011 (251) | — | — |
Stop | 11111100 (248) | — | — |
Active Sensing | 11111110 | — | — |
System Reset | 11111111 | — | — |
4 Недостатки
MIDI разрабатывался, как доступный и практичный стандарт для передачи жестов исполнителя между любыми MIDI-устройствами [2]. Не в последнюю очредь благодаря своей легковесности он и получил такое распространение. Что ни говори, со своим предназначением он справляется прекрасно, и это подтверждается временем.
Итак, наверное, самый известный недостаток — ограничение значений контроллеров на 128 значений. Конечно, есть возможность передавать их с помощью двух байтов данных (что дает 16 384 возможных значений), но для этого надо передать три сообщения Control Change, что очень сильно загрузит протокол, так как данные по нему передаются со скоростью 31 250 бит/с. Это очень мало. Для сравнения, 12-нотный аккорд передастся примерно за 10 мс. И это без других сообщений, например Clock и CC. В реальном перфомансе, когда одновременно передается много различных параметров, могут возникнуть проблемы с синхронизацией.
Часть 2. Open Sound Contol
«Open Sound Control — это новый, оптимизированный для современных сетевых технологий протокол для взаимодействия компьютеров, звуковых синтезаторов и других мультимедиа устройств» — так был представлен OSC на международной конференции по компьютерной музыке в 1997 году [3]. OSC не является протоколом в том виде, каким является MIDI, так как он не описывает требований к аппаратному обеспечиванию — спецификации описывают лишь формат передачи данных. В этом плане OSC больше схож с XML или JSON, нежели с MIDI [8].
Пока оставим технические подробности и начнем с самого начала, с истории.
1 История, области применения
Open Sound Control был создан в 1997 году Мэттью Райтом (Matthew Wright) и Эдрианом Фридом (Adrian Freed) в Университете Калифорнии в центре новой музыки и аудио технологий (CNMAT — Center of New Music and Audio Technologies). Разработчики хотели использовать высокоскоростные сетевые технологии в интерактивной компьютерной музыке [4]. OSC не важно, по какому протоколу передаваться, так как он представляет собой всего лишь формат данных (binary message format), хотя большинство реализаций используют TCP/IP или UDP. Другой причиной создания было то, что MIDI с его нотами, каналами и контроллерами логично не подходил к разрабатывающемуся в то время синтезатору CAST (CNMAT Additive Synthesis Tools), оно и понятно, ведь MIDI — это клавишно-ориентированный протокол, который разрабатывался для управления одним синтезатором с другого [1].
Слово «Open» в названии означает, что OSC не предопределяет, какие сообщения должны использоваться для определенных параметров — это решается разработчиком конкретного девайса. Кроме того, это слово имеет и другое значение: протокол открыт, его спецификации находятся на официальном сайте, где можно скачать исходники.
2 Особенности
3 Анатомия сообщений
Стоит отметить, что при использовании UDP, если сообщения передавались в разных пакетах, они не обязательно будут приходить в том порядке, в каком были переданы [6]. Допустим, были переданы сообщения:
/synth1/noteoff 54
/synth1/noteon 60
Фактически они могут прийти в обратном порядке:
/synth1/noteoff 60
/synth1/noteon 54
Это может привести к проблемам с управлением голосами в полифонии, например, в данном сообщении передается команда noteoff, которая выключает голос, а потом включает другую ноту. Если эти сообщения придут в обратном порядке, голос не освободится и новая нота не сможет запуститься.
Чтобы этого избежать, нужно передавать сообщения в одном пакете (bundle), либо использовать TCP/IP, он отличается от UDP тем, что гарантирует корректную доставку пакетов, передавая каждый из них до тех пор, пока он не передастся в изначальном виде. Нужно иметь ввиду, что ценой такому удобству будут большие в сравнении с UDP задержки, поэтому использование TCP/IP должно быть обосновано.
4 Pattern matching
дефис между двумя символами означает диапазон чисел в ASCII последовательности (дефис в конце строки не имеет специального значения);
Virtual Midi Controller
Создавая миди-партию, удобно использовать музыкальную клавиатуру. Однако не у всех она есть. В этом случае можно использовать программы, посылающие миди-сообщения в ответ на действия с компьютерной клавиатуры и мыши, так называемые виртуальные миди-клавиатуры. DAW или VST хост уже могут содержать в себе данную функцию. Однако использование виртуальной клавиатуры как отдельного приложения даёт больше возможностей для исполнения партии. В данной статье я расскажу о Virtual Midi Controller от Martin O’Grady. Она прекрасно справляется с функциями виртуальной миди-клавиатуры и не только!
Введение
Рисунок 1. Virtual Midi Controller 3 LE
Virtual Midi Controller 3 (полная версия) может выполнять больше функций чем LE версия. Логически она разделена на секции. Каждая из секций выполняет свою специфическую задачу и имеет собственные настройки. Каждой секции соответствует своя кнопка на панели задач. Уже сравнив количество кнопок для полной и LE версии можно судить о том, насколько урезана версия LE (рис. 2).
Рисунок 2. Virtual Midi Controller 3 (полная версия)
Обе версии поставляются в двух форматах – в виде VST плагина и как отдельное приложение (standalone). В этой статье будет рассказано именно о полной версии. И дело не только в уменьшенном количестве функций для LE версии, но и в других ограничениях. Самыми важными, из которых являются отсутствие возможности создавать свои клавиатурные раскладки и отсутствие слоёв (об этом чуть позже).
Обратите внимание, что панель виртуальной миди-клавиатуры скрыта. Для её отображения нужно щёлкнуть по кнопке «OUT».Помимо кнопок на функциональной панели расположено ещё два элемента управления программой. Верхнее поле отвечает за номер глобального пресета. В VMC его зовут программой. До знакомства с настройками отдельных секций я не советую что-либо менять в этом поле. В нижнем поле задаётся устройство миди-вывода. В моём случае это синтезатор, встроенный в Windows.
Первым делом проверьте, чтобы миди-выходы не совпадали с миди-входами. Сделать это можно в настройках программы. Для перехода в них щёлкните по кнопке «F» в панели задач, затем выберете «Setup». Перейдите на вкладку «Midi Inputs», на ней список устройств которые VMC может использовать для получение миди-сообщений. Те, что отмечены флажками, считаются активными. Теперь перейдите в «Midi Outputs», на ней список устройств миди-вывода (рис. 3).
Рисунок 3. Список устройств миди-вывода
Данное действие особенно важно при использовании виртуальных миди-портов. Заметьте, что активные устройства миди-вывода можно посмотреть также из панели задач, тогда как активные устройства миди-ввода – только в настройках.
Клавиатурная раскладка
Под созданием раскладки, в данном случае, подразумевается то, что любой клавише на компьютерной клавиатуре можно назначить действия, которые будут выполняться каждый раз, когда клавиша нажимается или отпускается. При этом на нажатие и отпускание можно назначать разные действия. Для этого щелкните по кнопке с надписью «C IN» – откроется панель настроек клавиатурного ввода (рис. 4).
Рисунок 4. Панель клавиатурного ввода
Состояние клавиши кодируется цветом. Светло-зелёные клавиши это клавиши, которые уже имеют назначенные действия, а тёмно-зелёные клавиши – ещё нет. Серые клавиши недоступны для назначения действий. Красный цвет означает, что клавишу нажали.
При первом запуске VMC уже имеет некоторую раскладку. Однако для лучшего понимания как создавать раскладки, давайте, создадим свою собственную. Для этого, прежде всего, надо освободить клавиши от уже назначенных действий. Самый лёгкий способ это сделать – выбрать пустой пресет. Для выбора пресета предназначена кнопка с надписью «P» (рис. 4) (обведена красным). Щелкните эту кнопку и выберете из списка пресет с именем «Empty». После выбора этого пресета не должно остаться светло-зелёных клавиш. Это значит, что теперь все клавиши свободны для назначения им новых действий.
Создадим раскладку, состоящую из двух рядов клавиш. Верхний ряд это клавиши от «Q» до «U». В нём будут находиться ноты верхнего регистра: от C3 до B3. Нижний ряд это клавиши от «Z» до «M». В нём будут находиться ноты нижнего регистра: от С0 до B0. Предлагаемая раскладка служит только примером. Для того чтобы приступить к настройке клавиши сделайте правый щелчок на её изображении в панели «C IN» (рис. 5).
Рисунок 5. Демонстрационная раскладка
Как можно видеть, назначенные действия это посыл миди-сообщений о начале и конце взятия ноты. При нажатии на клавишу (Down Function) будет выполнена «Midi Note On», а при опускании клавиши (Up Function) – «Midi Note Off». Действия выбираются из списка, появляющегося при щелчке по полю. Для каждого действия появляются свои настройки. Просто настройки для «Midi Note On» и «Midi Note Off» похожи. Настройки «Note» и «Velocity» это номер ноты и громкость (динамика ноты) соответственно. Их удобно выбирать из списка. Для этого сделайте правый щелчок по соответствующему полю. Далее, события «Note On» и «Note Off» можно посылать на любое из доступных устройств вывода (параметр «Out») и на любой канал (параметр «Chan») этого порта.
Кнопка «GLOBAL KEY» включает активность клавиши для режима захвата клавиатурного ввода. В VMC это поведение можно определить отдельно для каждой клавиши. Эта кнопка значима, только если активирован сам режим. Для активации режима захвата клавиатуры щелкните в панели задач кнопку «K». В этом режиме VMC будет получать клавиатурный ввод независимо от того имеет или не имеет фокус её окно. То есть можно будет работать с любыми другими окнами при помощи мыши и в тоже время играть ноты. Это может пригодиться, к примеру, при настройке звука VST синтезаторов.
Кнопка «REPEAT» в нашем примере находится не в нажатом состоянии. Так как многократное послание «Note On» при удержании клавиши не требуется. Позже мы рассмотрим пример, в котором повторное выполнение действия при удержании клавиши является желательным.
Параметр «Zone» не является личной настройкой ни для «Note On» ни для «Note Off», так как он никак не кодируется в этих миди-сообщениях. Этот параметр принадлежит самой VMC. При помощи него программа «помечает» миди-сообщения как принадлежащие зоне с некоторым номером. Это своего рода дополнительная информация для самой VMC, которая «подсказывает» ей какой вид дополнительной обработки нужно произвести для данной миди-команды. Напомню, для нижнего ряда Zone=1, а для верхнего Zone=2 (рис. 5).
В нашем случае зоны использованы для возможности менять номер воспроизводимой ноты. Это осуществляется путём приращения (положительного или отрицательного) на целое число. Зоны можно увидеть в секции «OUT». Она показывается при щелчке по кнопке «Z» (рис. 6).
Рисунок 6. Применение зон
Внизу изображения музыкальной клавиатуры находятся 2 прямоугольника. Внутри каждого из них надпись из двух чисел. Первое число это номер зоны, а число после знака «:» равно приращению которое получит нота. Это число называют смещением или транспозицией. В секции зон щелчком мыши можно менять транспозиции зон независимо друг от друга. Для этого сделайте щелчок по свободному месту. Применение зон позволяет играть ноты в более высоком или более низком регистре путём смены транспозиций для этих зон. При этом сами номера нот, назначенные клавишам, остаются фиксированными.
То как транспозиции зон влияют на воспроизведение нот можно не только услышать, направив выдачу на заданный порт устройства, но и увидеть. Для этих целей предназначена панель «DISP». Она отвечает за мониторинг исходящих и входящих миди-сообщений. Выполнение действий, не являющихся миди-сообщениями, в ней не фиксируются. То есть момент изменения транспозиции для зоны в «DISP» увидеть нельзя (рис. 7).
Рисунок 7. Наблюдение исходящих нот
Рисунок 8. Изменение смещения с клавиатуры
Теперь можно менять смещение для рядов с клавиатуры. Однако что делать, если нужно сделать приращение транспозиции не на 12, а, скажем, на 1 или 24? Назначить новым клавишам «Change Zone Transpose» с другим «Value»? Такое решение не компактно. Есть способ лучше – использование клавиш модификаторов. К этим клавишам относят «Shift», «Ctrl», «Alt» и «Win». Если клавиша была нажата или отпущена в то время пока были удержаны клавиши модификаторы, то VMC воспримет такое нажатие (отпускание) как отдельный вид нажатия. И на этот отдельный вид нажатия может быть назначено своё собственное действие. В этом случае говорят о задании настроек для модификации клавиши.
Для задания настроек модификации клавиши необходимо использовать кнопки «SHIFT», «CTRL», «ALT» и «WIN» (рис. 9) (обведено красным овалом). Далее, выбираем клавишу правым щелчком, затем щёлкаем по одной из кнопок или нескольким – модификация может быть задана и для сочетания модификаторов. После этого настройки клавиши обновятся. Их придётся снова задать. Однако это не значит, что настройки для не модифицированного состояния были потеряны. Просто снимете выделение с кнопок модификаторов – настройки станут прежними.
Рисунок 9. Настройка модификации
Из рисунка можно понять, что при одновременном удержании клавиш «Shift» и «Alt», каждое нажатие на клавишу «Page Dоwn» будет увеличивать текущую транспозицию первой зоны на 24. То есть модификация «Page Dоwn» задаётся комбинацией «Shift+Alt».
На рисунке можно видеть активность кнопки «UP MOD». Она задаёт режим, при котором модификация работает не только при нажатии клавиши, но и при её отпускании. В данном примере она не используется, так как для смены зоны используется только нажатие на клавишу. Модификации клавиш позволяют создавать многослойные раскладки. Например, можно назначить на наши ряды нотных клавиш (рис. 5) разные громкости нот, в зависимости от модификаторов. Однако стоит помнить при этом, что реакция на изменение громкости ноты зависит от поддержки этого VST синтезатором.
Задавать звук синтезатора можно не только посредством выбора пресета (или патча), но и использованием управляющих миди-сообщений (CC). Для этого нужно чтобы СС с заданным номером был «привязан» к некоторому параметру синтеза. Особенно это актуально для аппаратных синтезаторов. Зная набор необходимых синтезатору CC и их значения можно программировать звук синтезатора посредством их посыла. В VMC одной клавишей можно послать несколько СС одновременно (рис. 10). Для этого предназначено действие «Midi Controller Change».
Рисунок 10. Назначение нескольких действий
Настройки посыла СС достаточно прямолинейны. В «CC» задаётся номер сообщения, а в «Value» его значение. «Midi Controller Change» назначено только на нажатие клавиши. При каждом нажатии клавиши «Backspace» будет выполняться 3 действия: модуляция сбрасывается, режим поддержки (sustain) отменяется, панорама устанавливается по центру. На рисунке показан вывод этих сообщений в панели «DISPLAY». Обратите внимание на красный овал на рисунке. Он окружает номер функции. Щелчок по правой стрелке позволит перейти к следующей функции. Однако сделать это удастся, только если назначено действие для текущей функции. Не путайтесь! Номер присваивается именно функции. Каждая функция состоит из двух частей – «Down Function» и «Up Function». На каждую часть можно назначить своё действие. Для освобождения клавиши от действий придётся освободить её от всех функций – «Down Function» и «Up Function» установить в «None».
Посылать CC сообщения можно и при помощи мышки. В секции «OUT» есть СС панель. Из неё можно послать СС с любым номером. Щелкните по прономерованному прямоугольнику, затем выберете нужное значение для СС из списка. Как видно, из этой панели можно послать не только СС сообщение, но и другие миди-сообщения (рис. 11).
Рисунок 11. Панель СС
Регуляторы
Ранее уже упоминалась возможность управлять параметрами синтеза путём посыла СС сообщений при нажатии на клавишу клавиатуры. Однако ограниченность этого способа состоит в том что «Midi Controller Change» может посылать только фиксированные значения и не способен посылать приращения. То есть управление, в этом случае, осуществляется согласно принципу «одна клавиша – одно значение СС сообщения». Для непрерывного управления параметром синтеза нужно создать регулятор. Регуляторы создаются в панели регуляторов. Для появления этой панели щёлкните по «CTRL» в панели задач (рис. 12).
Рисунок 12. Панель регуляторов
Обратите внимание на сетку. За её показ отвечает кнопка «GRID». Нельзя создавать регуляторы до того как создана хотя бы одна строка сетки. За добавление и удаление строк сетки отвечают кнопки «+» и «-» соответственно. Количество строк задаётся пользователем, но не может превышать 16. Количество же столбцов (клетей) в строке всегда равно 16.
Чтобы добавить новый регулятор сделайте правый щелчок по свободной клети, затем установите параметр «Type» в одно из возможных значений. Этим параметром определяется внешний вид, и, соответственно, способ работы с регулятором. Есть 3 вида регуляторов: фейдер, поле ввода (Edit), ручка (Knob). Фейдер бывает горизонтального положения (H Fader) и вертикального (V Fader). Рассмотрим один из таких фейдеров (рис. 13).
Рисунок 13. Параметры регулятора
Из рисунка видно, что регулятор является вертикальным фейдером. За счёт сетки каждый регулятор имеет свои координаты. Они определяются номером строки и столбца. Надпись «Cell: 1,1» подсказывает нам координаты регулятора – сначала номер строки, затем номер столбца. Параметр «Type» позволяет отобразить регулятор, но не заставить его работать. Чтобы это сделать, надо назначить регулятору миди-событие, за которое он будет отвечать. За это отвечает параметр «Event». В данном случае к регулятору «привязана» миди-команда «Pitch Bend». Для того чтобы «связать» движение ползунка фейдера с диапазоном значений для миди-события необходимо его задать через параметры «Min» и «Max». Нижнее положение ползунка соответствует величине «Min», а его верхнее положение – величине «Max». Однако вы можете задать «Min» больше чем «Max», в этом случае, наоборот – верхнее положение ползунка будет соответствовать минимальному значению. Ползунок фейдера двигается при помощи мыши, поэтому обратите внимание на параметр «Release». Он соответствует начальному положению ползунка. При этом регулятор всегда возвращается в него, как только отпускают захват ползунка. Параметр «Release» можно не задавать. В этом случае ползунок будет оставаться в том положении, в котором его оставили.
Преимущество движения регуляторов мышью состоит в том, что можно задавать скорость и ускорение движения регулятора. Чтобы сделать этот процесс эффективнее в VMC поддерживается режим захвата регулятора. В этом режиме ненужно удерживать кнопку мыши, достаточно двигать курсором. Для захвата сделайте щелчок колёсиком мыши по регулятору. Кроме того можно двигать регулятор колёсиком мыши. Чтобы это сработало на регуляторе «Edit» дайте ему фокус – сделайте щелчок.
Сохранять созданные регуляторы можно по такому же принципу как это делалось для сохранения клавиатурной раскладки. Сохраняйте их как пресет, используя кнопку «F», или как PRG файл.
При использовании мыши для перемещения регуляторов окно VMC должно иметь фокус. При этом теряются преимущества связанные с использованием захвата клавиатуры. Однако этого можно избежать. Пусть управление регуляторами с клавиатуры, в принципе, невозможно производить с тем же качеством, что даёт мышь, но оно возможно. Для этого на клавишу нужно назначить действие «Change Control» (рис. 14).
Рисунок 14. Управление регулятором с клавиатуры
Во время обсуждения параметров для «Midi Note On» и «Midi Note Off» можно было заметить, что «Out» и «Chan» установлены в «Default». Это не случайно. Дело в том, что только при таких настройках для выходного порта и канала, нота будет «пропущена» через слой. Ранее говорилось что VMC, при помощи назначения номера зоны, помечает миди-события, чтобы, впоследствии, подвергнуть их некоторой обработке. Механизм зон позволяет изменить смещение для выбранной группы нот, но не только это. Он тесно связан с другим механизмом VMC – слоями. В принципе, для того чтобы играть ноты с VMC, использование слоёв не является необходимым. Однако применение этого механизма значительно облегчает создание раскладки (рис. 15).
Рисунок 15. Настройки слоя
Настройки слоя (Layer) имеют параметр «Zone», определяющий какие именно ноты «пройдут» через данный слой. Раскладка примера (рис. 5) содержала два ряда клавиш имеющих разные зоны. Ряд «ZXCVBNM» имел зону «1», значит, именно его ноты поступят в слой «1». Слой «2» имеет Zone=2, поэтому он будет принимать ноты только от ряда «QWERTYU».
Слой, по сути, представляет собой внутренний миди-обработчик. Первое что он делает – выступает в роли фильтра. Параметры «Note Range» и «Velocity Range» предназначены для фильтрации нот по номеру ноты и по громкости соответственно. «Output» и «Chan» определяют, на какое миди-устройство и на какой канал посылать результат обработки слоем. Такой подход удобен тем, что имея множество слоёв, но с разными настройками для миди-выхода, мы можем одной клавишей играть на разных синтезаторах (при различии в «Output») или на разных инструментах мультитембрального синтезатора (при различии в «Chan»).
Не беспокойтесь, Вам не придётся назначать каждой клавише зону для того, чтобы использовать всю мощь слоёв. В VMC предусмотрены довольно гибкие правила относительно их использования. Так, если слой не имеет назначенной зоны (параметр «Zone» пуст), то он будет принимать любые ноты, как помеченные зоной, так и нет. С другой стороны, даже если слою назначена зона, он всё равно способен принимать ноты, которые не помечены зоной. К примеру, когда Вы играете ноты мышкой, они будут поступать на любой слой. Всё дело в том, что ноты, извлечённые с помощью мышки, не имеют зоны. Однако есть и минус – для игры, хотя бы один слой должен существовать. Чтобы добавить слой пользуйтесь кнопкой «+» (обведено жёлтым). Чтобы нумерация слоёв не сбилась, добавляйте новый слой, когда никакой другой не выделен.
Слой имеет ряд настроек, принципиально меняющих игру на виртуальной клавиатуре. Прежде всего, это кнопка «T», переводящая клавиатуру в триггерный режим. Это значит, что выключение ноты начинает происходить не при отпускании клавиши, а при повторном её нажатии. В этом режиме ненужно зажимать клавиши на клавиатуре чтобы играть аккорд – достаточно запустить все его ноты. Кнопка «T», также, неплохо справляется с ролью глушителя для зависших нот. Кнопка «M» (обведено белым) делает так, чтобы активной оставалась последняя набранная нота. Это кнопка моно режима. Щёлкните её и попробуйте поиграть, особенно аккордами.
Каждый слой имеет свой арпеджиатор (обведено фиолетовым). Для того чтобы его включить надо установить параметр «Arppegio» в одно из значений. Он отвечает за тип арпеджио. Режим «Chord» создаёт одновременное арпеджио на каждую входную ноту слоя. Арпеджиатор генерирует последовательность нот на основе входной (базовой). Для генерации необходимо 3 параметра. Параметр «Tempo» задаёт темп и одинаков для всех слоёв. Параметры «Beat» и «Length» индивидуальны для каждого слоя. «Beat» задаёт периодичность возникновения ноты, а «Length» задаёт её длину. Вы вольны выбирать сочетания значений для этих параметров, однако, по смыслу, Beat>=Length.
Рисунок 16. Правила составления «Sequence»
Как видим, все смещения положительны, но использование отрицательных смещений также возможно. Пример приведён без учёта коррекции громкостей нот. Чтобы это сделать, сразу за смещением ноты, напишите «V-10» или «V30», для коррекции громкости ноты на заданную величину. Однако, иногда, наоборот – нужно чтобы коррекция громкости, выставленная в «Sequence», была проигнорирована. Для этого предназначена кнопка «VELOCITY» (обведено голубым). Кнопка «NOTE» решает обратную задачу – игнорирует коррекцию смещений.
Virtual Midi Controller представляет собой мощную и компактную миди-утилиту. Основной целью этой статьи была демонстрация использования VMC в качестве виртуальной миди-клавиатуры, поэтому описание некоторых её секций осталось «за кадром». Так, например, VMC способна не только генерировать ноты и отправлять их на устройства миди-вывода. Она может получать ноты от устройств миди-ввода, позволяя внешним миди-командам управлять своими настройками, а также осуществляет функции фильтрации и подстановки. Читателям, заинтересованным в этой возможности VMC нужно изучить работу с секцией «M IN». А тем, кто занимается модуляцией параметров синтеза стоит обратить своё внимание на секции «OSC» и «J IN».