Initialement conçu pour être intégré dans le curriculum des profs de musique au Royaume-Uni, Sonic Pi est un synthétiseur d’un nouveau genre, entièrement basé sur la programmation via un langage dédié. L’objectif ? Apprendre aux enfants le goût du code et la musique numérique, d’une manière ludique et innovante.
Développé par Sam Aaron, chercheur en informatique à l’Université de Cambridge, Sonic Pi propose une approche inédite dans l’apprentissage de la programmation, par le biais de la musique. Surnommé « The Live Coding Synth For Everyone » (le synthétiseur live à programmer pour tous), le soft propose une interface qui peut, de prime abord, sembler particulièrement austère. Mais derrière cette apparence trompeuse se cache en réalité un outil vraiment fun pour faire du bon son et découvrir les fondements de la programmation d’une manière originale.
Le langage de programmation est Ruby. Indéniablement, Ruby devient de plus en plus populaire. Les « rubyistes » qualifient ce langage d’élégant, voire lui prêtent des qualités artistiques ; ils soulignent dans le même temps qu’il est pratique à utiliser et facile d’accès, car il suffit de le lire pour le comprendre.
Voici à quoi ressemble Sonic Pi :
Les différentes fenêtres :
- la ligne de commandes (lecture, stop, enregistrer...) ;
- le panneau de programmation ;
- le panneau d'informations ;
- en dessous, la console où s'exécute le programme;
- le panneau d'aide ;
- Le contenu de l'aide, c'est ici qu'on accède aux tutoriels.
On peut changer d'apparence en choississant le mode sombre dans Prefs.
Voici un exemple parmi tant d'autres que l'on peut trouver sur internet :
Voici le code à saisir dans Sonic pi :
live_loop :beat do sample :loop_industrial, beat_stretch:1, amp: 1 use_synth :blade [1,3,4,5].each do |d| sample :drum_heavy_kick, amp: 2 (range -2,2).each do |i| play_chord (chord_degree d, :c, :minor, 1, invert:i) sleep 0.25 end end end live_loop :cymbal do sample :drum_cymbal_soft play 1 sleep 1 end live_loop :lead do use_synth :chiplead [1,1,3,1,6,6,5,7].each do |d| (range -1,1).each do |i| play_chord (chord_degree d, :c, :minor, 1, invert:i) sleep 0.25 end end end