En este video veremos nuevas formas de utilizar los "SynthDef" En lugar de utilizarlos para generar melodías y sonidos, vamos a cargar archivos desde nuestro sistema de cómputo para reproducirlos y manipularlos dentro de SuperCollider. En esta sección, veremos otras formas en las que podemos utilizar los "SynthDef" para controlar objetos distintos a notas y melodías. Intentemos crear un "SynthDef" que nos permita controlar la reproducción de un buffer, es decir, tomar el audio de un sonido grabado y obtener fragmentos de él para "panearlos" de acuerdo a nuestro gusto. De igual manera que en videos pasados, cargamos el sonido, el cual debe estar en la misma carpeta que nuestros "Script" de SuperCollider, y lo introducimos a un buffer. Este "SynthDef" toma como argumentos un número de buffer y un indicador de paneo. Recordemos que el objeto "PlayBuf", como vimos en secciones pasadas, puede reproducir un archivo por medio de un buffer. En este "SynthDef" pueden notar que escribí los parámetros uno a uno en líneas separadas, en lugar de todo de corrido. Esa es una buena idea para evitar tener líneas demasiado largas y difíciles de leer. También, estamos utilizando una nueva notación. Vemos que "doneAction" se encuentra en color verde y con dos puntos. Esta notación es útil cuando uno quiere asignar un valor, específicamente, a un argumento, sin tener que asignarle los valores a todos los demás anteriores a él. Agreguemos ahora una envolvente a nuestro buffer. Existen muchos tipos de envolventes además del "ADSR", los cuales nos pueden ayudar. Por ejemplo, "perc", nos permite generar una simulación de un golpe, como vemos en esta gráfica. Donde los argumentos 0.1 y 1, nos indican la forma en la que debe ser el golpe. La envolvente "seno" nos permite una entrada y salida gradual del fragmento del audio. Podemos crear nuestra propia envolvente por medio de coordenadas de puntos, donde el primero es el tiempo y el segundo es la amplitud relativa. Y agregamos un argumento más que nos da la forma de la curva, en este caso, exponencial. En nuestro ejemplo, usaremos la envolvente seno con una duración del doble de lo que dure el evento, para que los sonidos se traslapen entre sí. Creamos un "SynthDef" que nos permita correr fragmentos cortados de nuestro buffer. Para que un "Pbind" se comunique con el sintetizador, debemos dar los argumentos "instrument", coma y el nombre de nuestro sintetizador. Después, podemos pasarle las etiquetas de acuerdo a las variables que va a recibir. En este caso, vamos a correr el sintetizador "buf" con posiciones iniciales aleatorias entre cero y el número de frames. La duración será 1 y de acuerdo a los parámetros de la envolvente que definimos, veremos cómo los sonidos interactúan entre sí. Ahora, hemos mencionado que SuperCollider es muy bueno para generar y producir audio multicanal. Vamos a ver unos ejemplos de cómo realizamos esto, y los pasos necesarios para configurar nuestro sistema para que produzca este tipo de audio. Primero que todo, para generar audio multicanal, es necesario tener una tarjeta de audio con más de 2 salidas, configurada en nuestro sistema operativo. Una vez que la tarjeta está configurada como la salida de audio por default de nuestra computadora, SuperCollider la reconocerá automáticamente, pero es necesario que le indiquemos cuántos canales queremos utilizar. Si corremos el comando "s.meter", veremos que tenemos dos canales de entrada y dos de salida. Si nuestra tarjeta es de, por ejemplo, cuatro canales, es necesario que le indiquemos que deseamos usar esos cuatro. Esto se logra modificando el siguiente valor de las opciones del servidor: "s.optionsnumOutputBusChannels". Corremos esta línea y es necesario que hagamos "reboot" a nuestro servidor, para que los cambios surtan efecto, por lo cual, tenemos que ir a la opción: "Server", "Reboot", "Server". Al correr de nuevo "s.meter", vemos que ahora tenemos cuatro canales de salida. Si nuestra tarjeta es de sólo dos canales, sólo escucharemos los primeros dos, pero el sistema aún está reproduciendo los otros, por lo que podemos grabarlo. Corramos este sintetizador multicanal que produce cuatro ondas senoidales, una para cada canal con distintas frecuencias y veamos cómo en el medidor aparece el paneo. Probemos ahora crear un "Pbind" que controle el paneo de forma automática. Para el paneo multicanal utilizamos el generador "Pan AZ". Le pasaremos tres argumentos. El primero, indica el número de canales en los cuales va a salir el audio, en nuestro caso, cuatro. Luego, toma la señal que va a ser paneada. Por último, toma el valor de paneo y el ancho del mismo. El paneo tiene un rango de valor entre cero y dos, donde cero es la primer bocina, un cuarto la segunda, dos cuartos la tercera, tres cuartos la cuarta y dos vuelve a comenzar el ciclo. Veamos esto en acción. Tomemos esta señal seno y cambiemos su paneo con el mouse de cero a dos. Ahora, si corremos esto con un "Pbind", vamos a encontrar un error muy particular. En este ejemplo, el instrumento "buf" que tiene un paneo AZ comienza en cero y aumenta su paneo en pasos de 0.2, lo cual debería resultar en un comportamiento similar al anterior. Sin embargo, vemos que el paneo llena todos los canales en lugar de cambiar suavemente entre ellos. Esto se debe a que "Pbind" crea un nuevo evento de sintetizador para cada cambio de valor de alguna de sus variables. Así que, en este ejemplo, en realidad no es un buffer cambiando de valor de paneo, sino muchas instancias del buffer que se traslapan simultáneamente. Podemos ver esto al analizar los nodos que existen. Para esto, llamamos a la función "s.plotTree", que nos abre una nueva ventana donde nos muestra las instancias de sintetizadores que están corriendo simultáneamente. Cuando deseamos correr sólo una instancia del sintetizador y cambiar sus parámetros, necesitamos utilizar el patrón "Pmono" en lugar de "Pbind". "Pmono", precisamente, se encarga de llamar a una instancia del sintetizador y cambiar dichos parámetros. Utiliza una notación ligeramente distinta, donde no se indica la llave "instrumento", sino que se inicia con el nombre del sintetizador y luego los pares de llave parámetro para controlar. Escuchemos y veamos la diferencia. Con esto terminamos este video donde aprendimos a utilizar buffers junto con "SynthDef", así como lanzarlos desde objetos como "Pbind" y "Pmono". Y, muy importante, también aprendimos a producir audio multicanal, así como configurar el sistema.