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
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.
- 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/'
- 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!
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
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!
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'
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