ChucK

ChucK est un langage de synthese 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 et fonctionne sur les plateformes MacOS X, Windows ou Linux, sous licence GNU-GPL.

Lien pour télécharger ChucK

Sur cette page en français, vous trouverez un petit guide pour installer ChucK sur un système Windows XP, un tutoriel pour écrire un premier script ChucK, tous deux traduits d'après les textes de la ChucK Team ainsi qu'une micro-faq, répondant à des problèmes rencontrés en débutant. Il existe en anglais un manuel complet décrivant le langage, ainsi qu'un wiki, et des listes de discussion. Toutes ces infos sont accessibles depuis le site de ChucK

Débuter avec ChucK sur Windows XP

Ce tutoriel est une traduction du texte disponible sur le wiki de ChucK (ChucK WinXP install < run). Version originale écrite par Adam Tindale (--art) & Ge Wang. La version traduite comporte de légères modifications, basées sur la version 'dracula' (1.2.0.5) de ChucK. Traduction : Pierre Commenge / emoc.org, mai 2006.

ChucK s'utilise via le terminal, en "ligne de commande". Si vous n'avez jamais utilisé la ligne de commande jusque là, pas de panique! L'apprentissage de quelques instructions de base vous permettra d'aller loin.

Installer ChucK

- Commencez par télécharger l'exécutable de ChucK (à droite pour windows)
- Le fichier que vous avez téléchargé a un nom de la forme 'chuck-1.2.X.X-exe.zip', décompressez le dans un dossier.
- Copiez le fichier chuck.exe dans 'c:\windows\system32' ( chuck.exe se trouve dans le dossier 'bin' du dossier créé à l'étape précédente)
- copiez le répertoire décompressé 'chuck-1.2.x.x-exe' dans 'C:\' (à la racine du disque C)
- créez un répertoire ou placez vos propres scripts ChucK, par exemple dans 'C:\chuck-1.2.x.x-exe/perso/'

Utiliser le terminal

- Ca peut être abominable, comme ça peut être amusant! allez c'est parti.
- On utilise 'exécuter' dans le menu démarrer pour lancer le terminal, ensuite tout se fait au clavier.

1 - cliquer sur démarrer dans la barre des taches
2 - choisir exécuter

3 - dans la fenêtre qui s'ouvre, taper 'cmd'

4 - une nouvelle fenêtre va s'ouvrir, elle ressemble à ça :

5 - On y est, pour se rendre dans le répertoire de chuck, il faut utiliser la commande 'cd' (pour "changing directories"), puis on se placera dans le répertoire 'examples' et de là on pourra chucker. Donc, on commence par changer de répertoire en tapant 'cd C:\'

6 - Puis en tapant 'cd chuck-1.2.x.x-exe' on se place dans le répertoire de ChucK (remplacer le nom du répertoire par celui correspondant à votre version). Dans mon cas il s'agit de la version 1.2.0.5 donc ça donne ça

7 - Vous pouvez utiliser la commande 'dir' pour avoir la liste de tous les fichiers du répertoire

8 - Maintenant, vous devez vous placer dans le répertoire 'examples' avec 'cd examples'

Bon boulot, et maintenant du son!

Démarrer ChucK dans le terminal

Ok, nous sommes dans le répertoire 'examples/basic' et vous lancez ChucK depuis le terminal pour la première fois, pour cela tapez :

chuck moe.ck

ChucK va exécuter tout ce qui se trouve dans le fichier 'moe.ck'. Vous pouvez, bien sur, remplacer 'moe.ck' par le nom de n'importe quel fichier ChucK. Si ce script est une boucle sans fin, il faudra finir par arrêter ChucK, en tapant CONTROL-C (appuyer simultanément sur CTRL et la touche C). C'est la combinaison qui "tue" ChucK. Mais ou est la puissance de ChucK que l'on vous a promis?
Il est possible de lancer plusieurs copies du même script à la fois :

chuck moe.ck moe.ck

Si jamais un de ces scripts durait indéfiniment, arrêtez ChucK en utilisant CONTROL-C. Les premiers script qui permettent de tester la gestion de la concurrence (démarrer plusieurs scripts ChucK en parallèle) sont moe, larry et curly. Pour les écouter tous ensemble, tapez :

chuck moe.ck larry.ck curly.ck

Ils sont écrits pour être en phase (ou pas) ensemble. Essayez également les versions améliorées de nos petits amis.

chuck moe++.ck larry++.ck curly++.ck

Pour aller plus loin

Retroussons un peu nos manches, et testons la vraie puissance de ChucK! Nous allons utiliser deux fenêtres pour ChucK, et faire de la programmation à la volée.
Voila ce que vous devez faire : ouvrir une deuxième fenêtre de terminal comme celle ci (menu démarrer / exécuter / cmd). Dans cette nouvelle fenêtre tapez 'chuck --loop'.
Ca démarrera ChucK, qui maintenant attend quelquechose à faire. Revenez à la première fenêtre, celle qui pointe sur le répertoire 'examples/basic'. Faites attention, en tapant 'chuck larry.ck' vous lancerez un deuxième ChucK qui exécutera 'larry.ck'. Ce que nous devons faire c'est ajouter un script au premier ChucK que nous avons lancé dans la première fenêtre. On utilise l'opérateur '+' pour ajouter un script et l'opérateur '-' pour en enlever un. Essayez avec les commandes ci-dessous :

chuck + larry.ck
chuck - 1 
chuck + larry.ck
chuck + larry.ck
chuck + larry.ck
chuck - 1 2 3

Que s'est il passé? C'est une démonstration des capacités de ChucK. On a ajouté 'larry.ck', en tant que premier grain (shred). Puisqu'on savait qu'il s'agissait du grain 1, on a pu l'enlever en tapant 'chuck - 1'. Ensuite on a ajouté trois copies du même script! Alors c'est pas cool? On aurait pu le faire aussi en tapant 'chuck + larry.ck larry.ck larry.ck'

Comment garder une trace des grains? On peut demander à ChucK en tapant 'chuck --status' (le raccourci est 'chuck ^') ChucK affichera la réponse dans la fenêtre ou on l'a lancé au départ, il indiquera quels grains sont en cours, quel est leur numéro identifiant (id), et depuis quand il tourne. Super.
Quand vous en avez assez de ChucK, activez la première fenêtre, et utilisez CONTROL-C, ou dans la fenêtre de commande tapez 'chuck --kill'

Maintenant vous pouvez écrire votre premier script!


Premier script en ChucK

Ce tutoriel est un extrait du texte disponible sur le site de ChucK (The ChucK tutorial). Version originale par the ChucK team, traduction : Pierre Commenge / emoc.org, mai 2006.

La première chose que nous allons faire est de générer une onde sinusoïdale et l'envoyer aux haut-parleurs pour que nous puissions l'entendre. On peut le réaliser facilement en connectant des modules de traitement audio (générateurs) et les faire travailler ensemble pour produire du son.
On commence avec un programme ChucK vide, auquel on ajoute les lignes de code suivantes :

// connecter un oscillateur sinusoïdal au convertisseur N/A (la carte son)
sinosc s => dac;

Le code ci-dessus réalise plusieurs choses :
(1) il crée un nouveau générateur de type 'sinosc' (oscillateur sinusoïdal), nommé 's'
(2) le 'dac' (convertisseur numérique/analogique) est un générateur particulier, créé par le système, symbolisant l'interface audio.
(3) nous utilisons l'opérateur ChucK (=>) pour "chucker" 's' au 'dac'. Avec ChucK, quand un générateur est "chucké" à un autre, ils sont connectés. On peut comprendre la ligne de cette façon : créer un flux de données émise par 's', le générateur de signal vers 'dac' composé de la carte son et des haut-parleurs. L'ensemble forme un patch. Le code ci-dessus est un programme ChucK valide, mais tout ce qu'il fait est de mettre en place une connection, si nous l'exécutons il s'arrêtera immédiatement. Pour que cela fonctionne comme nous le souhaitons, il faut y intégrer un élément très important : le temps. Contrairement à de nombreux autres langages, nous n'avons pas à indiquer 'play' pour entendre le résultat. En ChucK, on a juste à indiquer que le temps passe pour que les données soient traitées. Comme on le verra, le temps et les données audio sont inextricablement liées dans ChucK (comme en réalité), et séparées dans leur manipulation. Mais pour l'instant, générons notre onde sinusoïdale et écoutons là en ajoutant une nouvelle ligne :

// connecter un oscillateur sinusoïdal au convertisseur N/A (la carte son)
sinosc s => dac;
// laisser passer 2 secondes
2::second => now;

Maintenant démarrons le (disons que le fichier s'appelle 'truc.ck' ) en tapant 'chuck truc.ck' On entend du son pendant 2 secondes, pendant lesquelles les données audio sont traitées, puis le programme s'arrête (puisqu'il a atteint sa fin). Pour l'instant on peut interpréter la seconde ligne de code comme "laisser le temps passer 2 secondes, en traitant les données audio". Pour jouer ce son indéfiniment, on peut écrire une boucle :

// connecter un oscillateur sinusoïdal au convertisseur N/A (la carte son)
sinosc s => dac;
// boucler indéfiniment
while (true) {
  2::seconds => now;
}

En ChucK, c'est une "boucle de temps (time-loop) (en fait, ici, c'est une boucle de temps infinie). Ce programme exécute (et génère/traite de l'audio) indéfiniment. Essayez le.
Jusqu'à maintenant, étant donné que tout ce qu'on fait est d'avancer dans le temps, la valeur dont on avance n'a pas beaucoup d'importance (nous utilisons 2::seconds ici, mais on aurait pu utiliser n'importe quelle valeur en millisecondes (ms), secondes, minutes, heures, jours et même en semaines) et le résultat aurait été le même. Il est bon de retenir de cet exemple qu'à peu près tout en ChucK découle naturellement du timing.
Maintenant, essayons de changer la fréquence aléatoirement toutes les 100ms

// connecter un oscillateur sinusoïdal au convertisseur N/A (la carte son)
sinosc s => dac;
// faire une boucle temporelle, dans laquelle la fréquence de l'oscillateur 
// est changée toutes les 100ms
while( true ) {
  100::ms => now;
  std.rand2f(30.0, 1000.0) => s.freq;
}

Voila qui devrait sonner comme les ordinateurs géants des vieux films de science-fiction. Deux choses sont à noter ici :
(1) Dans la boucle, on avance par bond dans le temps d'une durée de 100ms.
(2) Une valeur aléatoire entre 30.0 et 1000.0 est générée et attribuée à la fréquence de l'oscillateur toutes les 100::ms
Allez y maintenant, enregistrez et lancez ce nouveau "'truc.ck' en tapant 'chuck truc.ck'
Jouez avec les paramètres, changez 100::ms par quelque chose d'autre (comme 50::ms ou 500::ms) ou changez 1000 par 4000 dans les valeurs de fréquence aléatoires.
Enregistrez et écoutez en tapant 'chuck truc.ck'


micro-FAQ ChucK

Qu'est ce qu'un shred ?
En anglais, on peut traduire shred par grain, pièce ou morceau. En ChucK, il s'agit de l'instance d'un patch.

Ah ouais ? et alors qu'est ce qu'un patch ?
Là encore, c'est un morceau : de code, cette fois. Un morceau est en général l'association de plusieurs patch(es), interagissant entre eux ou simplement juxtaposés.

Les liens vers les fichiers ne fonctionnent pas
Une demi-solution qui fonctionne consiste à indiquer des liens complets et non pas des liens relatifs (par ex : C:\chuck\perso\sons\01.wav)

Comment enlever les clics
Avec la version 1.2.0.5 sur windows XP SP2, il peut y avoir des clics qui s'ajoutent au son, voire des blocages, par exemple en utilisant un autre programme simultanément. Une solution proposée par les développeurs est de démarrer les patch de cette manière : > chuck --level10 foo.ck, ce qui augmente la priorité de l'application.




[urzhiata]             Laissez vos commentaires ou questions sur ce tutoriel ici => présentation de ChucK