SuperCollider

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.

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]

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

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)

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

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

  • Portal do software livre

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

  • Wilson, Scott; Collins, Nick; Cottle, David (2011). The SuperCollider Book (em inglês). Cambridge, MA: MIT Press. ISBN 9780262232692 
  • Rohrhuber, Julian; Campo, Alberto de; Wieser, Renate (2011). «NOTES ON LANGUAGE DESIGN FOR JUST IN TIME PROGRAMMING» (PDF). wertlos.org. ALGORITHMS TODAY. Consultado em 10 de novembro de 2021. Arquivado do original (PDF) em 28 de julho de 2011 

Ligações externas

  • Página Oficial do SuperCollider (em inglês)
  • Introdução ao SuperCollider (em português)
  • SuperCollider Swiki (em inglês)
  • Lista de Emails dos usuários SuperCollider (em inglês)
  • Realtime Software Synthesis for Psychoacoustic Experiments (1998) (em inglês)
  • Algorithmic Composition Methods for Breakbeat Science (2003) (em inglês)
Wikilivros
Wikilivros
O Wikilivros tem um livro chamado Projetando sons no SuperCollider