Implementación MIDI
■Ejemplos de un mensaje MIDI real
<Ejemplo1> 92 3E 5F
9n es el estado Note-on, y n es el número de canal MIDI. Desde 2H = 2, 3EH = 62, y 5FH =
95, es un mensaje Note-on con MIDI CH = 3, número de nota 62 (el nombre de nota es D4), y
velocidad 95.
<Ejemplo2> CE 49
CnH es el estado Program Change, y n es el número de canal MIDI. Desde EH = 14 y 49H =
73, es el mensaje Program Change con MIDI CH = 15, número de programa 74.
<Ejemplo3> EA 00 28
EnH es el estado 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, en cambio el valor Pitch Bend es un número con
signo en el cual 40 00H ( = 64 x 128 + 0 = 8192) es 0, de forma que el valor Pitch Bend es
28 00H - 40 00H = 40 x 12+80 - (64 x 12+80) = 5120 - 8192 = -3072
Si la sensibilidad Pitch Bend se ajusta a 2 semitonos, -8192 (00 00H) hará que la afinación
cambie a -200 centésimas, así que en caso de que -200 x (-3072) (-8192) = -75 centésimas de
Pitch Bend se aplique al canal MIDI 11.
<Ejemplo4> B3 64 00 65 00 06 0C 26 00 64 7F 65 7F
BnH es el estado Control Change, y n es el número de canal MIDI. Para Control Changes, el
2º byte es el número de control, y el 3r byte es el valor. En caso de que dos o más mensajes
consecutivos tengan el mismo estado, MIDI tiene una provisión llamada "estado
funcionamiento" que permite que el estado del byte del segundo y de los siguientes
mensajes se omita. Así, el mensaje anterior tiene el siguiente significado.
B3
64 00
MIDI ch.4, byte inferior del número de parámetro RPN:00H
(B3)
65 00
(MIDI ch.4) byte superior del número de parámetro RPN:00H
(B3)
06 0C
(MIDI ch.4) byte superior del valor de parámetro:
(B3)
26 00
(MIDI ch.4) byte inferior del valor de parámetro:
(B3)
64 7F
(MIDI ch.4) byte inferior del número de parámetro RPN:7FH
(B3)
65 7F
(MIDI ch.4) byte superior del número de parámetro RPN:7FH
Es decir, los mensajes anteriores especifican un valor de 0C 00H para el número de
parámetro RPN 00 00H en el canal MIDI 4, y luego ajustan el número de parámetro RPN a
7F 7FH.
El número de parámetro RPN 00 00H es sensibilidad Pitch Bend, y el MSB del valor indica
unidades de semitono, de forma que un valor de 0CH = 12 establece el intervalo máximo de
pitch bend a +- 12 semitonos (1 octava). (En los generadores de sonido GS el LSB de la
sensibilidad Pitch Bend es ignorado, pero LSB se debe transmitir igualmente (con un valor
0) de forma que la operación será correcta en cualquier dispositivo.)
Una vez se ha especificado el número de parámetro para RPN o NRPN, los mensajes All
Data Entry transmitidos en ese mismo canal serán válidos, de forma que una vez se haya
transmitido el valor deseado, es aconsejable ajustar el número de parámetro a 7F 7FH para
evitar accidentes. Este es el motivo por el cual (B3) 64 7F (B3) 65 7F está al final.
No es aconsejable que los datos de interpretación (como información de Archivos MIDI
Estándar) contengan demasiados eventos con estado de funcionamiento tal como se ha
explicado en el<Ejemplo 4>. Esto es porque si la reproducción se interrumpe en medio de la
canción y luego se rebobina o se avanza, el secuenciador no podrá transmitir el estado
correcto, y la fuente de sonido no interpretará bien la información. Asegúrese de dar a cada
ítem su propio estado.
También es necesario que el ajuste del número de parámetro RPN o NRPN y el ajuste del
valor se realicen en el orden correcto. En algunos secuenciadores, los eventos establecidos
en el mismo (o consecutivo) tiempo, es posible que se transmitan en un orden diferente que
el orden con el que se recibieron. Por esta razón es recomendable cambiar ligeramente el
tiempo de cada ítem (1 pulsación por TPQN =96, y 5 pulsaciones por TPQN =480).
* TPQN: Pulsaciones por negra
174
■Ejemplo de mesnaje exclusivo de sistema y
Checksum
Los mensajes Roland Exclusive (RQ1, DT1) se transmiten con una suma de comprobación al
final (antes de F7) para comprobar que el mensaje se ha recibido correctamente. El valor de
la suma de comprobación viene determinado por la dirección y los datos (o tamaño) del
mensaje Exclusive transmitido.
●Cómo calcular la suma de comprobación
(los números hexadecimales están indicados con una "H")
La suma de comprobación es un valor derivado de añadir dirección, tamaño y suma de
comprobación e invertir los 7 bits lower.
Aquí tiene un ejemplo de cómo se calcula una suma de comprobación. Suponemos que en el
mensaje Exclusive que se transmite, la dirección es aabbccddH y los datos o tamaño es
eeffH.
aa + bb + cc + dd + ee + ff = suma
sum 128 = cociente ... resto
128 - cociente = suma de comprobación
<Ejemplo 1> Ajustar CHORUS TYPE de PERFORMANCE COMMON a DELAY (DT1)
Según el "Mapa de direcciones de parámetro" (p. 162), la dirección inicial de la
Interpretación temporal es 10 00 00 00H, la dirección de desplazamiento de CHORUS en
PERFORMANCE COMMON es 04 00H, y la dirección de CHORUS TYPE es 00 00H. Por eso
la dirección de CHORUS TYPE de PERFORMANCE COMMON es;
10 00 00 00H
04 00H
+)
00 00H
10 00 04 00H
DELAY tiene el valor de 02H.
0CH
Así que el mensaje exclusivo del sistema que se debería enviar es;
00H
F0
41
10
(1)
(2)
(3)
comprobación(6)
(1) Estado exclusivo
(4) ID del modelo (XV-5050)
A continuación calcule la suma de comprobación.
10H + 00H + 04H + 00H + 02H = 16 + 0 + 4 + 0 + 2 = 22 (sum)
22 (suma) 128 = 0 (cociente) ... 22 (resto)
suma de comprobación = 128 - 22 (resto) = 106 = 6AH
Esto significa que F0 41 10 00 10 12 10 00 04 00 02 6A F7 es el mensaje que se debería enviar.
<Ejemplo2> Obtener información (RQ1) de la parte de la interpretación 3 en USER:03
Según el "Mapa de direcciones de parámetro" (p. 162), la dirección inicial de USER:03 es 20
02 00 00H, y la dirección de desplazamiento de la parte de la interpretación 3 es 00 22 00H.
Por eso la dirección de la parte de la interpretación 3 en USER:03 es;
20 02 00 00H
+)
00 22 00H
20 02 22 00H
Como el tamaño de la parte de la interpretación es 00 00 00 31H, el mensaje exclusivo del
sistema a enviar sería;
F0
41
10
(1)
(2)
(3)
comprobación(6)
(1) Estado exclusivo
(4) ID del modelo (XV-5050)
A continuación calcule la suma de comprobación.
20H + 02H + 22H + 00H + 00H + 00H + 00H + 31H = 32 + 2 + 34 + 0 + 0 + 0 + 0 + 49
= 117 (suma)
117 (suma) 128 = 0 (cociente) ... 117 (resto)
suma de comprobación = 128 -117 (resto) = 11 = 0BH
Esto significa que F0 41 10 00 10 11 20 02 22 00 00 00 00 31 0B F7 es el mensaje que se debería
enviar.
00 10
12
10 00 04 00
02
(4)
(5)
dirección
informaciónsuma de
(2) ID (Roland)
(5) ID del comando (DT1)
00 10
11
20 02 22 00
00 00 00 31 ??
(4)
(5)
dirección
informaciónsuma de
(2) ID (Roland)
(5) ID del comando (RQ1)
??
F7
(3) ID del dispositivo (17)
(6) Fin de exclusivo
F7
(3) ID del dispositivo (17)
(6) Fin de exclusivo