Музыка: Анатомия MIDI

Музыка: Анатомия MIDI (Анатомия MIDI)


MIDI– это протокол соединения музыкальных инструментов друг с другом или с компьютерами. Он был разработан консорциумом фирм – изготовителей синтезаторов, и его становления в качестве стандарта произошло в начале 80-х.

Сначала MIDI– интерфейс кажется чем-то сложным и неудобоваримым. При наиболее тесном знакомстве с ним вы начнете понимать, что он куда проще, чем представляется на первый взгляд. Правда , вскоре, когда вам откроется все богатство его возможностей, ощущение простоты снова пропадает. Можно с уверенностью сказать, что MIDI является наиболее важным стандартом электронной музыки. Любой multimedia Компьютер просто обязан поддерживать этот протокол; в частности для ОС Windows было разработано расширение Multimedia ExtenSions, предназначенное для работы с MIDI-интерфейсом.

В чем же суть?

Грубо говоря, MIDI определяет протокол, в соответствии с которым происходит пересылка цифровых команд по кабелю. Кабели MIDI имеют 5-штырьковые разъемы стандарта DIN, но используются только 3 контакта из пяти (земля, токовая петля и линия данных). Передача данных по MIDI протоколу осуществляется в одном направлении со скоростью 31250 б/с. Каждый байт данный начинается стартовым и заканчивается стоповым битом, так что фактически скорость передачи получается равной 3125 байт/с.

Особенно важно уяснить для себя то, что сами данные, передаваемые по кабелю MIDI – интерфейса, не являются закодированными звуками ни в аналоговой, ни в цифровой форме. На первый взгляд это противоречит здравому смыслу, а по сему представляется чем-то уж сложным. На самом деле по кабелю передаются простые сообщения длиной всего 1, 2, или 3 байта.

Когда вы нажимаете на клавишу (например “ДО” первой октавы) клавиатура выдает 3 байта по порту MIDI Out. В шестнадцатиричной форме это 90 3С 40. Первый байт (90) – это сообщение Note On. Второй байт представляет собой номер ноты (3С – третье или среднее “до”, т.е. “до” первой октавы). Значение третьего байта определяется скоростью нажатия на клавишу, т.е. от силы удара зависит громкость звука.

Далее это 3-байтовое сообщение по MIDI-кабелю попадает на входной разъем синтезатора, который реагирует на это звуком “до” первой октавы. Если вы снимите свой палец с клавиши на входном разъеме клавиатуры - появится сообщение 90 3C 00. Как видите изменился только байт скорости – он принял нулевое значение. Эта команда называется “Note Off”, и синтезатор реагирует на нее прекращением воспроизведения данного звука.

Если ваш синтезатор полифонический, т.е. способен воспроизводить более одной ноты в одно и тоже время, вы имеете возможность играть аккордами. Клавиатура генерирует множественные сообщения Note On, а синтезатор проигрывает все нажатые ноты одновременно. Снимая пальцы с клавиш, вы посылаете синтезатору сообщения Note Off. Вообще говоря, клавиатура в этой установке играет роль так называемого MIDI – контроллера. Она генерирует MIDI – последовательности управления синтезатором.

Контроллер может не только напоминать клавиатуру или какой-либо другой традиционный музыкальный инструмент, но и может быть так называемым секвенсером – устройством, способным запоминать последовательность команд типа Note On и Note Off и в дальнейшем воспроизводить целые музыкальные фразы. Секвенсер как таковой сейчас используется гораздо реже, чем несколько лет назад, ему на смену пришел персональный компьютер, оснащенный MIDI–платой. Такой компьютер способен генерировать сообщения Note On и Note Off, и соответственно, способен управлять синтезатором. Специальное программное обеспечение авторских работ позволяет в наглядной форме манипулировать MIDI–данными, полученными от MIDI контроллера, а затем пересылать обработанные последовательности на синтезатор.

