Introdução
Este texto é uma leve modificação de um relatório que entreguei semestre passado para a cadeira de Computação e Música. Ela faz uma introdução rápida, mas nem tanto, da linguagem ChucK além de uma comparação entre dois protocolos de comunicação usados no mundo da computação musical: OSC e Midi. O discurso é voltado ao público que já está um pouco familiarizado com técnicas de síntese auditiva e programação. Onde possível eu tentei colocar referências, bem como exemplos ilustrativos.
O artigo original está aqui. Esta versão ficará dividida em uns vários posts para se adequar mais ao formato do blog, além de ter algumas correções e adições. Eu espero vocês gostem e deixem suas opniões, dúvidas e sugestões nos comentários.
Chuck
ChucK é uma linguagem de programação de propósito geral voltada para o nicho de programação sônica. Um programa ChucK é um simples script que roda numa máquina virtual. O grande atrativo é o suporte à execução concorrente dos programas facilitado pela VM, que também se encarrega do sincronismo temporal (strongly-timed).
Existem também várias facilidades para modificar os programas que estão atualmente na máquina virtual sem que ela tenha que ser reiniciada o que permite que seja feita programação on-the-fly
ou live-coding.
Foi criada no Princeton Sound Lab por Ge Wang e Perry R. Cook e é usada pesadamente na Princpeton Laptop Orchestra (Plork). ChucK é distribuída sob uma licensa opensource e o código está disponível no site oficial.
Features
- Programação Concorrente
- Mecanismo de sincronismo temporal imbutido na máquina virtual
- Síntese em tempo real ou não (processar samples e gravar num arquivo, por exemplo)
- Programação textual (em oposição a, por exemplo, PureData)
- Unit Generators ( geradores de função ) padrão e extensíveis
- Suporte a comunicação por MIDI e OSC
- Suporte a input de vários periféricos (mouse,teclado,joysticks,acelerômetros, etc..)
Uso
ChucK autalmente se encontra na versão 1.2.1.3 e possui distribuições para as plataformas Linux, MacOS e Windows.
O interpretador é um programa de linha de comando e pode ser invocado da seguinte forma, assumindo que script.ck
é um programa ChucK:
chuck script.ck
Também pode ser encontrado no site oficial um software chamado MiniAudicle, que é uma pequena IDE para escrever código ChucK (contando com syntax highlighting), mandar ele para ser executado na máquina virtual e gerenciar os diversos programas que rodam concorrentemente. É bastante interessante para propósitos de live-coding.
Um tour pela linguagem
A seguir, apresentarei exemplos e demonstrações de construções comuns da linguagem, vários exemplos demosntrados aqui são adaptações livres do código encontrado no manual.
Hello World
Este é um Hello World em ChucK.
// SinOsc é um oscilador de onda senoidal
SinOsc s => dac; // cria o oscilador e guarda na variável s
440 => s.freq; // muda a frequência da onda para 440Hz
2::second => now; // manda tocar por dois segundos
<<< "Hello World!">>> // imprime "Hello World" na tela
Ao rodar este exemplo você irá ouvir uma onda seno na frequência do Lá padrão (440Hz). É parecido com um assovio bem suave.
Eu fiz questão de colocar comentários explicando o que as linhas fazem. Lendo o resto do texto você estará apto a entender o porquê delas fazerem isto.
Referências
Além destes também siga os links no meio do post :)