168 реализация midi 4. вспомогательный материал, Примеры реальных сообщений midi – Инструкция по эксплуатации Roland V-Synth

Страница 166

Advertising
background image

168

Реализация MIDI

4. Вспомогательный материал

Таблица соответствия десятичных и

шестнадцатеричных чисел

Всегда,

когда

число

оканчивается

на "H", это

число

представлено

в

шестнадцатеричной системе.
В документации MIDI значения данных, адреса и размеры для эксклюзивных систем-
ных сообщений представляются в шестнадцатеричной системе для каждых 7 бит.
Следующая таблица представит соответствие десятичных и шестнадцатеричных
чисел.

+——————+——————++——————+——————++——————+——————++——————+——————+

| D | H || D | H || D | H || D | H |

+——————+——————++——————+——————++——————+——————++——————+——————+

| 0 | 00H || 32 | 20H || 64 | 40H || 96 | 60H |

| 1 | 01H || 33 | 21H || 65 | 41H || 97 | 61H |

| 2 | 02H || 34 | 22H || 66 | 42H || 98 | 62H |

| 3 | 03H || 35 | 23H || 67 | 43H || 99 | 63H |

| 4 | 04H || 36 | 24H || 68 | 44H || 100 | 64H |

| 5 | 05H || 37 | 25H || 69 | 45H || 101 | 65H |

| 6 | 06H || 38 | 26H || 70 | 46H || 102 | 66H |

| 7 | 07H || 39 | 27H || 71 | 47H || 103 | 67H |

| 8 | 08H || 40 | 28H || 72 | 48H || 104 | 68H |

| 9 | 09H || 41 | 29H || 73 | 49H || 105 | 69H |

| 10 | 0AH || 42 | 2AH || 74 | 4AH || 106 | 6AH |

| 11 | 0BH || 43 | 2BH || 75 | 4BH || 107 | 6BH |

| 12 | 0CH || 44 | 2CH || 76 | 4CH || 108 | 6CH |

| 13 | 0DH || 45 | 2DH || 77 | 4DH || 109 | 6DH |

| 14 | 0EH || 46 | 2EH || 78 | 4EH || 110 | 6EH |

| 15 | 0FH || 47 | 2FH || 79 | 4FH || 111 | 6FH |

| 16 | 10H || 48 | 30H || 80 | 50H || 112 | 70H |

| 17 | 11H || 49 | 31H || 81 | 51H || 113 | 71H |

| 18 | 12H || 50 | 32H || 82 | 52H || 114 | 72H |

| 19 | 13H || 51 | 33H || 83 | 53H || 115 | 73H |

| 20 | 14H || 52 | 34H || 84 | 54H || 116 | 74H |

| 21 | 15H || 53 | 35H || 85 | 55H || 117 | 75H |

| 22 | 16H || 54 | 36H || 86 | 56H || 118 | 76H |

| 23 | 17H || 55 | 37H || 87 | 57H || 119 | 77H |

| 24 | 18H || 56 | 38H || 88 | 58H || 120 | 78H |

| 25 | 19H || 57 | 39H || 89 | 59H || 121 | 79H |

| 26 | 1AH || 58 | 3AH || 90 | 5AH || 122 | 7AH |

| 27 | 1BH || 59 | 3BH || 91 | 5BH || 123 | 7BH |

| 28 | 1CH || 60 | 3CH || 92 | 5CH || 124 | 7CH |

| 29 | 1DH || 61 | 3DH || 93 | 5DH || 125 | 7DH |

| 30 | 1EH || 62 | 3EH || 94 | 5EH || 126 | 7EH |

| 31 | 1FH || 63 | 3FH || 95 | 5FH || 127 | 7FH |

+——————+——————++——————+——————++——————+——————++——————+——————+

D: Число в десятичной системе
H: Число в шестнадцатеричной системе.

*

Десятичные значения таких параметров, как канал MIDI, номер банка Bank Select,
номер программы Program Change нумеруются числом на один больше, чем в
указанной таблице.

*

7 бит могут предоставить точность 127 шагов. Для тех параметров, где требуется
еще большая точность, используются два или более байт. Например, два
шестнадцатеричных числа aa bbH, представляющие две группы по 7 байт, дают
значение aa*128+bb. При этом aa называется старший байт (MSB - Most Significant
Byte), а bb - младший байт (LSB - Less Significant Byte).

*

В случае, если параметры должны принимать также и отрицательные значения,
принимается, что 00H соответствует -64, 40H=+/-0, а 7F=+63. Таким образом,
десятичное представление будет на 64 меньше величины, данной в этой таблице. В
случае парных значений 00 00H будет соответствовать значению -8192, 40 00H = +/-0,
а 7F 7FH=+8191. Например, если требуется в десятичном представлении получить
значение параметра, следует воспользоваться формулой aa bbH - 40 00H = aa * 128 +
bb - 64*128.

*

Данные, помеченные как оборванные надписью "Use nibbled data" выражены в
шестнадцатеричной форме по 4х-битовым единицам. Данные, выраженные 2-
байтовым числом 0a 0bh, имеют значения 16a+b.

Пример 1. Каково десятичное представление числа 5AH?

Из вышеприведенной таблицы находим, что 5AH = 90.

Пример 2. Каково десятичное представление числа 12 34H,

данное в виде шестнадцатеричного представления каждых 7
бит?

