Описание интерфейса MIDI
========================
Создано: 22.12.96
Последняя модификация: 08.06.97
Автор: Евгений Музыченко (Eugene Muzychenko)
2:5000/14@FidoNet, music@spider.nstu.nsk.su
Copyright (C) 1996-97, Eugene V. Muzychenko
Все права в отношении данного текста принадлежат автору. При
воспроизведении текста или его части сохранение Copyright обяза-
тельно. Коммерческое использование допускается только с письмен-
ного разрешения автора.
================================================================
+-----------------+
| Что такое MIDI? |
+-----------------+
Musical Instrument Digital Interface - цифровой интерфейс музы-
кальных инструментов. Создан в 1982 году ведущими производителя-
ми электронных музыкальных инструментов - Yamaha, Roland, Korg,
E-mu и др. Изначально был предназначен для замены принятого в то
время управления музыкальными инструментами при помощи аналого-
вых сигналов управлением при помощи информационных сообщений,
передаваемых по цифровому интерфейсу. Впоследствии стал стандар-
том де-факто в области электронных музыкальных инструментов и
компьютерных модулей синтеза.
Спецификация MIDI состоит из аппаратной спецификации самого ин-
терфейса и спецификации формата данных - описания системы пере-
даваемых сообщений. Соответственно, различается аппаратный
MIDI-интерфейс и формат MIDI-данных (так называемая MIDI-парти-
тура); интерфейс используется для физического соединения источ-
ника и приемника сообщений, формат данных - для создания, хране-
ния и передачи MIDI-сообщений. В настоящее время эти понятия
стали самостоятельными и обычно используются отдельно друг от
друга - по MIDI-интерфейсу могут передаваться данные любого дру-
гого формата, а MIDI-формат может использоваться только для об-
работки партитур, без вывода на устройство синтеза.
+------------------------------+
| Аппаратная спецификация MIDI |
+------------------------------+
Интерфейс - старт-стопный последовательный "токовая петля" (ак-
тивный передатчик, 5 мА, токовая посылка - 0, бестоковая - 1),
скоростью передачи 31250 +/-1% бит/с и протоколом 8-N-1 (один
стартовый бит, 8 битов данных, один бит стопа, без четности).
Передатчики и приемники должны обеспечивать длительность фронтов
менее 2 мкс.
Каждый инструмент имеет три соединительных разъема: In (вход),
Out (выход) и Thru (копия сигнала с In через буфер). Все разъемы
- типа female DIN-5 (СГ-5), вид с наружной стороны (стороны со-
единения):
2
4 o 5
o o
1 o o 3
Контакты 4 и 5 - сигнальные, контакт 2 - экран. Полярность сиг-
налов дается относительно источника тока: контакт 4 - плюс (ток
вытекает из вывода), контакт 5 - минус (ток втекает в вывод).
Таким образом, для разъемов Out и Thru назначение то же, для
разъема In - обратное.
Для соединения используется двужильный экранированный кабель
длиной до 50 футов (около 15 м). Экран необходим только для за-
щиты от излучаемых помех - кабель практически нечувствителен к
наводкам извне. Соединение разъемов на двух концах кабеля - пря-
мое (2-2, 4-4, 5-5).
Один MIDI-передатчик допускает подключение до четырех приемни-
ков.
Описанная схема позволяет создавать сеть MIDI-устройств, подклю-
чая их по цепочке и нескольким направлениям:
+-----------+ +-----------+ +-----------+
|1 Thru | |2 Thru |-----+ |3 Thru |
| In | +----| In | +----| In |
| Out |-----+ | Out |-+ | Out |
+-----------+ +-----------+ | +-----------+
+---------------+
| +-----------+ +-----------+
| |4 Thru |-----+ |5 Thru |
+-| In | +----| In |
| Out | | Out |
+-----------+ +-----------+
В этой схеме устройство 1 служит источником сообщений, которые
получает устройство 2 и через его ретранслятор - устройство 3.
Устройство 4 получает сообщения, посылаемые устройством 2 (они
могут как включать, так и не включать получаемые самим устрой-
ством 2) и ретранслирует их на вход устройства 5.
+----------------------------------+
| Спецификация формата данных MIDI |
+----------------------------------+
MIDI-данные представляют собой сообщения, или события (events),
каждое из которых является командой для музыкального инструмен-
та. Стандарт предусматривает 16 независимых и равноправных логи-
ческих каналов, внутри каждого из которых действуют свои режимы
работы; изначально это было предназначено для однотембровых ин-
струментов, способных в каждый момент времени воспроизводить
звук только одного тембра - каждому инструменту присваивался
свой номер канала, что давало возможность многотембрового испол-
нения. С появлением многотембровых (multi-timbral) инструментов
они стали поддерживать несколько каналов (современные инструмен-
ты поддерживают все 16 каналов и могут иметь более одного
MIDI-интерфейса), поэтому сейчас каждому каналу обычно назнача-
ется свой тембр, называемый по традиции инструментом, хотя воз-
можна комбинация нескольких тембров в одном канале. Канал 10 по
традиции используется для ударных инструментов - различные ноты
в нем соответствуют различным ударным звукам фиксированной высо-
ты; остальные каналы используются для мелодических инструментов,
когда различные ноты, как обычно, соответствуют различной высоте
тона одного и того же инструмента.
Поскольку MIDI-сообщения представляют собой поток данных в ре-
альном времени, их кодировка разработана для облегчения синхро-
низации в случае потери соединения. Для этого первый байт каждо-
го сообщения, называемый также байтом состояния (status byte),
содержит "1" в старшем разряде, а все остальные байты содержат в
нем "0" и называются байтами данных (data bytes). Если после по-
лучения всех байтов данных последнего сообщения на вход приемни-
ка поступает байт, не содержащий "1" в старшем разряде - это
трактуется как повторение информационной части сообщения (подра-
зумевается такой же первый байт). Такой метод передачи носит
название "Running Status" и широко используется для уменьшения
объема передаваемых данных - например, передается один байт ко-
манды "Controller Change" с нужным номером канала, а затем - се-
рия байтов данных с номерами и значениями контроллеров для этого
канала.
MIDI- сообщения делятся на канальные - относящиеся к конкретному
каналу, и системные - относящиеся к системе в целом. Кодировка
MIDI-сообщений (шестнадцатеричная, n в первом байте обозначает
номер канала):
Канальные сообщения:
8n nn vv - Note Off (выключение ноты)
9n nn vv - Note On (включение ноты)
An nn pp - Key Pressure (Polyphonic Aftertouch, давление на клавишу)
Bn cc vv - Control Change (смена значения контроллера)
Cn pp - Program Change (смена программы (тембра, инструмента))
Dn pp - Channel Pressure (Channel Aftertouch, давление в канале)
En ll mm - Pitch Bend Change (смена значения Pitch Bend)
Системные сообщения:
F0 - System Exclusive (SysEx, системное исключительное сообщение)
F1 - резерв
F2 ll mm - Song Position Pointer (указатель позиции в партитуре)
F3 ss - Song Select (выбор партитуры)
F4 - резерв
F5 - резерв
F6 - Tune Request (запрос подстройки)
F7 - EOX (End Of SysEx, конец системного исключительного сообщения)
F8 - Timing Clock (синхронизация по времени)
F9 - резерв
FA - Start (запуск игры по партитуре)
FB - Continue (продолжение игры по партитуре)
FC - Stop (остановка игры по партитуре)
FD - резерв
FE - Active Sensing (проверка соединений MIDI-сети)
FF - System Reset (сброс всех устройств сети)
На основе MIDI позднее был разработан стандарт General MIDI
(единый MIDI), устанавливающий условия обязательной совместимос-
ти инструментов и интерпретации номеров программ и контроллеров.
Описание канальных сообщений
============================
Note On (nn - номер ноты, vv - скорость (velocity) нажатия)
Note Off (nn - номер ноты, vv - скорость отпускания)
-----------------------------------------------------------
Сообщает о включении/выключении звучания ноты. MIDI-клавиатура
генерирует эти сообщения при нажатии/отпускании клавиш,
MIDI-синтезатор запускает или останавливает работу соответству-
ющего генератора звука.
Номер ноты задается абсолютным номером полутона в диапазоне
0..127, при этом центральной фортепианной клавише - ноте "До"
первой октавы - соответствует десятичный номер 60 (в MIDI приня-
та нумерация октав с нуля, поэтому она обозначается как C-5).
Скорость нажатия/отпускания задается числом в диапазоне 0..127,
отражающим скорость перемещения клавиши (обычно используется ло-
гарифмическая шкала). Скорость нажатия косвенно отражает силу
удара по клавише. Чувствительная к скорости нажатия (динамичес-
кая) клавиатура выдает реальные значения, нечувствительная дол-
жна выдавать десятичные значения 64. Значение 0 в сообщении Note
On полностью эквивалентно сообщению Note Off для этой же клавиши
- это позволяет при передаче только нажатий и отпусканий исполь-
зовать режим Running Status.
Простые синтезаторы используют скорость нажатия для управления
громкостью извлекаемого звука, более сложные - также для управ-
ления фильтрами (более громким звукам соответствует более звон-
кое звучание) либо выбора разных самплов, пропорции смешивания
нескольких самплов, и т.п.
При поступлении повторного сообщения Note On для уже нажатой но-
ты различные инструменты ведут себя по-разному: одни автомати-
чески отрабатывают перед этим Note Off, прекращая звучание "за-
висшей" ноты; другие запускают отдельный генератор, оставляя за-
висшую ноту звучать. Звучание зависшей ноты в этом случае может
быть прекращено только командами All Sounds Off или Reset.
Channel Pressure (pp - величина давления)
Key Pressure (nn - номер ноты, pp - величина давления)
------------------------------------------------------
Сообщает об изменении силы давления (After Touch - после прикос-
новения (нажатия)) на всю клавиатуру или отдельную клавишу. На-
иболее простые клавиатуры не имеют датчика давления; клавиатуры
средней сложности имеют общий датчик для всех клавиш, посылая
сообщения Channel Pressure по результатам усреднения давления на
все нажатые клавиши; наиболее сложные клавиатуры имеют отдельные
датчики для каждой клавиши, посылая изменения в состоянии каждо-
го датчика.
Поведение синтезатора в ответ на эти сообщения стандартом не оп-
ределено. Обычно синтезаторы с поддержкой Aftertouch имеют ко-
манды для привязки сообщений к выбранным параметрам синтеза
(громкости, модуляции, фильтрам, эффектам и т.п.).
Control Change (cc - номер, vv - значение контроллера)
------------------------------------------------------
Сообщает об изменении состояния органов управления (контролле-
ров). MIDI-контроллеры делятся на непрерывные (continuous) - ру-
коятки, движки, имеющие диапазон непрерывного изменения, и пе-
реключатели (switches) - педали, кнопки, тумблеры, имеющие два
дискретных состояния (On/Off - включено/выключено). Значения
0..63 означают выключенное состояние переключателя, значения
64..127 - включенное.
Основным стандартом (MIDI level 1) принята следующая нумерация
контроллеров:
0..31 - старшие байты значений непрерывных контроллеров 0..31
32..63 - младшие байты значений непрерывных контроллеров 0..31
64..95 - переключатели
96..121 - резерв
120..127 - специальные канальные сообщения
На самом деле практически никто не следует предложенной схеме
распределения, за исключением контроллеров 120..127, которые
везде имеют одинаковое значение.
На сообщения, передающие значение старшего или младшего байта
контроллера, устройства реагируют немедленно, используя в качес-
тве недостающего байта либо ранее переданное, либо установленное
по умолчанию значение. Это можно использовать для передачи зна-
чений, отличающихся только одним байтом, передавая только изме-
нившийся байт.
Обычно, когда непрерывный контроллер используется для плавного
управления каким-либо параметром звука, этот параметр пропорци-
онально зависит от значения контроллера. Используются два основ-
ных способа управления параметрами звука: абсолютный и относи-
тельный. При абсолютном способе параметр полностью зависит от
установленного значения контроллера; при относительном способе
имеется некоторое стандартное значение параметра, соответству-
ющее "нейтральному" значению контроллера - 64. Изменение значе-
ний контроллера вверх или вниз пропорционально изменяет значение
выбранного параметра относительно стандартного значения, кото-
рое, вообще говоря, может быть различным для разных режимов,
тембров и т.п. Для глобальных параметров, таких, как громкость
или панорама в канале, используется абсолютный способ управле-
ния; для локальных - глубина реверберации, частота среза фильтра
и т.п. - относительный, хотя интерпретация различными инструмен-
тами может не совпадать.
Стандартом MIDI определены следующие контроллеры:
0 - Bank Select MSB (выбор банка, старший байт)
1 - Modulation (глубина частотной модуляции)
6 - Data Entry MSB (ввод данных, старший байт)
7 - Main Volume (громкость всех звуков в канале)
10 - Pan (панорама - положение инструмента на стерепанораме)
11 - Expression (экспрессивность, выразительность звука)
32 - Bank Select LSB (выбор банка, младший байт)
38 - Data Entry LSB (ввод данных, младший байт)
64 - Sustain Pedal, Hold1 (удержание звучания всех отпущенных нот)
98 - NRPN LSB (номер незарегистрированного параметра, младший байт)
99 - NRPN MSB (номер незарегистрированного параметра, старший байт)
100 - RPN LSB (номер зарегистрированного параметра, младший байт)
101 - RPN MSB (номер зарегистрированного параметра, старший байт)
Из них контроллеры 1, 7, 10, 11 и 64 обязательны для поддержки в
инструментах General MIDI.
Впоследствии во многих инструментах были введены контроллеры,
ставшие со временем стандартом де-факто:
5 - Portamento Time (время портаменто - скольжения между нотами)
65 - Portamento (включение/выключение режима портаменто)
66 - Sostenuto Pedal (удержание звучания отдельных нот)
67 - Soft Pedal (приглушение звука)
Стандартом Roland GS (General Synth) введены контроллеры:
91 - Reverb Level (глубина реверберации)
93 - Chorus Level (глубина хорового эффекта)
Стандартом Yamaha XG (eXtended & General) введены контроллеры,
дополнительные к GS:
71 - Harmonic Content (содержание гармоник, добротность фильра)
72 - Release Time (время затухания звука после выключения ноты)
73 - Attack Time (время нарастания звука после включения ноты)
74 - Brightness (яркость, частота среза фильтра)
84 - Portamento Control (номер ноты начала скольжения)
94 - Variation Level (глубина эффекта Variation)
96 - RPN Increment (увеличение RPN на 1, значение игнорируется)
97 - RPN Decrement (уменьшение RPN на 1, значение игнорируется)
Почти все контроллеры, стандартизированные в XG, до этого успели
стать стандартом де-факто во многих инструментах.
Описание работы контроллеров
----------------------------
Контроллеры Bank Select
Многие устройства могут работать с большим количеством встроен-
ных и дополнительных тембров (инструментов) и звуковых эффектов,
которые для удобства объединены в банки. В каждый момент времени
в одном канале может использоваться только один банк; для перек-
лючения банков служат контроллеры:
0 - Bank Select MSB (выбор банка, старший байт)
32 - Bank Select LSB (выбор банка, младший байт)
Одни устройства требуют для переключения банков только один из
этих контроллеров, другие требуют оба. Поведение некоторых ус-
тройств в этом отношении может изменяться в различных режимах
работы.
По умолчанию устанавливается нулевой банк. После смены банка
обязательна посылка сообщения Program Change для выбора тембра
(инструмента).
Обработка устройством команды смены банка и инструмента может
занять значительное время (десятки миллисекунд и более). Некото-
рые устройства при получении команд смены банков и инструментов
гасят звучащие ноты в канале.
Контроллер Modulation
Задает глубину частотной модуляции в канале. Управление абсолют-
ное. Значение 0 отключает модуляцию, значение 127 устанавливает
максимальную глубину. Стандартное значение - 0. Действует на
последующие и уже звучащие ноты.
Контроллер Portamento Time
Задает время плавного скольжения от частоты предыдущей ноты до
частоты очередной ноты. Управление абсолютное. Значение 0 соот-
ветствует минимальному времени, 127 - максимальному. Стандартное
значение не определено.
Контроллер Main Volume
Задает громкость звучания внутри канала. Управление абсолютное.
Стандартное значение - обычно 100. Действует на последующие и
уже звучащие ноты.
Контроллер Pan
Задает соотношение уровня стереоканалов (точку стереопанорамы)
для канала. Управление абсолютное. Значение 0 - крайняя левая
позиция, 64 - средняя, 127 - крайняя правая. Стандартное значе-
ние - 64. Действует на последующие и уже звучащие ноты.
Контроллер Expression
Задает степень выразительности звука. Управление абсолютное. На
простых инструментах дублирует контроллер Main Volume и действу-
ет и на последующие, и на уже звучащие ноты. На инструментах с
развитым синтезом управляет более тонкими параметрами вырази-
тельности, и действует только на последующие ноты. Стандартное
значение - обычно 127.
Контроллер Harmonic Content
Задает добротность (глубину резонанса) фильтра канала, позволя-
ющего подчеркнуть высокочастотные гармоники тембра. Увеличение
добротности увеличивает крутизну характеристики фильтра в облас-
ти среза, усиливая частоты, лежащие непосредственно ниже частоты
среза. Управление относительное (0..64..127). Стандартное значе-
ние - 64.
Контроллер Release Time
Задает время концевого затухания звучания нот с момента отработ-
ки Note Off (явного или автоматического) до полного исчезновения
звука. Управление относительное (0..64..127). Стандартное значе-
ние - 64.
Контроллер Attack Time
Задает время начальной атаки - нарастания громкости звучания нот
с момента отработки Note On до максимального значения громкости.
Управление относительное (0..64..127). Стандартное значение -
64.
Контроллер Brightness
Задает частоту среза фильтра канала, управляющую ослаблением вы-
соких частот звука. Управление относительное (0..64..127). Стан-
дартное значение - 64.
Контроллер Portamento Control
Задает номер ноты, от которой выполняется плавная перестройка
частоты в режиме Portamento, и позволяет установить исходную вы-
соту, отличную от определяемой последним сообщением Note On.
Контроллер Reverb Level
Задает глубину эффекта реверберации. Управление - абсолютное или
относительное в зависимости от инструмента.
Контроллер Chorus Level
Задает глубину хорового эффекта. Управление - абсолютное или от-
носительное в зависимости от инструмента.
Контроллер Variation Level
Задает глубину эффекта, выбранного в качестве Variation. Управ-
ление - абсолютное или относительное в зависимости от инструмен-
та.
Контроллер-переключатель Sustain
Во включенном состоянии вызывает удержание звучания для всех
клавиш, отпущенных во время действия контроллера - по аналогии с
правой педалью фортепиано. Иными словами, в режиме Sustain канал
задерживает отработку последнего поступившего для каждой ноты
сообщения Note Off. В момент отключения одновременно отрабатыва-
ются все задержанные таким образом Note Off; на явно удержива-
емые в этот момент клавиши (для которых последним поступившим
сообщением является Note On) отключение режима не влияет.
Контроллер-переключатель Sostenuto
Действует подобно Sustain, но удерживает звучание только тех
нот, которые были нажаты на момент включения контроллера. После-
дующие нажатия и отпускания отрабатываются в обычном порядке.
Иначе говоря, откладывается отработка Note Off только для тех
нот, Note On для которых поступили до включения режима.
Контроллер-переключатель Soft
По аналогии с левой педалью фортепиано, вызывает смягчение зву-
чания для нот, нажатых во время действия режима. Способ реализа-
ции - простое уменьшение громкости или более тонкое управление -
определяется инструментом.
Контроллер-переключатель Portamento
При выключенном режиме каждая нажатая нота начинает звучать на
частоте, определяемой высотой ноты и установленными на данный
момент значениями контроллеров управления высотой (Pitch Bend
Change и Coarse/Fine Tune и т.п.). При включенном режиме очеред-
ная нота начинает звучать на частоте, определяемой последним со-
общением Note On или контроллером Portamento Control, затем ее
высота плавно изменяется до нужной со скоростью, определяемой
контроллером Portamento Time. Вне зависимости от того, было ли
скольжение выполнено до конца или прервано по отпусканию ноты,
последнее сообщение Note On всегда фиксируется в качестве исход-
ной высоты для последующих нот. Это означает, что если, напри-
мер, после ноты C2 была нажата нота C7, а затем - нота C4, то
высота второй ноты будет плавно повышаться от C2 до C7, а высота
третьей в то же время - понижаться от C7 до 50, и в качестве ис-
ходной для последующих нот будет принята нота 50. В момент нажа-
тия C7 эта нота зазвучит в унисон с C2 и начнет скользить в сто-
рону C7, а в момент нажатия ноты C4 та зазвучит с высотой C7 и
начнет скользить к C4. Все скольжения выполняются независимо.
Контроллеры RPN, NRPN и Data Entry
Дополнительно для расширенного управления синтезом введены заре-
гистрированные (Registered Parameter Number - RPN) и незарегис-
трированные (Non-Registered Parameter Number - NRPN) номера па-
раметров, передаваемые при помощи контроллеров:
98 - NRPN LSB (младший байт NRPN)
99 - NRPN MSB (старший байт NRPN)
100 - RPN LSB (младший байт RPN)
101 - RPN MSB (старший байт RPN)
Устройство запоминает однажды переданные ему RPN или NRPN, после
которых могут передаваться значения выбранного параметра при по-
мощи контроллеров:
6 - Data Entry MSB (ввод данных, старший байт)
38 - Data Entry LSB (ввод данных, младший байт)
96 - RPN Increment (увеличение RPN на 1, значение игнорируется)
97 - RPN Decrement (уменьшение RPN на 1, значение игнорируется)
Таким образом, механизм представляет собой "контроллер в кон-
троллере". Стандартом General MIDI определена интерпретация
только трех RPN, значения которых задаются старшими байтами па-
раметров Data Entry:
RPN 0 - Pitch Bend Sensitivity (чувствительность Pitch Bend)
RPN 1 - Fine Tuning (точная подстройка)
RPN 2 - Coarse Tuning (грубая подстройка)
Чувствительность Pitch Bend определяет количество полутонов, на
которое смещается высота тона при получении сообщения Pitch Bend
Change с предельным верхним или нижним значением параметра. По
умолчанию принимается диапазон в два полутона в любую сторону.
RPN подстройки позволяют сместить строй инструмента в канале на
заданное количество полутонов при грубой, или центов (сотых до-
лей полутона) - при точной подстройке. За относительный нуль
принимается значение 64.
Интерпретация остальных параметров стандартом не определена.
Специальные канальные сообщения
-------------------------------
Задаются контроллерами 120..127 и управляют обработкой сообщений
в каналах:
120 - All Sounds Off
121 - Reset All Controllers
122 vv - Local Control
123 - All Notes Off
124 - Omni Off
125 - Omni On
126 nn - Mono
127 - Poly
Обязательными к реализации в General MIDI определены только кон-
троллеры 121 и 123; реализация остальных перечисленных контрол-
леров определяется производителем. Кроме этого, многие устрой-
ства требуют, чтобы неиспользуемые значения контроллеров были
нулевыми.
Сообщение All Notes Off имитирует выключение всех включенных нот
и полностью эквивалентно посылке сообщения Note Off для каждой
звучащей ноты; будет ли при этом прекращено звучание ноты - за-
висит от состояния режимов Sustain и Sostenuto. Сообщение All
Sounds Off действует так же, но не зависит от режимов
Sustain/Sostenuto; кроме того, оно немедленно прекращает звуча-
ние всех нот, находящихся в стадии концевого затухания
(Release). Состояние самих режимов Sustain/Sostenuto эти сообще-
ния не затрагивают.
Сообщение Reset All Controllers устанавливает все контроллеры в
значения по умолчанию, и используется для начальной установки
устройства перед проигрыванием партитуры.
Сообщение Local Control служит для запрета/разрешения управления
устройством с локальной панели. Нулевое значение параметра зап-
рещает управление с панели (устройство управляется только по
MIDI), значение 127 разрешает его.
Сообщения Omni On/Off служат для включения/выключения режима
Omni - реакции устройства на канальные сообщения. При включенном
режиме Omni устройство обрабатывает сообщения для всех каналов,
при отключенном - только сообщения для выбранного канала (Basic
Channel). Это позволяет разделить устройства между каналами. Ка-
нал назначается устройству либо с его панели управления, либо
при помощи сообщений SysEx. Режим Omni имеет смысл в основном
для старых инструментов, имеющих один MIDI-канал и не поддержи-
вающих разделение тембров.
Сообщения Mono/Poly служат для переключения одноголосного и мно-
гоголосного (полифонического) режимов. В одноголосном режиме в
каждый момент времени может звучать только одна нота; включение
новой ноты приводит к принудительному отключению предыдущей. В
полифоническом режиме включение каждой новой ноты запускает оче-
редной свободный генератор, а при исчерпании генераторов новые
ноты либо игнорируются, либо приводят к принудительному выключе-
нию наиболее "старых" нот.
Значение nn в сообщении Mono воспринимается некоторыми устрой-
ствами, как количество MIDI-каналов, по которым, начиная с Basic
Channel, распределяются ноты в одноголосном режиме при выключен-
ном режиме Omni. Смысл этой группы каналов различен для переда-
ющих и принимающих устройств. Передающее устройство направляет
первую ноту в Basic Channel, следующую за ней - в Basic Channel
+ 1, и так далее, затем очередная нота снова направляется в
Basic Channel, и цикл повторяется. Приемное устройство восприни-
мает канальные сообщения только внутри заданной группы каналов,
каждый из которых работает в одноголосном режиме. Такой прием
позволяет реализовать многоголосное исполнение на синтезаторах,
имеющих жесткую привязку голосов (генераторов) к MIDI-каналам.
Контроллеры Omni, Mono и Poly вызывают также отработку контрол-
лера All Sounds Off.
От различных сочетаний режимов Omni, Poly и Mono происходят
четыре основных режиме работы (mode) MIDI-устройств:
1 - Omni On, Poly
2 - Omni On, Mono
3 - Omni Off, Poly
4 - Omni Off, Mono
Большинство современных устройств работает в mode 3 - полифони-
ческий режим с независимой работой каналов.
Program Change (pp - номер тембра или инструмента)
--------------------------------------------------
Служит для смены инструмента в канале. Параметр задает номер ин-
струмента (0..127) в текущем выбранном банке. Стандартом General
MIDI определены 128 основных мелодических и 47 ударных инстру-
ментов, собранных в нулевом банке; устройства с расширенным на-
бором инструментов имеют дополнительные банки, а также могут
иметь частично измененный основной набор.
Стандартные мелодические инструменты General MIDI разделены на
16 групп по 8 инструментов в каждой группе:
Piano Chrom Percussion
0 Acoustic Grand Piano 8 Celesta
1 Bright Acoustic Piano 9 Glockenspiel
2 Electric Grand Piano 10 Music Box
3 Honky-tonk Piano 11 Vibraphone
4 Electric Piano 1 12 Marimba
5 Electric Piano 2 13 Xylophone
6 Harpsichord 14 Tubular Bells
7 Clavinet 15 Dulcimer
Organ Guitar
16 Drawbar Organ 24 Acoustic Guitar (nylon)
17 Percussive Organ 25 Acoustic Guitar (steel)
18 Rock Organ 26 Electric Guitar (jazz)
19 Church Organ 27 Electric Guitar (clean)
20 Reed Organ 28 Electric Guitar (muted)
21 Accordion 29 Overdriven Guitar
22 Harmonica 30 Distortion Guitar
23 Tango Accordion 31 Guitar Harmonics
Bass Strings
32 Acoustic Bass 40 Violin
33 Electric Bass (finger) 41 Viola
34 Electric Bass (pick) 42 Cello
35 Fretless Bass 43 Contrabass
36 Slap Bass 1 44 Tremolo Strings
37 Slap Bass 2 45 Pizzicato Strings
38 Synth Bass 1 46 Orchestral Harp
39 Synth Bass 2 47 Timpani
Ensemble Brass
48 String Ensemble 1 56 Trumpet
49 String Ensemble 2 57 Trombone
50 Synth Strings 1 58 Tuba
51 Synth Strings 2 59 Muted Trumpet
52 Choir Aahs 60 French Horn
53 Voice Oohs 61 Brass Section
54 Synth Voice 62 Synth Brass 1
55 Orchestra Hit 63 Synth Brass 2
Reed Pipe
64 Soprano Sax 72 Piccolo
65 Alto Sax 73 Flute
66 Tenor Sax 74 Recorder
67 Baritone Sax 75 Pan Flute
68 Oboe 76 Bottle Blow
69 English Horn 77 Shakuhachi
70 Bassoon 78 Whistle
71 Clarinet 79 Ocarina
Synth Lead Synth Pad
80 Lead 1 (square) 88 Pad 1 (new age)
81 Lead 2 (sawtooth) 89 Pad 2 (warm)
82 Lead 3 (calliope) 90 Pad 3 (polysynth)
83 Lead 4 (chiff) 91 Pad 4 (choir)
84 Lead 5 (charang) 92 Pad 5 (bowed)
85 Lead 6 (voice) 93 Pad 6 (metallic)
86 Lead 7 (fifths) 94 Pad 7 (halo)
87 Lead 8 (bass + lead) 95 Pad 8 (sweep)
Synth Effects Ethnic
96 FX 1 (rain) 104 Sitar
97 FX 2 (soundtrack) 105 Banjo
98 FX 3 (crystal) 106 Shamisen
99 FX 4 (atmosphere) 107 Koto
100 FX 5 (brightness) 108 Kalimba
101 FX 6 (goblins) 109 Bagpipe
102 FX 7 (echoes) 110 Fiddle
103 FX 8 (sci-fi) 111 Shanai
Percussive Sound Effects
112 Tinkle Bell 120 Guitar Fret Noise
113 Agogo 121 Breath Noise
114 Steel Drums 122 Seashore
115 Woodblock 123 Bird Tweet
116 Taiko Drum 124 Telephone Ring
117 Melodic Tom 125 Helicopter
118 Synth Drum 126 Applause
119 Reverse Cymbal 127 Gunshot
Стандартные ударные инструменты General MIDI доступны в канале
10:
35 Acoustic Bass Drum 59 Ride Cymbal 2
36 Bass Drum 1 60 High Bongo
37 Side Kick 61 Low Bongo
38 Acoustic Snare 62 Mute High Conga
39 Hand Clap 63 Open High Conga
40 Electric Snare 64 Low Conga
41 Low Floor Tom 65 High Timbale
42 Closed High-Hat 66 Low Timbale
43 High Floor Tom 67 High Agogo
44 Pedal High Hat 68 Low Agogo
45 Low Tom 69 Cabasa
46 Open High Hat 70 Maracas
47 Low-Mid Tom 71 Short Whistle
48 High-Mid Tom 72 Long Whistle
49 Crash Cymbal 1 73 Short Guiro
50 High Tom 74 Long Guiro
51 Ride Cymbal 1 75 Claves
52 Chinese Cymbal 76 High Wood Block
53 Ride Bell 77 Low Wood Block
54 Tambourine 78 Mute Cuica
55 Splash Cymbal 79 Open Cuica
56 Cowbell 80 Mute Triangle
57 Crash Cymbal 2 81 Open Triangle
58 Vibraslap
Pitch Bend Change (ll - младший, mm - старший байт значения)
------------------------------------------------------------
Задает смещение высоты тона для всех нот в канале - как звуча-
щих, так и последующих. Значение, образованное двумя 7-разрядны-
ми величинами, изменяется в диапазоне 0..16383; среднее значение
- 8192 - принимается за относительный нуль, что дает условный
диапазон изменения -8192..8191. Чувствительность Pitch Bend мо-
жет изменяться при помощи RPN 0; по умолчанию принимается пре-
дельное смещение на два полутона в любую сторону.
Системные сообщения
===================
System Exclusive (SysEx)
Служат для передачи специальной информации определенным устрой-
ствам. В сообщении SysEx может передаваться любое количество
байтов. Признаком конца сообщения служит байт F7. Первые три
байта SysEx обычно содержат идентификатор производителя устрой-
ства (присваивается Ассоциацией Производителей MIDI-устройств -
MMA), номер устройства в сети (задается с пульта) и код модели
устройства (присваивается производителем). В остальном формат
сообщений определяется производителем - это могут быть команды,
параметры, оцифрованные инструменты, партитуры и т.п.
Шестнадцатеричные идентификаторы наиболее известных производите-
лей:
Sequential Circuits 01
Big Briar 02
Octave / Plateau 03
Moog 04
Passport Designs 05
Lexicon 06
PAIA 11
Simmons 12
Gentle Electric 13
Fairlight 14
Bon Tempi 20
S.I.E.L. 21
SyntheAxe 23
Kawai 40
Roland 41
Korg 42
Yamaha 43
SysEx "General MIDI On" (переключение в режим GM для устройств,
поддерживающих дополнительные стандарты): F0 7E 7F 09 01 F7.
SysEx "General Synth On" (переключение в режим Roland GS для ус-
тройств, поддерживающих этот стандарт): F0 41 10 42 12 40 00 7F
00 41 F7.
SysEx "XG System On" (переключение в режим Yamaha XG для ус-
тройств, поддерживающих этот стандарт): F0 43 1n 4C 00 00 7E 00
F7, где n - номер устройства в сети (устанавливается по-разному
для разных устройств, по умолчанию 0).
Ряд устройств требует, чтобы включение режимов GS и XG выполня-
лось из режима GM. Переключение между режимами обычно занимает
несколько десятков миллисекунд и вызывает также полный сброс
MIDI-системы устройства.
Tune Request
Предписывает выполнить автоматическую подстройку устройствам,
нуждающимся в ней. Обычно это относится к аналоговым синтезато-
рам, строй которых может смещаться из-за нестабильности управля-
ющих элементов.
Song Position Pointer (ll - младший, mm - старший байт)
Служит для установки позиции в партитуре для устройств, имеющих
встроенный секвенсор, автоаккомпанемент или ритм-блок. Задается
номером четвертной (quarter) ноты с начала партитуры.
Song Select (ss - условный номер партитуры)
Определяет, какая из существующих партитур будет проигрываться
при получении сообщения Start.
Start
Запускает прогрывание или запись выбранной партитуры с начала.
Stop
Останавливает проигрывание или запись партитуры.
Continue
Запускает проигрывание или запись партитуры с прерванного места,
либо с позиции, установленной с помощью Song Position Pointer.
Timing Clock
Служит для синхронизации устройств и передается с частотой 6 со-
общений на четвертную ноту. Генерация этого сообщения не являет-
ся обязательной для передающего устройства.
Active Sensing
Используется для проверки наличия связи внутри MIDI-сети. Гене-
рация сообщения не является обязательной для передающих ус-
тройств. В случае получения этого сообщения каждое приемное ус-
тройство переходит в режим слежения за MIDI-потоком, и в случае
отсутствия любых сообщений в течение 300 мс автоматически отра-
батывает контроллеры All Notes Off, All Sounds Off и Reset All
Controllers. Это позволяет прекратить работу в случае нарушения
связи в сети. Однако до первого прохождения этого сообщения по
сети устройства не следят за длительностью пауз между сообщени-
ями.
================================================================
Большое спасибо всем приславшим ответы, рекомендации, замечания
и советы для этого описания.
Текст описания в альтернативной кодировке доступен для FReq на
2:5000/14@FidoNet по имени MIDIDESC. Полный пакет FAQ и описаний
доступен на ftp://spider.nstu.nsk.su/pub/text/tech/emhwfaqs.zip
и через страницу FAQ на http://spider.nstu.nsk.su. Пакет рас-
пространяется также по FIDO fileecho XHRDDOCS.