Algunas para aprovechar los controles MIDI

A pesar de que es posible conseguir un buen número de botones, knobs, sliders y demás en un controlador MIDI (o de cualquier otra naturaleza), a veces uno requiere de un control tremendamente detallado que permita que el sonido sea manipulado como deseamos. En esta entrada voy a usar un controlador MAudio Oxygen49 para crear un control detallado para cambios en un filtrado detallado usando transformada rápida de fourier. Para comenzar y que logremos una rápida implementación, sugiero leer esta entrada en la que se crea un filtro como el que se usará acá, hágalo como abstracción y guárdelo en la misma carpeta que va a trabajar.

Asumiendo que ya se ha leído e implementado el patch anterior, vamos a usar algunos mensajes que nos permiten guardar los datos que se han escrito en una tabla. En Pd es posible comunicarse directamente con algunos objetos a través de mensajes especiales, tal es el caso de las tablas en el que basta poner un punto y coma al iniciar el mensaje, pulsar enter e invocar el nombre del mensaje con el comportamiento que se desea. Primero vamos a guardar un estado de la tabla para que se convierta en nuestro esquema a variar.


Esta es la implementación que yo he realizado como abstracción, lo cual me permite tener tantos de estos como desee. Nótese que el nombre de la tabla comienza con $1- lo cual implica que puedo poner como valor de inicialización al cargar el objeto, un identificador que completará el nombre.

En el ejemplo a continuación, se puede observar que le he llamado uno, es decir, el nombre completo será uno-ganancia pues el "uno" reemplaza a $1.




Luego al pulsar sobre la tabla aparece el arreglo de datos sobre el cual es posible dibujar algún patrón, que en este caso es como tener un ecualizador de 512 bandas. Ese primer dibujo se convertirá en nuestro esquema de trabajo, el cual someteremos a diferentes transformaciones. Adicionalmente, como Pd ha cargado por defecto el objeto table como una tabla que tiene límites entre -1 y 1, es posible entrar a las propiedades para cambiar el límite inferior y ponerlo como -0.01.



Así queda esta tabla después de la modificación y sólo basta dibujar cómo moldeará la intensidad del espectro entrante. Dibuje un patrón libremente teniendo en cuenta que el extremo izquierdo representará entre los 0 y 43 Hz y el extremo derecho los 22.05 KHz.

Luego de eso es posible cerrar la ventana de la tabla y volver a la principal, donde tenemos nuestra abstracción invocada y desde la cual nos comunicaremos con la tabla.


Así debe lucir el patch principal. Los mensajes que se observan a la derecha son respectivamente para abrir la visualización de la tabla y para fijar cero como valor para toda la tabla, lo cual resulta útil si uno desea generar un "reset".



La idea es, como se mencionó, que se dibujen diferentes patrones para guardarlos en algún lado y posteriormente llamarlos y que se conviertan en una herramienta de fácil acceso para modificar el sonido. Para lograrlo hay varias implementaciones, sin embargo acá sólo voy a considerar una por su potencial para cambiar rápidamente y guardarse como archivo en el disco duro para ser llamado nuevamente. En la imagen a continuación se observa la implementación general, luego será explicada en detalle.



















Yo he usado un knob que ya he verificado que tiene como identificador el número 75 (objeto ctlin 75) y voy a usarlo para que me muestre 13 estados. Como el control que he seleccionado genera valores continuos entre 0 y 127 y yo deseo 13 estados, basta con dividir lo que esté entrando por 10 y considerar sólo la parte entera. Esto va a permitir transformar el knob en un selector de 13 posiciones (ahorrando el uso de botones), sin embargo, va a generar redundancia en el flujo de datos, lo que se controla con el objeto change.

Antes de continuar con ese flujo de datos voy a contar cómo se escriben los estados. En la parte izquierda desde el bang que está conectado a los objetos cup y del se envía la activación para escribir los 512 valores que se encuentren en la tabla en el momento de presionarlo. Para integrar elementos en un objeto coll, que va a ser la lista de listas que usaremos, se debe enviar una lista con un número que ha de funcionar como identificador inicial. Esto último es realizado con el objeto list prepend que permite añadir antes de la lista que sea proporcionada por tabdump (un objeto que empaqueta la tabla en una lista).

Para este punto ya se puede dibujar en la tabla y luego pulsar el bang mencionado en el párrafo anterior, logrando que se almacene dicho estado y que ahora sea posible cargarlo moviendo el knob que se ha seleccionado para este ejercicio.

Finalmente y retomando el flujo de datos para controlar la llamada de estados, desde el objeto change se envía a un mensaje que dice goto $1, el cual recibe el número y le dice al objeto coll que vaya a la lista que tiene ese número como identificador, una vez que se obtiene se envía el bang (sin intervención del usuario) para que llame la lista y sea fijada a través del objeto tabset. Adicionalmente, en la parte derecha se ha agregado un bang conectado a savepanel, lo que permitirá guardar la lista de listas en disco duro. Es importante que ese archivo sea nombrado como .coll.

Un último detalle, en esta última imagen he añadido también los objetos necesarios para cargar la lista de listas. Espero que encuentren divertido y útil este tipo de control.

Comentarios

Entradas populares de este blog

Conociendo lo básico de Pure Data

Pure data - Vanilla, lo básico, añadir externos

Síntesis aditiva