SuperCollider

linguagem de programação

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.[2][3] É um software livre, lançado sob os termos da GNU.[4]

SuperCollider
Desenvolvedor James McCartney e outros
Lançamento 1996
Versão estável 3.4 (15 de julho de 2010; há 13 anos)
Sistema operacional Linux, MAC OS X, Windows e FreeBSD[1]
Licença GNU General Public License
Estado do desenvolvimento Ativo
Página oficial https://supercollider.github.io
Captura de ecrã do supercollider a correr um ambiente Vim em puredyne linux.

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 editar

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).[5]

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.[6]

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.[5]

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

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:[5]

  • 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)[7]
  • 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),[8] adiciona super multi-processador através de agrupamento explícitos de nós de síntese.

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

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,[3] 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.[5]

Ao suportar métodos de reflective, conversacional, e programação literada, o SuperCollide torna relativamente simples descobrir novos algoritmos de som[9] 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.[5]

Exemplos de código editar

// imprime "Hello world!" na consola
"Hello world!".postln;
// toca sons sinosoidais a cerca de 800hz, com um somatório de ruído rosa
{ SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play;
// modula uma onda sinosoidal e ruído branco, por
// uma onda sinosoidal cuja frequência é modulada pelo eixo horizontal do rato
{
	var x = SinOsc.ar(MouseX.kr(1, 100));
	SinOsc.ar(300 * x + 800, 0, 0.1)
	+ PinkNoise.ar(0.1 * x + 0.1)
}.play;
// Iteração de listas: multiplica elementos da colecção pelos respectivos índices
[1, 2, 5, 10, -3].collect { |elem, idx| elem * idx };
// função factorial
f = { |x| if(x == 0) { 1 } { f.(x-1) * x } };

Ver também editar

Referências

  1. «Sourceforge download» (em inglês) 
  2. «SuperCollider: Uma nova linguagem de programação em tempo real». Proc. International Computer Music Conference (ICMC’96), pp. 257–258 (em inglês). 2006 
  3. a b «Repensando a linguagem musical do computador: SuperCollider». Computer Music Journal, 26 (2002), pp. 61–68 
  4. «Anúncio de lançamento da versão 3.3.1» (em inglês). Junho de 2009 
  5. a b c d e Wilson, Collins & Cottle 2011.
  6. «GitHub - supercollider». GitHub. Consultado em 18 de julho de 2017 
  7. «SuperCollider mailing lists». Consultado em 20 de junho de 2015. Arquivado do original em 6 de novembro de 2009 
  8. Blechmann, Tim (2010). supernova, a multiprocessor-aware synthesis server for SuperCollider (PDF). Linux Audio Conference. Vienna, Austria: Linux Audio Conference. Consultado em 10 de novembro de 2021 
  9. Rohrhuber, Campo & Wieser 2011.

Bibliografia editar

Ligações externas editar

 
Wikilivros