électronique & musique

électronique & musique

Composition algorithmique

Génération sonore basée sur la mise en oeuvre d'algorithmes. Vous trouverez dans cette rubrique des exemples d'application avec des logiciels comme ChucK, Processing ou Pure Data.


Musique et automates cellulaires

Je m'intéresse depuis quelque temps à la composition basée sur l'utilisation d'algorithmes, avec quelques essais plus ou moins convaincants... Cet article de Dale Millen m'a incité à expérimenter du coté des automates cellulaires.

L'algorithme de l'automate cellulaire

Un automate cellulaire est un système constitué de cellules placées sur une grille, et qui évolue au cours du temps. A chaque pas de temps, les cellules se voient attribuer un état dépendant de l'état des cellules voisines, suivant un algorithme prédéfini. Je n'irai pas plus loin dans la description théorique des automates cellulaires, je vous renvoie pour cela aux articles sur Wikipedia. A noter que l'article en anglais est présenté un peu différemment et complète bien celui en français.

Il existe de nombreux types d'automates cellulaires (1D, 2D ou 3D) et qui diffèrent par le nombre de valeurs que peut prendre chaque cellule, par le nombre de cellules voisines prises en compte pour la détermination de la valeur d'une cellule, ou encore par les règles qui déterminent la valeur d'une cellule à partir de son voisinage.

Un automate cellulaire du type de ceux décrits par Stephen Wolfram est représenté sur la figure suivante (générée avec Processing).


Automate cellulaire - Règle 110


De l'algorithme à la génération musicale

Pour une utilisation musicale, il faut choisir une méthode pour relier cellules et paramètres musicaux : hauteur de note, volume, rythme. Une relation évidente est par exemple de faire correspondre chaque cellule à une note, l'activation de la cellule par l'algorithme entrainant le déclenchement de la note correspondante. Mais cette solution m'a paru trop hasardeuse sur le plan mélodique, et difficilement contrôlable.

La méthode utilisée par l'auteur de l'article mentionné plus haut n'est pas clairement explicitée dans l'article, mais est basée sur la sélection de lignes dont l'évolution des valeurs des cellules conditionne la hauteur des notes produites.

En ce qui me concerne j'ai choisi d'utiliser des automates de Wolfram à une dimension (1D) : à chaque pas de temps, une ligne de cellules est générée à partir de la ligne précédente, d'après une règle définie. La largeur de la ligne est fixée, et la première et la dernière cellules sont considérées comme voisines (périodicité du motif). La ligne est ensuite assimilée à un nombre binaire dont la valeur de chaque bit est 1 si la cellule correspondante est active, 0 sinon. Pour définir une mélodie, on sélectionne une portion de ce nombre binaire réduite à quelques bits, constituant un nouveau nombre binaire dont la longueur détermine le nombre de notes possibles. La valeur de ce nombre est reliée à une fréquence par l'intermédiaire d'un tableau contenant les notes choisies par l'opérateur.

La figure ci-dessous représente le système mis au point. L'algorithme cellulaire se développe de gauche à droite. La colonne la plus à droite est le dernière qui vient d'être générée ; à chaque pas de temps la figure est décalée d'une colonne vers la gauche et une nouvelle colonne est générée tout à droite. Les cellules bleues sont des cellules dont les valeurs sont utilisées pour la génération musicale.

Automate cellulaire

Dans cet exemple, deux voix sont activées dont les notes sont codées sur 3 bits. Huit notes sont donc possibles pour chacune des voix, qui sont choisies dans un tableau contenant les fréquences de huit notes (par exemple prises dans une gamme) en fonction de la valeur prise par les cellules représentant chaque voix. Par exemple 000 = Do, 001 = Ré, 010 = Mi, etc.

La figure précédente est issue d'un programme que je développe avec Processing, mais qui n'est pas encore tout à fait au point. En attendant vous pouvez télécharger le code source du programme au format Chuck (lien en bas de l'article). Il permet de générer une mélodie en utilisant une règle et une gamme spécifiées (modifiables dans le code). Pour ajouter un peu de poésie (de hasard..) une fonction de "mutation" introduit avec une certaine probabilité des erreurs dans le calcul de l'automate cellulaire, ce qui se traduit en variations intéressantes.

Le son est généré en utilisant les générateurs d'onde de Chuck. Une sortie MIDI est également disponible.

Tout est paramétrable en modifiant directement le code. Celui-ci est relativement bien commenté (en anglais...) ce qui devrait vous aider. Vous pouvez écouter ci-dessous le résultat généré avec la règle n°149. Essayez différentes gammes, différentes règles. Attention, avec certaines règles l'automate cellulaire ne se développe pas. Quelques règles intéressantes pour commencer : 60, 90, 105, 149, 225.



Télécharger le code source du programme au format Chuck : Automate Cellulaire v0


07/04/2010
1 Poster un commentaire