1 points par GN⁺ 2024-01-29 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2024-01-29
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

    • Sur les deux pages, je n’ai pas vu de message « click to start » dans mon environnement, mais il me semble qu’il devrait s’afficher.
      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 vraiment un super petit jouet. Au passage, je me demande s’il est difficile d’apprendre à utiliser une 303 quand on n’a absolument aucune expérience des synthétiseurs
    • J’aime bien le bouton de changement de tonalité. Pour que ce soit un vrai excellent outil de DJ, il faudrait pouvoir revenir à n’importe quel motif précédent, pas seulement avancer ; est-ce qu’il y a un bouton ou une option que je n’ai pas trouvés ?
  • 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

    • Je pense que vous avez vraiment bien saisi ce que je cherchais à faire avec la partition, et je suis heureux que l’intention soit passée
      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
    • L’un de mes artistes procéduraux visuels préférés laisse aussi une ambiguïté similaire dans ses spécifications, ce qui produit de bonnes variations à chaque recréation de l’œuvre : https://www.sfmoma.org/artist/sol_lewitt/
      https://massmoca.org/event/walldrawing305/
    • Je comprends généralement « tous les renversements » comme le fait de placer l’accord en position fondamentale, puis de prendre ses renversements comme des permutations cycliques, octave exclue
      Donc les voicings plus ouverts et espacés seraient sans doute largement absents
    • L’accord de do majeur de base est c4 f4 g4, et les renversements consistent à faire passer la note du bas au-dessus, pour obtenir f4 g4 c5 ou g4 c5 f5
      Les renversements changent assez fortement la couleur d’un accord
    • À l’écoute, il ne semble pas y avoir d’accords ouverts ; on dirait que seuls des accords où les notes se suivent directement, sans intervalles vides, sont utilisés
  • 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.

    • Pour vraiment comprendre, il faut étudier sous plusieurs angles. On peut y arriver en 1 à 10 ans avec Hooktheory.com, des livres et beaucoup de vidéos YouTube.
      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.
    • Le cours en ligne de Yale Listening to Music couvre pas mal de théorie musicale. Je l’ai trouvé assez intéressant : https://online.yale.edu/courses/listening-music
    • Il est très difficile de s’y initier. Je trouve que c’est ce qui ressemble le plus aux mathématiques.
      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.
    • Ce n’est pas un manuel d’introduction théorique classique, mais le livre de psychologie grand public de Daniel J. Levitin, This Is Your Brain On Music, contient des éléments proches de ce que vous demandez.
      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.
    • Si vous ne jouez pas d’un instrument, cela revient un peu à expliquer Tetris à une personne aveugle.
  • 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.

    • J’ai pensé la même chose, mais plutôt à Arduino qu’au Raspberry Pi.
      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 ?
    • C’est probablement possible, mais comme le code des LED est conçu pour Arduino, utiliser deux appareils au départ était sans doute plus simple du point de vue de la réutilisation du code ou du prototypage.
  • 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

    • Il faudrait maintenant en faire une version en ligne. Avec Web Audio et des transformations CSS, ça devrait largement être faisable
  • Ç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

    • Si on pouvait en fabriquer une et en faire l’expérience, ce serait une installation artistique amusante :)