Hola y bienvenidos una vez más a otra sesión de SuperCollider para cocinar música electrodoméstia. En esta sección vamos a ver síntesis granular, una técnica muy popular por la gran variedad de efectos y procesos tímbricos que nos permite crear. La síntesis granular, se fundamenta en la construcción de un sonido a partir de la superposición en el tiempo de pequeños segmentos de audio, llamados granos. Un grano es un sonido de muy corta duración, a veces al borde del umbral temporal de la percepción auditiva, alrededor de un milisegundo. La fuente de un grano puede ser una grabación o un sonido sintetizado, pero sea cual sea la fuente, es necesario aplicarle a cada grano una envolvente con un inicio y un final en ceros, como se muestra en la gráfica. El tipo de envolvente que se elija tendrá una repercusión en la manera de integrarse de los granos en el tiempo y el contenido espectral del grano. Sin embargo, las diferencias son lo suficientemente sutiles como para no preocuparnos de ello en este curso. Para la síntesis granular, SuperCollider integra varios UGens. Esta es una lista de ellos. A continuación, presentaremos sólo un par. Procurando una claridad en la presentación de los principios básicos de la síntesis granular para que después, ustedes puedan seguir explorando el resto por su cuenta. Comencemos con "GrainSin" el más simple de los granuladores. Prende tu servidor. "GrainSin" genera granos con sinusoidales, sus argumentos son: "numChannels" número de canales de salida, "trigger" disparador de granos, "dur" la duración de cada grano, "freq" frecuencia de la sinusoidal dentro de cada grano, "pan" posición del grano en las bocinas, izquierda, derecha, "envbufnum" el buffer con la forma de la envolvente para cada grano, "maxGrains" cantidad máxima de granos, "mul" amplitud y "add". Muy bien, comencemos a escribir nuestro "SynthDef". Utilicemos una envolvente sencilla, necesitamos un "trigger" para disparar los granos. "Impulse", es un buen "trigger". Asignemosle una frecuencia controlada por "MouseY", otra opción es utilizar "Dust". La duración del grano va a ser controlada por un "MouseX" y la frecuencia por un "LFNoise1". Un UGen que genera un nuevo valor aleatorio cada tres segundos y los une con una línea recta. Para complementar, le vamos a sumar un valor aleatorio a la frecuencia de cada grano para evitar que el sonido sea demasiado homogéneo. "TRand" genera un valor aleatorio dentro de un rango definido, cada vez que recibe un "trigger". Finalmente, una onda triangular nos va a ayudar a mover el sonido en el espacio de izquierda a derecha lentamente. Echa a andar el sintetizador, ten cuidado con la amplitud. Como los granos se superponen y contienen la misma señal, la amplitud va creciendo conforme aparecen más granos. Mueve el ratón hacia la izquierda, los granos se hacen más y más pequeños en duración. Hacia arriba, aumentan en densidad, llegando a producirse hasta 1.000 granos por segundo. El siguiente tipo de granulador que vamos a ver, toma el sonido de un buffer de audio, lo cual integra una nueva batería de argumentos que podemos utilizar para controlarla. Principalmente, la posición dentro del buffer de donde se toma el grano y la velocidad de reproducción del grano. Si el grano se reproduce dos veces más rápido, será una octava más agudo y si se reproduce a la mitad, será una octava más grave. En SuperCollider un buffer es un espacio en la memoria, que aloja los samples de un archivo de audio. Un buffer puede tener varios canales y se les llama "numframe" a los samples correspondientes al mismo punto en el tiempo. Para este synthe vamos a utilizar el UGen "GrainBuf", el cual toma el audio de un buffer para producir granos. Sus argumentos son prácticamente los mismos. Sólo no tiene un argumento de "freq" y tiene cuatro argumentos nuevos. "sndbuf", "rate", "pos" e "interp". Son "sndbuf" define el buffer de audio de donde se generarán los granos. "Rate", la velocidad a la cual se reproducirá cada grano, si es igual a dos el grano sonará una octava más aguda, si es 0.5 sonará una octava más grave. "Pos" es la posición en el buffer de audio, de la cual se reproducirá el grano. "Interp", es la interpolación entre samples para implementar el cambio de velocidad de reproducción de los granos. Dado que el UGen funciona como un buffer, necesitamos alojar uno con audio para generar granos. Utiliza el siguiente comando para cargar un buffer y asignalo a una variable. Si ejecutamos el siguiente comando, SuperCollider responde con la dirección de la carpeta que utiliza para alojar la carpeta llamada "Sounds", donde se encuentran los audios que utiliza. Utilizar esta carpeta tiene la ventaja de hacer portable nuestro código y poderlo compartir sin tener que cambiar la dirección de los audios. Sin embargo, también pueden utilizar la dirección absoluta, arrastrando el archivo de la carpeta al editor de SuperCollider, o como vieron con Cristian pueden utilizar una dirección relativa con el siguiente código. Desafortunadamente "Grainbuf" sólo funciona con buffers de un solo canal, por lo cual hay que modificar el comando de lectura para leer un canal nada más. Es importante tener control del argumento "Bufnum", pues define el número que va a identificar el buffer en la plataforma de SuperCollider. Si no lo declaramos explícitamente, SuperCollider le asignará uno de manera consecutiva. En los argumentos de "SynthDef", vamos a agregar "buf" para apuntar al buffer que vamos a utilizar para granular y poderlo cambiar desde fuera del "SynthDef". Comencemos. El trigger puede ser un "impulse" o un "dust", cada uno tiene implicaciones diferentes. Yo prefiero utilizar "dust", pero dejo aquí el código comentado para que ustedes experimenten. Para el granulador, vamos a controlar la duración del grano con "MouseY" con un rango definido entre 0.001 y 0.5 segundos. El buffer lo va a determinar el argumento "buf", "rate" lo vamos a mantener en uno y la posición en el "buf", de donde se va a producir el grano, la vamos a determinar con un "MouseX", con un rango definido entre cero y uno, cero es el principio del buffer, uno el final. A continuación, dejo comentadas otras posibilidades de control del UGen para que experimenten en casa. Para ejecutarlas sólo comentan la línea anterior y quitan el comentario de la línea que quieren utilizar. Esta línea agrega un "SinOsc" a la posición del grano en el buffer para generar un tipo de vibrato en el sonido. En esta línea, la posición del grano se toma de una posición aleatoria utilizando un "TRand". En esta línea, utilizamos la posibilidad de expandir canales mediante el uso de arreglos para producir cuatro señales, con diferentes velocidades de reproducción. La velocidad de reproducción es controlada por valores producidos utilizando "midiratio", lo que nos permite producir sonidos afinados por semitonos a partir del sonido original del audio. Ejecutamos el sintetizador. Si tienen varios buffers declarados, pueden utilizar esta línea para alternar. Recuerden que su búfer debe contener un solo canal. Apagamos el sintetizador. Muy bien, con esto terminamos la síntesis granular, una síntesis que conviene seguir explorando, tiene muchas posibilidades y apenas vimos un par de ejemplos. Espero haber concretado una idea general de cómo funciona la síntesis granular. Que esto haya alimentado su curiosidad y que los invite a continuar explorando y llevando a cabo sus propios experimentos. Nos vemos la próxima.