Conociendo lo básico de Pure Data

Pure Data puede parecer en un principio un programa un tanto extraño. Al usarlo por primera vez es posible que se pregunte rápidamente ¿Qué hace esto? Es totalmente diferente a muchos programas en los que se pueden crear sonidos, claro, acá la ventaja es que es posible crear sonidos tal como uno quiere que sean y sin restricciones preprogramadas, Adicionalmente no sólo es posible programar para hacer síntesis de sonido, sino que es posible procesar sonidos en tiempo real y también trabajar con imagen.

A continuación haré un recorrido por la ventana principal de Pd-extended, mostrando cómo configurar algunas cosas que pueden agregar funcionalidad y que pueden cambiar dependiendo de la necesidad de cada quien.



Lo primero que encontramos es esta ventana con algunos elementos usuales y posiblemente muchos avisos que en un principio no entendemos. Esta ventana se llama consola y nos va a permitir conocer información relevante, como mensajes de error cuando no hemos llamado bien a un objeto, o mensajes de confirmación como los que vemos en el gráfico anterior (en este caso nos dice que ha añadido algunas librerías extra), o nos permitirá comunicarnos desde el patch con el propósito de aclarar qué ocurre con la programación que hemos hecho.

Notarán que tiene los elementos usuales de otras aplicaciones, una barra de menú (File, Edit, Put, Find, Media y Help). Cada uno de estos  contiene una cantidad de elementos comunes con otras aplicaciones y otros que sí serán propios de PD.

Comencemos por el menú File. Los primeros dos items nos permiten abrir un patch previamente hecho (open) y crear uno nuevo (new). En este gráfico verán que no están habilitados los siguientes tres, pero cuando hemos hecho clic sobre new, quedarán habilitadas estas funciones que nos permiten cerrar el patch, guardarlo o guardarlo con un nombre (close, save, save as respectivamente). El siguiente, message, nos permite enviar mensajes directamente a Pure Data, como prender y apagar el DSP o comunicarse con tablas, etc. (en otro post escribiré sobre esto). Los siguientes dos que encontramos resultan muy interesantes y útiles, path nos permitirá añadir rutas a carpetas que contengan patches de pure data o librerías de patches que extenderán la funcionalidad de este entorno de programación (después de examinar el menú file, mirarémos de cerca esto); luego tenemos Startup, que también cumple con la misma función de path, pero específicamente para llamar librerías que requieren de un archivo de sistema (en Windows dll, en Linux _linux y en osx... no lo sé). Por último una función común a muchos programas y que duplica la función de la X en la esquina de la ventana y es cerrar Pure Data.

Al pulsar path aparecerá una nueva caja de diálogo en la cual encontramos un listado de rutas en las que se encuentran patches con funciones extra. Adicionalmente lo usaremos para añadir rutas para patches que podemos crear nosotros y no tener que programar una y otra vez lo mismo, esto se hace pulsando el botón new y especificando la carpeta o carpetas que dediquemos a esto. Una vez que hemos añadido una nueva ruta simplemente pulsamos OK y ya podemos llamar los patches como objetos en nuestro patch (en otro post hablaré de esto).

 Continuemos con el menú edit. En este menú podemos encontrar funciones de copiado de duplicación, de corte, de selección, y la función de deshacer y rehacer, con estas últimas es necesario recordar que en Pure Data hay una limitación de sólo deshacer lo inmediatamente anterior que se haya hecho, no es posible deshacer muchos pasos atrás. De este menú sólo me concentraré en una función que encontramos al final de la lista y que resulta tremendamente importante, edit mode nos permitirá cambiar entre el modo de edición y el modo de ejecución de un patch. En el modo de edición podemos cambiar el orden de los objetos y añadir otros tantos como lo deseemos. En el modo de ejecución podemos cambiar los valores de cajas numéricas y pulsar objetos como bang o mensajes (de los cuales hablaré más adelante). Se vuelve muy útil aprenderse el atajo de teclado (ctrl+e) para cambiar rápidamente entre un modo y otro sin necesidad de ir al menú.

