xpanel, lxde, linux, fbpanel opensuse, linux, instalacion gtk3, gnome, ambienti grafici PS3, mandos, Play Station, Linux edubuntu, ubuntu, linux fedora, linux, discapacitados visuales fuduntu, fedora, ubuntu, linux, distribuciones inkscape, grafica, linux, editor tux, tuz, iconos, mascota, linux artistx, distro, linux, artistas, graficos

Programación de aplicaciones MIDI con herramientas open source (2a parte).

Implementación en el hardware.

El diseño original se desarrolló después de una serie de reuniones que celebraron los principales fabricantes de instrumentos musicales de Japón y Estados Unidos. El diseño del circuito de control permite la transmisión de datos de un instrumento a otro, o de un computador a un instrumento. El procesador necesario para manejar los mensajes es de 8 bits que se transmiten en serie. Esta decisión se tomó en base a la relación costo/beneficio. La transmisión en paralelo posibilitaría que los 8 bits se transmitieran simultaneamente, aumentando la velocidad de transmisión, pero con ello el numero de lineas que necesitarían estar conectadas debería ser de al menos 8, y por tanto el costo de producción también aumentaría.

 

En la transmisión en serie solo se emplean dos lineas: en una se envían los bits de datos uno detrás del otro, y en la otra el dispositivo receptor avisa al emisor si hay errores de paridad en la corriente de datos. Así que la transmisión en serie fue elegida a pesar de ser más lenta que la paralela, porque tenía la ventaja de usar un conector más sencillo y de ser mucho mas barata, pues el índice de comercialización fue pensado en una gama de precios asequible a la mayoría de usuarios de computadores personales y músicos que empleasen sintetizadores y máquinas de ritmos de la época.

 

La velocidad de transmisión es de 3125 palabras en serie (Words) por segundo, esto es 31.25 Kbaudios. Dicha velocidad es 38.5% veces más rápida que una interface RS232 que hasta su tercera revisión (C), permite oficialmente una transmisión cercana a los 20000 baudios, concretamente a 1920 palabras por segundo (aunque los chips de interface en un PC habilitan hasta 115200 baudios si el cableado no es muy largo). La velocidad de reloj de 31.25 Kbaudios es relativamente elevada con respecto a la transmisión en serie, pero no es lo suficientemente rápida como veremos más adelante, cuando expliquemos en detalle la anatomía de los mensajes MIDI.

 

Un mensaje MIDI tiene 10 bits transmitidos por cada byte. La transmisión de un mensaje de 3 bytes dura aproximadamente 1 milisegundo. Debido a que MIDI se transmite en forma serial, es muy probable que dos o más eventos musicales que ocurran simultaneamente al ser enviados uno detrás de otro, no se reproduzcan exactamente en el mismo instante en el receptor. Sin embargo esto es lo suficientemente rápido como para que esos eventos se perciban como simultáneos, aunque a nivel numérico no ocurra así. En un teclado MIDI, al tocar simultaneamente 10 teclas, no se percibe latencia, ya que la transmisión total de este evento dura unos 10 ms. Esto lo explicó el medico alemán Helmut Haas en su tesis doctoral en 1949 así: ¨si varios sonidos independientes llegan a nuestro cerebro en un intervalo inferior a 50 ms éste los fusiona y los interpreta como uno sólo¨.

 

MIDI se transmite de forma asincrónica, por lo cual ha de definirse cada byte para el instrumento receptor. Para ello se emplea un chip ACIA (Asynchronous Communications Interface Adaptor) como el Motorola 6850, que agrega dos bit extas a cada byte del instrumento maestro. Empieza con ¨0¨, como un bit de arranque (start) , seguido de los 8 bits de datos en serie y termina en ¨1¨, llamado el bit final (stop). Esta palabra de 10 bits se transmite al instrumento receptor, donde un segundo chip ACIA, lo vuelve a convertir nuevamente en los ocho bits de los datos reales.

 

