La nécessité de grandir en s’éloignant de ces racines
(vitling.xyz)- Le code agit comme une partition d’art d’installation qui dirige à la fois le choix des accords, la synthèse sonore et la réaction des LED, une structure sculpturale évoquant des tiges de plante générant de façon répétée son et lumière
- La partie A crée des accords majeurs, mineurs, de septième majeure et de septième mineure ainsi que leurs renversements, de A2 à D5, et passe toutes les 8 secondes à un accord ne différant que d’une seule note
- La partie B choisit une note dans l’accord en cours et la joue avec une forme d’onde et une durée aléatoires, superposant des notes isolées imprévisibles à une progression d’accords régulière
- Chaque fois qu’un nouvel accord ou qu’une nouvelle note est produit, les LED en forme de tige réagissent, et la couleur de chaque note est mappée pour que les notes proches dans le cercle des quintes paraissent similaires
- L’implémentation est divisée entre un programme audio C++ sur Raspberry Pi 3 B+ et le contrôle LED FastLED sur Arduino Uno, les deux appareils échangeant les informations de notes via un port série
Une partition construite à partir de règles génératives
- La partie A énumère tous les accords majeurs, mineurs, de septième majeure et de septième mineure possibles ainsi que tous leurs renversements, de A2 à D5
- L’accord sélectionné est joué pendant 8 secondes, puis passe à l’un des accords ne différant de l’accord actuel que par une seule note
- Ce processus se poursuit en répétant la lecture de 8 secondes et la sélection d’un accord adjacent
Règles de génération des notes
- La partie B sélectionne une note dans l’accord actuellement joué
- La note sélectionnée est jouée avec une forme d’onde aléatoire, pendant une durée aléatoire
- Si la durée est courte, elle est répétée un nombre aléatoire de fois, puis le système attend un temps aléatoire avant de répéter le même processus
Règles de réaction lumineuse
- La partie C illumine chaque tige de la racine jusqu’à l’extrémité chaque fois qu’un nouvel accord est déclenché dans la partie A
- Les couleurs de l’éclairage correspondent à chaque note de l’accord, et les notes adjacentes dans le cercle des quintes ont des teintes semblables
- La partie D éclaire l’extrémité de l’une des tiges avec une couleur vive correspondant à la note chaque fois qu’une note est jouée dans la partie B
Implémentation matérielle et logicielle
- Les parties A et B sont prises en charge par un programme C++ personnalisé exécuté sur un Raspberry Pi 3 B+
- Il gère à la fois la sélection des notes et la synthèse du buffer audio
- Les parties C et D sont implémentées via un programme personnalisé sur une carte Arduino Uno
- Il utilise FastLED pour interfacer des bandes LED utilisant le protocole WS2812B
- Les informations de notes transmises du Raspberry Pi à l’Arduino sont reçues via des signaux de port série
Structure physique et mode de fonctionnement
- Les bandes LED passent à l’intérieur de tubes transparents utilisés pour les aquariums domestiques
- Les tubes sont renforcés par un épais fil de nickel, ce qui leur donne une forme sculptable
- Le boîtier en bois sous le pot de fleurs contient le micro-ordinateur, le câblage et une prise audio 3,5 mm pour la connexion au système sonore
- L’alimentation arrive via deux connexions secteur principales
- Les ordinateurs fonctionnent en mode headless et démarrent automatiquement lorsqu’ils sont mis sous tension
1 commentaires
Avis de Hacker News
Cette personne est aussi le créateur du formidable endless acid banger, avec lequel on peut s’amuser pendant des heures dans le navigateur
https://www.vitling.xyz/toys/acid-banger/
Après l’avoir essayé, j’ai fini par acheter un vrai clone de 303 et par commencer à bidouiller avec. J’aime aussi le fait que toutes les démos s’ouvrent sur un écran silencieux « click to start », et que les vidéos en lecture automatique soient coupées par défaut, comme dans cet article
Dans cet article, il fallait survoler le « silent gif » avec la souris pour voir le contrôle du volume, et dans acid banger j’avais déjà écrit la moitié d’un commentaire avant de comprendre qu’un clic n’importe où réactivait le son
C’est intéressant de voir la partition d’une musique générative écrite sous cette forme de spécification
Elle est assez détaillée pour que, si l’on réimplémentait sa propre version à partir de ces instructions, on obtienne essentiellement la même « œuvre musicale », mais l’interprétation serait forcément différente. Une partition fixe précisément certains éléments, tout en laissant d’autres choix ouverts. Il reste des questions comme : que signifie exactement « tous les renversements » quand on énumère les accords, est-ce que cela inclut les voicings ouverts, parmi quelles valeurs choisir la longueur d’une forme d’onde arbitraire, à partir de quand « court » l’est-il quand on décide de répéter, quel synthétiseur de formes d’onde utiliser et comment le moduler
Ces décisions ressemblent aux choix que fait un instrumentiste traditionnel lorsqu’il interprète et joue une partition. Ici, un codeur de musique générative peut suivre cette « partition » et créer un programme qui porte sa propre interprétation
L’implémenter avec Sonic Pi(https://sonic-pi.net/) a été un exercice amusant, et j’ai eu l’impression d’obtenir quelque chose d’assez proche de l’intention du compositeur. Cela porte la même atmosphère que l’enregistrement de la vidéo, mais, si cela a du sens, c’est en quelque sorte ma « performance » de cette œuvre. Même si, à l’exécution, c’est bien Sonic Pi qui la joue
Ce processus m’a aussi fait repenser la relation entre spécification et implémentation. Les implémentations d’un algorithme par différents programmeurs peuvent être vues comme des « interprétations » individuelles d’une partition qu’est la conception d’ensemble ; et les développeurs qui construisent des éléments d’une architecture système plus vaste peuvent ressembler à des musiciens qui tiennent leur partie dans un groupe ou un orchestre. Certaines équipes sont dirigées par un chef d’orchestre-architecte, d’autres s’échangent des riffs et improvisent ensemble, avec parfois un solo. D’autres encore ressemblent à des musiciens de studio qui jouent une partie pas forcément spectaculaire, mais solide, selon la spécification d’un producteur
C’était un bon exercice de codage méditatif pour un dimanche après-midi, et cela m’a fait changer de perspective
Quand j’avais essayé d’exposer un ancien travail, j’avais reçu les retours d’un commissaire d’art ; cette œuvre était https://www.vitling.xyz/welcome-to-tech-talk/. Au début, il ne comprenait pas vraiment ce qui se passait, mais après que je lui ai expliqué le fonctionnement et ce qui se passait à l’intérieur, il m’a dit : « maintenant, j’aime vraiment beaucoup. Mais vous cachez au public tout ce qui est intéressant »
Dans l’art génératif, le « travail » que je fais n’est pas vraiment l’audio ou le visuel qui en résulte, mais plutôt un ensemble de règles ou un algorithme. J’ai donc toujours voulu trouver un moyen de montrer ce qui se passe « dans la boîte ». Le code source peut être une bonne option, mais seulement pour ceux qui savent le lire, et l’idée centrale risque facilement d’être enfouie sous le boilerplate et les bizarreries techniques. C’est ainsi que j’en suis venu à l’idée de l’écrire sous forme de partition, en montrant les prémisses de base de ce qui se passe, mais sans entrer dans des détails au point de s’y perdre
https://massmoca.org/event/walldrawing305/
Donc les voicings plus ouverts et espacés seraient sans doute largement absents
Les renversements changent assez fortement la couleur d’un accord
J’aimerais qu’on me recommande des livres ou cours de théorie musicale qui aideraient à comprendre cet algorithme ou https://www.vitling.xyz/toys/acid-banger/
Il existe des règles assez simples pour prédire ce qui sonnera plutôt bien, ainsi que des règles plus complexes, et il est bien connu que la musique baroque est algorithmique, mais je n’en ai encore absolument pas l’intuition.
J’avais déjà cherché dans cette direction auparavant, mais je ne me souviens plus très bien de ce qui clochait exactement avec les livres que j’avais vus. Probablement qu’ils étaient pour la plupart trop élémentaires pour être utiles. J’ai reçu il y a longtemps une formation très basique en solfège et je sais lire une partition, mais à l’époque j’étais trop jeune pour poser les questions qui m’intéressent aujourd’hui ou pour comprendre le but de cette formation.
Au bout du compte, il est difficile de comprendre la théorie musicale sans écrire soi-même beaucoup de musique. C’est un peu comme lire un livre sur JavaScript : si vous n’avez jamais écrit de logiciel et ne prévoyez pas d’en écrire, il n’y a pas vraiment de moyen de comprendre ce livre en pratique.
Pour expliquer comment cette application pourrait fonctionner, elle choisit probablement au hasard un sous-ensemble de notes dans une tonalité mineure, c’est-à-dire des degrés de la gamme. Une gamme pentatonique, sous-ensemble d’au plus 5 notes d’une gamme, restreint l’espace mélodique possible de sorte que la plupart des combinaisons sonnent bien. Avec moins de notes, le résultat est plus prévisiblement agréable, mais peut être moins intéressant. Par exemple, les notes qui composent l’accord de tonique sonnent toujours bien, quel que soit l’ordre dans lequel on les joue. Une ligne acid suggère généralement un accord mineur donné au moyen d’un arpège, c’est-à-dire une mélodie répétitive constituée uniquement des notes d’un accord précis.
De plus, un sous-ensemble d’une gamme peut toujours appartenir à une autre gamme. En créant un passage qui utilise un sous-ensemble de notes communes, puis en basculant vers une nouvelle gamme, on peut moduler d’une gamme à une autre. De cette façon, un morceau peut parcourir toutes les gammes possibles, et dans l’acid techno, ce sont presque toujours des gammes mineures.
On ne peut pas prendre un texte écrit pour quelqu’un dont la compréhension est supérieure à son niveau actuel et en tirer beaucoup. Il faut lire chaque page lentement, délibérément, avec humilité, en prenant le temps de comprendre complètement chaque terme rencontré. En chemin, on fait des détours de plusieurs heures, et à l’intérieur de ceux-ci d’autres termes se ramifient sans fin. On ne peut pas sauter des notions comme intervalle, locrien/lydien, et espérer les comprendre par osmose.
Il traite de ce qu’est la hauteur d’un son, pourquoi le cerveau « aime » certaines combinaisons de hauteurs et en rejette d’autres, etc. Les différentes théories sur la neurologie de la musique y sont intéressantes en elles-mêmes, et le début contient aussi une introduction très basique à la théorie.
Petit conseil pour l’auteur : on peut fortement réduire la complexité matérielle et logicielle en retirant l’Arduino et en utilisant cette bibliothèque, qui permet de contrôler directement des rubans WS281x depuis un Raspberry Pi : https://github.com/jgarff/rpi_ws281x
Je l’utilise sur un Pi 4 pour piloter, comme décoration de fêtes, un ruban WS2815 de 466 pixels fixé à la corniche de ma maison.
Il y a une théorie musicale intéressante cachée dans ce projet. Avec l’algorithme décrit, toutes les transitions d’un accord à un autre sont soit une transition vers le même accord — par exemple passer de do majeur à l’un de ses renversements, ou ajouter/retirer une septième — soit l’une des trois transformations fondamentales de la théorie néo-riemannienne : P, L ou R.
Pour plus de détails, on peut consulter la page Wikipédia sur la théorie néo-riemannienne ; l’essentiel concernant P, L et R est le suivant. Si un accord arbitraire x est majeur, P(x), L(x) et R(x) sont tous mineurs. Si x est mineur, P(x), L(x) et R(x) sont tous majeurs. P, L et R sont chacune leur propre transformation inverse, donc P(P(x)) = x, et il en va de même pour L et R. Par une certaine séquence de transformations P, L et R, on peut passer de n’importe quel accord majeur ou mineur à n’importe quel autre accord majeur ou mineur. Par exemple, en partant de do majeur, appliquer L puis R donne sol majeur ; appliquer R puis P donne la majeur ; appliquer L puis P donne mi majeur.
Se déplacer au moyen de transformations néo-riemanniennes est une manière d’atteindre rapidement, par une conduite des voix fluide, des centres tonals « éloignés », c’est-à-dire des endroits qui n’ont pas beaucoup de notes communes avec la tonalité de départ. Pourtant, en écoutant ce morceau, j’ai été surpris que l’harmonie paraisse relativement stable. Ce qui est intéressant, c’est que, par la construction de l’algorithme, la transformation P apparaît beaucoup moins souvent que les transformations L ou R, ou que le fait de rester sur le même accord. La transformation P est un ingrédient clé pour se déplacer rapidement vers des tonalités éloignées ; d’après mon calcul approximatif, en supposant que le processus de Markov a atteint son état stationnaire et en ignorant les limites de hauteur minimale et maximale, seulement 1/27 de tous les changements d’accord sont des transformations P. On en déduit aussi qu’à l’état stationnaire, les accords de septième sont plus fréquents que les triades simples dans un rapport de 16:11.
Je serais curieux de connaître les détails techniques pour mieux comprendre les limites du Raspberry Pi.
Est-ce que tout cela n’aurait pas pu être géré uniquement avec un Raspberry Pi et les nombreux broches GPIO qui y sont connectées ? Là, j’ai l’impression que le Raspberry Pi est sous-exploité, et qu’il serait préférable de simplifier avec une seule carte. Cela aurait aussi l’avantage de ne nécessiter qu’une seule connexion d’alimentation.
Si le rôle du Pi se limite à « choisir les notes et synthétiser le buffer audio lui-même », un Arduino Uno pourrait sûrement le faire aussi, non ?
J’aime le fait que ce soit écrit en pseudo-code pour que tout le monde puisse comprendre
J’ai moi aussi déjà fait ce genre de projet, en particulier autour de la génération musicale, et j’aime vraiment cette façon de présenter les choses. Ce serait encore mieux avec une démo vidéo ; beaucoup de projets de code sont expliqués par leur auteur uniquement sous forme d’un long mur de texte, ce qui les tue avant même qu’on ait commencé
Vraiment superbe. J’aimerais bien avoir des instructions de fabrication détaillées pour construire quelque chose comme ça
Ça pourrait servir d’intro à un set de Four Tet :)
Magnifique. Ça me fait imaginer une exoplanète où les plantes seraient comme ça
Ces choses pourraient former des forêts et peut-être se synchroniser entre elles, comme des métronomes ou des lucioles