| |
Tipus | llenguatge de programació orientat a objectes, programari d'àudio, llenguatge de programació dinàmic i audio programming language (en) |
---|---|
Versió inicial | 1996 |
Versió estable | |
Llicència | GNU General Public License |
Característiques tècniques | |
Sistema operatiu | FreeBSD, Linux, macOS i Microsoft Windows |
Format de fitxer de lectura | |
Format de fitxer d'escriptura | |
Més informació | |
Lloc web | supercollider.github.io (anglès) |
Stack Exchange | Etiqueta |
SourceForge | supercollider |
| |
SuperCollider és un llenguatge de programació publicat originalment el 1996 per James McCartney per a la síntesi d'àudio en temps real i la composició algorítmica.[1][2]
Des de llavors ha anat evolucionant cap a un sistema utilitzat i desenvolupat per científics i artistes que treballen amb el so. És un llenguatge de programació dinàmic eficient i expressiu que proporciona un marc per a la investigació acústica, la música algorítmica, la programació interactiva i la codificació en directe.
Llançat sota els termes de la GPLv 2 el 2002, SuperCollider és un programari lliure i de codi obert.
A partir de la versió 3, l'entorn SuperCollider s’ha dividit en dos components: un servidor, scsynth; i un client, sclang. Aquests components es comuniquen mitjançant OSC (Open Sound Control).[3]
El llenguatge SC combina l'estructura orientada a objectes de Smalltalk i característiques de els llenguatges de programació funcionals amb un C -family sintaxi.[3]
L'aplicació SC Server admet simples API de connectors C i C ++, cosa que facilita l'escriptura d'algoritmes de so eficients ("unit generators"), que després es poden combinar en gràfics de càlculs. Com que tot el control extern del servidor es realitza mitjançant OSC, és possible utilitzar-lo amb altres idiomes o aplicacions.[3]
La generació de so de SuperCollider s’inclou en un executable de línia d'ordres optimitzat (anomenat scsynth). En la majoria dels casos es controla des del llenguatge de programació SuperCollider, però es pot utilitzar independentment. El servidor d'àudio té les funcions següents:[3]
Supernova, una implementació independent de l'arquitectura del servidor,[5] afegeix suport per a processadors múltiples mitjançant una agrupació explícita en paral·lel de nodes de síntesi.
El llenguatge de programació SuperCollider és un llenguatge funcional, similar a Smalltalk, de tipus dinàmic, recollit a la brossa, orientat a objectes i herència única, similar a Smalltalk,[2] amb una sintaxi similar a la del llenguatge de programació C o Lisp. La seva arquitectura assoleix un equilibri entre les necessitats de càlcul en temps real i la flexibilitat i simplicitat d'un llenguatge abstracte. Com molts llenguatges funcionals, implementa funcions com a objectes de "first class", que es poden compondre. Les funcions i els mètodes poden tenir valors d'arguments predeterminats i llistes d'arguments de longitud variable i es poden cridar amb qualsevol ordre d'arguments de paraules clau. Els tancaments són lèxics i l'abast és alhora lèxic i dinàmic. S’admeten altres característiques pròpies dels llenguatges funcionals, inclosa la creació de tancaments mitjançant aplicacions parcials (corrent explícit), optimització de "tail calls", comprensions de llistes i corrutines. Entre els aspectes específics s’inclouen l'expansió implícita de tuples i el sistema de patrons sense estat. La cerca de missatges en temps constant i la recollida d'escombraries en temps real permet que els sistemes grans siguin eficients i puguin gestionar el processament del senyal amb flexibilitat.[3]
Amb el suport de mètodes de programació reflexiva, conversacional i alfabetitzada, SuperCollider fa relativament fàcil trobar nous algorismes de so [6] i desenvolupar programari personalitzat i marcs personalitzats. Pel que fa al coneixement específic del domini, és general (per exemple, permet la representació de propietats com el temps i el to en graus d'abstracció variables) i té exemples d'implementacions abundants per a propòsits específics.[3]
El llenguatge SuperCollider permet als usuaris construir interfícies gràfiques d'usuari multiplataforma per a aplicacions. La biblioteca de classes estàndard amb components de la interfície d'usuari es pot ampliar mitjançant diversos marcs disponibles. Per a la programació interactiva, el sistema admet l'accés programàtic a fitxers de codi de text enriquit. Es pot utilitzar per generar gràfics vectorials algorítmicament.[7]
Com que el servidor es controla mitjançant Open Sound Control (OSC), es poden utilitzar diverses aplicacions per controlar el servidor. Normalment s’utilitzen entorns de llenguatge SuperCollider (vegeu més avall), però es poden utilitzar altres sistemes conscients de l'OSC, com ara Pure Data.[3]
Existeixen clients "de tercers" per al servidor SuperCollider, inclosos rsc3, un client de Scheme, hsc3, basat en Haskell, ScalaCollider, basat en Scala, Overtone, basat en Clojure i Sonic Pi.[8] Són diferents dels entorns de desenvolupament esmentats a continuació perquè no proporcionen una interfície per al llenguatge de programació de SuperCollider, sinó que es comuniquen directament amb el servidor d'àudio i proporcionen els seus propis enfocaments per facilitar l'expressió de l'usuari.[3]
SuperCollider funciona amb macOS, Linux, Windows i FreeBSD. Per a cadascun d'aquests sistemes operatius hi ha múltiples entorns i clients d'edició d'idiomes que es poden utilitzar amb SuperCollider (vegeu més avall).[3]
També s'ha demostrat que SuperCollider pot funcionar amb Android [9] i iOS.[10]
El codi SuperCollider s'edita i s'utilitza amb més freqüència des del seu propi IDE multiplataforma (que admet Linux, Mac i Windows).
Altres entorns de desenvolupament amb suport de SuperCollider inclouen:
// Print "Hello world!"
"Hello world!".postln;
// Play a mixture of an 800 Hz sine tone and pink noise
{ SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play;
// Modulate a sine frequency and a noise amplitude with another sine
// whose frequency depends on the horizontal mouse pointer position
{
var x = SinOsc.ar(MouseX.kr(1, 100));
SinOsc.ar(300 * x + 800, 0, 0.1)
+ PinkNoise.ar(0.1 * x + 0.1);
}.play;
// List iteration: multiply the elements of a collection by their indices
[1, 2, 5, 10, -3].collect { |elem, idx| elem * idx };
// Factorial function
f = { |x| if(x == 0) { 1 } { f.(x-1) * x } };
Com a llenguatge de programació dinàmic i versàtil, SuperCollider es pot utilitzar per a la codificació en directe, és a dir, actuacions que impliquen que l'intèrpret modifica i executa codi al vol.[14] Els tipus específics de proxies serveixen com a espais reservats d'alt nivell per a objectes de síntesi que es poden intercanviar i sortir o modificar en temps d'execució. Els entorns permeten compartir i modificar objectes i processar declaracions a través de xarxes.[15] Diverses biblioteques d'extensions admeten diferents abstraccions i accés a objectes sonors, per exemple dewdrop_lib[16] permet la creació i modificació en directe de pseudo-classes i pseudo-objectes.