El chip ACIA, esta protegido dentro del circuito por optoaislamiento. Un optoaislador es un dispositivo que usa celdas fotoeléctricas para permitir que dos circuitos no conectados intercambien señales, permaneciendo eléctricamente aislados. En el caso ilustrado a continuación, el aislamiento lo proporciona el IC Sharp PC-900.

midi_complex_setup

Mensajes MIDI.

Anteriormente explicabamos que un mensaje MIDI tiene 10 bits transmitidos en serie. Los 8 bits intermedios forman el byte MIDI, del cual existen dos tipos: bytes de estado (status bytes) y bytes de datos (data bytes). Dentro de la estructura del mensaje MIDI, el byte de estado es tambien llamado byte de encabezamiento, puesto que es el que se transmite primero .Todos los bytes de estado tienen el valor del bit más significativo en ¨1¨. De esta manera, los bytes de estado comienzan en 10000000 y terminan en 11111111. En hexadecimal, es el rango comprendido desde 0×80 (128 decimal) hasta 0xFF (255 decimal).

 

Como consecuencia, solo tres bits del cuarteto mas significativo están disponibles para indicar el tipo de mensaje. Esto significa que hay un límite de 8 tipos de mensajes diferentes: 7 mensajes de canal (channel messages), cuyo intervalo comprende entre 0×80 y 0xEF (entre 128 y 239 decimal), y los mensajes exclusivos de sistema (sysex messages), limitados entre 0xF0 y 0xFF.

 

Esto también significa que todos los bytes de data quedan limitados al intervalo entre 0×00 y 0x7F (entre 0 y 127 decimal), puesto que este es el rango en el cual el bit mas significativo tiene el valor “0″.

 

Un byte de data siempre esta precedido de otro byte de data, o de un byte de estado. Dicho de otra forma, todos los mensajes MIDI son transmitidos en este orden: primero un byte de estado, seguido de uno ó dos bytes de datos. La excepción a esta estructura es la de los mensajes exclusivos del sistema, donde puede existir un contenido indefinido de bytes y estos mismos difieren de los bytes de data normales en que su rango esta entre 0×00 y 0xFF (entre 0 y 255 decimal).

 

midi1Mensajes de Canal.

El byte de estado o encabezamiento se divide en 2 cuartetos (fragmentos de cuatro bits). El cuarteto más significativo, es decir los bits del quinto al octavo que se transmiten, lleva el código de identificación del mensaje que se transmite, el cual le indica al receptor que debe hacer: encender una nota, apagarla, elevar el volumen, cambiar gradualmente la altura de la nota (pitch bending),etc.

 

Los bits del primero al cuarto forman el cuarteto menos significativo, y almacenan el numero de canal para el cual se transmite el mensaje. Este numero comprende entre 0×0 y 0xF, es decir entre 0 y 15 decimal. Por convención la numeración de canales es de 1 al 16 y el rango binario de 0 a 15. Esto quiere decir que al canal 1 se le identifica con 0×0, al canal 2 con 0×1, al 3 con 0×2, etc.

 

Nota Apagada (0×80~0x8F) y Nota Encendida (0×90~0x9F)

 

Estos son los dos mensajes MIDI mas importantes. Ambos son mensajes de 3 bytes, característica que comparten con los mensajes de Presión de pulsación polifónica (0xAch) y Cambio en controlador (0xBch).

 

La estructura básica es muy similar. De hecho la unica diferencia entre ambos mensajes, se halla en el código almacenado en el cuarteto de bit mas significativo del byte de estado o encabezamiento. Este primer byte está en el intervalo de 0×90 a 0x9F para el mensaje de activación de nota para los canales 1 al 16, y de forma similar entre 0×80~0x8F para el mensaje de desactivación de nota para cada canal.

 

