# SuperCollider

SuperCollider é uma linguagem e ambiente de programação, lançado originalmente em 1996 por James McCartney para síntese de áudio e composição algorítmica em tempo real. É um software livre, lançado sob os termos da GNU.
Desde então, evoluiu para um sistema usado e futuramente desenvolvido tanto por cientistas quanto por artistas que trabalham com som. Sua linguagem de programação dinâmica expressiva e eficiente fez com que ele se tornasse um ponto importante para a pesquisa acústica e a programação interativa.

## Arquitectura

A partir da versão três. o Supercollider apresenta dois componentes disssociados, o servidor, e o scsynth como cliente, o primeiro responsável por comunicações de rede, interpretação de código etc. o segundo responsável por gerar sinal de áudio através de um complexo e sofisticado motor de síntese. Estes componentes comunicam usando OSC (Open Sound Control).
Apesar de o livro de Nick Collins, e Scott Wilson, sobre SuperCollider, documentar que a linguagem terá, maioritariamente, sido desenvolvida em C e Smalltalk, actualmente maior parte do código disponível no repositório da linguagem de programação no Github está dependente de de linguagens de programação como C++, a sintaxe do próprio programa em si, C, Python, CMake, Emacs Lisp, HTML, CSS, javascript, etc.. Nas versões mais recentes, o Supercollider apresenta também traços de Qt/QML, já que a nova user interface, desenhada, entre outros, por Jakob Leben, que tira proveito do referido framework.
O servidor de supercollider suporta um plugin de api C simples, tornando fácil a escrita eficiente de algoritmos de som (unit generator), que podem ser combinados para gerar padrões de som complexos. Porque o controlo externo do servidor acontece via OSC, é possível usar outras linguagens ou aplicações.

### O Servidor de Síntese do SuperCollider (scsynth)

A geração de som por parte do Supercollider é colocada num pacote para optimizar execução de linhas de comandos (através do designado scsynth). Na maior parte dos casos este é controlado dentro da própria linguagemm de programação do SuperCollider, mas pode ser usado independentemente. O servidor de áudio tem as seguintes características:
* acesso via Open Sound Control
* plugin simples para a API ANSI C
* suporta qualquer número de canais de input e output, incluindo setups de grande dimensões a nível de mxulticanal (o software de sistema como BEAST em Birmingham ou o WFS da TU Berlin ou o sistema da Game Of Life Foundation, são escritos em supercollider, o primeiro por pessoas como Jonty Harrison e Scott Wilson, o terceiro pelo português Miguel Negrão, enquanto membro da Game Of Life Foundation, e aluno do Instituto de Sonologia de Haia e do SARC em Belfast)
* Dá aceso a uma Estrutura ordenada de árvore de nós de síntese, que definem a ordem de execução
* Sistema de barramaento que permite estruturar dinamicamente o fluxo de sinal
* Buffers de leitura e escrita
* Cálculo em diferentes velocidade de largura de banda, de acordo com as necessidades: audio rate, control rate, demand rate
* Suporte de OpenGL, e, outrora, Quartz Composer (actualmente deprecado), com vista a criação de animações 3D
Supernova, um implementação independente da arquitectura de servidor, implementada por Tim Blechmann (basicamente o developer de Supercollider mais activo da comunidade nos últimos anos, igualmente membro da Native Instruments, onde trabalha há alguns anos), adiciona super multi-processador através de agrupamento explícitos de nós de síntese.

### A linguagem de programação SuperCollider (sclang)

A language de programação SuperCollider, é uma linguagem de escrita dinâmica, garbage collection, ineritância unilateral, programação orientada a objectos e programação funcional, similar a Smallatak, com uma sintaxe similar a Lisp ou a linguagem de programação C. A sua arquitectura consiste num balanço entre computação em tempo real e rotinas de computação em tempo real e a flexibilidade de uma linguagem de programação abstracta. Como muitas linguagens funcionais, implementa funções como primeira classe (computação)primeira class objectosobjects, que podem ser compostos. Funções e métodos podem ter argumentos pré-definidos com valores e listas de argumentos de duração variáveis e podem ser chamados por qualquer ordem de palavras chave. Closures são léxicos e scope é tanto léxico como dinãmico. Características típicas adicionais de linguagens de programação funcionais são suportadas, incluindo a criação de closures através de aplicações parciais. Casos específicos incluem a expansão implícita de tuplets e sistemas de padrões não definidos. As suas especificidades a nível de arquitectura como linguagem de programação fazem da linguagem um sistema bom, quer para computação de síntese em tempo real, e processamento digital de sinal, composição algorítmica etc, como para fins de batch processing.
Ao suportar métodos de reflective, conversacional, e programação literada, o SuperCollide torna relativamente simples descobrir novos algoritmos de som e desenvolver software costomizadao assim como frameworks costumados. No que diz respeito ao domínio específico de conhecimento, é tanto geral (ex.., suporta a representação de propriedades como tempo e altura em graus variados de abstracção) e e capaz de aplicações para diferentes propositos.