Описание канальных
сообщений:
Note On (nn - номер ноты, vv - скорость
(velocity) нажатия) Note Off (nn - номер ноты, vv -
скорость отпускания)
Cообщает о включении/выключении
звучания ноты. 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 - величина
давления)
Cообщает об изменении силы
давления (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 (специальные канальные сообщения), которые везде имеют одинаковое
значение.
Стандартом MIDI рекомендована
следующая нумерация контроллеров: 0 - Bank Select MSB (выбор банка, старший байт)
1 - Modulation (глубина частотной модуляции)
2 - Breath Control (данные с духового контроллера)
4 - Foot Pedal (данные с ножной педали)
5 - Portamento Time (время скольжения от ноты к ноте)
6 - Data Entry MSB (ввод данных, старший байт)
7 - Main Volume (громкость всех звуков в канале)
8 - Balance (баланс)
10 - Pan (панорама - положение инструмента на стерепанораме)
11 - Expression (экспрессивность, выразительность звука)
16 - AC1 (Assignable Controller - назначаемый контроллер)
17 - AC2
18 - AC3
19 - AC4
32 - Bank Select LSB (выбор банка, младший байт)
38 - Data Entry LSB (ввод данных, младший байт)
64 - Sustain Pedal, Hold1 (удержание звучания всех отпущенных нот)
65 - Portamento (включение/выключение режима портаменто)
66 - Sostenuto Pedal (удержание звучания отдельных нот (аккорда))
67 - Soft Pedal (приглушение звука)
80 - AC5
81 - AC6
82 - AC7
83 - AC8
91 - External Effects Depth (глубина внешних эффектов)
92 - Tremelo Depth (глубина тремоло - амплитудного вибрато)
93 - Chorus Depth (глубина хорового эффекта)
94 - Detune Depth (глубина расстройки)
95 - Phaser Depth (глубина эффекта фейзера)
96 - Data Increment (увеличение значения)
97 - Data Decrement (уменьшение значения)
98 - NRPN LSB (номер незарегистрированного параметра, младший байт)
99 - NRPN MSB (номер незарегистрированного параметра, старший байт)
100 - RPN LSB (номер зарегистрированного параметра, младший байт)
101 - RPN MSB (номер зарегистрированного параметра, старший байт)
Поддержка устройством конкретных
видов контроллеров определяется спецификацией устройства или стандарта, в
рамках которого оно разработано.
Обычно, когда непрерывный
контроллер используется для плавного управления каким-либо параметром
звука, этот параметр пропорционально зависит от значения контроллера.
Используются два основных способа управления параметрами звука: абсолютный
и относительный. При абсолютном способе параметр полностью зависит от
установленного значения контроллера; при относительном способе имеется
некоторое стандартное значение параметра, соответствующее "нейтральному"
значению контроллера - 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
Многие устройства требуют, чтобы
неиспользуемые значения контроллеров были нулевыми.
Сообщение 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) в текущем выбранном банке. Последующие ноты
будут исполняться выбранным тембром, тембр уже звучащих в канале нот не
изменяется.
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
Cпециальные идентификаторы
сообщений, помещаемые в первый байт SysEx: 7F - универсальное сообщение реального времени;
7E - универсальное сообщение для настройки.
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. Это позволяет прекратить работу в случае нарушения связи в
сети. Однако до первого прохождения этого сообщения по сети устройства не
следят за длительностью пауз между сообщениями.
Описание работы
контроллеров
Контроллеры Bank Select
Многие устройства могут работать
с большим количеством встроенных и дополнительных тембров (инструментов) и
звуковых эффектов, которые для удобства объединены в банки. В каждый
момент времени в одном канале может использоваться только один банк; для
переключения банков служат контроллеры: 0 - Bank Select MSB (выбор банка, старший байт)
32 - Bank Select LSB (выбор банка, младший байт)
Одни устройства требуют для
переключения банков только один из этих контроллеров, другие требуют оба.
Поведение некоторых устройств в этом отношении может изменяться в
различных режимах работы.
По умолчанию устанавливается
нулевой банк (в устройствах, совместимых с General MIDI, он содержит
мелодические тембры GM). После смены банка обязательна посылка сообщения
Program Change для выбора тембра (инструмента).
Обработка устройством команды
смены банка и инструмента может занять значительное время (десятки
миллисекунд и более). Некоторые устройства при получении команд смены
банков и инструментов гасят звучащие ноты в канале.
Контроллер Modulation
Задает глубину частотной
модуляции в канале. Управление абсолютное. Значение 0 отключает модуляцию,
значение 127 устанавливает максимальную глубину. Стандартное значение - 0.
Действует на последующие и уже звучащие ноты.
Контроллер Breath Control
Передает воздействия на духовой
контроллер, обычно выполняемый в виде мундштука - значение отражает силу
воздушного потока, вдуваемого в мундштук. Духовой контроллер может быть
как автономным, так и совмещенным с другим MIDI-устройством
(MIDI-саксофон, MIDI-флейта).
Контроллер Foot Pedal
Передает воздействия на ножную
педаль - значение пропорционально силе давления на педаль или глубине ее
погружения.
Контроллер 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
Задает глубину выбранного
эффекта типа реверберации (основанного на постоянной задержке сигнала) -
Room, Hall, Delay, Echo и т.п. Управление - абсолютное или относительное в
зависимости от инструмента.
Контроллер Chorus Level
Задает глубину эффекта типа
хорового (основанного на переменной задержке сигнала) - Chorus, Flanger,
Phaser и т.п. Управление - абсолютное или относительное в зависимости от
инструмента.
Контроллер 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 (ввод данных, младший байт)
На сообщения, передающие
значение старшего или младшего байта параметра, устройства реагируют
немедленно, используя в качестве недостающего байта либо ранее переданное,
либо установленное по умолчанию значение. Это можно использовать для
передачи значений, отличающихся только одним байтом, передавая только
изменившийся байт.
Для отмены ранее зафиксированных
номеров RPN и NRPN служит резервный номер RPN 16383 - после посылки
контроллеров 100 и 101 со значениями 127 контроллеры Data Entry
отключаются от ранее назначенных RPN и NRPN.
Таким образом, механизм
представляет собой "контроллер в контроллере". Стандартом 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.
Интерпретация остальных
параметров стандартом GM не определена. В ряде инструментов для раздельной
подстройки отдельных инструментов в различных банках используются также
два дополнительных RPN: RPN 3 - Tuning Program Select
RPN 4 - Tuning Bank Select
|