SuperCollider

SuperCollider es un entorno y un lenguaje de programación originalmente publicado en 1996 por James McCartney para síntesis audio en tiempo real y composición algorítmica.

Desde entonces ha ido evolucionando a un sistema utilizado y desarrollado por científicos y artistas que trabajan con sonido. Se trata de un lenguaje de programación dinámico, eficaz y expresivo que proporciona un marco para la  investigación acústica, la música algorítmica, la programación interactiva y el live coding.

Publicado en 2002 bajo los términos de la licencia GNU Public License, SuperCollider es software libre y de código abierto. La versión principal más reciente es 3.10.0.

Arquitectura
En la versión 3 el entorno SuperCollider fue dividido en 2 componentes: un servidor, scsynth; y un cliente, sclang.  Estos componentes se comunican mediante OSC (Open Sound Control).

El lenguaje de SuperCollider combina la estructura orientada a objetos de Smalltalk y características de programación funcional junto a la sintaxis de la familia del lenguaje de programación C.

La aplicación de servidor de SuperCollider es compatible con una API simple de plugins de C por lo que es fácil escribir algoritmos eficientes de sonido, que luego se pueden combinar en los gráficos de los cálculos. Debido a que todo el control externo en el servidor pasa a través de OSC, es posible utilizarlo con otros lenguajes o aplicaciones.

El servidor de síntesis SuperCollider (scsynth) 
La generación de sonido de SuperCollider se incluye en un archivo ejecutable de línea de comandos optimizado (llamado scsynth). En la mayoría de los casos se controla desde dentro del lenguaje de programación SuperCollider, pero se puede utilizar de forma independiente. El servidor de audio tiene las siguientes características:

 Acceso a Open Sound Control
 Una API simple de C
 Compatible con cualquier número de canales de entrada y salida, incluyendo configuraciones de forma masiva multicanal
 Da acceso a un árbol ordenado de estructura de nodos de síntesis que definen el orden de ejecución
 Sistema de bus que permite reestructurar dinámicamente el flujo de señal
 Buffers para la escritura y la lectura
 Cálculo a ritmos diferentes en función de las necesidades: Tasa de audio, tasa de control, la tasa de demanda 

Supernova, una aplicación independiente de la arquitectura del servidor añade soporte multi-procesador a través de la agrupación paralela explícita de nodos de síntesis.

El lenguaje de programación SuperCollider (sclang) 
El lenguaje de programación SuperCollider es un lenguaje con tipado dinámico, recolector de basura, herencia simple, programación orientada a objetos y programación funcional. Es un lenguaje similar al Smalltalk, con una sintaxis similar a Ruby  o el lenguaje de programación C. Su arquitectura establece un equilibrio entre las necesidades de computación en tiempo real y la flexibilidad y la sencillez de un lenguaje abstracto. Al igual que muchos lenguajes funcionales, implementa las funciones como objetos de primera clase, cuyo estado puede estar compuesto. Funciones y métodos pueden tener valores de los argumentos por defecto y de las listas de argumentos de longitud variable, usted puede comunicarse con cualquier orden de los argumentos de palabras clave. Los cierres son léxica, y el alcance es a la vez léxico y dinámico. Otras características típicas de los lenguajes funcionales son soportadas, incluyendo la creación de cierre a través de la aplicación parcial, optimización de la llamada final, las listas por comprensión y corrutinas. Detalles específicos incluyen la ampliación implícita de tuplas y el sistema de patrón sin estado. Su recolección de basura real y la búsqueda constante de mensajes de tiempo permite a los sistemas grandes ser eficientes y manejar el procesamiento de señales flexiblemente.

Por métodos de apoyo de programación reflexiva, interactiva y literal, SuperCollider hace que sea relativamente fácil de encontrar nuevos algoritmos de sonido y desarrollar software a la medida, así como marcos personalizados. En lo que respecta al conocimiento de dominio específico, que es a la vez general (por ejemplo, que permite representar propiedades tales como el tiempo y el tono en grados variables de abstracción) y copiosa de implementaciones de ejemplo para fines específicos.

Sistema de interfaz gráfica (ide)
El lenguaje SuperCollider permite a los usuarios construir interfaces gráficas de usuario multiplataforma para las aplicaciones. Los componentes del estándar de la biblioteca de clases con interfaz gráfica pueden extenderse por varios frameworks disponibles. Para la programación interactiva, el sistema admite el acceso mediante programación a ricos archivos de código de texto. Se puede utilizar para generar gráficos vectoriales algorítmicamente.

