Продолжение. Начало см. в #5/98.
Все 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 позднее был разработан стандарт GM (General MIDI - единый MIDI), устанавливающий условия обязательной совместимости инструментов и интерпретации номеров программ и контроллеров, а затем и расширяющие его стандарты GS и XG. Однако общность инструментов в рамках каждого стандарта подразумевает только основные звуковые характеристики. "Одинаковые" тембры у различных инструментов почти всегда имеют различные окраску, динамику, яркость, громкость по умолчанию и иные особенности, а "синтетические" тембры могут абсолютно не совпадать. Кроме того, разными могут быть также зависимость характера звука от силы удара по клавише, динамика работы 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 (приглушение звука).
Два контроллера предусмотрены cтандартом Roland GS (General Synth):
91 - Reverb Level (глубина реверберации);
93 - Chorus Level (глубина хорового эффекта).
Его дополняет стандарт Yamaha XG (eXtended & General):
71 - Harmonic Content (содержание гармоник, добротность фильтра);
72 - Release Time (время затухания звука после выключения ноты);
73 - Attack Time (время нарастания звука после включения ноты);
74 - Brightness (яркость, частота среза фильтра);
84 - Portamento Control (номер ноты начала скольжения);
94 - Variation Level (глубина эффекта Variation);
96 - RPN Increment (увеличение RPN на единицу, значение игнорируется);
97 - RPN Decrement (уменьшение RPN на единицу, значение игнорируется).
Почти все контроллеры, стандартизированные в XG, прежде уже успели стать стандартом де-факто во многих инструментах.
Назначение и основные характеристики контроллеров
Bank SelectЭто контроллеры выбора инструментальных банков. Многие устройства могут работать с большим числом встроенных и дополнительных тембров (инструментов) и звуковых эффектов, которые для удобства объединены в банки. В каждый момент времени в канале может использоваться только один банк. Для переключения банков служат контроллеры:
0 - Bank Select MSB (выбор банка, старший байт);
32 - Bank Select LSB (выбор банка, младший байт).
В каких-то устройствах для переключения достаточно одного из них, в других требуются оба. Поведение самих устройств в этом отношении зависит от режима работы. По умолчанию устанавливается нулевой банк. После смены банка обязательна посылка сообщения Program Change для выбора тембра (инструмента). Отработка устройством команды смены банка и инструмента может занять значительное время (десятки миллисекунд и более). Некоторые устройства при получении такой команды гасят звучащие ноты в канале.
ModulationЗадает глубину частотной модуляции в канале. Управление абсолютное. Значение 0 отключает модуляцию, а 127 устанавливает ее максимальную глубину. Стандартное значение - 0. Действует на последующие и уже звучащие ноты.
Portamento TimeЗадает время плавного скольжения между частотами предыдущей и очередной нот. Управление абсолютное. Значение 0 соответствует минимальному времени, 127 - максимальному. Стандартное значение не определено.
Евгений Музыченко
- специалист лаборатории "Системы мультимедиа" (MSG), Новосибирск, НТК "Велгас".
Тел.: (3832) 21-61-64, 2:5000/14@FidoNet, e-mail: music@spider.nstu.nsk.su
Продолжение см. в следующем номере.