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.[1][2]
SuperCollider | ||
---|---|---|
Información general | ||
Tipo de programa | Entorno de desarrollo y lenguaje de programación de audio | |
Desarrollador | James McCartney y otros | |
Lanzamiento inicial | 1996 | |
Licencia | GNU General Public License | |
Versiones | ||
Última versión estable | 3.9.16 de febrero de 2018 | |
Archivos legibles | ||
SuperCollider Class | ||
Archivos editables | ||
SuperCollider Class | ||
Enlaces | ||
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[3] 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).[3]
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.[3]
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.[3]
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:[3]
- 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[4]
- 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[5] 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.[3]
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[6] 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.[3]
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.[7]
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.[3]
Existen clientes "de terceros" para el servidor SuperCollider, incluyendo RSC3, un cliente del lenguaje de programación Scheme, HSC3, basado en Haskell, ScalaCollider,[8] basado en Scala., Y Overtone, basado en Clojure[9] 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.[3]
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).[3]
También se ha demostrado que se puede ejecutar en SuperCollider iOS (sistema operativo)[10] y Android.[11]
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:
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.[14]
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.[15] 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.[16] Varias librerías y extensiones dan soporte para la abstracción y acceso a los objetos de sonido. Por ejemplo, dewdrop_lib[17] o JITLib, las cuales permiten la creación en vivo y la modificación de pseudo-clases y objetos.
Referencias
- J. McCartney, SuperCollider: A new real time synthesis language, in Proc. International Computer Music Conference (ICMC’96), 1996, pp. 257–258.
- J. McCartney, Rethinking the computer music language: SuperCollider, Computer Music Journal, 26 (2002), pp. 61–68.
- Scott Wilson; David Cottle; Nick Collins (2011). The SuperCollider Book. The MIT Press. ISBN 978-0-262-23269-2. Archivado desde el original el 1 de mayo de 2011. Consultado el 13 de julio de 2013.
- herramientas BEASTmulch de audio multicanal
- T. Blechmann, supernova, a multiprocessor-aware synthesis server for SuperCollider, Proceedings of the Linux Audio Conference, Utrecht 2010.
- J. Rohrhuber, A. de Campo and Renate Wieser. Algorithms Today. Notes on Language Design for Just in Time Programming. In Proceedings of the International Computer Music Conference, Barcelona, 2005.
- La interfaz gráfica de vectores se proporciona por medio de la clase Pen. Varios ejemplos se pueden encontrar en Audiovisuals by SC Archivado el 9 de junio de 2020 en Wayback Machine., blog by Fredrik Olofsson, 02.05.2009 (updated 11.05.2012)
- Rutz, H. H. (2010). «Rethinking the SuperCollider Client...». Proceedings of SuperCollider Symposium. Berlin.
- More examples on the SuperCollider wiki
- Tiny Music System - Cylob Blog, 04.11.2009
- SuperCollider Android project on GitHub
- SuperCollider with emacs: scel
- Scate project
- Cyberpipe @ Slovenia & the future SuperCollider development Archivado el 25 de marzo de 2015 en Wayback Machine. - announcement on the SuperCollider user mailing list, 22.02.2012
- Collins, N., McLean, A., Rohrhuber, J. & Ward, A. (2003), Live Coding Techniques for Laptop Performance, Organised Sound 8(3): pp 321-30. doi 10.1017/S135577180300030X
- J. Rohrhuber and A. de Campo. Waiting and uncertainty in computer music networks Archivado el 14 de marzo de 2006 en Wayback Machine.. In Proceedings of the International Computer Music Conference, Miami, 2004.
- One of the numerous user contributed libraries known as "Quarks", and published in the SuperCollider Quarks repository.