El primer byte de datos almacena el número de la nota. El Do central, lleva el numero 0x3C (60 decimal) y por lo tanto todos los Do, son múltiplos de 0x0C (12 decimal). Un teclado de piano estandar de 88 notas (8 octavas), va desde 0×15 hasta 0x6C (21 a 108 decimal). El rango de datos entre 0×00 y 0x7F (0 a 127 decimal) da una cobertura de mas de 10 octavas, lo cual es bastante amplio, ya que no todos los instrumentos MIDI tienen un rango tan amplio. Algunos instrumentos simplemente ignoran los mensajes que se salen de su rango de cobertura. Otros transportan la nota a una octava cercana que pueda producir un resultado audible.

 

El segundo byte de datos lleva el valor de la velocidad, la cual es una medida de la fuerza con la que se pulsó la nota en el instrumento. Esta medida puede ser tomada por la tecla de un piano, el pad de una bateria electrónica, o algún otro tipo de controlador MIDI. Generalmente, el diseño de hardware MIDI incluye como responder a sensibilidad generada por el tacto. Esta característica esta ausente en muchos de los primeros instrumentos MIDI, ó en cierto tipo de controladores especializados como los Surface Controllers usados por las estaciones de audio digital modernas. Cuando no se incluye esta característica, se usa 0×40 (64 decimal) ó 0x7F (127 decimal) en los mensajes de activación de nota y 0×00 en los de desactivación.

 

El byte de velocidad controla el volumen de cada nota, pero el diseñador del receptor puede usar este valor también para afectar otro parametro como por ejemplo el tiempo de ataque de la nota.

 

El mensaje de desactivación de nota funciona de forma similar al de activación. A lo largo de los años ha existido una discusión porque parece ser un mensaje redundante, como veremos mas adelante. Sin embargo, existe un modo en que los instrumentos MIDI operan polifónicamente, en el que este mensaje cobra mas sentido. En este modo, el receptor recibe e interpreta en el canal seleccionado, los mensaje emitidos por cualquier canal. De esta manera, se pueden desactivar todas las notas, no importan del canal que provengan, pero para ello debemos ser específicos, en cuanto a cual nota estamos desactivando y con que velocidad.

 

Estado Actual (Running Status).

Cuando los datos MIDI son transmitidos por un secuenciador, en un momento determinado puede llegar a existir un gran número de eventos que deban reproducirse de forma simultánea. En estos casos el retardo introducido por la transmisión de datos en serie puede llegar a ser claramente perceptible. Para ayudar a reducir la cantidad de datos transmitidos MIDI, se emplea una técnica denominada Running Status.

 

Esta técnica toma en consideración el hecho de que es muy habitual que en una cadena de mensajes consecutivos, todos sean del mismo tipo. Por ejemplo, al tocar varios acordes, se generan un montón de mensajes Note On consecutivos, a los que siguen el montón de datos Note Off correspondientes. El truco consiste en que un byte de estado nuevo sólo es enviado si es diferente que el byte de estado que se envió inmediatamente antes. En otras palabras, se emite el byte de estado cuando el mensaje correspondiente no es del mismo tipo que el mensaje inmediatamente anterior (en un mismo canal ).Sólo se transmiten los bytes de datos para todos los mensajes del mismo tipo.

 

La efectividad de esta técnica mejora mucho más si en vez de enviar mensajes Note Off, se envían mensajes Note On con un valor de velocidad igual a 0 (técnica utilizada, por ejemplo, en el secuenciador Logic Audio). De esta forma se producen largas cadenas de mensajes Note On, de transmisión más rápida que las originales cadenas cortas compuestas por mensajes de distintos tipos.

basic-midi-connections1

Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

Espero que esta publicación te haya gustado. Si tienes alguna duda, consulta o quieras complementar este post, no dudes en escribir en la zona de comentarios. También puedes visitar Facebook, Twitter, Google +, Linkedin, Instagram, Pinterest y Feedly donde encontrarás información complementaria a este blog. COMPARTE EN!

0 comentarios:

Publicar un comentario