Основная идея MIDI состоит в том, что это - событийно-ориентированный интерфейс, по которому передаются сообщения, информирующие о наступлении различных событий в реальном времени. Когда исполнитель ударяет по клавише или, наоборот, отпускает ее, усиливает или ослабляет давление на нажатую клавишу, переключает тумблеры или поворачивает регулятор на панели управления, давит на педаль - инструмент преобразует каждое из этих действий в соответствующее сообщение, которое в закодированном виде отправляется по интерфейсу. Сообщения генерируются и отправляются достаточно быстро - 1000..1500 в секунду, поэтому они весьма точно описывают не только сами действия исполнителя, но и его индивидуальную манеру игры. Другие инструменты, подключенные к этому же интерфейсу, могут воспринимать эти сообщения и отрабатывать их так же, как будто исполнитель воздействует на их собственные органы управления - именно так и реализуется упомянутый "электронный оркестр". По MIDI можно соединить практически любое количество инструментов, и все они могут обмениваться сообщениями друг с другом.
Кроме сообщений, непосредственно отражающих действия исполнителя, по MIDI передается и множество других сообщений. Например, сообщения типа Clock (часы) передаются с частотой 6 раз на каждую четвертную долю и служат для синхронизации с инструментами, автоматически выдающими ритм или аккомпанимент, а также с устройствами записи. Сообщения типа MMC (MIDI Machine Control - управление MIDI-машинами) служат для запуска и остановки ритм-блоков: например, музыкант, отыграв вступление, нажатием педали посылает сообщение Start, которое получает ритм-блок и начинает играть сопровождение, которое может быть приостановлено и запущено вновь повторными нажатиями педали. Перед начало исполнения инструменты могут обмениваться служебными сообщениями, "договариваясь" о режимах работы, используемых тембрах или видах звуковых эффектов.
3.1 Аппаратная спецификация MIDI
Интерфейс - старт-стопный последовательный "токовая петля" (активный передатчик, 5 мА, токовая посылка - 0, бестоковая - 1), скоростью передачи 31250 +/-1% бит/с и протоколом 8-N-1 (один стартовый бит, 8 битов данных, один бит стопа, без четности). Передатчики и приемники должны обеспечивать длительность фронтов менее 2 мкс.
Каждый инструмент имеет три соединительных разъема: In (вход), Out (выход) и Thru (копия сигнала с In через буфер). Все разъемы - типа female DIN-5 (СГ-5), вид с наружной стороны (стороны соединения):
Контакты 4 и 5 - сигнальные, контакт 2 - экран. Полярность сигналов дается относительно источника тока: контакт 4 - плюс (ток вытекает из вывода), контакт 5 - минус (ток втекает в вывод). Таким образом, для разъемов Out и Thru назначение то же, для разъема In - обратное. Для соединения используется двужильный экранированный кабель длиной до 50 футов (около 15 м). Экран необходим только для защиты от излучаемых помех - кабель практически нечувствителен к наводкам извне. Соединение разъемов на двух концах кабеля - прямое (2-2, 4-4, 5-5).
Один MIDI-передатчик допускает подключение до четырех приемников.
Описанная схема позволяет создавать сеть MIDI-устройств, подключая их по цепочке и нескольким направлениям:
В этой схеме устройство 1 служит источником сообщений, которые получает устройство 2 и через его ретранслятор - устройство 3. Устройство 4 получает сообщения, посылаемые устройством 2 (они могут как включать, так и не включать получаемые самим устройством 2) и ретранслирует их на вход устройства 5.
3.2 Разнообразие инструментов при подключении к MIDI
Благодаря MIDI создалась возможность не только объединения нескольких "полных" - то есть содержащих и клавиатуру, и блок синтеза звука - инструментов, но и разделения их на функционально независимые части - устройства ввода (контроллеры), обработки (процессоры) и синтеза звука (тонгенераторы). MIDI -контроллеры существуют в виде клавиатур, педалей, дыхательных (breath) датчиков, и даже гитар, скрипок или флейт, причем последние три вида - не какие-нибудь электронно-кнопочные, а самые обычные инструменты, игра на которых при помощи датчиков и анализаторов преобразуется в поток MIDI-сообщений, по которому специальные синтезаторы могут весьма натурально воспроизвести исполнительские нюансы. Тон-генераторы представляют собой "черные ящики", к которым подключается только MIDI-кабель и кабель усилителя - звук они издают только по MIDI-командам. А в качестве процессора чаще всего используется компьютер - Atari, Amiga, Macintosh или IBM PC.Способ представления музыки в MIDI оказался настолько удобным и популярным, что уже в середине 80-х практически не выпускалось инструментов без его поддержки, а в новых операционных системах - в том числе Windows и OS/2 он был реализован в качестве одного из стандартных элементов ОС. Это очень важно, так как позволяет создавать программы, работающие только со стандартными системными функциями посылки и приема сообщений, а преобразование этих функций в команды конкретной интерфейсной или звуковой карты выполняется драйвером - специальной программой из комплекта карты. Таким образом, однажды разработанная программа заведомо будет работать с любой интерфейсной или звуковой картой и любым внешним инструментом.
Реализация MIDI в Windows и OS/2 использует понятие порта, эквивалентного разъему на обычном "железном" инструменте. Все сообщения, направляемые в порт вывода (MIDI Out), воспринимаются ответственным за него драйвером и либо пересылаются на реальный интерфейс, оканчивающийся настоящим разъемом, либо преобразуются в команды для встроенного синтезатора звуковой карты, либо отрабатываются самим драйвером, который в этом случае работает как имитатор синтезатора, самостоятельно создавая цифровой звук одним из методов синтеза и выводя его уже через звуковой канал обычной звуковой карты или даже на встроенный динамик-пищалку. Соответственно, все сообщения, приходящие по реальным кабелям на интерфейсную карту, воспринимаются ее драйвером и направляются в порт ввода (MIDI In), откуда могут быть считаны любой программой. Существуют также драйверы, не связанные с реальным оборудованием, предназначенные для создания "виртуальных MIDI-кабелей", соединяющих различные порты прямо внутри системы. В совокупности все это сильно напоминает сеть - а MIDI-интерфейс, по сути, как раз и позволяет создавать сети из музыкальных инструментов.
Практически каждая звуковая карта сейчас содержит хотя бы внешний MIDI-интерфейс, к которому через специальный адаптер может подключаться любое количество MIDI-инструментов (в том числе - и другой компьютер с подобным адаптером).При установке таких карт в системе порождается два MIDI-порта - Ext In и Ext Out (или с подобными названиями). Если карта допускает установку дочерней платы-синтезатора, которая, по существу, является ни чем иным, как звуковым модулем синтезатора "в чистом виде" - для общения с такой платой обычно используются те же порты (в основном - только Out, ибо большинство дочерних плат не умеет генерировать сообщений), и при посылке сообщений в этот порт будут одновременно звучать как дочерняя плата, так и внешний инструмент. Некоторые карты имеют раздельные интерфейсы для дочерней карты и внешнего инструмента - в этом случае MIDI-портов в системе будет больше.
Для карт со встроенным FM-синтезатором (которых опять же большинство) в системе появляется его собственный порт - с именем FM Synth, OPL-3 Music Synthesizer, или подобным; для карт с более мощным синтезатором, которые я называю комбинированными, появляется порт с именем вроде Wavetable Synth, Advanced Wave Effects и т.п. Сообщения, направляемые в эти порты, не выходят за пределы компьютера - они сразу же направляются на встроенные синтезаторы карты.
Благодаря системе портов в систем несложно создать специальные виртуальные MIDI-устройства, которые обрабатывают проходящие через них сообщения - например, разделяют ноты, пришедшие с одной MIDI-клавиатуры, на две или более областей, направляя каждую область в свой канал порта вывода, что позволяет играть на одной клавиатуре в две или четыре руки разными тембрами, или преобразуя каждую ноту в аккорд, добавляя к ней дополнительные ноты. Однако наиболее плодотворное использование MIDI получается не при живой игре, а путем применения секвенсоров - независимых устройств или компьютерных программ, способных запоминать все приходящие сообщения (разумеется, с сохранением их временных положений), а затем многократно воспроизводить по команде. Такая система подобна механическому пианино, в котором при игре на клавишах пробиваются отверстия в перфоленте, а затем по этой же перфоленте пианино может довольно точно "сыграть" произведение. По сути, секвенсор записывает ни что иное, как партитуру исполняемого произведения в виде, напоминающем программу для станка с ЧПУ или компьютера. За исключением того, что каждая нота записывается парой сообщений - о нажатии и об отпускании клавиши - такая запись почти не отличается от обычной нотной.