4.5. Síntesis granular

Esta técnica se basa en la combinación de eventos sonoros de muy corta duración (menos de 50 milisegundos), denominados “granos”, que en conjunto son percibidos como sonidos complejos.

El concepto de grano sonoro proviene de la idea de quantum de sonido introducida por Dennis Gabor, y expuesta en su artículo “Acoustical Quanta and the Theory of Hearing”. Gabor construyó, en 1946, un granulador sonoro, con base en un sistema de registro óptico que empleaba un proyector de cine de 16 mm.

Mediante este mecanismo podía obtener pequeñas muestras de un sonido a intervalos regulares, y luego reproducirlas de modo tal que cambiara la duración del sonido sin que se modifique la altura, y viceversa.

El primer músico que creó una teoría compositiva con base en granos sonoros fue Lannis Xenakis, partiendo de la idea que todos los sonidos existentes pueden ser descriptos como un conjunto de partículas sonoras.

Desde 1971, muchos compositores, entre ellos Curtis Roads (1978) y Barry Truax (1988), han utilizado diferentes técnicas para la síntesis del sonido a partir de combinar estos breves eventos acústicos. Los granos a emplear pueden provenir de alguna otra técnica de síntesis (aditiva o frecuencia modulada, por ejemplo) o bien ser tomados de la fragmentación de un archivo de sonido. También suelen ser modificados en amplitud a través de pequeñas envolventes, que mejoran la transición entre eventos.

Existen numerosos y variados métodos que implementan la síntesis granular. Aquí trataremos los principales aspectos de esta técnica, realizando ejemplos en Pure Data.

4.5.1. Lectura de un archivo de audio con phasor~

Al analizar el patch “24-soundfiler.pd” vimos que era posible alojar la información de un archivo de audio en una tabla, y luego ejecutarla a diferentes velocidades. Comenzaremos con algo similar, pero en lugar de leer las muestras almacenadas en la tabla a través de line~, lo haremos con un objeto llamado phasor~, que genera una rampa ascendente entre 0 y 1 a una frecuencia especificada. Multiplicando la salida de phasor~ por la cantidad de muestras del archivo podremos leerlo cíclicamente, y cambiar la frecuencia de lectura.

G.4.8. ilustra este procedimiento. El archivo de sonido es cargado en una tabla mediante el objeto soundfiler, desde cuyo outlet obtenemos la cantidad de muestras de audio que contiene. En el mensaje read, donde especificamos el nombre del archivo a abrir, y el nombre de la tabla donde alojarlo, hemos agregado la inscripción –resize, con el propósito de que el tamaño de la tabla se adapte automáticamente a la longitud del archivo. Esto evitará tener que redimensionar la tabla cada vez que cambiemos de archivo.


G.4.8. Lectura de archivo mediante phasor~

Según mencionamos antes, el objeto phasor~ genera linealmente muestras entre 0 y 1 a una frecuencia dada. Si a esos números los multiplicamos por la cantidad de muestras de la tabla, obtendremos una rampa entre 0 y ese valor, que nos permitirá leer cíclicamente la totalidad del archivo. Sin embargo, si multiplicamos por un número menor, podremos leer una porción del archivo, desde la muestra 0 hasta el número en cuestión.

Para determinar con exactitud cuál debería ser la frecuencia adecuada de phasor~ que permita leer el archivo sin acortarlo o alargarlo, es decir, a la velocidad correcta, podemos dividir la frecuencia de muestreo por la cantidad de muestras a leer (frecuencia = 44 100 / 88 066 = 0,50076 Hz).

El patch de G.4.8. se encuentra en el archivo “32-lectura de archivo con phasor~.pd”. A través de este ejemplo podrá experimentar la lectura cíclica de un archivo de audio a distintas velocidades. Observe, además, el cambio de altura que se produce
en el sonido, en relación con el cambio de velocidad en la lectura de las muestras, al modificar la frecuencia del oscilador. El patch “33-cálculo de frecuencia de phasor~” es similar al anterior, pero implementa el cálculo necesario para que la frecuencia del objeto phasor~ permita la lectura cíclica del archivo a velocidad normal.

 

Una forma de lograr un cambio de altura del sonido sin que cambie su duración es, según mencionamos antes, implementando la técnica granular. Para ello, vamos a modificar el programa de lectura de un archivo de audio con phasor~, agregándole lo necesario para transportarlo sin que el sonido se acorte o alargue.

