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.[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. ArquitecturaA 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]
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émReferências
Bibliografia
Ligações externas
|
Portal di Ensiklopedia Dunia