Из предыдущей таблицы имеем 12H = 18 and 34H = 52
Таким образом, по формуле 18 x 128+52 = 2356

Пример 3. Каково десятичное представление оборванного

(nibbled) шестнадцатеричного числа 0A 03 09 0D?

Из выше приведенной таблицы 0AH = 10, 03H = 3, 09H = 9, 0DH = 13
((10 x 16+3) x 16+9) x 16+13 = 41885

Пример 4. Каково "оборванное" (nibbled) шестнадцатеричное

представление десятичного числа 1258?

16 ) 1258

16 ) 78 ...10

16 ) 4 ...14

0 ... 4

Так как из вышеприведенной таблицы 0+00H, 4=04H, 14=0EH, 10=0AH, результат будет
00 04 0E 0AH.

Примеры реальных сообщений MIDI

<Пример 1> 92 3E 5F

9n - это нажатие ноты (Note-on status), где n - это номер канала MIDI. Так как 2H = 2,
3EH = 62, а 5FH = 95, это сообщение означает, что нажата нота на 3м канале MIDI, нота
номер 62 (что соответствует D4 - ре второй октавы), со скоростью нажатия velocity - 95.

<Пример 2> CE 49

CnH - это изменение номера программы, где n - это номер канала MIDI. Так как EH =
14, а 49H = 73, это изменение программы на 14м канале на номер 74.

<Пример 3> EA 00 28

EnH - это изменение подтяжки тона, где n - номер канала MIDI. 2й байт (00H=0) - это
младший байт значения изменения тона (Pitch Bend LSB), а третий байт (28H=40) -
старший байт. Но величина подтяжки тона может быть отрицательной, поэтому
нулем является 40 00H = 64 x 12+80 = 8192. Таким образом, значение подтяжки тона в
данном случае будет 28 00H - 40 00H = 40 * 12+80 - (64 * 12+80) = 5120 - 8192 = -3072.

Если задан максимальный интервал подтяжки тона, равный двум полутонам
(большая секунда), то есть максимальное значение -8192 (00 00H) повлечет за собой
изменение высоты на 200 центов (100 центов - один полутон), то такое значение
повлечет изменение тона на -200 x (-3072) / (-8192) = -75 центов для 11-го канала.

<Пример 4> B3 64 00 65 00 06 0C 26 00 64 7F 65 7F

BnH - это изменение контроллера Control Change, где n - это номер канала MIDI. Для
контроллеров 2-й байт - это номер контроллера, а 3-й байт - его значение. В случае,
если два или более следующих друг за другом сообщения имеют тот же статус,
спецификация MIDI имеет положение "running status', позволяющее опускать байт
статуса в последующих сообщениях. Таким образом, вышеприведенные сообщения
имеют следующие значения.

B3

64 00

MIDI канал 4, младший байт номера параметра RPN: 00H

(B3)

65 00

(MIDI канал 4) старший байт номера параметра RPN: 00H

(B3)

06 0C

(MIDI канал 4) старший байт значения параметра RPN: 0CH

(B3)

26 00

(MIDI канал 4) младший байт значения параметра RPN: 00H

(B3)

64 7F

(MIDI канал 4) младший байт номера параметра RPN: 7FH

(B3)

65 7F

(MIDI канал 4) младший байт номера параметра RPN: 7FH

Другими словами, приведенное выше сообщение задает величину 0C 00H для
параметра RPN номер 00 00H для 4-го канала MIDI, а затем устанавливает номер
параметра RPN 7F 7FH.

Параметр RPN номер 00 00H задает максимальный диапазон подтяжки тона (Pitch
Bend Sensitivity), а старший байт значения задает этот интервал в полутонах. Таким
образом, задан интервал 0CH=12, то есть максимальный диапазон подтяжки тона
равен 12 полутонам, то есть одной октаве. На звуковых генераторах GS младший тон
ни на что не влияет, однако он обязательно должен передаваться со значением 0,
чтобы операция была корректна на любом устройстве.

После того, как задан номер параметра для RPN или NPRN, будут приниматься все
сообщения с данными Data Entry, передаваемые по тому же каналу. Поэтому во
избежание случайностей неплохим решение будет установить номер параметра 7F
7FH. Это и является причиной того, что в конце сообщения размещены (B3) 64 7F (B3)
65 7F.

В целом для потока исполнительских данных, таких как стандартный файл MIDI
(SMF) нежелательно содержать много событий с текущим статусом (running status),
как указано в примере 4. Например, если воспроизведение будет приостановлено,
или переведено на другую точку, секвенсор может некорректно передать статус
сообщения, а звуковой генератор будет неверно интерпретировать полученные
сообщения. Постарайтесь организовать данные таким образом, чтобы каждое
событие имело свой собственный статус.

Также необходимо следить, чтобы номера параметров RPN и NPRN имели верный
порядок. На некоторых секвенсорах, события, которые приходятся на тот же самый
(или последующий) кадр (или тик - tic, минимальная единица в дискретном
представлении времени в секвенсорах), могут передаваться в ином порядке, чем они
были получены. Поэтому неплохим решением будет слегка разнести все события по
времени (на один тик для разрешения TPQN=96 и где-то на 5 тиков для разрешения
TPQN=480).

*

Разрешение TPQN - Ticks Per Quarter Note, то есть количество тиков на четвертную
ноту.

Advertising