[MÚSICA] Hola. Bienvenidos una vez más. En el video anterior vimos cómo utilizar Arduino para conectarnos y controlar un sintetizador en SuperCollider. Ahora vamos a hacerlo pero con Pure Data. Pure Data es un lenguaje de programación gráfica. Se basa en el principio de representación de objetos en rectángulos, que tienen entradas y salidas. Estos pueden ser conectados a otros generando redes de procesamiento lógico que vamos a llamar patches. Si nunca has trabajado con Pure Data te recomiendo que revises el curso 3 de este programa especializado. No vamos a hacer nada muy dificil. Solamente un sencillo instrumento que suene una sinusoidal aplicando una envolvente ADSR cada vez que le llegue un mensaje MIDI noteon. Usaremos un botón para activar la nota y mostraremos cómo utilizar potenciómetros para controlar parámetros del envolvente ADSR. ¿Cómo habilitar un puerto MIDI en Pure Data? Antes que nada tenemos que habilitar un puerto para que Pure Data pueda recibir los datos MIDI. Recuerda que cada puerto tiene hasta 16 canales. MIDI configuration. En la barra de herramienta de Pure Data busca el menú de medios. Dale clic y escoge la opción de configuración de MIDI en el menú que se despliega. Ahí en dispositivos de entrada, debes de poder darle clic al botón alargado y ver LoopMIDI Port si estás en Windows, o IAC Bus 1 si estás en la Mac. Escoge el puerto, da clic en guardar configuraciones, aplicar. Y luego aceptar. Esto debería de ser suficiente para poder ahora recibir mensajes MIDI de otros dispositivos. Es posible que tengas que volver a repetir esta operación cada vez que detengas y reinicies Hairless MIDI. El programa. Para recibir datos de MIDI, vamos a utilizar dos tipos de objetos de Pure Data. Notein y ctlin. El primero responde a mensajes tipo noteon. Y el segundo a control change. Si haces clic derecho o Control más clic si estás en a Mac, encima del objeto verás un menú de contexto. Selecciona la opción de ayuda. Verás que se abre una ventana con una serie de programitas que describen el funcionamiento de casi todos los objetos que implementa Pure Data para trabajar con MIDI. Podemos ver que notein tiene tres salidas en el siguiente orden, comenzando por la izquierda. Nota MIDI, velocidad y canal. Sin embargo, si le agregamos un argumento de objeto escribiendo un número después del nombre vemos que la tercera salida desaparece. Esto se debe a que el número que le agregamos pasa a ser el canal que vamos a leer ignorando todos los mensajes que lleguen a otros canales. Por otro lado, ctlin tiene un comportamiento similar. Implementa tres salidas. Valor del control, número del control y canal. El valor tiene que ver con el estado en que se encuentra el controlador. Y el número de control indica qué control está siendo activado. Recuerda que cada controlador MIDI puede implementar hasta 128 controles y que cada uno va enumerado. A su vez, si le agregamos un número de argumento, vemos que esta vez desaparece la segunda salida, convirtiéndose el argumento en el número de control al que vamos a responder, ignorando todos los mensajes que lleguen de otros controles. En nuestro programa agregamos un notein sin argumento y conectamos sus salidas a un objeto tipo número para monitorear lo que va llegando. De paso dividimos el valor que recibimos de velocidad entre 127 para normalizarlo y poderlo utilizar como amplitud. Recuerda que los valores MIDI van de 0 a 127. También agregamos cuatro objetos de tipo ctlin. A estos sí les vamos a poner un argumento. El primero lleva un 1, el segundo un 2, el tercero un 3 y el cuarto un 4. Con esto nos aseguramos que los valores que pasan por cada uno de los objetos provienen de un solo canal. Todos los valores que recibamos aquí, serán normalizados para más tarde poderlos utilizar fácilmente. El sintetizador es sencillo, solo un oscilador tipo osc que recibe una nota MIDI transformada a frecuencia por el objeto mtof. Y es multiplicado por una envolvente escondida en el contenedor pd envolvente. Finalmente el resultado se manda al convertidor de digital a análogo llamado dac. Nota la tilde. Esto significa que estos objetos reciben señales y manipulan señales. Revisemos la envolvente. Da clic derecho sobre el objeto y selecciona abrir del menú de contexto, verás esto. Se ve un poco complicado, pero lo único que tienes que saber al respecto es que implementa una envolvente y que siempre que lo necesites lo puedes encontrar en la siguiente dirección. Ayuda, navegador, browser, adsr. Para meterlo en un contenedor solo tienes que agregar un objeto tipo pd. Este te abrirá una nueva ventana para que pegues el sketch. La primera entrada de la envolvente es un trigger, la segunda, un tipo de ganancia o amplitud. Luego siguen los valores de ataque, decaimiento, sostenido y liberación. Ataque, decaimiento y liberación se definen en milisegundos y el sostenido en porciento. Le hemos agregado a la envolvente unos sliders para controlar estos valores y luego, si contamos con suerte, controlarlos con potenciómetros desde Arduino. Puedes ver que para el ataque, el decaimiento y la liberación, multiplicamos el valor de entrada por 5000 milisegundos. También en las propiedades de los sliders debemos especificar que queremos que su rango sea de 0 a 5000. Para el sostenido hacemos lo mismo, pero el rango sube solo a 100. Entonces el control 1 está enlazado al ataque, el 2 a decaimiento, el 3 a sostenido y el 4 a la liberación. Finalmente, hicimos un pequeño agregado para probar nuestro sketch sin Arduino. Solo es un bang que activa una nota MIDI. El circuito. El circuito es sencillo. Usamos una entrada digital con resistencia pull up interna y cuatro entradas analógicas como se presentaron en el módulo 2 video 4. Puedes seguir el ejemplo en la imagen. El código de Arduino. En Arduino tenemos que leer los puertos de entrada. Para poder enviar los datos a través de Hairless MIDI utilizando el puerto de LoopMIDI o el IAC Bus Driver a Pure Data. El código está comentado y puedes seguir lo que hace en cada sección. Quizá lo más relevante a exponer aquí es que el comando MIDI para mandar un noteon es 0x90 y la implementamos en la función noteon en la variable cmd a la cual le aplicamos una operación lógica de o con número de canal, de tal manera que si el canal es 3, vamos a tener 0x90 o 0x3 igual a 93. Esta misma operación la utilizaremos dentro de las funciones noteoff y cc. Para que todo funciones, sigue el siguiente orden. 1. Implementa el circuito. 2. Sube el código de Arduino a la placa. Asegúrate de que Hairless MIDI tiene sin palomear el cuadrito Serial to MIDI Bridge you que utiliza el puerto en serie así como el programador y genera conflicto. No puedes tener dos proceso comunicándose en serie a través del mismo puerto. Una vez que se subió el código, abre Hairless MIDI y activa el serial to MIDI Bridge. Selecciona el Serial port que le corresponde a Arduino y el MIDI out que le corresponde a LoopMIDI Port. Deberías de ver cómo comienzan a fluir los datos MIDI. 4. Abre Pure Data y activa en el servidor el 10 p palomeando el cuadrito con esa leyenda, como se muestra en la imagen. 5. Abre la ventana de configuración de MIDI y selecciona LoopMIDI port como entrada MIDI. Guarda la configuración. Aplica y acepta. 6. Ahora tu código debería estar recibiendo datos. Muy bien, llegamos al final de este video. Vimos cómo conectar paso a paso Arduino con Pure Data. Recuerda que en vez de los potenciómetros, podrías utilizar otro tipo de sensores. El código para mandar los datos desde Arduino es relativamente sencillo. Solo recuerda cuáles son los comando MIDI y cómo está implementada la función. Hemos implementado en tres funciones diferentes, noteon, noteoff y control change. En este caso no estamos utilizándolas todas. Solo están ahí para que las puedas utilizar después. Ahora, es momento de que retomes todo lo que aprendiste en el curso 3 y lo utilices para construir nuevos instrumentos en Pure Data. [MÚSICA]