Textfile y su posible relación con las abstracciones

En un post anterior de este blog, examinamos una abstracción que hacía uso de la síntesis FM. El control de dicha abstracción solamente fue ejemplificado con algunos mensajes, es por esta razón que en esta ocasión voy a examinar un objeto muy útil, de los tantos que tiene Pure Data, para manejar la información y generar secuencias sonoras.

Podemos partir del siguiente diagrama en el cual entra una información específica a una abstracción y genera sonido. La información es un conjunto o lista de parámetros que la abstracción enviará a sus procesos y dará como resultado un sonido particular, siendo cada sonido diferente y un reflejo de los parámetros.
Esto básicamente es la descripción de lo que ocurriría en cualquier instrumento musical, por ejemplo una guitarra, en la cual se tiene como información de entrada un conjunto compuesto de {altura, cuerda, dedo en mano izquierda, sector para la pulsación, intensidad, duración}. Todas las posibilidades dentro de ese conjunto particular de datos generará un sonido diferente, incluso aquellos que tienen la misma altura, pero se realizan en cuerdas diferentes, esos sonidos tendrán tímbricas diferentes.

Si pensamos un poco sobre el esquema de control sobre la abstracción, los mensajes o conjuntos de información que se le enviarían a dicho instrumento son una partitura, en la cual existe un ciclo repetitivo en la acción de envío de información a la abstracción (instrumento).

 

A partir de ese esquema es posible establecer que la representación de la información sonora puede tener una amplia diversidad, en el caso de la música, tradicionalmente ha sido desde las partituras, sin embargo, otros esquemas son posibles, sobre todo en el ámbito de la música por computador es interesante ver que los conjuntos de información se pueden visualizar de formas diferentes. Por ejemplo, el Studie II de Stockhausen, Artikulation de Ligeti o Solitude de Hans-Christoph Steiner hacen uso de gráficos relacionados al control sonoro.

Por otro lado, en la creación de sonidos que no necesariamente requieren de una representación visual, ya sea porque el creador carece de interés en ello o que la visualización de la información resultaría demasiado compleja, es posible aprovechar el lenguaje mismo de los datos que se introducirán en el instrumento. De esa misma manera es posible verlo en el uso de dos archivos diferentes en el lenguaje de programación CSound, en el cual por una parte se definía un instrumento, con sus atributos (parámetros) y sus comportamientos y por otra se definía una lista de datos que se llamaba Score y que constituía la información que se enviaba a los instrumentos.

Esta última posibilidad, es la que usaremos en Pure Data, considerando que no es la única posible, simplemente, una que se ajusta a las necesidades de control sobre las abstracciones de las que se ha hablado previamente en este blog.

Es de esta manera, después de la reflexión inicial, que presento el objeto textfile, el cual nos permitirá usar archivos .txt en los cuales cada línea separada por un punto y coma (;) es un conjunto de información. El funcionamiento es realmente sencillo, una vez que se le indica la ruta en la cual se encuentra el archivo de texto con la información, se debe enviar un mensaje hacia el objeto pidiendo que "rebobine" o regrese a su primer línea. Cada línea del archivo de texto será enviada como una lista a la salida de la izquierda al recibir un bang y al finalizar el archivo este objeto enviará un bang a su salida derecha.



 Las limitaciones en este momento se hacen evidentes para un control en tiempo real. Sin embargo resulta muy apropiado para el control de secuencias de información.

Lo primero, es modificar un poco el esquema anterior para permitir que al cargar el archivo, se sitúe inmediatamente en el primer elemento. Adicionalmente, también será necesario implementar un sistema que envíe el bang necesario para leer el siguiente elemento de una forma automática. Por otro lado, también es posible crear un mecanismo que permita que de una sola fuente o archivo se pueda enviar la información a diferentes abstracciones.

Para los últimos requerimientos usaremos dos objetos, el primero es zl que permite realizar algunas operaciones sobre listas, en este caso, dividirla en un punto específico. Al invocar el objeto usamos como argumentos de inicialización: slice 1, lo cual nos permite dividir la lista en dos a partir del segundo elemento y aprovecharlo en sus salidas izquierda y derecha (elemento inicial y resto de la lista respectivamente). Esto se ha hecho con el propósito de que el primer dato en cada línea sea el tiempo de retardo que se usará para enviar la siguiente línea.
 
Posteriormente, también necesitamos diferenciar el envío de información hacia las abstracciones que se van a usar. Para este propósito usaremos el objeto route teniendo como argumentos de inicialización los nombres que le asignaremos a cada una de las abstracciones que usemos. Para este ejemplo, usaré tres abstracciones que nombraré: fmsynth, fmsynth2 y noisegrain. El propósito de esto es que el segundo dato de cada línea sea definir la abstracción hacia la cual va la información. Otra función interesante de este objeto es que retiene ese primer dato, permitiendo tener una lista de datos con la información que sí se necesita.

La implementación queda de la siguiente manera:

El archivo de texto, debe comenzar con una línea en la cual damos un retardo inicial, puede ser incluso de 1 milisegundo, lo importante en este caso es que organiza la salida de información para no tener dos líneas simultáneas en la primera lectura. Luego el tiempo de retraso para ejecutar la siguiente instrucción, el nombre de la abstracción y tantos parámetros como sea necesario y así hasta el fin de la secuencia.

Un ejemplo general sería de esta manera:

1;
1000 fmsynth parámetro1 parámetro2 parámetro3 ...;
500 fmsynth2 parámetro1 parámetro2 parámetro3 ...;
...

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