Trabajando con delays parte 1

Los delays o retrazos pueden ser una magnífica herramienta para procesar señales de audio, ya sea que estas sean realizadas a través de síntesis o capturadas en tiempo real. En este post examinaremos diversos usos de esta herramienta.

El delay consta de dos objetos, uno que escribe en un buffer el audio que queremos retrazar y otro objeto que usaremos para leer de tal buffer. Para escribir usaremos el objeto delwrite~, al ncual se le debe asignar un nombre único pues la repetición de nombre es conflictiva y termina en mal funcionamiento. Después del nombre se debe especificar un tiempo máximo de retrazo. Un ejemplo: |delwrite~ deluno 5000|   (el tiempo es dado en milisegundos)

Para la lectura del buffer que se ha creado es posible usar dos objetos: delread~ y vd~ (variable delay). En ambos casos el delay debe usar el nombre que se ha dado en delwrite~. Una vez creado este objeto disponemos de una entrada (de datos en el caso de delread~ y de audio en el caso de vd~) en la cual ingresaremos el tiempo que deseamos retrazar la señal, para dicho propósito podemos usar mensajes o cajas numéricas.



Cuando fijamos un tiempo de para los objetos de lectura obtenemos un primer caso de uso,  el cual es simple pero es la base de todo lo que seguirá en esta publicación. Para este primer caso sugiero que pruebe con valores de retrazo en un principio entre los 250 y 1000 milisegundos y que tenga un generador de señal que no sea continuo en su intensidad. Escuche las diferentes relaciones rítmicas.




Examinemos otra posibilidad. Si queremos crear un loop en tiempo real tenemos dos posibilidades. Grabar el sonido en una tabla o usar dos delays que se releven la lectura/escritura del retrazo. Examinemos primero la situación: la señal va a ser grabada en un buffer, pero se necesita que no entre más señal, como no podemos asumir que el sonido se detendrá debemos controlar la entrada, esto lo haremos creando un "spigot de audio".

Necesitamos primero un objeto line~ el cual conectaremos a una multiplicación con tilde dejando una de las entradas libres para la conectar la señal de entrada. A line~ le conectaremos un mensaje que contiene $1 5 el cual indicará que vaya al valor que se indique en 5 milisegundos. Al mensaje conectaremos un toggle y este actuará como el elemento de control para la entrada de información.

Una vez que hemos controlado la entrada de sonido al buffer debemos pensar cómo fluye el audio. Primero lo escribimos y luego lo leemos. Si hemos bloqueado la entrada de audio ya no tendremos nada que leer pues el buffer queda vació despues de la primera lectura. Necesitamos retroalimentar desde la lectura del delay la escritura del buffer, pero si lo hacemos directamente no contaremos con un método para borrar el contenido del delay, así que tenemos que anteponer entre la lectura del delay y su nueva conexión hacia la escritura un "spigot de audio".

 
 Hagamos una ligera variación. al desactivar el toggle de la retroalimentación notarémos que en la siguiente repetición que esperamos el sonido no aparece ¿Qué tal si queremos que el sonido desaparezca poco a poco? Agreguemos entonces un mensaje con un número mayor a cero y menor a uno. En el siguiente ejemplo se agrega un mensaje con el valor 0.5 lo cual implica que en cada salida de audio por delread~ se retroalimentará ese sonido pero multiplicado por 0.5, es decir, su intensidad bajará a la mitad., y así será cada vez que suene, por tanto el sonido desaparecerá poco a poco, dependiendo del factor que sea usado.

A esa multiplicación que hemos añadido podemos llamarla factor de retroalimentación. Ese número debe estar siempre en el rango de valores mayor a cero y menor que uno, pues si multiplicamos por números mayores a uno estaremos amplificando el sonido cada vez que suceda la lectura y guardaremos en el buffer una versión amplificada.

Para el siguiente ejemplo introduciré un nuevo objeto adc~ que es la contraparte de dac~, si el último es un conversor digital-análogo, el primero es un conversor análogo-digital. Nos permitirá capturar sonido desde un micrófono o cualquier dispositivo conectado a la tarjeta de sonido. La latencia (delay o demora) que exista entre el momento que se toca hasta que suena reproducido por Pure data es dado por la configuración que tengamos en Audio Settings y lo que nos permita la tarjeta de sonido.




En este ejemplo sugiero que se prueben diferentes tiempos en el delread~ y diferentes factores de retroalimentación.

Ahora examinemos un nuevo caso ¿Qué ocurriría si cambiamos el tiempo del delay mientras lee el buffer? Para este caso usaremos el objeto vd~ que nos permitirá realizar tales variaciones de tiempo. Regresemos al generador de señal que usamos en los primeros ejemplos y cambiemos delread~ por vd~. Adicionalmente, agreguemos line~ para realizar el cambio de tiempo progresivamente.

 
En este ejemplo podemos probar realizando cambios a los dos últimos números del mensaje que se envía al line~ conectado a vd~. Si se modifica el segundo valor entre 1 y 999 escucharemos como cambia la altura del sonido original. Si se cambia el tiempo, es decir, el tercer valor podemos apreciar el mismo fenómeno seguido del sonido original (El tiempo que se escriba siempre debe estar en el rango de valores que nos permita el tamaño del buffer que hemos definido). Si cambiamos el orden y el primer valor es el que variamos y dejamos el segundo quieto (y en un valor bajito e.g. 1), la altura también cambiará, pero en esta ocasión en el sentido contrario al que percibimos antes.

Siempre es posible cambiarlo continuamente para no tener que activar el mensaje que va a line~. Como siempre esto lo podemos hacer a través de una forma de onda aprovechando que vd~ nos permite la entrada de una señal de audio. En este caso vamos a realizarlo con phasor~.



Si modificamos con otra forma de onda que no tenga la discontinuidad de phasor~ y cambiamos la frecuencia constantemente obtenemos toda una nueva gama de posibilidades y escucharemos resultados como la modulación de frecuencia.



Para este ejemplo recomiendo que se prueben valores pequeños.





 

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