|
 |
|
|
 |
Softonic.com otorga a LoginControl
la corona Softonic del Muy Bueno. |
|
|

LoginControl hace presencia en...

... y en el CD4 de...


|
|
|
|
Convertidor de Audio a MIDI |
Volver al
Índice |
|
 |
| |
MIDI
Hardware
 |
|
El MIDI "Musical Instruments Digital Interface",
(Interfaz digital para instrumentos musicales), surge
de la necesidad de comunicar distintos instrumentos,
principalmente sintetizadores y teclados electrónicos.
|
| |
|
Introducción
Histórica: Interfaz CV/Gate
Los primeros sintetizadores se comunicaban
con su controlador (en principio un teclado, pero no
tiene por qué serlo) de forma analógica, la llamada
interfaz CV/Gate (Control por Voltaje/puerta), donde
la señal CV es una señal analógica que indica la
frecuencia fundamental de la nota que ha de producir
el sintetizador por medio de sus osciladores
controlados por voltaje o cualquier otro medio que
utilice para sintetizar las notas musicales, mientras
que la señal Gate, es una señal que indica si debe o
no debe haber sonido (al tener solamente dos posibles
valores se podría considerar que es una señal
digital), de esta forma se evita que el sintetizador
esté reproduciendo sonido continuamente..
De todas maneras este sistema de comunicación es un sistema analógico,
con todas las implicaciones tanto positivas como
negativas que esto conlleva, que son, entre otras:
1. Si la nota pulsada en el teclado se
transmite en forma de voltaje al sintetizador, este
voltaje disminuye según la longitud del cable que lo
conecta al sintetizador, debido a la resistencia que
este cable ofrece al paso de la corriente eléctrica (a
efectos prácticos esto significa que el sintetizador
desafinará siempre en el mismo sentido debido a la
resistencia del cable).
2. Al ser la transmisión analógica, es más
vulnerable respecto a un sistema de comunicación
digital a las variaciones de temperatura o de longitud
del cable, ruidos, interferencias de otros aparatos
eléctricos, cambios de la tensión de alimentación o
diafonías.
3. No era estándar, en otras palabras, cada
fabricante tenía su propia escala de Voltios / Hertzio
(lineal) o Voltios / Octava (logarítmica), tanto en
sentido creciente como decreciente, es posible
construir convertidores de uno a otro sistema, pero
encarecen en exceso el sistema si este es complejo,
además de ser otra fuente de posibles errores.
4. Al realizarse la comunicación mediante dos
cables que contengan información más un tercer cable
de masa, que es común a los dos dispositivos, uno que
indica si hay o no sonido ("digital'') y un segundo
cable con la tensión que correspondía a la frecuencia
deseada (3 cables en total para comunicar un solo
controlador con solamente un sintetizador monofónico)
se encarece tanto en precio como en materiales también
el sistema de conexión de todo el conjunto de
dispositivos.
5. Un sistema de comunicación analógico como
éste limita, intrínsecamente, la polifonía en un
sintetizador analógico, ya que hace falta al menos un
cable extra para cada nota simultánea, aparte de que
limita el número de dispositivos sintetizadores y/o
controladores que pueden aparecer simultáneamente en
el sistema completa. Se hace necesario un nuevo
sistema de comunicación digital. Además con este
sistema de comunicación debe ser posible, aunque sigue
sin ser recomendable, la posibilidad de varios
controladores simultáneos en un mismo sistema MIDI.
En resumen, no era posible interconectar, sino mediante módulos extra
construidos al efecto o confiando en la suerte de que
todos los dispositivos del sistema fuesen compatibles
entre sí, diferentes sintetizadores y controladores si
están producidos cada uno por un fabricante distinto,
además el número de hilos es superior en este caso al
que se utilizaría en un cable serie digital, lo cual
reduce también la posibilidad de errores en el
cableado de conexión, y, por extensión, de todo el
sistema en general.
Interfaz MIDI
Para solucionar todos los inconvenientes anteriormente expuestos se
tomó la decisión, entre distintos fabricantes de
dispositivos musicales electrónicos, de desarrollar la
estandarización de un interfaz común, que tuviera como
principal característica que fuese digital, por los
motivos que se han comentado anteriormente, y por otro
lado que tenga una gran facilidad de uso, cuya
complejidad no fuese mucho mayor que el anterior
modelo de conexión con una interfaz analógica.
El modelo elegido para el estándar fue una variación simplificada del
conocido puerto serie RS-232 (con lo que se ahorra en
costes de desarrollo ya que no hay que hacer
inversiones en un nuevo hardware para la interfaz),
con las diferencias de que la transmisión se realiza
por intensidad en lugar de por tensión (un '1'
corresponde a la ausencia de corriente y un '0' a 25
mA aproximadamente), con las ventajas que supone la
transmisión por corriente en lugar de por tensión,
como una mayor longitud máxima del cable de conexión,
entre otras, los dispositivos pueden tener masa
separada (la comunicación se realiza mediante un
optoacoplador en el receptor), velocidad de
comunicación fija (31250 ±1% bps) y los bits de
paridad, inicio y stop son fijos, es decir, no son
configurables (menos flexibilidad pero elimina la
posibilidad de equivocación en la configuración de los
dispositivos, así como posibles incompatibilidades
entre distintos fabricantes y distintas calidades).
El protocolo escogido es muy sencillo: No existe ningún tipo de
confirmación de trama recibida, ni tampoco
recuperación de errores, tan sólo bits de start / stop
y de paridad, de esta forma los bytes erróneos
recibidos se desechan directamente sin necesidad de
procesarse. La información que se envía por el cable
MIDI son los llamados eventos MIDI, que a continuación
se explican someramente:
- Todos lo bytes comienzan con el bit '0', excepto los
que informan sobre el inicio de un evento, de esta
forma, se salvaguarda ligeramente de errores de
sincronismo a un nivel superior al físico.
- La información básica transmitida es activo/desactivo_nota.
numero_canal, velocidad_pulsación, pues es más cómodo
información de tecla recién pulsada/soltada que decir
‘la tecla número xxxx sigue pulsada’. El número de
canal sirve para el caso de que distintos instrumentos
estén conectados al mismo controlador, cada uno
responde solamente a los canales para los cuales está
‘sintonizado’.
- Aparte, también se transmiten datos extras como
cambio de programa (sonido) o cambio de volumen,
balance...
Inconvenientes
del sistema Digital frente al Analógico
Como siempre ocurre con las novedades, esto también presenta una
serie de inconvenientes o desventajas respecto al
anterior sistema, entre las que se pueden destacar:
• Si un cable se rompe o se desconecta, existe la
posibilidad de que no suene nada, en lugar de
deteriorarse la calidad , o, lo que es peor en caso de
una posible actuación en directo, que se quede una
nota sonando ininterrumpidamente debido a que el
sintetizador no recibe el mensaje de desactivación de
ésta (Este efecto es muy común en los juegos antiguos
con sonido basado en MIDI en lugar de audio cuando se
pulsa la tecla de pausa).
• Es más difícil (en un sistema digital) conseguir
efectos tipo vibrato (alteración de la frecuencia de
una nota repetidamente) o portamento (cambio de una
nota a otra por desplazamiento gradual de la
frecuencia) debido a que los valores de frecuencia
están fijados de antemano, si bien se puede conseguir
mediante mensajes de variación del pitch. Sin embargo,
hacer esto puede sobrecargar mucho el canal de
transmisión si se hace muy suavemente, ya que
incrementa mucho la densidad de eventos. Esto unido a
que el bitrate es fijo a una velocidad demasiado lenta
para un uso intensivo del canal. Sin embargo, el rango
de posibles frecuencias sigue sin ser continuo, aunque
puede ser por variaciones tan pequeñas que no se note
'a oído', ya que las variaciones son 'digitales', es
decir, a escalones, en lugar de continuas.
Se muestran posibles formas de conectar distintos dispositivos MIDI.
a) Master/Slave o Daisy Chain (un solo maestro con varios esclavos
en serie)
El dispositivo A controla lo que está sonando en el
dispositivo B, y en el caso de la segunda figura, el
dispositivo A controla lo que suena por los
dispositivos B, C y D independientemente.