Otra función que puede resultar útil es font en la cual podemos cambiar el tamaño de la letra o la fuente en la que visualizamos el texto en los patches. A veces el tamaño puede resultar una dificultad para algunas personas, sólo debemos tener en cuenta que un tamaño excesivo también puede ser un problema (es posile que la sensación de orden en el patch se pierda al ver todo muy grande).

Saltemos por un momento al menú Media. En este menú podemos realizar toda la configuración necesaria para producir sonido, capturar sonido, o ingresar datos a través de una interfáz MIDI. Las primeras dos funciones que encontramos son prender y apagar el audio. Esta función también se encuentra en la consola como compute audio que tiene una caja de selección precediéndola. Adicionalmente también podemos hacer esto a través de mensajes directos en el patch o el objeto |dsp| y un toggle. A continuación de estas funciones tenemos la posibilidad de seleccionar un protocolo de entrada y salida de audio. Esto va a cambiar dependiendo del sistema operativo que usemos, en este caso en Windows tenemos dos estándares MMIO y ASIO, es posible que algunas tarjetas de sonido funcionen mejor con alguno de estos dos esquemas, depende del hardware. En Linux es posible encontrar otros estándares como OSS, ALSA o enrutarlo a través de JACK.

Al pulsar sobre alguno de estos estándares se abrirá una caja de diálogo en la cual seleccionaremos la tarjeta de sonido que vamos a usar para la captura como para la salida, la tasa de muestreo a la que vamos a trabajar y un retardo que se tomará como el tiempo que usará el procesador de audio para obtener un bloque de datos. Esto último puede ser modificado dependiendo del hardware que estemos usando. Con algunas tarjetas de sonido es posible usar una latencia muy corta cercana a cero, con otras tarjetas de sonido es posible trabajar sin latencia. Acá también podemos configurar la cantidad de canales de entrada y salida, lo cual depende también del hardware, por ejemplo, las tarjetas integradas de los computadores usualmente sólo tienen un canal de entrada y dos de salida. Una vez que terminemos la configuración simplemente pulsamos Save all settings y ya estará lista la configuración. Notarán que en el menú también hay una función Audio Settings... la diferencia con lo que hemos hecho es un botón que nos permite usar múltiples dispositivos si tales se encuentran conectados.

La siguiente función de interés es MIDI Settings... que nos permitirá configurar la entrada y salida de mensajes MIDI. En este caso también es posible configurar la entrada desde múltiples dispositivos. Por ejemplo, en la imágen a la izquierda podemos encontrar una configuración posible. Tengo como entrada un puente virtual que comunica mensajes MIDI desde una aplicación llamada TouchOSC que funciona en dispositivos Android o en dispositivos que usan iOS. La salida que tengo configurada acá en la imágen de ejemplo es simplemente el banco de sonidos MIDI que viene con Windows. Es posible configurar también como salida un puerto virtual que permita la comunicación con otras aplicaciones como Reason o cualquiera que tenga la posibilidad de recibir mensajes MIDI para controlar algo.

Finalmente encontramos el menú de ayuda, que no creo que necesite mucha explicación. Sólo haré mención de la opción Browse que nos permite explorar las diferentes librerías de Pd-extended y tener acceso a algunos tutoriales.

Bueno, estamos listos para arrancar, así que pulsaremos en el menú File la opción new y aparecerá una ventana en blanco. Este puede ser otro de esos momentos en los que pensamos "¿Esto que hace? ¿Dónde están los "aparaticos" que producen sonido? Pues bien, todo eso es lo que se aprenderá poco a poco y con mucha paciencia. Por ahora me limitaré a presentar a los objetos básicos que permiten realizar las maravillosas programaciones posibles en Pure Data y el diseño de patches que pueden ser usados por muchas personas.

