SuperCollider: arrancando...

Introducción

Durante el curso usaremos el lenguage SuperCollider 3 corriendo en nuestras maquinas Linux. Hay que hacer algunas cosas para que UpserCollider funcione correctamente. A continuación explicaremos en detalle lo que se necesita hacer...

Arrancando Jack

Si ya sabe qué es Jack y como arrancarlo pase a la siguiente sección... sino:

SuperCollider usa a Jack (un programa servidor de audio de baja latencia) como su interfase de entrada y salida de audio. Por lo tanto es necesario que Jack este funcionando antes de arrancar SuperCollider. La manera mas fácil de arrancar Jack es a través del programa de interfase gráfica Qjackctl, que se puede arrancar desde el menú "Applications" "Planet CCRMA" (la última entrada). Haga clic allí y deberia ver algo similar a:

Si es la primera vez que arranca Jack sería una buena idea comprobar que está configurado correctamente. Una vez que Qjackctl arrancó haga clic en el botón Setup para entrar al diálogo de configuración.

Primero asegúrese que Server Path sea "jackd". En la sección Parameters deberían estar activadas las opciones "Realtime" y "Unlock Memory". La opción "Frames/Period" es inicialmente 1024 y controla directamente la latencia del sistema (vea Latency en el ángulo inferior derecho del cuadro de configuración para saber cuanta es la latencia que corresponde a la configuración que tiene definida). Normalmente usaremos 128 para aplicaciones interactivas que necesitan una respuesta rápida del sistema. La opción "Interface" debería apuntar a "hw:0" que es la primera tarjeta de sonido. Haga clic en "Ok" si ha cambiado alguna de las opciones.

Haga clic en el boton "Start" y el servidor de audio Jack deberia arrancar.

Configurando Emacs

Durante el curso utilizaremos SuperCollider desde adentro del editor de texto Emacs. Arranque emacs y agrege las dos líneas siguientes al archivo de configuración "~/.emacs".

;;; supercollider configuration
(require 'sclang)

Podemos editar este archivo usando, por supuesto, emacs:

emacs ~/.emacs

Guarde los cambios y salga de emacs.

Preparando una carpeta de trabajo

SuperCollider necesita que un par de carpetas estén disponibles cuando arranca, asi que comenzemos por seleccionar una carpeta en la cual trabajará con SuperCollider. Por ejemplo, podría ser "~/supercollider/", o "~/cm2007/sc/" o cualquier otro nombre que prefiera. Simplemente necesita acordarse de arrancar SuperCollider siempre desde la misma carpeta (o más precisamente desde una carpeta que contenga las dos subcarpetas que creamos mas abajo). En el resto de este documento supondremos que ha elegido "~/cm2007/sc/" como su carpeta de trabajo.

Cree el árbol de carpetas:

cd
mkdir -p cm2007/sc/synthdefs
mkdir -p cm2007/sc/sounds

Y luego cambie a la carpeta de trabajo:

cd ~/cm2007/sc

Todo esta listo para arrancar SuperCollider por primera vez.

Arrancando SuperCollider

Para arrancar SuperCollider cambie a la carpeta correcta:

cd ~/cm2007/sc

y luego tipee (se acordó de arrancar Jack primero, no?):

emacs -sclang

debería ver una ventana con dos cuadros, en el inferior verá a SuperCollider imprimiendo mensajes mientras arranca. Momentos después la ventana se vera como en esta figura:

el cuadro superior es un área de texto que se puede utilizar para entrar expresiones en el lenguaje SuperCollider y enviarlas al interpretador de SuperCollider. El cuadro inferior es en realidad la salida de texto del proceso sclang (el interpretador del lenguaje de SuperCollider) con el que usted estará interactuando. No es un "archivo", es, de hecho, SuperCollider corriendo dentro de emacs como un subproceso.

Arrancando el servidor de audio de SuperCollider

En este momento SuperCollider esta corriendo pero no hay un servidor de audio funcionando que pueda generar o recibir audio, asi que arranquemos uno. En el cuadro superior (el cuadro que tiene como título "SuperCollider Workspace") tipee:

s=Server.local.boot;

ponga el cursor en cualquier lugar de la línea que acaba de tipear y oprima Ctrl-c dos veces (la tecla de control junto con la tecla "c", dos veces). Debería ver texto imprimiendose en el cuadro inferior a medida que SuperCollider reporta el arranque del servidor de audio. El resultado final será similar a la siguiente figura:

También podria haber arrancado el servidor de audio colocando como antes el cursor en la línea de texto y usando el menú descolgable "SCLang" y accediendo al item "Evaluate Line". Es exactamente lo mismo, solo que mas lento (la unica ganancia es ejercitar el ratón). Aprender las combinaciones de teclas de emacs es una muy buena inversión a largo plazo, es mucho mas rápido que usar el ratoń y los menus descolgables.

una vez que el servidor esta andando es hora de hacer algo de ruido! A esta altura deberia poder ver las puertas de audio de SuperCollider y sus conexiones si oprime el boton "Connect" en Qjackctl y abre la ventana que muestra las conecciones de audio de Jack.

De ahora en más todo archivo que edite en emacs y que termine en ".sc" estará automaticamente en "modo SuperCollider" y usted podrá usar las combinaciones de teclas de acceso rápido o el menú descolgable "SCLang" para mandar comandos al servidor.

Haciendo ruido en SuperCollider

Abra un nuevo archivo en emacs con un nombre que termine en ".sc" y copie allí este codigo fuente de SuperCollider:

s = Server.local.boot;

// statements enclosed in ( ) on separate lines should be executed
// together, either by double clicking on the first parenthesis and
// evaluating the region, or by pressing C-M-x inside the expression.

(
// create a new SynthDef and send it to the server
SynthDef("tutorial-sine", { arg out=0, amp=1.0, freq=440, i_dur=1.0;
	var env, sine;
	// i_* arguments are fixed at instantiation time and cannot be modulated
	// doneAction 2 means free the synth node when the envelope has finished
	env = Line.kr(1, 0, i_dur, doneAction: 2, mul: amp);
	// the mul ugen input is usually more efficient than *
	sine = SinOsc.ar(freq, mul: env);
	// output two channels on bus 0
	Out.ar(0, [sine, sine]);
}).send(s);
)

(
// node object style
Task({
	var freq, dur; 
	freq = 440;
	dur = 1.0;
	4.do { arg i;
		// use Synth.grain rather than Synth.new because the
		// Synth deallocates itself, so we don't need a node id
		Synth.grain(
			// see C-c C-h Synth
			"tutorial-sine",
			["amp", 0.2, "freq", freq, "i_dur", dur],
			s
		);
		dur.wait;
	}
}).play
)

a esta altura su servidor debería estar funcionando asi que la primera línea ya esta ejecutada.

Haga un doble clic en el primer paréntesis de la primera expresión de SuperCollider y oprima Ctrl-c y luego Ctrl-x (o use el menú descolgable "SCLang" para evaluar la región). SuperCollider deberia imprimir como respuesta "a SynthDef" - lo que significa que recibió una definición de sintetizador. Luego haga doble clic en el primer paréntesis de la segunda expresión de SuperCollider y evalúela. Deberia escuchar cuatro beeps....