4. Material suplementario
Tabla Decimal/Hexadecimal
El lenguaje MIDI utiliza valores hexadecimales de 7-bits para indicar los valores de datos y
la dirección y el tamaño de los mensajes exclusive. La siguiente tabla muestra la
correspondencia entre los números decimales y hexadecimales.
* Los valores hexadecimales se indican mediante la letra: 'H'.
+——————+——————++——————+——————++——————+——————++——————+——————+
|
D
|
H
||
D
|
H
+——————+——————++——————+——————++——————+——————++——————+——————+
|
0 |
00H ||
32 |
20H ||
|
1 |
01H ||
33 |
21H ||
|
2 |
02H ||
34 |
22H ||
|
3 |
03H ||
35 |
23H ||
|
4 |
04H ||
36 |
24H ||
|
5 |
05H ||
37 |
25H ||
|
6 |
06H ||
38 |
26H ||
|
7 |
07H ||
39 |
27H ||
|
8 |
08H ||
40 |
28H ||
|
9 |
09H ||
41 |
29H ||
|
10 |
0AH ||
42 |
2AH ||
|
11 |
0BH ||
43 |
2BH ||
|
12 |
0CH ||
44 |
2CH ||
|
13 |
0DH ||
45 |
2DH ||
|
14 |
0EH ||
46 |
2EH ||
|
15 |
0FH ||
47 |
2FH ||
|
16 |
10H ||
48 |
30H ||
|
17 |
11H ||
49 |
31H ||
|
18 |
12H ||
50 |
32H ||
|
19 |
13H ||
51 |
33H ||
|
20 |
14H ||
52 |
34H ||
|
21 |
15H ||
53 |
35H ||
|
22 |
16H ||
54 |
36H ||
|
23 |
17H ||
55 |
37H ||
|
24 |
18H ||
56 |
38H ||
|
25 |
19H ||
57 |
39H ||
|
26 |
1AH ||
58 |
3AH ||
|
27 |
1BH ||
59 |
3BH ||
|
28 |
1CH ||
60 |
3CH ||
|
29 |
1DH ||
61 |
3DH ||
|
30 |
1EH ||
62 |
3EH ||
|
31 |
1FH ||
63 |
3FH ||
+——————+——————++——————+——————++——————+——————++——————+——————+
D: decimal
H: hexadecimal
*
Las expresiones decimales como las usadas para canal MIDI, Selección de Banco y Cambio de
Programa tendrán un valor 1 mayor que el valor decimal dado en la tabla superior.
* Debido a que cada byte MIDI contiene 7 bits de datos característicos, cada byte puede
expresar un máximo de 128 valores distintos. Los datos para los que es necesaria mayor
resolución, deben transmitirse usando dos o más bytes. Por ejemplo, un valor indicado
como un valor de 2 bytes aa bbH tendría un valor de aa x 128 + bb.
* Para un número marcado (±), 00H = -64, 40H = ±0, and 7FH = +63. I.e., el decimal
equivalente tendrá un valor 64 inferior que el valor decimal dado en la tabla superior.
En un número de dos bits, 00 00H = -8192, 40 00H = ±0, y 7F 7FH = +8191. Por ejemplo, la
expresión decimal de aa bbH sería aa bbH - 40 00H = aa x 128 + bb - 64 x 128.
<Ejemplo 1> Cual es el equivalente decimal de 5AH?
De la tabla superior, 5AH = 90.
<Ejemplo 2> Cual es el equivalente decimal de los valores hexadecimales
de 7-bits 12 34H?
De la tabla superior, 12H = 18 y 34H = 52
Por lot tanto, 18 x 128 + 52 = 2356
Ejemplos de mensajes MIDI Reales
<Ejemplo 1> 92 3E 64
9n es el estado Note On y `n' es el número de canal MIDI. Debido a que 2H = 2, 3EH = 62, y
64H = 100, se trata de un mensaje Note On de MIDI CH = 3, número de nota 62 (nombre de
nota D4) y velocity 100.
<Ejemplo 2> C0 15
CnH es el estado Program Change y 'n' es el número de canal MIDI. Debido a que 0H = 0, y 15H
= 21, se trata de un mensaje de Program Change de MIDI CH = 1, número de Programa 22.
||
D
|
H
||
D
|
H
64 |
40H ||
96 |
60H |
65 |
41H ||
97 |
61H |
66 |
42H ||
98 |
62H |
67 |
43H ||
99 |
63H |
68 |
44H ||
100 |
64H |
69 |
45H ||
101 |
65H |
70 |
46H ||
102 |
66H |
71 |
47H ||
103 |
67H |
72 |
48H ||
104 |
68H |
73 |
49H ||
105 |
69H |
74 |
4AH ||
106 |
6AH |
75 |
4BH ||
107 |
6BH |
76 |
4CH ||
108 |
6CH |
77 |
4DH ||
109 |
6DH |
78 |
4EH ||
110 |
6EH |
79 |
4FH ||
111 |
6FH |
80 |
50H ||
112 |
70H |
81 |
51H ||
113 |
71H |
82 |
52H ||
114 |
72H |
83 |
53H ||
115 |
73H |
84 |
54H ||
116 |
74H |
85 |
55H ||
117 |
75H |
86 |
56H ||
118 |
76H |
87 |
57H ||
119 |
77H |
88 |
58H ||
120 |
78H |
89 |
59H ||
121 |
79H |
90 |
5AH ||
122 |
7AH |
91 |
5BH ||
123 |
7BH |
92 |
5CH ||
124 |
7CH |
93 |
5DH ||
125 |
7DH |
94 |
5EH ||
126 |
7EH |
95 |
5FH ||
127 |
7FH |
Ejemplos de mensajes Sytem Exclusive y cálculo
de Checksum
Los mensajes exclusive Roland (RQ1, DT1) se transmiten con un parámetro checksum al final de
los datos (anterior a F7) para comprobar que los datos se recibieron correctamennte. El valor del
checksum viene determinado por la dirección y los datos (o tamaño) del mensaje Exclusive.
Cómo calcular el Checksum
El parámetro checksum consiste en un valor cuyos 7 bits inferiores son 0 al añadir el
|
tamaño, la dirección y el própio checksum. La siguiente fórmula muestra cómo calcular el
Checksum cuando el mensaje Exclusive a transmitir tiene una dirección: aa bb cc ddH, y
datos o tamaño ee ffH.
aa + bb + cc + dd + ee + ff = total
total ÷ 128 = cociente ... resto
128 -resto = checksum
<Ejemplo 1> Gire el interruptor Temporary Registration Organ percussion ON (DT1).
"Parámeter address map (MODEL ID = 00 4DH)" (Pág. 59) indica que la dirección de inicio
del Registro Temporal es 10 00 00 00H, que la dirección por defecto del parámetro de
Registro del Órgano es 10 00H, y que la dirección "PERCUSSION SWITCH" es 00 14H.
Por lo tanto la dirección es:
10 00 00 00H
10 00H
+)
00 14H
---------------
10 00 10 14H
Debido a que "ON" es un parámetro de valor 01H,
F0
41
10
(1)
(2)
(3)
(1) Estado Exclusive
(2) Número ID (Roland)
(3) ID del dispositivo (17)
(4) ID del Modelo (VK-8, VK-8M)
(5) ID de órdenes (DT1)
(6) EOX
A continuación calculamos el checksum.
10H + 00H + 10H + 14H + 01H = 16 + 0 + 16 + 20 + 1 = 53 (sum)
53 (total) ÷ 128 = 0 (cociente)... 53 (resto)
checksum = 128 - 53 (cociente) = 75 = 4BH
Esto significa que el mensaje transmitido será F0 41 10 00 4D 12 10 00 10 14 01 4B F7.
<Ejemplo 2> Obtención de los datos del parámetro preset organ para
Registro de Usuario: 02 (RQ1).
"Parámeter address map (MODEL ID = 00 4DH)" (Pág. 59) indica que la dirección de inicio
del Registro Temporal es 10 00 00 00H, que la dirección por defecto del parámetro de
Registro del Órgano es 10 00H, y que la dirección "PERCUSSION SWITCH" es 00 14H.
Por lo tanto la dirección es:
20 01 00 00H
+)
10 00H
---------------
20 01 10 00H
Debido a que el tamaño de la parte de interpretación es 00 00 00 1AH,
F0
41
10
(1)
(2)
(3)
(1) Estado Exclusive
(2) Número ID (Roland)
(3) ID del dispositivo (17)
(4) ID del Modelo (VK-8, VK-8M)
(5) ID de órdenes (DT1)
(6) EOX
A continuación calculamos el checksum.
20H + 01H + 10H + 00H + 00H + 00H + 00H + 1AH =
32 + 1 + 16 + 0 + 0 + 0 + 0 + 26 = 75 (sum)
75 (total) ÷ 128 = 0 (producto)... 75 (resto)
checksum = 128 - 75 (resto) = 53 = 35H
Por lo tanto, se transmitiría un mensaje F0 41 10 00 4D 11 20 01 10 00 00 00 00 1A 35 F7.
I I I I m m m m p p p p l l l l e e e e m m m m e e e e n n n n t t t t a a a a c c c c i i i i ó ó ó ó n n n n M M M M I I I I D D D D I I I I
00 4D
12
10 00 10 14
01
(4)
(5)
dirección
datos checksum
00 4D
11
20 01 10 00
00 00 00 1A
(4)
(5)
dirección
datos
??
F7
(6)
??
F7
checksum
(6)
6 6 6 6 1 1 1 1