marzo 20, 2018 admin

Ableton push +display OLED + Arduino : Mostrar notas MIDI que tocamos en una pequeña pantalla

En esta nueva entrada vamos a ver como utilizar un display OLED de 128 x 64 (Información desde su página) para recibir MIDI desde un DAW, para ver qué notas tocamos. Este proyecto lo realicé a petición de mi amigo Diego quién me preguntó si podría fabricar un display que muestre las notas que toca en el ableton push.

Push
El ableton push es un hardware de diseño por ableton para usarse con Live, que es un software de producción musical. La parte interesante es que tiene un modo de “Scale”, donde podemos a través de una rejilla isomórfica totalmente configurable  decir que nota se nos ocurra que toque en una cuadrícula de 8  x 8. Por ello, se hizo necesario un display que nos ayude a ubicarnos en la rejilla tan flexible de configurar.

Captura de pantalla 2018-03-20 a la(s) 00.22.29

Necesitaremos
– Display OLED (Uno como este se usó en este tutorial)

– Arduino UNO (o MEGA en su defecto, posteriormente se convierte en MIDI-USB con MOCO-LUFA)

– Protoboard chica

– Cables de jumper wires (yo usé siete)

– Cable USB tipo B

Software
-Ableton Live 10

-Librería de display ASCII para OLED Arduino

https://github.com/greiman/SSD1306Ascii

(Para instalar la librería descargar todo el archivo y lo ubicamos dentro de las librerías de arduino, como cualquier otra librería.)

Controlador MIDI

-Ableton Push (segunda versión)

 

¿Qué haremos técnicamente hablando?

Enviaremos MIDI desde ableton, asegurándonos que se reciba desde el push (live port) hacia nuestro dispositivo en el arduino que convertiremos en MIDI-USB:

Captura de pantalla 2018-03-20 a la(s) 00.32.51

(Nótese en la imagen que dice mozzy synth, porque reciclé el arduino de otro proyecto. Podemos ponerle el nombre que gustemos usando el “Pimp my mocolufa” de los buenazos de Yaeltex.)

Al estar la pista armada (Arm track) básicamente cualquier nota MIDI que enviemos nos la va a mostrar en la pantalla; el arduino está en modo para recibir MIDI y presentarlo en este pequeño display.

 

Conexión

La conexión es extremadamente fácil, usaremos una protoboard para checar que todo funcione como debe antes de considerar armar una placa para una solución más permanente. Usaremos los jumper wires para conectar cada pin del display con el arduino, siguiendo esta guía:

Captura de pantalla 2018-03-20 a la(s) 00.07.23

conectamos los pines de esta manera. Podemos probar nuestro display con el presente código. Solo nos dirá “hola”.

29386180_10215076482846363_7536496860819619840_oprueba_new_lib_pantallita.ino

Código

El código de este proyecto está aquí.

prueba_con_pantalla_midi_in_FINAL.ino

Actualización: Hice una versión donde hace scroll, chance y si gustan pueden cambiar la tipografía para que se ajuste mejor a su pantalla la lista de notas.

 

prueba_con_pantalla_midi_in_scroll_edit.ino

lo que hace nuestro código es que sencillamente está en modo MIDI IN, con dos variables muy importantes:

Captura de pantalla 2018-03-20 a la(s) 00.39.10

Los MIDI.setHandleNoteOn/off son unas instrucciones que están diciéndole al arduino que reaccione de una determinada manera ante la recepción del mensaje MIDI. Más adelante del código, definimos  su comportamiento para enviar la información a la pantalla:

Captura de pantalla 2018-03-20 a la(s) 00.41.31

recibe los tres bytes de la nota MIDI, y hace una condición IF dentro de otra: Si el mensaje va por el canal 1 (donde el push transmite) y además corresponde a un determinado pitch (la nota 0 en decimal es la nota C-2 en el Ableton Live) Va a limpiar la pantalla, y además va a imprimir en ella el texto entre comillas.

///////

Captura de pantalla 2018-03-20 a la(s) 00.41.47

Luego de definir las 128 notas disponibles, al final en la línea 817 le decimos que cuando se deje de tocar una tecla, sencillamente limpie la pantalla si corresponde al canal 1.

La librería de la pantalla

El problema que tenemos con la pantalla, es que se pueden dibujar muchos elementos pero utilizan muchos recursos, haciéndola bastante lenta. Por ello, si ocupamos las librerías por defecto, vamos a tener quizá un mejor resultado gráfico en desmedro de la latencia del dispositivo, además de usar toda la memoria del sistema y la placa UNO tiene poca disponible, así que mejor usar algo lo más ligero posible. En pruebas, se volvió totalmente inusable porque la pantalla demoraba demasiado en actualizarse. Sin embargo, con esta librería que escogí podemos usar fuentes (que están dentro de la carpeta libraries de /documents/Arduino) y podemos escoger la que más nos guste, además de escalarla a 2x (es limitado pero es muy veloz el render en el display).

Captura de pantalla 2018-03-20 a la(s) 00.48.03

Las indicaciones que salen al inicio son el ejemplo de la librería y le di “copiar/pegar”. Vean la data sheet de su display para ver cómo conectarlo, salen ejemplos para la mayoría de los displays:

Captura de pantalla 2018-03-20 a la(s) 00.49.21Archivo/Ejemplos/SSD1306Ascii

Cómo hacerla funcionar:

Sencillamente asegúrense que en las preferencias de MIDI en ableton esté declarado como output (Lo podrán ver como dispositivo MIDI si le ponen MOCO-LUFA, arriba está el enlace para hacer que funcione).

Vamos a tener que armar la pista para que envíe MIDI desde el ableton push2 (live port). En la imagen pueden ver que tengo armadas dos pistas, en orden que suene y que también envíe MIDI.

Captura de pantalla 2018-03-20 a la(s) 00.53.16

 

Terminando

Este proyecto es muy fácil de ampliar: Eventualmente podríamos en vez de enviar la información en una pantalla, reproducir un archivo de audio en una SD que nos diga la nota (por ejemplo para las personas con debilidad visual que desean producir música y preferirían oír el nombre de la nota). Quiero hacer un probador DMX y esta pantalla me servirá para hacer uso correcto de las capacidades de este sistema usando una librería ligera pero funcional.

Espero que les sirva y si hacen algo bonito, me avisan.

E.