[MÚSICA] En este video aprenderemos a utilizar midi con la tarjeta arduino. Para esto es necesario establecer una comunicación serial entre arduino y nuestra computadora utilizando las reglas del protocolo midi. A continuación haremos un breve repaso de los siguientes conceptos midi. Protocolo, comunicación serial, baud rate. mensajes midi de prendido, apagado y controller change. Cuando trabajamos con midi, en general pensamos en cables y controladores. Así como valores que enviamos desde un teclado hasta un sintetizador. Para utilizar midi desde arduino, es necesario que vayamos un paso más atrás, y entendamos cómo enviar estos mensajes en una señal serial, es decir por medio de unos y ceros o bytes. Como vimos en videos pasados, un bit es una casilla donde podemos asignar un valor de 0 o 1. Mientras que un byte es una colección de 8 bits. Los mensajes midis utilizan un protocolo en el cual las instrucciones y datos se envían por medio de bytes. Esto nos lleva a la pregunta, cuántos valores distintos podemos representar con un byte, es decir 8 bits. Por cada casilla tenemos dos valores posibles, así que si utilizamos todas las casiillas tendremos 2x2x2 y así 8 veces. Es decir 2 a la octava potencia, lo cual nos da un valor de 256. Es decir, con un byte podemos representar 256 valores distintos. El protocolo midi utiliza dos tipos de bytes, uno para indicar qué tipo de mensaje es y otro para mandar valores numéricos de datos. Al primero se le conoce como status byte y comienza siempre con un 1. Al otro se le conoce como data byte y comienza siempre con un 0. Por ejemplo en los mensajes midi note on, es decir encendido de nota el status byte indica que será un mensaje de tipo note on, en un cierto canal y después envía otros dos bytes, uno con el número de nota que debe activar y otro con el valor de intensidad. Ahora, al utilizar el primer bit para indicar si es un status byte o un data byte nos quedan solo 7 bits para representar datos o comandos. Esto significa que tenemos solamente 128 diferentes combinaciones de status bytes y 128 de data bytes. Midi puede enviar 8 diferentes clases de status bytes en 16 canales lo cual nos da 128 valores diferentes. Con respecto a los data bytes, cada uno puede tener 128 valores diferentes. Ahora, con estas combinaciones podemos crear muchos mensajes midi los que se ven en la siguiente tabla. Como podrán imaginar para las computadoras es cómodo leer en binario pero para los humanos no. Por esta razón se suelen representar los mensajes y números midi con diferentes bases de contar, you sea binaria, decimal o hexadecimal. En esta representación tenemos 16 símbolos para contar por lo que el número 10 en lugar de escribirlo como 10, se escribiría como la letra A, el número 11 como la letra B, el número 15 como la letra F, mientras que el 16 sería 10. No es el valor numérico de 10, representa que se nos acabaron los valores para representar un dígito y volvemos a empezar el ciclo repitiendo el primer valor. Una ventaja de escribir los mensajes midi en hexadecimal es que el primer número nos dice qué tipo de mensaje es mientras que el segundo nos dice el canal del mismo. Por ejemplo 80 representa note off en el primer canal. 91 representa note on en el segundo canal. C8 representa controller change en el canal 9. Y así consecutivamente. Por otro lado el data byte nos indica el valor que enviaremos. Quizá resulte un poco extraño pensar en estas notaciones numéricas binaria y hexadecimal para pensar en mensajes midi, pero mientras más introduzcan en la programación musical de este tipo de conceptos verán que existen diversas ventajas de utilizar estas notaciones para organizar mejor nuestra información. Para ver una lista de los mensajes que el protocolo midi puede soportar, tanto en decimal, binario y hexadecimal, podemos ver la documentación midi. Para esto, en los materiales anexos les incluimos algunos vínculos a páginas donde pueden revisar esto más a detalle. Como aclaración de notación es como uno utilizar 0x para indicar que se va a tratar de un número hexadecimal, es decir 0x80 significa que 80 se debe leer como hexadecimal, no representa 8 veces 10, sino como un valor que es 8 y un 0. Si realizamos la conversión este equivaldría a un 50 en valoración decimal. Por otro lado, en binario representaría este número. Para enviar mensajes midi desde forma serial desde arduino, es necesario configurar la velocidad de envío. En este fragmento de código vemos un ejemplo de cómo configuramos midi para utilizarlo en arduino. Como primer paso, you que enviaremos los datos desde el puerto serial necesitamos indicar la velocidad. Les recomendamos utilizar la velocidad 9600. En este código tenemos una función que nos permite enviar un mensaje de note on en el cual indicamos el comando que vamos a mandar, la altura y la velocidad. Al utilizar serial.write indica que nos estamos comunicando desde el puerto serial. Es importante que enviemos los datos correctos you que lo único que nos garantiza que el sistema nos entenderá es que utilicemos las reglas de acuerdo al protocolo midi. En el primer valor de la función note on vamos a indicar el canal en el que queremos enviar. En este caso incluyamos 90 lo cual significa un note on en el canal primero. Mientras que el valor de las siguientes notas lo podemos indicar directamente como un número decimal o como un número hexadecimal. Con esto terminamos el repaso del protocolo midi y cómo hacer una comunicación entre nuestra tarjeta arduino y la computadora. Para esto, aprendimos cómo es que los mensajes midi se estructuran desde sus bytes you sea de status o de data, y cómo se representan desde distintos bases de contar, you sea decimal, binario o hexadecimal. En los siguientes videos aprenderemos cómo utilizar esta comunicación midi entre arduino y la computadora para activar procesos en distintos programas como Pure Data, Ardour y Supercollider. [MÚSICA]