Interfaz y soporte de sistemas

Clientes
Debido a que el servidor se controla usando  Open Sound Control (OSC), una variedad de aplicaciones se puede utilizar para controlar el servidor. Los entornos del lenguaje SuperCollider (véase más adelante) son frecuentemente usados, pero otros sistemas OSC-aware pueden ser utilizados, como Pure data.

Existen clientes "de terceros" para el servidor SuperCollider, incluyendo RSC3, un cliente del lenguaje de programación Scheme, HSC3, basado en Haskell, ScalaCollider, basado en Scala., Y Overtone, basado en Clojure Estos son distintos de los entornos de desarrollo se mencionan a continuación, ya que no proporcionan una interfaz para lenguaje de programación de SuperCollider, sino que se comunican directamente con el servidor de audio proporcionando sus propios enfoques para facilitar la expresión del usuario.

Sistemas Operativos compatibles
SuperCollider puede correr en Mac OS X, Linux, Windows y FreeBSD.
La versión de windows, sin embargo, tiende a ir por detrás de los otros, ya que la mayoría del desarrollo se basa en Mac y Linux.
Para cada uno de estos sistemas operativos hay múltiples entornos de edición del lenguaje y clientes que se pueden utilizar con SuperCollider (ver más abajo).

También se ha demostrado que se puede ejecutar en SuperCollider iOS (sistema operativo) y Android.

Entornos de edición

La versión para Mac de SuperCollider es más comúnmente utilizado en el marco de su propia interfaz gráfica específica (Cocoa (informática)), en Windows y Linux, varios editores de texto y un número de entornos de desarrollo integrados comunes se puede utilizar, por ejemplo:

 Emacs (Linux, Mac, Windows)
 Vim (Linux, Mac)
 gedit (Linux, Windows)
 Kate (Linux)

Para cada uno de los entornos listados anteriormente, un  Plug-in permite la ejecución en tiempo real del código de SuperCollider y la interacción con el servidor de audio.

Los intentos anteriores de portar SuperCollider a Windows también han dado lugar a un entorno de desarrollo basado en Python llamado PsyCollider, y un plug-in para  Eclipse, pero no se han actualizado recientemente. Sin embargo, un nuevo esfuerzo se lleva a cabo actualmente para desarrollar un IDE multiplataforma basado en el marco de Qt.

Ejemplos de código
// Imprime  "Hello world!"
"Hello world!".postln;

// Reproduce una mezcla de un tono sinusoidal de 800 Hz y "ruido rosa" (PinkNoise)
{ SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play; 

// Modula una frecuencia sinusoidal y una amplitud de ruido con otra sinusoidal
// Cuya frecuencia depende de la posición horizontal del puntero del ratón
{ 
	var x = SinOsc.ar(MouseX.kr(1, 100));
	SinOsc.ar(300 * x + 800, 0, 0.1) 
	+ 
	PinkNoise.ar(0.1 * x + 0.1) 
}.play; 

// Lista de iteración: multiplica los elementos de una colección por sus índices
[1, 2, 5, 10, -3].collect { 
	arg elem, idx;
 	elem * idx;
};

// Función factorial
f = {
	arg x;
 	if(x == 0) { 1 } { f.(x-1) * x }
};

Live coding
Como lenguaje versátil de programación dinámico, SuperCollider puede ser usado para realizar live coding, es decir, conciertos que impliquen al intérprete para modificar y ejecutar código fuente sobre la marcha. Tipos específicos de  patrones proxies sirven como marcadores de posición de alto nivel de objetos de síntesis que pueden conectarse, desconectarse y/o modificarse durante la presentación. Los entornos informáticos permiten la compartición y/o modificación de objetos y declaraciones de los procesos realizados a través de redes de computadoras. Varias librerías y extensiones dan soporte para la abstracción y acceso a los objetos de sonido. Por ejemplo, dewdrop_lib o JITLib, las cuales permiten la creación en vivo y la modificación de pseudo-clases y objetos.

Referencias

Enlaces externos
 Página oficial de SuperCollider
 SuperCollider Swiki
 Lista de correo de usuarios de SuperCollider
 Taller de SuperCollider por Nick Collins
 Ayuda en línea de SuperCollider

Lenguajes de programación orientada a objetos
Lenguajes de programación de audio
Software científico libre
Software de audio libre
Software para macOS
Software para Linux
Software para Unix
Software para Windows
Lenguajes de programación dinámicamente tipados