Objetivos

 

  • Explicar cómo funciona la transmisión serie asíncrona.
  • Presentar los diferentes tipos de conexiones MIDI.
  • Describir la estructura de un mensaje MIDI.
  • Detallar la estructura de los mensajes Note On y Note Off.
  •  

    Material requerido.

    Taza de café  Un poco de ganas y de interés.

     

    LA SEÑAL ELÉCTRICA

     

    El MIDI usa una interfaz serie asíncrona,  a una velocidad un poco extraña de 31.250KHz. El chip que genera y recibe estos datos asíncronos se llama UART (Universal Asynchronous Receive Transmitters) y todos los Arduinos tienen al menos uno de estos chips. El UART es el chip que se utiliza también para cargar nuestros programas y para enviar datos por el puerto serie.

    Cuando decimos que un dato es serie asíncrono queremos decir que se mandan bit a bit, de uno en uno, y el receptor sincroniza estos datos una vez por cada byte (8 bits).

    Las señales que vamos a manejar son binaria, pero cuando hablamos de comunicación serie asíncrona no les llamamos HIGH y LOW. En su defecto les llamaremos MARK cuando sea 1 y SPACE cuando sea 0.

    Cuando no se están enviando mensajes, la señal permanece en MARK y la aparición de un SPACE marca el comienzo de un byte de datos (Start).

    Después se puede o no enviar un dígito paridad, que sirve para comprobar que el byte se ha mandado de forma correcta, y que las señales MIDI no utilizan.

    El byte termina con la señal de Stop, que es MARK.

    señal serie 8 bit

     

    CONEXIONES

     

    Ya hemos dicho que las conexiones y los cables también son estándar en todos los dispositivos MIDI, pero podemos encontrarnos con tres tipos diferentes de conexiones MIDI IN, MIDI OUT y MIDI THRU.

    Por la conexión MIDI IN, recibimos las señales y tras transformarlas (o no) las enviamos por el MIDI OUT. Como norma general una salida MIDI OUT siempre debería ir conectada a una entrada MIDI IN.

    Una conexión MIDI THRU lo que hace es sacar exactamente lo que le llega por el MIDI IN, o sea que viene siendo muy parecido a un MIDI OUT. A veces se utilizan unos dispositivos que tienen un MIDI IN y varios MIDI THRU, de forma que podamos enviar la misma señal a varios sitios a la vez.

    Como nuestro Arduino tiene un chip UART, podemos utilizar un circuito para utilizar las líneas serie de entrada y salida como líneas MIDI. Y si establecemos la velocidad correcta (31.250KHz) podemos comunicarnos con cualquier dispositivo MIDI.

    Lo que es imprescindible es que tengamos una conexión MIDI IN y otra MIDI OUT. Podemos prescindir del MIDI THRU, a no ser que queráis montar un sistema más complejo.

    midi in out thru

    Si vamos a utilizar la conexión que hemos recomendado utilizando un PC no necesitamos usar un shield y el cable usb que conectemos del Arduino al PC funcionará como MIDI IN y MIDI OUT. Y además no tendremos que usar la velocidad de comunicación estándar del MIDI de 31.250KHz.

     

    ESTRUCTURA DE UN MENSAJE MIDI

     

    En resumen la estructura de un mensaje MIDI se reduce a:

  • 1 bit SPACE como señal de Start.
  • 1 byte con información.
  • 1 bit MARK como señal de Stop.
  •  

    Para controlar un dispositivo MIDI, lo que hacemos es combinar varios de esos bytes de información, y su contenido y la cantidad de ellos dependerá del tipo de mensaje que estemos gestionando.

    Hay diferentes tipos de mensajes MIDI y cada uno de ellos controla un aspecto del sistema, pero en vez de presentar todos juntos, vamos a ir introduciéndolos en las diferentes sesiones, de uno en uno y poco a poco, que siempre es menos doloroso.

    A la hora de programar vamos a mantener la filosofía de la página de trabajar lo menos posible y aprovechar la inmensa comunidad que hay detrás de Arduino, y por eso vamos a utilizar la librería Arduino Midi Library, que nos facilitará muchísimo la programación. Pero como tampoco es bueno trabajar a ciegas, explicaremos un poco por encima las tripas de cada tipo de mensaje.

     

    MENSAJE NOTE ON

     

    Un mensaje MIDI resulta de la combinación de varios bytes de información. El número de bytes que lo compongan depende del tipo de mensaje. Hay varios tipos de mensajes, y cada uno de ellos controla una parte de un sistema musical MIDI.

    Como la mejor manera de entender las cosas suele ser con un ejemplo, vamos a empezar con un mensaje sencillo, el Note On, que se utiliza cuando se genera una nota.

    Este tipo de mensajes está compuesto por 3 bytes.  Y un ejemplo podría ser este:

    bytes mensaje midi

    El primer byte nos indica el tipo de mensaje y a qué canal va dirigido.  Se le conoce como byte de Status.

    midi byte status

    Los 4 primeros bits nos indican qué tipo de mensaje es, en este caso Note On, y el primero de esos bits siempre será 1 para indicar que es un byte de Status.

    Normalmente un mensaje MIDI va dirigido a un canal y cada conexión MIDI puede comunicarse por 16 canales MIDI. De esta forma cada dispositivo MIDI puede utilizar uno, varios o incluso todos los canales.

    De esta forma podemos tener varios equipos conectados, y que cada uno de ellos reaccione cuando se le mande un mensaje por el canal que le hayamos seleccionado.

    Los canales en términos de programación se numeran del 0 al 15, pero para un músico lo hacen de 1 al 16. Esto no puede llevar a errores tontos, y es que lo que para el programador es un valor 5 en el canal, para el músico corresponde al canal 6.

    Como hemos dicho, los mensajes Note On están compuestos de 3 bytes, y los otros dos que nos quedan contienen los datos de ese mensaje. Se les llama bytes de datos.

    bytes datos midi

    El primero de ellos contiene la información de la nota que y el segundo la velocidad, que es la fuerza con la que se ha tocado. Como el primer bit tiene que estar a 0, el byte puede tener 128 valores que van del 0 al 127.

    En el caso de la nota cada unidad es un semitono mayor que la anterior, haciendo un total de 128, y que cubren todo el espectro auditivo. De hecho muchos generadores de sonidos MIDI, no producen ningún sonido para los valores más extremos, tanto por arriba como por abajo.

  • Un semitono es el intervalo más pequeño posible en una escala.
  • Un tono es igual a dos semitonos.
  • Entre las diferentes notas de una escala hay un tono, excepto de Mi a Fa y de Si a Do, que hay un semitono.
  • Si, por ejemplo, sumamos un semitono a Sol, lo que tenemos es un Sol sostenido o La bemol.
  •  

    tonos semitonos escala

    En el caso de la velocidad, cuanto mayor sea más fuerte se habrá tocado la nota, siendo 127 el máximo. Normalmente la velocidad se traduce en el volumen de la nota, aunque también puede modificar el timbre, si tenemos el dinero suficiente.

  • El timbre es lo que nos hace diferenciar la misma nota producida por diferentes instrumentos, por ejemplo, una flauta, un piano o un violín. Es más, incluso nos permite diferenciar entre diferentes flautas, pianos o violine
  •  

     

    MENSAJE NOTE OFF

     

    Todo mensaje de Note On debería estar acompañado en algún momento de un Note Off, que indica se deja de tocar una nota.

    Hay dos maneras de enviarlo de hacerlo:

  • Mandar un mensaje Note Off.
  • Mandar un mensaje Note On, indicando en el primer byte de datos la nota que queremos liberar y en la velocidad el valor 0.
  •  

    Un mensaje Note Off es muy parecido al Note On, pero poniendo en el tipo de mensaje del byte de Status un 8. El primer byte de datos indica que nota hemos dejado de pulsar, y el segundo la velocidad lo rápido que se ha liberado la nota.

    bytes note off midi

    En realidad la mayoría de dispositivos no tienen en cuenta la velocidad de los mensajes Note Off. Por eso la mayoría de las veces se utiliza el mensaje Note On con velocidad 0, y que entienden absolutamente todos los dispositivos.

    note on velocidad 0

    A partir de la siguiente sesión empezaremos a enviar y recibir mensajes y a hacer, por fin, un poco de ruido.

     

    Resumen de la sesión

     

    En esta sesión hemos aprendido varias cosas importantes:

     

  • Hemos aprendido cómo se transmiten los mensajes MIDI.
  • Existen tres tipos de conexiones MIDI: IN, OUT y TRHU.
  • Conocemos la estructura general de un mensaje MIDI.
  •  Hemos descrito con detalle los mensajes Note On y Note Off..
  •  

    Deja una respuesta