Implementación MIDI
+——————————————————————————————————————————————————————————————————————————————+
| Start
|
|
Address |
Description
|—————————————+————————————————————————————————————————————————————————————————|
|
41 m0 00 | 0aaa aaaa | Drum Map Name 1
|
|
|
|
41 m0 01 | 0aaa aaaa | Drum Map Name 2
|
|
|
|
41 m0 02 | 0aaa aaaa | Drum Map Name 3
|
|
|
|
41 m0 03 | 0aaa aaaa | Drum Map Name 4
|
|
|
|
41 m0 04 | 0aaa aaaa | Drum Map Name 5
|
|
|
|
41 m0 05 | 0aaa aaaa | Drum Map Name 6
|
|
|
|
41 m0 06 | 0aaa aaaa | Drum Map Name 7
|
|
|
|
41 m0 07 | 0aaa aaaa | Drum Map Name 8
|
|
|
|
41 m0 08 | 0aaa aaaa | Drum Map Name 9
|
|
|
|
41 m0 09 | 0aaa aaaa | Drum Map Name 10
|
|
|
|
41 m0 0A | 0aaa aaaa | Drum Map Name 11
|
|
|
|
41 m0 0B | 0aaa aaaa | Drum Map Name 12
|
|
|
|—————————————+———————————+————————————————————————————————————————————————————|
|
41 m1 rr | 0aaa aaaa | Play Note Number
|
41 m2 rr | 0aaa aaaa | Level
|
41 m3 rr | 0aaa aaaa | Assign Group Number
|
|
|
|
41 m4 rr | 0aaa aaaa | Panpot
|
|
|
|
41 m5 rr | 0aaa aaaa | Reverb Send Level
|
|
|
|
41 m6 rr | 0aaa aaaa | Chorus Send Level
|
|
|
|
41 m7 rr | 0000 000a | Rx. Note Off
|
|
|
|
41 m8 rr | 0000 000a | Rx. Note On
|
|
|
|—————————————+————————————————————————————————————————————————————————————————|
m: Número de Mapa (0 = MAP1, 1 = MAP2)
rr: Número de nota de parte de percusión (00H-7FH)
GTabla decimal y hexadecimal
(Se añade una "H" al final de los números en notación hexadecimal.)
En documentación MIDI, los valores de la información y direcciones/tamaños de los
mensajes exclusivo, etc. se expresan como valores hexadecimales para cada 7 bits.
La siguiente tabla muestra como corresponden a números decimales.
+——————+——————++——————+——————++——————+——————++——————+——————+
|
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
* Los valores decimales como el canal MIDI, bank select, y program change aparecen en
forma de valor superior a los valores de la tabla anterior.
* Un byte de 7 bits puede expresar información de 128 intervalos. Para información en la
que se requiera más precisión, debemos utilizar dos o más bytes. Por ejemplo, dos
números hexadecimales que expresen un bbH de bytes de 7 bits indicarían un valor de
aa x 128+bb.
* En el caso de los valores que tengan un signo +/- , 00H = -64, 40H = +/-0, y 7FH = +63,
para que la expresión digital sea 64 menos que el valor dado en el diagrama anterior. En
caso de dos tipos, 00 00H = -8192, 40 00H = +/-0, y 7F 7FH = +8191. Por ejemplo, si aa
bbH se expresara como decimal, sería aa bbH - 40 00H = aa x 128+bb - 64 x 128.
* La información marcada como "Use nibbled data" se expresan en unidades de 4 bits
hexadecimales. Un valor expresado como un no entero de 2 bytes 0a 0bH tiene el valor
de a x 16+b.
<Ejemplo 1> ¿Cuál es la expresión decimal de 5AH?
De la tabla anterior, 5AH = 90
302
(32 - 127) |
32 - 127 [ASCII]
(32 - 127) |
32 - 127 [ASCII]
(32 - 127) |
32 - 127 [ASCII]
(32 - 127) |
32 - 127 [ASCII]
(32 - 127) |
32 - 127 [ASCII]
(32 - 127) |
32 - 127 [ASCII]
(32 - 127) |
32 - 127 [ASCII]
(32 - 127) |
32 - 127 [ASCII]
(32 - 127) |
32 - 127 [ASCII]
(32 - 127) |
32 - 127 [ASCII]
(32 - 127) |
32 - 127 [ASCII]
(32 - 127) |
32 - 127 [ASCII]
(0 - 127) |
(0 - 127) |
(0 - 127) |
NON, 1 - 127
(0 - 127) |
RAMDOM, L63 - 63R
(0 - 127) |
0.0 - 1.0
(0 - 127) |
0.0 - 1.0
||
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 |
<Ejemplo 2> ¿Cuál es la expresión decimal del valor 12 34H dado como hexadecimal para
|
cada 7 bits?
|
De la tabla anterior, desde 12H = 18 y 34H = 52
|
18 x 128+52 = 2356
|
|
<Ejemplo 3> ¿Cuál es la expresión decimal del valor no entero 0A 03 09 0D?
De la tabla anterior, desde 0AH = 10, 03H = 3, 09H = 9, 0DH = 13
|
((10 x 16+3) x 16+9) x 16+13 = 41885
|
|
<Ejemplo 4> ¿Cuál es la expresión no entera del valor decimal 1258?
|
|
16) 1258
|
16)
78 ... 10
|
16)
4 ... 14
|
0 ... 4
|
En la tabla anterior, 0 = 00H, 4 = 04H, 14 = 0EH, 10 = 0AH, el resultado es: 00 04 0E 0AH.
|
|
GEjemplos de mensajes MIDI reales
|
|
(0 - 1) |
OFF, ON
|
<Ejemplo 1> 92 3E 5F
(0 - 1) |
OFF, ON
|
9n es el estado de Note-on, y n es el número de canal MIDI. Puesto que 2H = 2, 3EH = 62, y
5FH = 95, éste es un mensaje Note-on con MIDI CH = 3, número de nota 62 (el nombre de
nota es D4), y la velocidad 95.
<Ejemplo 2> CE 49
CnH es el estado de Program Change, y n es el número de canal MIDI. Puesto que EH = 14 y
49H = 73, éste es un mensaje Program Change con MIDI CH = 15, número de programa 74
(Flauta en GS).
<Ejemplo 3> EA 00 28
EnH es el estado de Pitch Bend Change, y n es el número de canal MIDI. El 2º byte (00H = 0)
es el LSB y el 3r byte (28H = 40) es el MSB, pero Pitch Bend Value es un número con signo
|
en el cual 40 00H (= 64 x 12+80 = 8192) es 0, de manera que este Pitch Bend Value es
28 00H - 40 00H = 40 x 12+80 - (64 x 12+80) = 5120 - 8192 = -3072
Si la Pitch Bend Sensitivity está ajustada a 2 semitonos, -8192 (00 00H) provocará que la
afinación cambie en -200 centésimas, de forma que en este caso -200 x (-3072) ÷ (-8192) = -75
centésimas de Pitch Bend se aplican al Canal MIDI11.
<Ejemplo 4> B3 64 00 65 00 06 0C 26 00 64 7F 65 7F
BnH es el estado de Control Change (Cambio de Control), y n es el número de canal MIDI.
Para Control Changes (Cambios de Control), el 2º byte es el número de control, y el 3r byte
es el valor. En el caso de que dos o más mensajes consecutivos tengan el mismo estado,
MIDI dispone de una suministro conocido como "running status" que permite que el byte
del estado de los mensajes segundo y siguientes sea omitidos. Además, los mensajes
descritos anteriormente tienen el siguiente significado.
B3
parámetro RPN:
(B3)
parámetro RPN:
(B3)
parámetro:
(B3)
00H
(B3)
parámetro RPN:
(B3)
parámetro RPN:
En otras palabras, los mensajes descritos anteriormente especifican un valor de 0C 00H para
el número de parámetro RPN 00 00H en el canal MIDI 4, y a continuación ajustan el
número de parámetro RPN a 7F 7FH.
El número de parámetro RPN 00 00H es Pitch Bend Sensitivity, y el MSB del valor indica las
unidades de semitono, por eso un valor de 0CH = 12 ajusta la gama pitch bend máxima a +/
-12 semitonos (1 octava). (En generadores de sonido GS el LSB de Pitch Bend Sensitivity se
ignora, pero el LSB debería transmitirse de todas formas (con un valor de 0) para que la
operación sea correcta en cualquier dispositivo.)
Una vez se haya especificado el número de parámetro para RPN o NRPN, todos los
mensajes Data Entry transmitidos en el mismo canal serán válidos, por eso después de que
el valor deseado haya sido transmitido, es una buena idea ajustar el número de parámetro a
7F 7FH para prevenir accidentes. Esta es la razón para el (B3) 64 7F (B3) 65 7F al final.
64 00
MIDI ch.4, byte inferior del número de
00H
65 00
(MIDI ch.4)
byte superior del número de
00H
06 0C
(MIDI ch.4) byte superior del valor del
0CH
26 00
(MIDI ch.4) byte inferior del valor del parámetro:
64 7F
(MIDI ch.4) byte inferior del número de
7FH
65 7F
(MIDI ch.4) byte superior del número de
7FH