# 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.
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.

## Arquitectura

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).
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.
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.

### El servidor de síntesi SuperCollider (scsynth)

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:
* Obriu l' accés al control de so
* API senzilles de complement ANSI C i C ++ 11
* Admet qualsevol nombre de canals d'entrada i sortida, incloses les configuracions multicanal massives
* Dona accés a una estructura d'arbre ordenada de nodes de síntesi que defineixen l'ordre d'execució
* Sistema de busos que permet reestructurar dinàmicament el flux del senyal
* Buffers per escriure i llegir
* Càlcul a diferents taxes segons les necessitats: taxa d'àudio, taxa de control, taxa de demanda
Supernova, una implementació independent de l'arquitectura del servidor, 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 (sclang)

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, 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.
Amb el suport de mètodes de programació reflexiva, conversacional i alfabetitzada, SuperCollider fa relativament fàcil trobar nous algorismes de so 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.

### Sistema GUI

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.

## Interfície i suport del sistema

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.
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. 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.

### Sistemes operatius compatibles

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).
També s'ha demostrat que SuperCollider pot funcionar amb Android i iOS.

### Entorns d'edició

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:
* Emacs (Linux, Mac, Windows)
* Vim (Linux, Mac)
* Atom (Linux, Mac, Windows)
* gedit (Linux, Windows)
* Kate (Linux)

## Codificació en directe

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. 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. Diverses biblioteques d'extensions admeten diferents abstraccions i accés a objectes sonors, per exemple dewdrop_lib permet la creació i modificació en directe de pseudo-classes i pseudo-objectes.

## Referències

* ↑ J. McCartney, SuperCollider: A new real time synthesis language, in Proc. International Computer Music Conference (ICMC’96), 1996, pp. 257–258.
* 1 2 J. McCartney, Rethinking the computer music language: SuperCollider, Computer Music Journal, 26 (2002), pp. 61–68.
* 1 2 3 4 5 6 7 8 9 Scott Wilson. The SuperCollider Book. The MIT Press, 2011. ISBN 978-0-262-23269-2 [Consulta: 20 febrer 2021].
* ↑ «SuperCollider mailing lists». Arxivat de l'original el 6 novembre 2009. [Consulta: 20 juny 2015].
* ↑ 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 Arxivat 2011-07-28 a Wayback Machine.. In Proceedings of the International Computer Music Conference, Barcelona, 2005.
* ↑ The vector graphics interface is provided by the Pen class. Various examples can be found in Audiovisuals with SC Arxivat 2020-06-09 a Wayback Machine., blog by Fredrik Olofsson, 02.05.2009 (updated 11.05.2012)
* ↑ «Systems interfacing with SC». Arxivat de l'original el 23 d'octubre 2013. [Consulta: 20 juny 2015].
* ↑ SuperCollider Android project on GitHub
* ↑ Tiny Music System - Cylob Blog, 04.11.2009
* ↑ «SuperCollider with emacs: scel». Arxivat de l'original el 5 de juny 2012. [Consulta: 20 juny 2015].
* ↑ «supercollider». Atom. [Consulta: 20 juny 2015].
* ↑ «jleben/Scate». GitHub. [Consulta: 20 juny 2015].
* ↑ 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 Arxivat 2006-03-14 a 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.

## Vegeu també

* Processament de senyal
* Computació en temps real
* Algorave

## Enllaços externs

* Web oficial