livecode

2003.05.20

Douglas Edric Stanley

> source code: livecode

Voici un petit langage de programmation, conçu pour programmer « en direct », autrement appelé du livecoding. Il génère des images (en haut) à partir de la musique qui est généré par le code (en bas). Divers langages spécifiquement conçus pour le livecoding existent (cf. TOPLAP, fluxus), et des langages plus classiques pevuent également être détournés pour les transformer en langage pour la programmation in situ (cf. Processing, Slub). Le notre n'a pas la même sophistication que ces langages, environements, et « hacks »; il cherche uniquement à démontrer la logique du codage en direct. Il contient très peu de fonctions, et surtout très peu d'opérations récursives. Il est même plus proche d'un séquenceur classique qu'un véritable langage de programmation. Néanmoins, avec quelques signes important, notamment les signes « ( ) { } [ ] < > », les chiffres « 0 1 2 3 4 5 6 7 8 9 », et les signes « # ? ! * / + - », un programmeur habile peut construire des compositions audiovisuelles complexes en controllant non seulement les notes et les lignes générées, mais également le flux du programme lui-même.

Déscription. Le diagramme livecode est découpé entre deux espaces : la console du bas pour l'écriture et l'execution du code écrit, et l'espace au dessus pour la visualisation des notes musicales générées. Ce qui signifie qu'en réalité il y a trois lieux d'activité : le code, la visualisation, et les haut-parleurs de l'ordinateur. Le code est lu en permanence par une ou plusieurs têtes de lectures, chacune scrutant le code signe par signe, glyph par glyph pour des symbols qu'elle reconnaît. Au démarrage le diagramme lance la première tête de lecture, qui lit aussitôt les signes « R », « E », « A », « D », « Y » et génère une petite mélodie en conséquence. Si le programmeur ou la programmeuse clique à l'intérieur de la console de programmation, il ou elle peut ajouter de nouveaux signes. Quand ceux-ci rencontrent une des têtes de lecture, leur signification est executée.

Pour commencer: tapez les instructions suivantes dans la console du bas:

(hi!!!!!!)

Attendez que la tête de lecture arrive dans votre code. Vous devez entendre un son qui se répète assez rapidement. Maintenant changez le code pendant que la tête de lecture se déplace à l'intérieur. Ecrivez cette fois-ci:

(hi!

#)

Vous devez voir apparaître sur l'écran en haut une sorte de verre de terre en train de marcher avec une petite mélodie. Maintenant ajoutez quelques verres supplémentaires avec le signe trois, puis quelques modifications de vitesse:

(hi -

!3
#)

Mode d'emploi. Il existe deux types de signes dans le langage du diagramme livecode : des signes d'expression et des signes de contrôle du flux. Plus concrètement, il y a des signes qui génère des sons et des images, et d'autres signes qui déplacent les têtes de lecture.

Expressions. Les expressions sont faciles à reconnaître : il s'agit des signes « A » à « Z » et « a » à « z ». Si on voit une lettre, il s'agit d'une expression musicale et n'affectera pas le flux du programme. Les notes générées par chaque lettre correspond à leur valeur dans le tableau ascii. Par exemple, la lettre « A » corréspond à la valeur 65 dans le tableau ascii. Ce qui génère dans le langage MIDI la note Fa. Enfin, il y a également un signe supplémentaire d'expression : le signe « # » efface le dessin du visualiseur en le remplissant d'un carré blanc.

Controlleurs de flux. Ces instructions sont plus complexes et peuvent être découpées encore en différentes sous-parties : cloneurs, boucleurs, et ralentisseurs/accélérateurs.

Cloning. On peut déterminer le nombre de têtes de lecture en écrivant un chiffre entre « 0 » et « 9 ». Ceci détermine le nombre de têtes de lecture supplémentaires.

Boucles. On crée des boucles dans le programme en posant les signes d'ouverture et de fermeture complémentaires « ( ) », « { } », « [ ] », « < > ». Notez que pour les programmeurs français sur Macintosh, il faut appuyer en même temps sur les touches « alt + ( » ou « alt + majuscule + ( » pour écrire des accolades ou des crochets. Quand une tête de lecture rencontre une des ces signes de fermeture, elle recule dans le programme jusqu'à ce qu'elle découvre un signe complémentaire d'ouverture. L'ordre des ouvertures et fermetures n'est pas important et peut même se boucler à travers le dernier et le premier signe du programme; l'important c'est d'en avoir au moins deux. Un signe particulier de pseudo-bouclage existe également : le signe « ? » fait sauter la tête de lecture n'importe où dans le programme.

Vitesse. Il y a deux types de changements de vitesse : fixes et relatives. Les ralentisseurs/accélérateurs fixes sont les signes suivants : « ! », « . », « ; », « , », « = » : quand une tête de lecture rencontre ces signes elle prend toujours la même vitesse de lecture en fonction du signe. Les ralentisseurs/accélérateurs relatives comme « * », « / », « + », et « - » changent la vitesse de la tête de lecture en fonction de sa vitesse actuelle.

exemple du diagramme « livecode », Douglas Edric Stanley

Exemple. Voici un petit programme que vous pouvez copier signe par signe dans la console, avec ce qu'il a donné comme résultat visuel. Il est important de noter que le chiffre 9 a été posé à la fin, une fois que toutes les autres signes avait été posés dans le programme. Selon l'endroit où se trouve la tête de lecture unique, il va falloir éventuellement placer ce chiffre ailleurs.