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.
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.
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.
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.
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.
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).
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.
El patch “37-síntesis granular aleatoria.pd” contiene la programación de G.4.13.