169 реализация midi – Инструкция по эксплуатации Roland V-Synth
Страница 167
169
Реализация MIDI
Пр
ил
оже
н
и
я
Примеры эксклюзивных системных
сообщений и вычисления контрольной
суммы
Эксклюзивные сообщения Roland (RQ1, DT1) передаются с контрольной суммой в
конце (перед F7), что дает возможность подтвердить правильность приема.
Значение контрольной суммы определяется адресом и данными (или размером)
передающегося эксклюзивного сообщения.
Как
рассчитывать
контрольную
сумму
-
checksum
Литерой H помечены числа в шестнадцатеричном представлении.
Контрольная сумма - это величина, полученная сложением адреса, размера и самой
контрольной суммы, инвертируя нижние 7 бит.
Ниже приведен пример вычисления контрольной суммы. Мы предполагаем, что в
передаваемом нами эксклюзивном системном сообщении адресом является aa bb cc
ddH, а данные (или размер) - ee ffH.
aa + bb + cc + dd + ee + ff = sum (сумма)
sum ч 128 = quotient (частное) ... remainder (остаток)
128 - remainder = checksum (контрольная сумма)
Пример 1. Установка в патче типа хоруса CHORUS TYPE - CHORUS
1 (DT1)
В соответствии с “Карта адресов параметров” (стр. 159), начальный адрес
временного патча - 10 00 00 00H, смещение адреса (address offset) для PATCH CHORUS
в общей группе PATCH - 04 00H, а адрес типа хоруса - 00 00H. Поэтому адрес типа
хоруса в группе параметров PATCH CHORUS будет:
10 00 00 00H
04 00H
+) 00 00H
10 00 04 00H
CHORUS 1 имеет значение 01H.
Таким образом, эксклюзивное системное сообщение, которое следует послать, будет
таким:
F0
41
10
00 53
12
10 00 04 00
01
??
F7
(1)
(2)
(3)
(4)
(5)
адрес
данные контрольная (6)
сумма
(1) Статус эксклюзивного системного сообщения.
(2) Идентификация производителя (Roland)
(3) Идентификация прибора (17)
(4) Идентификация модели (V-Synth)
(5) Идентификация команды (данные DT1)
(6) Окончание эксклюзивного системного сообщения.
Теперь вычислим контрольную сумму.
10H + 00H + 04H + 00H + 01H = 16 + 0 + 4 + 0 + 1 = 21 (сумма)
21 (сумма) / 128 = 0 (частное) ... 21 (остаток)
контрольная сумма checksum = 128 - 21 (остаток) = 107 = 6BH
Это означает, что должно быть послано сообщение F0 41 10 00 53 12 10 00 04 00 01 6B F7.
Пример 2. Получение данных (RQ1) о мультиэффектах патча 003.
В соответствии с “Карта адресов параметров” (стр. 159), начальный адрес патча
PATCH:003 - 20 02 00 00H. Смещение адреса (offset address) для мультиэффектов
PATCH MFX - 00 02 00H.
Таким образом, начальный адрес для PATCH MFX в патче PATCH:003:
20 02 00 00H
+) 00 02 00H
20 02 02 00H
Так как размер PATCH MFX - 00 00 01 04H, следует послать эксклюзивное системное
сообщение:
F0
41
10
00 53
11
20 02 02 00
00 00 01 04
??
F7
(1)
(2)
(3)
(4)
(5)
адрес
данные контрольная (6)
сумма
(1) Статус эксклюзивного системного сообщения.
(2) Идентификация производителя (Roland)
(3) Идентификация прибора (17)
(4) Идентификация модели (V-Synth)
(5) Идентификация команды (запрос RQ1)
(6) Окончание эксклюзивного системного сообщения
Теперь вычислим контрольную сумму.
20H + 02H + 02H + 00H + 00H + 00H + 01H + 04H = 32 + 2 + 2 + 0 + 0 + 0 + 1 + 4
= 41 (сумма)
117 (сумма) / 128 = 0 (частное) ... 41 (остаток)
контрольная сумма checksum = 128 - 41 (остаток) = 87 = 57H
Это означает, что должно быть послано сообщение F0 41 10 00 53 11 20 02 02 00 00 00 01
04 57 F7.
Пример 3. Получение информации о временном патче (партия 1)
(RQ1)
Эта операция имеет то же назначение, что и функция Data Transfer в режиме Utility,
когда задана опция "PATCH:TEMP" в качестве исходного параметра (Source
Parameter).
В соответствии с “Карта адресов параметров” (стр. 159), начальный адрес
временного патча Temporary Patch следующий:
10 00 00 00
Temporary Patch (Part 1)
Смещение адреса (offset address) для патча:
00 00 00
Patch Common
:
00 10 00
Patch Oscillator (Zone 1)
:
00 20 00
Patch Envelope (Zone 1)
:
00 40 00
Patch LFO (Zone 1)
:
00 50 00
Patch COSM1 (Zone 1)
:
00 60 00
Patch COSM2 (Zone 1)
:
00 70 00
Patch Arpeggio (Note 1)
:
00 7F 00
Patch Arpeggio (Note 16)
Так как размер данных для арпеджио - 00 00 00 42H, суммирование размера и
начального адреса для арпеджио (Note 16) даст:
10 00 00 00H
00 00 7F 00H
+) 00 00 00 42H
10 00 7F 42H
А размер, которые следует получить, будет:
10 00 7F 42H
-) 10 00 00 00H
00 00 7F 42H
Поэтому следует послать эксклюзивное системное сообщение:
F0
41
10
00 53
11
10 00 00 00
00 00 7F 42
??
F7
(1)
(2)
(3)
(4)
(5)
адрес данные контрольная (6)
сумма
(1) Статус эксклюзивного системного сообщения.
(2) Идентификация производителя (Roland)
(3) Идентификация прибора (17)
(4) Идентификация модели (V-Synth)
(5) Идентификация команды (запрос RQ1)
(6) Окончание эксклюзивного системного сообщения.
Теперь вычислим контрольную сумму, как в примере 2. Получаем сообщение:
F0 41 10 00 53 11 10 00 00 00 00 00 7F 42 2F F7.