b)
Conexión en estrella (más rápida que el Daisy Cahin
debido a la latencia de los elementos de conexión,
principalmente optoacopladores).
Al igual que el Daisy Chain, el A controla todos los
demás dispositivos.
c) Multimaster: A controla a B, y B a su
vez controla a C.
Las notas tocadas en A suenan en el dispositivo B, y,
a su vez, las tocadas en B suenan en C. Para
configuraciones complejas o para monitorear distintos
instrumentos tiene utilidad.
d) MIDI Loop: Dos dispositivos se
controlan simultáneamente el uno al otro, es un caso
concreto del Multimaster.
 |
| |
|
MIDI
Software |
|
Todo lo anteriormente comentado no presenta
ningún problema práctico cuando la situación es que se
está tocando un teclado o cualquier otro controlador
MIDI, y, por medio de un cable MIDI se transmiten a un
sintetizador o secuenciador externo los distintos
eventos según van sucediendo (léase Ordenador, caja de
ritmos...)
Cuando es necesario guardar esa información en un archivo, es necesario
decir en que instante de tiempo ocurre cada evento,
hasta 1987 cada fabricante o diseñador de
secuenciadores o cualquier otro dispositivo lector o
reproductor usaba su propio formato de archivo, con lo
cual se llegó a la misma situación anterior, por lo
que en el caso de formatos de archivo se hizo
necesaria la creación de un formato de fichero
estándar.
El formato para almacenar el instante de tiempo en el que ocurre cada
evento y la naturaleza del mismo es el siguiente:
1. Se informa del tempo (negras/minuto) en la
cabecera del archivo, con la diferencia de que en
lugar de en negras/minuto como se hace en las
partituras normales, se hace en microsegundos/negra.
2. Se divide cada negra en un número
determinado de ticks, definible por el usuario o por
defecto en algunos secuenciadores.
3. Antes de cada evento se informan de la
cantidad de ticks que han transcurrido desde el
anterior evento (separación de los eventos en el
tiempo), así el reproductor o secuenciador sabrá en
que instante lanzar los eventos para el sintetizador .
A continuación se explican los detalles de como
conseguir lo anteriormente explicado.
|
|
|
Mensajes de Canal
de un Sistema MIDI
En una comunicación entre dos dispositivos MIDI
hay varios tipos de mensaje, aquí se van a explicar
los mensajes de canal, que son los más comunes, aunque
existen otros como mensajes de modo, mensajes de
sistema o mensajes de sistema exclusivo (estos últimos
no están contemplados por el estándar).
1. Activación y desactivación de nota
(1001/1000).
Consisten en 3 bytes, el primero de encabezamiento
(primer bit 1) '1001XXX' y otros dos de datos:
'0NNNNNNN' y ' '0VVVVVVV' para el caso de activación,
donde el primer '1' significa que es un nuevo evento,
'001' que es activación de una nota, XXXX es el numero
del canal, NNNNNNN es el número de nota y VVVVVVV es
la velocidad de pulsación de la tecla (en caso de
desactivación de nota es el mismo código, pero
cambiando 001 por 000) .
2. Presión global de pulsación de las teclas
(1101).
Consiste solamente en dos bytes, el byte de
encabezamiento seguido de un solo byte de datos que es
la medida de la fuerza global con la que se están
pulsando las teclas después del primer impulso (dato
ya medido por el parámetro 'velocidad'). A menudo se
le conoce también con el nombre de Postpulsación o
Presión de postpulsación (aftertouch).
3. Presión de pulsación de teclas en un teclado
polifónico (1010).
Este dato proporciona un valor de postpulsación
diferente para cada nota, por lo tanto requiere 3
bytes en el mensaje:
|
1010XXXX |
num.
de canal |
|
0NNNNNNN |
Valor de la nota |
|
0PPPPPPP |
de
postpulsación |
4.
Cambio de programa (1100).
Aquí, la palabra 'programa' se refiere a una serie de
parámetros que definen el sonido que genera el
sintetizador, es, decir, cambia el sonido del
instrumento .
|
1100XXXX |
número de canal |
|
0PPPPPPP |
número de programa |
5.
Modificación del pitch (1110).
Las 128 notas que se pueden conseguir mediante
mensajes de activación y desactivación tienen una
resolución de un semitono, esto representa un problema
a la hora de conseguir efecto vibrato y portamento.
Como ya se ha comentado, el formato del mensaje de
modificación de pitch es el que sigue:
|
1110XXXX |
número de canal |
|
0xxxxxxx |
Bits
de datos del 0 al 6 |
|
0xxxxxxx |
Bits
de datos del 7 al 14 |
Con 14 bits se puede llegar a conseguir un ajuste muy
fino del pitch, si se tiene en cuenta que solamente
con 7 bits se recorre toda la escala musical de
semitono en semitono , sin embargo, en la mayoría de
los casos prácticos no es necesario tener control tan
absoluto sobre la frecuencia fundamental de la señal,
de forma que muchos equipos solo responden a los siete
bits más significativos o incluso a menos . Un valor
de b'10000000000000' (8192) no provoca cambios, un
valor por encima provoca una subida de tono y un valor
por debajo una bajada de éste, algo que no especifica
el estándar es la cantidad de desafinación (variación
de la frecuencia) que introduce cada paso, hay equipos
que responden con ±3 semitonos, otros con ±1 semitono
(con lo que se tiene un mayor control sobre la
frecuencia, pero también se limita la posibilidad de
hacer portamento entre dos notas ) y los que responden
con ±1 octava, y por supuesto, existen equipos que son
configurables tanto por software mediante mensajes de
sistema como por hardware.
6. Cambio de control (1011).
Estos controles no están asociados a ningún programa
en particular, son el cambio de volumen, balance,
eco... El formato es el siguiente:
|
1011XXXX |
número de canal |
|
0cccccccc |
número de control |
|
0mmmmmmm |
modulación o movimiento |
Tabla de eventos
MIDI
|
HEX |
DEC |
BIN |
Datos |
Descripción |
|
8x |
128-143 |
1000xxxx |
nnvv |
Apaga Nota
nn=nº nota
vv=velocidad |
|
9x |
144-159 |
1001xxxx |
nnvv |
Activa nota
nn=nº nota
vv=velocidad |
|
Ax |
160-175 |
1011xxxx |
ccvv |
Cambio de Control
cc=nº control
vv= nuevo valor |
|
Bx |
176-191 |
1100xxxx |
pp |
Cambio de Programa
pp=nº de prog |
Tabla de metaeventos MIDI
A parte de los eventos anteriormente expuestos, hay otro tipo de
eventos que son los llamados Metaeventos, que se
diferencian de los anteriores porque se almacenan en
el archivo MIDI, pero que sin embargo no se envían por
el canal, como son por ejemplo el tempo, el compás,
los ticks / negra, eventos de texto tales como título
de track o del archivo, letra de la canción, etc.
Se muestra a continuación una tabla con los Metaeventos MIDI.
|
HEX |
DEC |
BIN |
Datos |
Descripción |
|
00 |
00 |
00000000 |
nn ssss |
Nº
de secuencia del track
nn = longitud (2 bytes)
ssss = nº secuencia |
|
01 |
01 |
00000001 |
nn tt… |
Evento de texto
(Cualquier texto)
nn = longitud en bytes del texto
tt = caracteres |
|
02 |
02 |
00000010 |
nn tt… |
Ídem, pero usada para información relativa al
copyright |
|
03 |
03 |
00000011 |
nn tt… |
Ídem, para título del track |
|
04 |
04 |
00000100 |
nn tt… |
Ídem, nombre del instrumento |
|
05 |
05 |
00000101 |
nn tt… |
Letra del track |
|
06 |
06 |
00000110 |
nn tt… |
Marker |
|
07 |
07 |
00000111 |
nn tt… |
Cue
point |
|
2F |
47 |
00101111 |
00 |
Fin
de Track |
|
51 |
81 |
01010001 |
03 tttttt |
Tempo
ttttt = microsegundos/negra |
|
58 |
88 |
01011000 |
04 nn dd cc bb |
Compás
Nn = numerador
cc = nº de ticks en un clic de metrónomo
bb= nº de treintaidosavos de nota en una negra |
|
59 |
89 |
01011001 |
02 sf mi |
Clave
Sf = sharps/flats
(sostenidos/bemoles)
mi = mayor menor |
Funcionamiento de
los ticks
Como se ha comentado, antes de que ocurra cualquier evento o metaevento
éste debe ir precedido por el número de ticks que han
pasado desde el último evento antes de que se dispare
el actual, esto significa que la 'regla' de 3 bytes/evento
válida para la comunicación entre instrumentos MIDI
por hardware se incumple, ya que si una nota está
inactiva y se hace una referencia a ella la única
opción que queda es activarla, y viceversa, con lo
cual es posible conseguir un ahorro significativo en
el tamaño del archivo final:
1. 1 byte de evento (Note ON/OFF)
MSB=1, por lo tanto está entre 128 y 255
2. Número de nota
MSB=0, por lo tanto está entre 0 y 127
3. Velocidad de pulsación
MSB=0, por lo tanto está entre 0 y 127
Se ha suprimido el Note ON/OFF salvo en el primer evento (para
inicializar el canal) porque no es necesario, ya que
si una nota está activa y se vuelve a referenciar es
para apagarla y viceversa.
De esta forma, si se supone que una negra se divide en 120 ticks el
resultado del archivo si la partitura es la de la
figura:

