TUTORIAL DE SUPERCOLLIDER 3 - PARTE 1 Rodrigo F. Cadiz, basado en apuntes de Gary S. Kendall Northwestern University http://www.audiosynth.com/ SuperCollider es: - Editor de texto - Lenguaje de programacion (interprete) - Compilador - Sintetizador digital todo en uno. SuperCollider es: - Open Source y gratis - Originalmente implementado en computadores Apple Macintosh - La version 3 esta disponible fundamentalmente para plataformas POSIX (Unix,Linux,OSX). - Tambien existe un port actualmente en desarrollo para Windows. Historia: - SuperCollider versiones 2 and 3d5.1 para MacOS 8 and 9 - SC Server originalmente para MacOSX - SuperColider3 (Open Source) Arquitectura SuperCollider tiene una estructura cliente/servidor. Las operaciones en SuperCollider estan divididas en un interprete del lenguaje de programacion de SuperCollider (sclang) y un servidor de sintesis (scserver). Estas dos aplicaciones se comunican mediante Open Sound Control a traves de UDP o TCP. Esto significa entre otras cosas: - El servidor puede ser controlado por otros programas aparte de sclang - El interprete puede caerse pero el servidor sigue corriendo - El servidor puede caerse y el interprete sigue corriendo - El interprete y el servidor pueden correr en maquinas distintas, incluso en distintas partes del mundo, permitiendo una mejor distribucion de recursos en la red Desventajas: esta arquitectura produce latencia. No latencia de audio, la cual es muy baja sino latencia de comunicacion. Esto se minimiza usando el servidor interno (internal). - Cada lado cumple una funcion distinta. - scserver es un programa simple y eficiente dedicado a tareas de audio. - No tiene idea de codigo, objetos, OOP, o cualquier cosa relacionada con el interprete. Servidor interno y local - Servidor local: corre un proceso aparte del interprete, sin compartir memoria - Servidor interno: corre un proceso que comparte memoria con el interprete, y por lo tanto permite cosas como osciloscopios y ademas minimiza latencia. Servidor por defecto. - Siempre hay un servidor por defecto, que esta almacenado en la variable de clase default. - Cualquier sintetizador (Synths) o grupo (Groups) creado sin un destino son creados en el servidor por defecto. - Al momento de inicio, el servidor por defecto es el servidor local, pero esto puede ser cambiado. Ejemplo de codigo SuperCollider // definir el servidor por defecto como interno Server.default = Server.internal; // asignarlo a la variable 's' s = Server.default; // partir el servidor s.boot; // definir un sintetizador y "enviarlo" al servidor SynthDef("sine", { Out.ar(0, SinOsc.ar(440, 0, 0.2)) }).send(s); // correr la sintesis s.sendMsg("s_new", "sine", n = s.nextNodeID, 0, 1); // mostrar el osciloscopio interno (OSX) Server.internal.scope(1); // parar el sintetizador (delete) s.sendMsg("/n_free", n); // parar el servidor (opcional) s.quit; Ejemplos: ( Server.default = Server.internal; s = Server.default; s.boot; ) "Hello World".speak; {SinOsc.ar(LFNoise0.ar([10, 15], 400, 800), 0, 0.3)}.play; { RLPF.ar( LFSaw.ar([8, 12], 0, 0.2), LFNoise1.ar([2, 3].choose, 1500, 1600), 0.05, mul: 0.4 ) }.play;