Implementación MIDI
■ Ejemplos de un mensaje MIDI actual
<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> C9 20
CnH es el estado Program Change, y n es el número de canal MIDI. Desde 9H = 9 y
20H = 32, es el mensaje Program Change con MIDI CH = 10, número de programa
33 (Grupo de percusión No.33).
<Ejemplo3> E3 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 128 + 0 - (64 x 128 + 0) = 5120 - 8192 = -3072
<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 el caso de
que dos o más mensajes consecutivos tengan el mismo estado, MIDI tiene una
previsión conocida como "estado funcionamiento" que permite que el byte de
estado del segundo y siguientes mensajes se omitan. Así, el mensaje anterior tiene
el siguiente significado.
B3 64 00
MIDI ch.4, byte lower del número de parámetro RPN: 00H
(B3) 65 00
(MIDI ch.4) byte upper del número de parámetro RPN:00H
(B3) 06 0C
(MIDI ch.4) byte upper del valor del parámetro:
(B3) 26 00
(MIDI ch.4) byte lower del valor del parámetro:
(B3) 64 7F
(MIDI ch.4) byte lower del número de parámetro RPN:7FH
(B3) 65 7F
(MIDI ch.4) byte upper 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 las fuentes 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 ítems 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 es 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
ítems 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
146
● Ejemplo de un mensaje Exclusive y del
cálculo de una suma de comprobación
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 aa bb cc ddH y los
datos o tamaño es ee ff gg hhH.
aa + bb + cc + dd + ee + ff + gg + hh = suma
suma / 128 = cociente ... resta
128 - resta = suma de comprobación
(No obstante, la suma de comprobación será 0 si la resta es 0.)
<Ejemplo1> Ajustar la panoramización de una caja (Trigger 2)
en el grupo de percusión 1 a "ALTERNATE".
Según el "Mapa de direcciones de parámetro", el grupo de percusión No.1 tiene la
dirección 01 00 00 00H, el parámetro pad del grupo de percusión de Trigger 2 tiene
la dirección offset 03 00H y la panoramización tiene la dirección offset 26H. Así,
01 00 00 00
03 00
+)
26
01 00 03 26
0CH
y "ALTERNATE" es un valor de 20H,
00H
F0
41
10
00 3F 12
(1)
(2)
(3)
(4)
(1) Estado Exclusive, (2) número ID (Roland), (3) Dispositivo ID (17)
(4) Modelo ID (TD-6), (5) Comando ID (DT1), (6) EOX
Ahora calcularemos la suma de comprobación.
01H + 00H + 03H + 26H + 20H = 1 + 0 + 3 + 38 + 32 = 74 (suma)
74 (suma)/ 128 = 0 (cociente) ... 74 (resta)
suma comprobación = 128 - 74 (resta) = 54 = 36H
Esto significa que F0 41 10 00 3F 12 01 00 03 26 20 36 F7 es el mensaje a transmitir.
<Ejemplo2> Requerir la transmisión del volumen master del
grupo de percusión 1.
Según el "Mapa de direcciones de parámetro", el grupo de percusión No.1 tiene la
dirección 01 00 00 00H, el parámetro Common del grupo de percusión tiene la
dirección offset 00 00H y el volumen master tiene la dirección offset 15H. Así,
01 00 00 00
00 00
+)
15
01 00 00 15
Tamaño = 00 00 00 01H,
F0
41
10
00 3F
(1)
(2)
(3)
(4)
(1) Estado Exclusive, (2) número ID (Roland), (3) Dispositivo ID (17)
(4) Modelo ID (TD-6), (5) Comando ID (RQ1), (6) EOX
Ahora calcularemos la suma de comprobación.
01H + 00H + 00H + 15H + 00H + 00H +00H + 01H = 1 + 0 + 0 + 21 + 0 + 0 + 0 + 1 =
23 (suma)
23 (suma) / 128 = 0(cociente) ... 23 (resta)
suma comprobación = 128 - 23 (resta) = 105 = 69H
Esto significa que F0 41 10 00 3F 11 01 00 00 15 00 00 00 01 69 F7 es el mensaje a
transmitir.
01 00 03 26
20
??
(5)
dirección
datos suma comp.(6)
11
01 00 00 15
00 00 00 01
(5)
dirección
tamaño suma comp. (6)
F7
??
F7