ChucK est un langage de synthèse audio en temps réel, pour la composition et l'utilisation en live. Il intégre une gestion du temps très précise, qui constitue une de ses qualités originales, ChucK permet également la modification des scripts à la volée, sans pause ni redémarrage. Une partie du langage permet de traiter les évènements dynamiques externes : clavier, souris, usb, MIDI et OSC.

Ce langage est développé pour faire du code un instrument d'expression musicale. L'utilisation basique de Chuck se fait à partir de scripts en mode "ligne de commandes", un environnement complet de programmation est en cours de développement.

Parmi les capacités du langage, on peut trouver en vrac : la gestion des échantillons (formats wav), des oscillateurs pour toutes formes d'onde (phasor, sin, pulse, square, triangle, sawtooth, etc.), des filtres, la gestion du réseau en udp, des évènements MIDI et OSC ainsi qu'une librairie d'instruments paramétrables (modélisation physique) : clarinette, flute, mandoline, moog, sitar, voix, saxophone, une librairie pour la modulation FM, etc.

ChucK est développé à Princeton pour les plateformes MacOS X, Windows ou Linux, sous licence GNU-GPL.
Site principal en anglais
ChucK sur Sourceforge


Voici une traduction en français de deux tutoriels pour se mettre à chucker : l'installation sur Windows XP, et la réalisation d'un premier script : ChucK en français. Ils sont basés sur la version 'Dracula' du langage (1.2.x.x)



Deux exemples (pas vraiment musicaux!) pour illustrer le langage :

// créer un oscillateur à onde carrée nommé 'car'
sqrosc car => dac;
// donner une valeur à la variable fréquence
20 => float frequence; 
// fixer la fréquence de l'oscillateur à 20 Hz
frequence => car.freq; 

// jouer indéfiniment en changeant 
// la fréquence toutes les 1/2 secondes
while (true) { 
  // augmenter ou réduire aléatoirement la fréquence
  std.rand2f(-2.0, 2.0) + frequence => frequence;
  frequence => car.freq; // attribuer la nouvelle fréquence
  // laisser passer une demi seconde
  0.5::second => now;
}
Voila ce que ça donne :




Avec des légères modifications :

// créer un oscillateur à onde sinusoïdale nommé 'sin'
sinosc sin => dac;
// donner une valeur à la variable fréquence
440 => float frequence; 
// fixer la fréquence de l'oscillateur à 440 Hz
frequence => sin.freq; 

// jouer indéfiniment en changeant la fréquence 
// toutes les 50 millisecondes
while (true) { 
  // augmenter ou réduire aléatoirement la fréquence
  std.rand2f(-5.0, 5.0) + frequence => frequence;
  frequence => sin.freq; // attribuer la nouvelle fréquence
  // laisser passer 50 milli-secondes
  50::ms => now;
}