La figura siguiente (G.4.9.) muestra de qué modo realizamos la lectura. En A observamos un ciclo de phasor~ cuya frecuencia es tal que permite leer la totalidad de las muestras del archivo a velocidad normal. En B, en cambio, aumentamos la frecuencia, por lo cual el archivo es leído más velozmente y la altura se incrementa en consecuencia.

Por último, en C, vemos de qué manera podríamos leer el archivo para que la altura se incremente sin que varíe la duración, dividiendo a la señal en partes, donde cada segmento de recta conforma un “grano” o “quantum” sonoro. La pendiente de cada segmento de C equivale a la pendiente de B, sin embargo, los segmentos en su totalidad ocupan la misma cantidad de muestras que en A.


G.4.9. Modos de lectura de archivo

Para llevar a la práctica esta idea utilizaremos el objeto samphold~. Este objeto emplea un procedimiento denominado en inglés sample and hold, que consiste en tomar una muestra de una señal y repetirla hasta recibir la orden de tomar una nueva muestra. En el objeto samphold~ ingresa por el inlet izquierdo la señal a muestrear, y por el derecho, una señal de control que dispara un nuevo muestreo cada vez que sus valores de amplitud descienden. Para generar esa señal de control usamos otro objeto phasor~, y a través de su frecuencia modificamos la altura del sonido almacenado.


G.4.10. Síntesis granular

En G.4.10. se observa una implementación de lo expuesto anteriormente. La duración de los gránulos se establece en 256 muestras, y con el objeto phasor~ de la izquierda controlamos la velocidad de lectura. La lectura de cada grano comienza en el tiempo que el objeto phasor~ de la derecha determina, lográndose así una lectura fragmentada del archivo que lleva a aumentar o disminuir la altura del sonido sin que se modifique su duración.

El patch “34-síntesis granular.pd” contiene la programación de G.4.10.

El patch que hemos realizado presenta un problema, pues produce saltos de amplitud entre grano y grano, los cuales se traducen en ruido. Podemos mejorar la transición entre los granos aplicando una pequeña envolvente que suavice las discontinuidades. La figura siguiente ilustra este procedimiento.

G.4.11. Síntesis granular con ventana

Multiplicamos cada grano de 256 muestras por una envolvente del mismo tamaño, eliminando así las discontinuidades de amplitud entre granos sucesivos. Sin embargo, aparecen pequeños silencios entre ellos, lo cual debería ser subsanado. Una manera de evitar las diferencias de amplitud producidas por el encadenamiento de envolventes es sumando otra lectura idéntica de los granos con sus envolventes, pero desfasada 128 muestras, lográndose de esta forma cubrir los huecos y que la amplitud se mantenga constante. Para generar el desfase en las lecturas empleamos dos objetos phasor~ distintos, y a uno de ellos le modificamos la fase inicial 180º (introduciendo el valor 0.5 en el inlet derecho).

G.4.12. Síntesis granular con doble ventana

 

Los patches “35-síntesis granular con ventana.pd” y “36-síntesis granular con doble ventana.pd” contienen la programación de G.4.11 y G.4.12.

En el próximo ejemplo vamos a producir una síntesis a partir de la generación de sonidos puros muy breves, de distinta frecuencia. Esas frecuencias van a oscilar en torno a una frecuencia central, desviándose de ella en un determinado ámbito.

Según se observa en G.4.13., empleamos los objetos noise~ y abs~ (que convierte muestras negativas en positivas) para obtener números al azar entre 0 y 1. Cada vez que finaliza un ciclo de phasor~ el objeto samphold~ toma uno de esos números al azar y lo repite hasta que se cumpla un nuevo ciclo. Posteriormente, se multiplica ese número para ampliar el ámbito, se le suma otro para centrar el rango en torno a él, y se lo ingresa al inlet de frecuencia de un oscilador. Además, se multiplica cada grano por una envolvente, al igual que en el ejemplo anterior, y se le superpone una versión desfasada, a fin de cubrir los silencios que la envolvente produce en los extremos del grano.

Mediante la modificación de los parámetros “frecuencia de cambio”, “ámbito” y “frecuencia central” es posible crear “nubes” de alturas, ubicándolas en el registro y cambiándoles su espesor y densidad.

G.4.13. Síntesis granular aleatoria

 

El patch “37-síntesis granular aleatoria.pd” contiene la programación de G.4.13.