Buscaremos el menú Put en el cual encontramos todo lo que necesitamos para comenzar a programar en Pure Data.Cada una de las opciones que nos ofrece este menú sirve para añadir elementos a nuestro patch (la ventana en blanco que hemos creado al pulsar new). El primero que encontramos es Object que nos permite "invocar" cada uno de los objetos que usaremos para programar. Es útil aprender los atajos de teclado.

Al pulsar Object aparecerá un rectánglo en líneas punteadas de color azul, simplemente buscamos una ubicación dento del patch y pulsamos clic izquierdo para fijarlo. A continuación escribimos una palabra que llamará uno de los objetos con una función específica sea esta procesar sonido, sintetizar sonido, controlar a través de números, etc. Como ejemplo escriba la palabra print y haga clic izquierdo sobre otra parte de la pantalla y verá aparecer el rectángulo con sus bordes sólidos y al interior de este objeto en el borde superior izquierdo un rectángulo hueco al cual llamaremos entrada.

Otros objetos van a tener más entradas y los que nosotros creemos pueden tener tantas como lo deseemos.

Otro ejemplo, cree un objeto y escriba la letra f. En esta ocasión verá aparecer un objeto con dos entradas. Adicionalmente encontrará en la esquina inferior izquierda otro rectángulo hueco al cual llamaremos salida. El propósito de las entradas y salidas es permitir la recepción y envío de información entre objetos.

La siguiente opción que nos ofrece el menú put es Message. Al pulsarlo creará un polígono con el borde derecho "recortado". Los mensajes nos permiten enviar un variado rango de tipos de datos o información hacia los objetos. En el gráfico podemos observar un mensaje vacío, el siguiente con cuatro números enteros diferentes, el siguiente con datos numéricos enteros y decimales además de cadenas de texto, finalmente tenemos un mensaje en el cual no se han prefijado valores constantes, el símbolo $ nos permite asignar información variable.

Observemos adicionalmente que el tercer mensaje tiene una coma que separa al número uno de los demás elementos del mensaje. Esta coma lo que hará es separar el mensaje en dos diferentes, uno con sólo el número 1 y otro con el resto. Si pasamos al modo de ejecución y pulsamos este mensaje (habiendo conectado previamente el mensaje desde su salida hacia la entrada de print) observaremos en la consola la separación de el mensaje de la forma descrita.

El siguiente elemento que encontramos en el menú es number, lo llamaremos también caja numérica y es posible tener otro tipo de caja numérica a través de la opción number2. Estas dos cajas presentan una serie de opciones interesantes si pulsamos clic derecho sobre ellas y escogemos properties, es posible cambiarle algunos parámetros como el ancho, el alto, el color o fijar límites superior e inferior. Adicionalmente es posible añadirle simbolos de envío y recepción de datos (de los cuales hablaré en otro post).

Seguido a number encontramos symbol que básicamente es igual a una caja numérica, pero el tipo de dato que envía es una cadena de caracteres. Después encontramos comment, el cual no sirve para realizar ninguna acción en particular, pero resulta muy importante para añadir comentarios al patch, pues es posible que se quiera hacer una descripción de lo que se ha programado o de los datos que entran y salen de un patch.

Los siguientes dos elementos que encontramos son realmente importantes. El primero de ellos es bang. Este objeto funciona en modo de ejecución como un botón que envía un impulso que le "dirá" a los objetos "haga lo que tiene que hacer", eso se traduce en que comience un comportamiento o que simplemente envíe a la salida el valor actual, como es el caso de las cajas numéricas. El otro es toggle que en apariencia se ve como cualquier caja de selección. Cuando lo pulsamos en modo de ejecución observamos que aparece una equis dentro del cuadrado y si lo pulsamos de nuevo ésta desaparece. En términos del dato que envía funciona como un número binario, es decir, su valor es cero cuando el cuadrado está vacío y uno cuando contiene una equis. Bastaría con conectar un toggle a una caja numérica para constatarlo.

 Saltando number2, el cual ya hemos mencionado, encontramos Vslider y Hslider, que son dos presentaciones de un mismo objeto, uno vertical y el otro horizontal respectivamente. Como tal simplemente funciona como un fader estando en modo de ejecución y enviará a su salida números entre 0 y 127, pero esos valores se pueden cambiar fácilmente pulsando clic derecho sobre el objeto, entrando a las propiedades y estableciendo el límite mínimo y máximo. También es posible cambiar parámetros como el color o el tamaño del objeto, agregar símbolos de recepción y envío, pero las dos opciones que más nos interesan son las siguientes:
1. Pulsando el  botón que dice "lin" cambiamos a "log", lo cual se traducirá en como cambian los valores, si lo hacen de una forma lineal o si lo hacen de una forma exponencial. Esto tiene similitud a los faders no digitales, por ejemplo, si pensamos en los que tiene una consola notaremos que el cambio es mínimo cuando se encuentran abajo y que es muy pronunciado al llegar a su límite superior, esto se debe a que la intensidad es un parámetro exponencial. Otro ejemplo es cómo se comportan en un controlador MIDI, los faders cambian linealmente de valor, es decir, los cambios son parejos a lo largo del movimiento.
2. La otra opción es el botón que dice "steady on click", el cual al pulsarlo cambia a "jump on click". Esta función en particular describe el comportamiento que va a tener el indicador (barrita negra), pues en el primero, si hacemos clic (lo mantenemos) y movemos el ratón, lo que veremos es que cambia desde el lugar que estaba en la dirección que movemos el ratón. En el segundo (jump on click), el indicador saltará a la posición en la cual hagamos clic.


Comentarios

  1. Hola, Luis.
    Tengo unas dudas: ¿y esto no se podría hacer en un lenguaje de programación convencional, por ejemplo, Java? ¿Qué tien Pd de especial?

    ResponderEliminar
  2. Seguramente puedes hacerlo en Java o Python o cualquier otro lenguaje, sin embargo, Pd está listo para que corras todo en tiempo real todo lo relacionado con sonido e imagen y fue diseñado para que los artistas, quienes usualmente no tenían una formación en programación, pudiesen tener un acercamiento un tanto simplificado.

    Hay otros lenguajes que puedes explorar, también dedicados al sonido (y a lo visual algunos), por ejemplo supercollider, max-msp o chuck.

    ResponderEliminar
  3. Seguramente puedes hacerlo en Java o Python o cualquier otro lenguaje, sin embargo, Pd está listo para que corras todo en tiempo real todo lo relacionado con sonido e imagen y fue diseñado para que los artistas, quienes usualmente no tenían una formación en programación, pudiesen tener un acercamiento un tanto simplificado.

    Hay otros lenguajes que puedes explorar, también dedicados al sonido (y a lo visual algunos), por ejemplo supercollider, max-msp o chuck.

    ResponderEliminar
  4. Este señor debería avisar en el título o en el principio, que este post es para gente que sabe, los que no sabemos nada de pure data y que entramos con motivo del engañoso título, cuando nos encontramos en las primeras líneas con el término "patch" ya estamos en bolas, para que seguir leyendo????
    que es un patch? en inglés eso puede ser tantas cosas....y hasta en sonido
    Lo de siempre, seguir buscando uno que no solo sepa, si no que sepa explicarlo

    ResponderEliminar
    Respuestas
    1. Pues a mi me pareció increíblemente didáctico, sólo hace falta una buena comprensión de lectura, quizá releer para terminar de entender ciertos detalles y una pisca de sentido común y me quedó claro lo básico de pure data... ahora a cacharrear

      Eliminar
  5. Este señor debería avisar en el título o en el principio, que este post es para gente que sabe, los que no sabemos nada de pure data y que entramos con motivo del engañoso título, cuando nos encontramos en las primeras líneas con el término "patch" ya estamos en bolas, para que seguir leyendo????
    que es un patch? en inglés eso puede ser tantas cosas....y hasta en sonido
    Lo de siempre, seguir buscando uno que no solo sepa, si no que sepa explicarlo

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

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

Síntesis aditiva