La lista de los bytes almacenados en el archivo es la
siguiente:
• 0 144 78 100
• 120 78 0
• 0 80 100
• 120 80 0
que significa:
• Espera 0 ticks, lanza la nota 78 con una velocidad
100 en el canal 1 (144)
• Espera 120 ticks (1 negra), nota 78 (como está
activa solo queda desactivarla) velocidad 0. (En la
práctica se puede poner cualquier valor)
• Espera 0 ticks, nota 80 (como no está sonando solo
se puede activar), con velocidad de 100
• Espera 120 ticks, nota 80 (solo queda apagar),
velocidad 0.
Es necesario observar que el byte de inicialización de canal es el único
de todos los bytes mayor de 128 (MSB = 1), esto sirve
porque, ¿que pasa si hay que esperar más de 127 ticks
para que ocurra un evento?, se hace lo siguiente:
Se muestra el número en base 128, y a continuación se hace el MSB de
todos los bytes resultantes igual a 1, salvo del
último, es decir:
Suponiendo que los ticks son 350, por ejemplo:
350/128 ≈ 2.7, el cociente entero es 2 y el resto es
94
2∙128+94=350, que se codifica mediante la secuencia
130 – 94 y de esta forma no hay problema para leer los
eventos. Este valor delta se codifica con longitud
variable con un máximo de 4 bytes.
Cabecera de los
archivos MIDI
a) Cabecera del archivo:
La Cabecera de un archivo MIDI consiste en la siguiente cadena de bytes:
4D 54 68 64 00 00 00 06 ff ff nn nn dd dd
Los 4 primeros bytes corresponden en formato ASCII a la cadena ‘MThd’
ff ff es el formato del archivo:
0 – un solo track o pista
1 - multiples tracks, sincronos
2 - multiples tracks, asincronos
En este caso se usará siempre el formato 0 (un solo track, ya que se
realiza la conversión de una señal monofónica)
nn nn es el número de tracks, los archivos MIDI
generados por este programa, al ser un convertidor
monofónico siermpre constarán de un solo track (es
redundante respecto al anterior dato).
dd dd es el número de ticks por negra que hay en el
archivo.
b) Cabecera del track:
Consiste en:
4D 54 72 6B xx xx xx xx
Los 4 primeros bytes, al igual que la cabecera del archivo, tienen un
equivalente ascii: ‘MTrk’
Los siguientes 4 bits xx xx xx xx contienen la longitud del archivo en
bytes sin incluir las cabeceras.
A partir de ahí comienzan los eventos que se han explicado en los
apartados previos.
Ejemplo de archivo
MIDI
Se presenta un archivo MIDI para ilustrar lo
anteriormente comentado, he aquí la partitura:

|
Dec |
Hex |
ASCII |
|
Dec |
Hex |
ASCII |
|
Dec |
Hex |
ASCII |
|
Dec |
Hex |
ASCII |
|
77 |
4D |
M |
0 |
0 |
b) |
3 |
3 |
|
32 |
20 |
15 |
|
84 |
54 |
T |
255 |
FF |
|
7 |
7 |
|
96 |
60 |
|
|
104 |
68 |
h |
3 |
3 |
|
161 |
A1 |
|
128 |
80 |
|
|
100 |
64 |
d |
6 |
6 |
|
32 |
20 |
|
72 |
48 |
|
|
0 |
0 |
|
83 |
53 |
S |
0 |
0 |
e) |
64 |
40 |
|
|
0 |
0 |
|
112 |
70 |
p |
174 |
AE |
|
130 |
82 |
|
|
6 |
6 |
|
117 |
75 |
u |
76 |
4C |
|
32 |
20 |
|
|
0 |
0 |
|
114 |
72 |
r |
74 |
4A |
|
144 |
90 |
|
|
0 |
0 |
|
132 |
84 |
¿ |
130 |
82 |
|
77 |
4D |
|
|
0 |
0 |
|
51 |
33 |
3 |
32 |
20 |
|
32 |
20 |
|
|
1 |
1 |
|
0 |
0 |
c) |
144 |
90 |
f) |
96 |
60 |
|
|
1 |
1 |
|
255 |
FF |
|
74 |
4A |
|
128 |
80 |
|
|
128 |
80 |
|
88 |
58 |
|
32 |
20 |
|
77 |
4D |
|
|
77 |
4D |
M |
4 |
4 |
|
96 |
60 |
|
64 |
40 |
|
|
84 |
54 |
T |
4 |
4 |
|
128 |
80 |
|
166 |
A6 |
|
|
114 |
72 |
r |
2 |
2 |
|
74 |
4A |
|
32 |
20 |
|
|
107 |
6B |
k |
24 |
18 |
|
64 |
40 |
|
255 |
FF |
h) |
|
0 |
0 |
|
8 |
8 |
|
130 |
82 |
|
47 |
7 |
|
|
0 |
0 |
|
0 |
0 |
d) |
32 |
20 |
|
0 |
0 |
|
|
0 |
0 |
|
255 |
FF |
|
144 |
90 |
|
|
|
|
|
65 |
41 |
a) |
81 |
51 |
|
72 |
48 |
|
|
|
|
a)
65 bytes desde 107 (k)
b) 0: Espera 0 ticks -> 255: Comienza
metaevento -> 3: tipo de metaevento (titulo del track)
-> 6: longitud de los datos
c) 0: Espera 0 ticks -> 255: Comienza
metaevento -> 88: tipo de metaevento (tipo de compás)
d) Ídem, tempo 7, 161,32 =
32+161*256+7*256^2=500 000 microsegundos/negra.
Tempo = 60 000 000/500 000 = 120 negras / minuto
e) Cambio de control.
f) Empieza la activación y desactivación de
notas, ver apartado ‘funcionamiento de los ticks’
h) Metaevento de final de track. |
|
|
|
|
| |
| |
Siga en:
Explicación del algoritmo de Conversión |
|
|
|
|