Présentation de Sonic Pi

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.

fenêtre d'ouverture de Sonic Pi

Sonic pi : Ruby en musique

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.

La fenêtre

Voici à quoi ressemble Sonic Pi :

L'interface de Sonic Pi

Les différentes fenêtres :

  1. la ligne de commandes (lecture, stop, enregistrer...) ;
  2. le panneau de programmation ;
  3. le panneau d'informations ;
  4. en dessous, la console où s'exécute le programme;
  5. le panneau d'aide ;
  6. 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.

Un exemple

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