Синтезатор иногда называют звуковым модулем, или звуковым генератором. Стандарт MIDI никак не определяет способ создания звука, который может быть применен в той или иной конструкции синтезатора.

The program change - "Вам сыграть на рояле или на скрипке?".

Какого типа звук может создавать синтезатор? Может ли он звучать как пианино, как скрипка или как труба? Или как летающая тарелка? Как правило, разнообразные звуки, производимые синтезатором, “зашиты” в ПЗУ или хранятся в других видах памяти. Эти звуки называются “голосами” или “инструментами”.

Стандарт MIDI определяет созданные синтезатором звуки как программы. При изменении голоса или инструмента синтезатору передается сообщение об изменении программы – команда Program Change вида С0 рр, где байт рр может принимать значение от 0 до 127. Зачастую MIDI – клавиатуры снабжены рядом, а то и двумя – тремя рядами кнопок, при нажатии на которые генерируются именно такие сообщения. Нумерация этих кнопок, как правило, начинается с цифры 1, так что кнопка номер 1 вызывает нулевую команду Program Change.

Спецификация MIDI никак не регламентирует соответствия между номером кнопки и типом генерируемого синтезатором голоса. К примеру, первые три инструмента синтезатора Yamaha DX7 носят названия соответственно “теплые струнные”, “мягкий горн”, “рельефная гитара”, в то время как в звуковом генераторе Yamaha TX81Z это “рояль”, “пианино”, “глубокий рояль”, а вот звуковой модуль Roland MT32 предлагает на первых трех позициях “акустическое фортепиано 1”, “акустическое фортепиано 2”, “акустическое фортепиано 3”.

В общем, для того чтобы избежать всякого рода неожиданностей при нажатии на кнопки MIDI – клавиатуры, отвечающие за генерацию команды Program Change, ознакомьтесь сначала с нумерацией голосов на вашем синтезаторе.

Если серьезно, то такой разнобой трудно назвать большим удобством, так как MIDI-файлы, несущие информацию о голосах, оказывается жестоко зависят от модели синтезатора. Применительно к MIDI в Multimedia Windows эта проблема частично решена.

Байты данных и состояния.

Итак, мы познакомились с двумя MIDI – сообщениями. Во первых была рассмотрена команда Note On:

90 kk vv.

Где kk обозначает номер клавиши (0-127). Если vv принимает значение 0, то команда превращается в Note off.

Затем мы познакомились с командой Program Change:

С0 рр.

Где рр также может изменяться от 0 до 127. Эти команды являются типичными MIDI-сообщениями, в которых первый байт носит название байта состояния. В зависимости от значения байта состояния его сопровождают 0, 1 или 2 байта данных. Отличит байт состояния от байта данных довольно просто: старший бит байта состояния всегда равен 1, в то время как в байте данных старший бит всегда равен 0.

Midi канал.

В общем, виде команда Note On выглядит следующим образом: 9n kk vv. А команда Program Change – Cn pp. В обоих случаях n соответствует младшим 4 битам байта состояния и может принимать значение от 0 до 15. Это самое n называется “MIDI-каналом”.

Обычно нумерация каналов начинается с 1, так что, если значение n равно 0, то мы имеем дело с каналом номер 1. Использование 16 каналов позволяет передать по кабелю MIDI – интерфейса сообщения для 16 различных голосов, звучащих одновременно. Как правило каждая строка MIDI-сообщения начинается с команды Program Change, которая определяет для каждого канала свой инструмент, а затем идет множество чередующихся Note On и Note Off с редкими вкраплении Program Change, необходимой для замены одного инструмента другим. Но в любой момент времени каждому каналу соответствует только один голос.

Рассмотрим такой пример, что наша клавиатура может генерировать MIDI-сообщения одновременно для двух каналов – канала 1 и канала 2. Нажав соответствующие кнопки, вы можете на синтезатор послать две команды Program Change:

С0 01

С1 05

Таким образом, для канала 1 установлена программа 2, а для канала 2 программа 6.

