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
Se ve mejor con resolución de 800x600 ó superior.
PandreOnline.com - Copyright © 2002-2004 José Andrés Gómez Martín. Todos los derechos reservados.