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 :)