Теперь, если вы нажмете на клавишу, клавиатура сгенерирует две команды Note On для каждого из каналов:

90 kk vv

91 kk vv

То есть система начинает воспроизводить звук двух разных инструментов в унисон.

Существуют так называемые “разделенные” клавиатуры, в которых клавиши нижних октав могут генерировать команды для одного канала, а клавиши верхних для другого. Это дает возможность играть как бы на двух независимых инструментах одновременно. Возможности 16-и канальной организации MIDI-интерфейса становятся реально ощутимы при использовании программы – секвенсера, запущенной на подключенном к нашей системе компьютере. Каждому из каналов можно привести в соответствие свой голос, и если ваш синтезатор способен воспроизводить звуки 16 независимых инструментов одновременно – вы становитесь руководителем оркестра в составе 16 покорных вашей воле музыкантов.

Гирлянда их синтезаторов.

Обычно простейшие MIDI- контроллеры (например, духовые) оснащены только одним входным разъемом. Однако клавишные контроллеры, зачастую оборудованные своим собственным синтезатором, имеют три интерфейсных разъема: MIDI In, MIDI Out и MIDI Thru. Порт MIDI In служит для приема команд от дополнительного внешнего контроллера. Порт MIDI Out предназначен для подключения клавиатуры к внешнему синтезатору. Порт MIDI Thru – это выходной разъем, на котором дублируются те команды, которые принимаются встроенным синтезатором через разъем MIDI In.

В результате получается, что MIDI- устройства можно объединить между собой только двумя способами: с разъёмом MIDI In синтезатора может быть соединен с разъемом MIDI Out контроллера, или порт MIDI Thru служит для объединения в цепочку нескольких синтезаторов. Предположим, например, что вы при помощи программы – секвенсера оркеструете свою композицию для 16 инструментов, а доступные вам синтезаторы могут воспроизводить одновременно голоса только 4-х инструментов. В подобном случае вам придется соединить с компьютером 4-е синтезатора.

Также возможно подключение 2-х клавиатур к одному синтезатору. Первая клавиатура генерирует команды для канала 1, а вторая для канала 2. Оба кабеля, подключенные к разъемам MIDI Out соответствующих клавиатур, объединяются на специальном коммутаторе (MIDI merger box), который служит для синхронизации сигналов. Смешанные сигналы подаются на вход MIDI In синтезатора.

Команды MIDI интерфейса.

Хотя команды Note On и Program Change можно назвать наиболее важными MIDI-командами, это далеко не весь перечень сообщений музыкального интерфейса.

Note Off 8n kk vv kk=номер клавиши (0 – 127) Note On 9n kk vv kk=номер клавиши (0 – 127)
vv=скорость нажатия (0-127, 0=Note Off) Polyphonic After Touch an kk tt kk=номер клавиши (0 – 127)
tt=after touch (0 – 127) Control Change bn cc xx cc=контроллер (0-127)
xx=значение (0 – 127) Режим канала: - - Local Control Bn 7a xx xx=0 (Off), 127 (On) All Notes Off Bn 7B 00 - Omni Mode Off Bn 7C 00 - Omni Mode On Bn 7D 00 - Mono Mode On Bn 7E cc cc=номер канала Poly Mode On Bn 7F 00 - Program Change Cn pp pp=программа (0 – 127) Channel After Touch Dn tt tt=манипуляция после нажатия клавиши Pitch Wheel Change En II hh II=младший байт (0-127)
hh=старший байт (0-127)

N=номер канала, 0-15

На этой таблице перечислены команды, определенные спецификацией MIDI. Как было отмечено выше старший бит байта состояния имеет значение 1, а все байты данных, следующие за байтом состояния, могут принимать любое значение от 0х80 до 0хFF, а байты данных – от 0 до 0х7F.

Номера клавиш в основном соответствуют нотам, традиционно принятым в западной классической музыке, хотя это не обязательно.

Антон Алексеев