Перейти к основному содержанию

Сообщения RPN и NRPN

Несмотря на то, что среди сообщений второго уровня (т.е. сообщений Control Change) есть более 50 свободных (которые пока не определены), спецификацией предусмотрен и третий уровень кодирования.

Определено специальное сообщение Control Change, в байте данных которого передается номер сообщения третьего уровня. Этот номер задается двумя байтами данных: MSB и LSB. Сообщения третьего уровня могут быть двух типов: зарегистрированные параметры (RPN, Registered Parameter Numbers) и незарегистрированные параметры (NRPN, Non Registered Parameter Numbers). Первые кодируются с помощью пары Control Change #101 и Control Change #100, вторые — Control Change #99 и Control Change #98. Таким образом, третий уровень может содержать 16384 зарегистрированных параметров и 16384 незарегистрированных, то есть всего 32768 сообщений. 

Спецификация определяет назначение только для зарегистрированных параметров. Незарегистрированные параметры предназначены для свободного использования. Каждый производитель может использовать собственные номера NRPN. Roland и Yamaha использовали эту возможность в своих стандартах GS и XG.

Проблема, которая может возникнуть при использовании NRPN — несовместимость устройств. Так, одно устройство может применять NRPN номер 1 для настройки добротности эквалайзера, а другое — для изменения точки начала петли внутри семпла, и т.д. Поэтому, многие устройства позволяют отключить реакцию на NRPN.

Чтобы отправить сообщение третьего уровня, сначала нужно задать его номер, используя пару MSB: LSB. Например, для сообщения RPN номер 1 эта пара будет иметь вид 0:1. Следовательно, нужно послать в CC#101 значение 0, а в CC#100 — 1. Для передачи значения параметра есть специально выделенное сообщение Control Change под названием Data Entry: Control Change #6 (MSB) и Control Change #38 (LSB). Предположим, нам нужно задать параметру RPN номер 1 значение 500. Пара MSB:LSB в этом случае будет иметь вид 3:116 (128 x 3 + 116 = 500). Посылаем в CC#6 значение 3, а в CC#38 — 116. Если параметр не требует тонкой настройки, достаточно послать только MSB посредством контроллера CC#6.

Если нужно увеличить или уменьшить на единицу ранее переданное значение параметра, то для этого проще воспользоваться сообщениями Data Increment (СС#96) или Data Decrement (CC#97). Передавать заново пару MSB:LSB не нужно. Байт данных в сообщениях Data Increment/Decrement не используется и должен быть равен нулю. Пример использования контроллеров Data Entry и Data Increment/Decrement приведен далее, при рассмотрении конкретных сообщений.

Доступ к параметрам NRPN происходит аналогично, только номер параметра задается парой CC#101:СС#100.

Схема передачи сообщений разного уровня:

midi

Требуемое количество байт:

midi

Сообщения RPN

Сообщение Pitch Bend Sensitivity (#0) задает чувствительность звуковысотного колеса, точнее — диапазон изменения высоты тона от центрального значения. В MSB передаются полутона, в LSB — в центы (цент = полутон/100). Например, для настройки диапазона в +/-3 полутона и 8 центов (на первом MIDI-канале) последовательность байт показана на рис. (если центы не важны, LSB можно не посылать):

248

Сообщение Channel Fine Tuning (#1) раньше назывался просто Fine Tuning. С помощью него можно подстроить высоту тона для всего канала в центах. Значение 8192 (0x2000) означает стандартную настройку (то есть нота Ля первой октавы имеет частоту 440 Гц). Значение 0 — строй понижается на 100 центов, 16383 (0x7F7F) — повышается на 100 центов.

Например, если мы работаем на седьмом MIDI-канале и хотим понизить строй партии на 15 центов. Рассчитаем, какое значение нужно передать в сообщении Channel Fine Tuning (RPN #1). Стандартной настройке соответствует значение 8192, понижению на 100 центов — 0. Следовательно, для понижения партии на 15 центов нужно 8192 умножить на 15/100. Получится 1228,8. Дробную часть мы передать не можем, поэтому округляем до 1229. Преобразуем это число в MSB и LSB: MSB = 1229 / 128 = 9, LSB = 1229 - (9 x 128) = 77. Последовательность байт показана на рис.:

249

Если понадобится изменить настройку на 1, можно воспользоваться сообщением Data Increment или Data Decrement, а не посылать MSB и LSB заново (см. рис. ниже). Сообщение Data Increment/Decrement работает по отношению к тому RPN, который последний подвергался настройке (если последним был NRPN, то по отношению к нему).

250

Сообщение Channel Coarse Tuning (#2) раньше назывался Coarse Tuning. С помощью него строй можно менять шагами по 100 центов (т. е. в полутонах). Используется только MSB: значение 64 (0x40) означает стандартную настройку, значение 0 — строй понижается на 6400 центов (64 полутона), 127 (0x7F) — повышается на 6300 центов (63 полутона).

Сообщения #3 и #4 (Tuning Program Change и Tuning Bank Select соответственно) используются в устройствах, которые отвечают спецификации MIDI Tuning (рассмотрим ее отдельно). Как и тембры, строи организуются в программы и банки. RPN 3 и 4 работают по аналогии с сообщениями Program Change и Bank Select, то есть позволяют выбрать для канала конкретный строй.

Наконец, предусмотрено служебное сообщение RPN Reset (#16383). Представьте такую ситуацию: вы выбрали RPN #1 для тонкой подстройки партии. После чего установили какое-либо значение в центах (путем использования контроллеров Data Entry или Data Increment/Decrement) и спокойно продолжаете работать. Принимающее устройство все это время считает текущим RPN #1, и будет так считать до тех пор, пока явно не будет задан новый RPN сообщениями RPN MSB и RPN LSB.

Если в то время, пока активен RPN #1, случайно будет изменено значение Data Entry или Data Increment/Decrement, то у вас собьется настройка партии! Для того, чтобы избежать подобных случайностей и используется сообщение RPN Reset. После его получения значение «последнего активного RPN» обнуляется, и значения Data Entry и Data Increment/Decrement перестают на него влиять . Обычно рекомендуется всегда посылать RPN Reset после завершения настройки какого-либо RPN.

Пример использования RPN Reset на первом MIDI-канале при понижении стандартной настройки на полутон:

251