Tabla de contenidos
Ya aprendimos como crear subpatches de Pd en 2.2.4.4. Ahora aprenderemos como usarlos mas astutamente.
Digamos que tiene este patch:
Puede hacerlo mas prolijo guardando todo lo que no necesite acceso inmediato dentro de un subpatch:
También tiene sentido guardar los contenidos en distintos subpatches, en el caso que mas adelante desee editar partes especificas.
Puede crear un determinado algoritmo (aquí: lineas aleatorias) para un patch que puede ser usado en diferentes lugares:
Un subpatch como este se denomina “modulo”.
Si tiene un subpatch que puede usarse universalmente, como el siguiente, que graba dos segundos en un array y luego lo reproduce a alguna velocidad con amplitud variable:
patches/5-1-1-2-abstraction1.pd
...y desea usarlo en diferentes lugares, entonces surge un problema: una vez que el subpatch sea duplicado, deberá renombrar el array e ingresar un nuevo input (para la velocidad). En su lugar, puede hacer una abstracción de esto; esto es un patch que esta guardado como un archivo separado que puede ser cargado con varias variables.
Agarre el subpatch anterior y guárdelo como “record.pd”. Luega abra un nuevo patch y guardelo como “main.pd” en el mismo directorio que “record.pd”. Entonces cree un objeto y nombrelo “record”:
“record” en realidad no existe como un objeto en Pd. Pero de existir un patch con ese nombre (seguido de .pd) en el mismo directorio, un objeto puede ser creado y se tratara a este patch como un subpatch.
La ventaja de esto esta en las variables. Vuelva a abrir el patch “record.pd” (File Open). Puede escribir variables “$1”, “$2”, etc. dentro de los objetos. Definamos variables para el array y para la velocidad:
(nota del traductor: guarde los cambios) Ahora escriba nuevamente “record” en el patch “main.pd”, esta vez con dos argumentos para las dos variables; el primer argument es el nombre del array y el segundo para la velocidad de reproduccion.
El volumen, que ud. desea modificar en el patch “main” esta como un inlet, como en un subpatch. (nota del traductor: tambien el bang de rec/play).
Pero todavía tenemos el problema de que debemos darle un nombre único al array cada vez que carguemos “record” en el patch principal. Existe una opción especial en Pd para solucionar esto que genera un numero aleatorio individual que puede ser usado como nombre para un patch determinado. Este se genera con $0. Cree una abstracción “z-number.pd”:
Un numero aleatorio con un offset de 1000 sera generado, y contara de forma ascendente desde este numero. Entonces cada vez que evoque esta abstracción otro numero sera generado:
Esto se usa para darle un nombre único al array. La forma convencional es: $0-[nombre del array]. También necesita definir la variable ($1) para la velocidad. El volumen seguirá siendo variable.
Para finalizar, puede disponer los elementos gráficos de una abstracción usando la función “graph on parent”. En el patch “record” puede crear un number box en lugar de un inlet para el volumen, click-derecho en cualquier lugar de la superficie blanca y Properties. Marque “graph on parent” y clickee “apply”:
Vera un rectángulo rojo. Todos los objetos GUI que estén dentro del rectángulo rojo aparecerán en el objeto. Mueva el number box para el volumen dentro del rectángulo rojo, guarde “record.pd”, y cree el objeto en el patch nuevo:
En el patch nuevo:
Puede modificar el tamaño y la posición del rectángulo rojo aquí:
“graph on parent” también funciona en los subpatches.
Dos puntos importantes: puede ver y modificar el contenido de una abstracción en el patch principal (simplemente clickee sobre el objeto en el patch principal). Aunque los cambios aquí no se guardaran! Solo si abre la abstracción normalmente como un patch de Pd se guardaran los cambios. El segundo punto es que la variables-$ solo pueden escribirse en los objetos de una abstracción; $1 en un message box tendra el mismo significado de un input en el message box (como vimos en 2.2.2.1.4). Por ejemplo:
Y, por supuesto, si copia el patch principal y desea usarlo en otro lugar (por ej., en otro directorio o en otra computadora) también debe copiar el patch “record”. Si ud. ubica abstracciones en la carpeta “extra” en el directorio de Pd, estas estarán siempre disponibles. También puede crear su propia carpeta que contenga abstracciones y configurarla para que se cargue automáticamente. Puede indicar su ruta en File Path.
Muchos objetos útiles que no están incluidos en la versión original de Pd fueron desarrollados por programadores de todo el mundo desde que se inicio el Pd. Estos objetos se denominan “externals”. Colecciones de externals se denominan “libraries”. Por ej., el zexy library o la Maxlib library. Debe ubicarlas en la carpeta “extra” e integrarlas al proceso de inicio (File Startup). La versión “Pd-extended” incluye librerías que expanden la versión original.
El Pd también puede ser expandido a través de programas adicionales. GEM es el mas conocido y es usado para procesar data de video y archivos de video de forma similar a como Pd procesa sonido y archivos de sonido. Adicionalmente data OSC de otros programas que utilicen OSC puede ser usada en Pd. Versiones de Pd de algunos programadores fueron expandidas a un grado tan extremo que son apenas reconocibles como versiones de Pd.
Como mencionamos en la sección anterior, el Pd puede ser ampliamente customizado. Creemos algunas abstracciones útiles.
Para las necesidades normales de programación, un objeto “dac~” con un slider de volumen incorporado, ahora llamado “dac”:
Un switch de DSP, llamado “+dsp”:
Representación gráfica de una forma de onda:
Tenemos un patch con un subpatch llamado “test”. En el patch principal, enviamos los siguientes mensajes al subpatch usando “s pd-test” desde arriba hacia abajo:
“obj” crea un objeto; ud. ingresa las coordinadas x/y y el nombre del objeto con sus arguments. Lo mismo para los messages. Las conexiones funcionan de la siguiente forma: “connect [numero de objeto] [numero de outlet] [numero de objeto] [numero de inlet]”. Los objetos se numeran según el orden en que fueron creados, los outlets e inlets de izquierda a derecha. Todo esta inicialmente en 0. El mensaje “clear” borra todo el contenido de un subpatch.
Aquí están todos los comandos. En el presente (junio 2008) algunos no funcionan todavía:
Esto hace posible – aunque de una forma algo complicada – la creación de un determinado numero de arrays dentro de una abstracción, lo cual no puede ser creado de otra forma en Pd.
Con esta abstracción, ud. puede crear en el subpatch diez arrays con un tamaño de 44100:
De este modo, puede también crear el subpatch en su patch principal:
...es naturalmente posible. Pd es solo la superficie de un programa programado en el lenguaje de programación C, lo que le permite escribir sus propios objetos (“externals”). Aquí hay una guiá que lo ayudara a hacer esto: http://iem.at/pd/externals-HOWTO/