Bienvenidos a este vídeo. En esta sección, veremos una introducción al lenguaje musical de SuperCollider. Comenzaremos por explorar la forma en que SuperCollider organiza su sintaxis para generar el contenido musical. SuperCollider, es un ambiente de programación diseñado para la creación musical y de arte sonoro. Consiste en dos partes principales; un servidor de síntesis al que llamaremos "SC sint" y al ambiente de programación conocido como "SC lang". El primero, es quien se encarga de procesar el audio y realizar todos los cálculos que requieran. El segundo, es donde el usuario ingresará el código de sus programas. Las partes "SC sint" y "SC lang", se comunican internamente por medio del protocolo "OSC", del cual hablaremos más adelante. Esto permanece oculto al usuario durante el uso del programa. Comencemos por ver la distribución de los elementos de SuperCollider. Del lado izquierdo se encuentra el área para introducir el código, del lado derecho superior es el menú de ayuda, mientras que del lado derecho inferior es la consola, donde se muestra información útil de los procesos que se ejecutan, así como los resultados de las operaciones matemáticas y auditivas. Para comenzar a usar SuperCollider, es necesario inicializar el servidor. Este comando permite que la comunicación interna entre "SC sint" y "SC lang" comiencen a funcionar. Para inicializar esto, es necesario ir al menú "Server", "Boot Server". En el lado inferior derecho, se encuentra la consola, que es donde el sistema imprime sus resultados. Debajo de ella se encuentran unos números que deben cambiar de color a verde, si el "boot" fue exitoso. Si se presenta algún error los invitamos a revisar la sección de preguntas frecuentes del curso. Es un error muy común al usar SuperCollider, el creer que hay un problema cuando no hay sonido, cuando en realidad solo no se ha realizado el "boot". Ahora realizaremos una serie de ejercicios para familiarizarnos con el ambiente de SuperCollider. Comencemos por crear nuestro primer programa que imprima un texto a la consola. Con SuperCollider abierto, aseguremos que esté inicializado con el "boot". Para ejecutar una línea de comando basta con escribir en el lado izquierdo el código que deseamos y presionar "control enter", en Linux y Windows o "comand enter" en Mac. Intenten escribir lo siguiente; la sección entre comillas representa un texto y el comando "postln" le indica a SuperCollider que lo debe imprimir. Podemos ver que en la consola aparece lo que esperamos, intenten cambiar el texto y observen lo que sucede. Para realizar operaciones matemáticas, basta con escribirla en una línea, poner el cursor en ella y presionar "control enter". En este ejercicio, te invito a que pruebes con distintas operaciones y combinaciones para familiarizarse con el ambiente. Es muy importante, siempre terminar cada línea de SuperCollider con un punto y coma. Utilizamos variables para guardar información en SuperCollider, veremos dos formas de hacer variables. La primera, es simplemente utilizar una letra minúscula para guardar información. Por ejemplo, "a" igual a cinco, "b" igual a tres y "c" igual a "a" más "b". Podemos utilizar las variables para registrar operaciones con los datos que guarda. Es importante, que debemos correr todas las líneas para que la operación pueda definirse, por ejemplo, si llamamos a la línea tres antes de la uno y dos, tendremos un error porque aún no hemos definido lo que son "a" y "b". La notación que usaremos en este curso para las variables, será la de variables globales. Una diferencia, es que éstas pueden definirse en cualquier parte del código y son accesibles a todas las funciones. Se inician por una virgulilla, seguida de una palabra en minúscula. Este es un buen momento para conocer su teclado y encontrar cómo se escribe la virgulilla. Para más información, le recomendamos ver la sección de preguntas frecuentes y ayuda. Cuando nuestros programas contengan muchas líneas, es incómodo correr una por una. Podemos agrupar secciones de código, que se corran simultáneamente con un solo "control enter". Para esto usamos los paréntesis, basta con abrir uno al inicio del bloque de código y cerrarlo al final. De esta manera, si ponemos el cursor en cualquier parte del bloque y corremos "control enter", se ejecutará todo el bloque. Como en el siguiente ejemplo, donde se asignan dos variables de texto, también conocidas como "string" y se utiliza la suma para concatenarlas y al final lo imprimimos. Los arreglos, son listas donde podemos guardar una colección de valores de forma indexada, es decir, cada elemento de la lista tiene un número que identifica su posición. Es muy importante recordar, que los arreglos en SuperCollider se empiezan a contar desde cero, por lo cual el primer elemento de la lista tiene un índice cero. El segundo tiene índice 1, el tercero tiene índice 2 y así consecutivamente. Si corremos las siguientes líneas una por una, veremos que accedemos a cada uno de los valores; lista cero, lista 1 y lista 2. Si llamamos a un índice mayor al número de elementos, obtendremos un error, porque no hay tal elemento. En este ejemplo, sólo tenemos 3 elementos, de modo, que si pedimos el número 5 obtendremos un valor "nil", que significa que no hay valor. Podemos preguntar por el tamaño de una lista con la propiedad "size", la cual se llama de la siguiente manera. También es posible iniciar una lista vacía y llenarla con valores uno por uno. Primero lo inicializamos con el siguiente comando, donde indicamos el número de valores que queremos agregar. Luego, utilizamos el método ".add" para agregar los que deseemos. Como en esta lista, agregamos los números 2, 5, luego un "string" llamado "cosa", luego un número 8.3 y 9. Y al final lo imprimimos. Hay varias operaciones interesantes que se pueden hacer con arreglos, entre ellos sumar un número a todos los elementos. Por ejemplo, el arreglo 1, 2, 3 +10, nos da una transposición en el sentido musical. También podemos ordenarlos, con el comando "sort". Y podemos obtener su retrógrado con la función "reverse". Utilizamos funciones para guardar una serie de pasos u operaciones, que los reutilizaremos de forma seguida. Podemos identificar una función por el uso de corchetes. Tenemos tres partes de una función que son muy importantes. La primera, es el nombre. La segunda, son los argumentos de entrada y la tercera, es el resultado de la misma. En este caso, "suma" sería el nombre y los argumentos serían "x" y "y". Y como es una función vacía el resultado es vacío. El nombre se asigna a una variable global y al inicio del corchete se indican los argumentos, con la notación "arg". Por ejemplo, en este caso hagamos una función para sumar dos números "x" y "y", que son los argumentos dentro de la misma. Si queremos crear una variable interna, esto se escribe en la segunda línea de la función, con el comando "var" y luego el nombre de la misma. La tercera parte de la función, es el resultado. Una función siempre regresará el valor de la última línea que corre, en el caso de la suma regresará a la variable resultado. Ahora, para llamar a una función, podemos llamarla por su nombre seguida de punto "value" y los parámetros que le pasaremos. Realicemos otro ejemplo, una función que calcule el promedio de tres números. A diferencia del anterior, pueden ver que los argumentos le asigne unos valores iniciales. Esto significa, que si ustedes no le pasan parámetros a la misma, se utilizarán estos por "default". Ahora realicemos un par de ejemplos musicales. El primero, consiste en transformar un número MIDI a su frecuencia en temperamento igual. Y la segunda, es la inversa de una frecuencia al número MIDI. Al escribir estas fórmulas en la notación de SuperCollider, obtenemos lo siguiente. Probemos con distintos valores de frecuencia, para obtener el número MIDI. Ahora, realicemos de MIDI a frecuencia. En este caso, los dos asteriscos representan la operación potencia. Con esto terminamos el primer vídeo, en el cual aprendimos a utilizar arreglos, funciones y la sintaxis básica de SuperCollider. En el próximo, aprenderemos acerca de generadores unitarios, los cuales se utilizan para la generación de audio.