3 points par GN⁺ 2024-08-11 | 1 commentaires | Partager sur WhatsApp
  • Sonic Pi : utiliser Ruby comme outil de composition

  • Contexte

    • L’auteur avait à l’origine suivi une formation en musique
    • En travaillant comme développeur web, il s’est passionné pour le travail technique
    • Il a tenté de se lancer dans la musique électronique, car il lui était difficile de pratiquer plusieurs instruments, mais sans succès
    • Récemment, il a recommencé à combiner musique et code grâce à Sonic Pi
  • Présentation de Sonic Pi

    • Sonic Pi, créé par Sam Aaron, est un synthétiseur logiciel contrôlé par le code
    • Il utilise un langage spécifique au domaine (DSL) étendant Ruby afin de faire correspondre des concepts musicaux et audio
    • Par exemple, il représente les notes avec des symboles comme :c4 et utilise des générateurs d’accords comme chord(:d3, :maj7)
  • Objectif du projet

    • L’objectif était de composer une démo en utilisant uniquement Sonic Pi
    • La composition a été réalisée entièrement en code, sans MIDI ni échantillons externes
  • Exemples de code de base

    • use_bpm 70 sert à définir le BPM, et use_synth :pulse à configurer le synthétiseur
    • Des lignes comme play :c2, sleep 0.25 permettent de jouer des notes et de définir les intervalles de temps
    • play_pattern_timed [ :c3, :d3, :e3, :g3 ], 0.25 permet de jouer un motif
  • Optimisation du code

    • Des fonctions sont définies pour réduire le code répétitif
    • La fonction def arpeggiate(root, is_minor = false) génère un motif d’arpège
    • Des blocs in_thread do sont utilisés pour exécuter du code en parallèle
  • Exécution en parallèle

    • Les blocs in_thread do permettent d’exécuter deux « instruments » en parallèle
    • Par exemple, un thread exécute l’arpège tandis qu’un autre joue la mélodie
  • Implémentation des chœurs

    • ring sert à combiner plusieurs notes dans une seule liste
    • Des notes sont jouées et leur durée est définie avec play_pattern_timed [ring(:c5, :e5)], 4, sustain: 3.8
    • La fonction def choral_rings(notes, sus) est définie pour simplifier les motifs de chœur
  • Boucles live

    • live_loop permet de créer des boucles répétées à l’infini
    • Une boucle est définie avec live_loop :harp do, puis le code est écrit à l’intérieur
  • Conclusion

    • La programmation n’est pas seulement une science, c’est aussi un art
    • Écrire du code est un acte créatif et une manière de communiquer avec les autres
    • Sonic Pi permet de combiner musique et code pour créer de manière créative

Résumé de GN⁺

  • Sonic Pi est un outil qui permet de composer de la musique avec du code, en utilisant un DSL qui étend Ruby
  • Ce projet a pour objectif de composer une démo en utilisant uniquement Sonic Pi
  • La programmation n’a pas seulement une dimension scientifique, elle a aussi une dimension artistique, et Sonic Pi l’illustre bien
  • C’est un bon exemple de combinaison entre musique et code au service d’un travail créatif
  • Parmi les outils offrant des fonctions similaires, on peut citer TidalCycles et SuperCollider

1 commentaires

 
GN⁺ 2024-08-11
Avis Hacker News
  • Si vous vous intéressez au live coding, Glicol vaut le détour
  • TidalCycles mérite aussi d’être recommandé. Éloges de la capacité de Haskell et de Ruby à créer des DSL
  • La conception du langage de Glicol met l’accent sur une syntaxe inspirée des synthétiseurs, la rapidité de composition et la praticité du sound design
    • L’objectif est de concevoir un DSL qui reflète les habitudes de programmation existantes sans être prisonnier d’un langage existant
  • Ruby est très utile, car sa syntaxe ressemble presque à de l’anglais
  • J’ai déjà vu une performance live de Sam Aaron, le créateur de Sonic Pi
    • C’était impressionnant de voir la musique évoluer à chaque modification du code
  • En tant que développeur Ruby, je trouve cela très intéressant, car cela semble pouvoir servir à créer de la musique générée algorithmiquement
    • Par exemple, cela pourrait servir à transformer les événements bruyants d’un dépôt git en musique algorithmique
  • En tant que musicien, enregistrer et boucler un clavier MIDI ou des instruments acoustiques offre une meilleure UX
    • On peut tout saisir avec un DSL Ruby, mais l’UX n’est pas bonne comparée à un clavier de piano
    • Je ne pense pas l’utiliser pour remplacer Logic
  • Comme autre approche de la musique programmée, je recommande scamp pour Python
    • L’auteur a mis plusieurs vidéos sur YouTube
  • Il y a quelques années, j’ai vu une vidéo YouTube qui recréait le THX Deep Note avec Sonic Pi
    • Au début, elle n’expliquait pas ce qu’elle allait faire, puis ajustait peu à peu le son pour finalement produire le Deep Note
    • C’est dommage que je ne puisse plus retrouver cette vidéo
  • J’ai récemment repensé à Sonic Pi et regardé quelques vidéos
    • Je l’avais brièvement essayé il y a quelques années
  • Les commentaires HTML ne fonctionnent pas correctement. L’éditeur transforme deux tirets en un seul tiret cadratin
  • Message de soutien au live coder Sonic Pi alsoknownasrox
  • Démo vraiment sympa
    • Mais la mise en page du site est cassée dans Safari