Table of Contents

Sonic-pi tutorial

Sonic-pi est un logiciel de live coding basé sur Supercollider. Ce logiciel permet de jouer des samples et créer des synthétiseur à base de code.

-télécharger sonic-pi : http://sonic-pi.net/

-démarrer sonic-pi

l'interface est créé pour accueillir plusieurs buffers, fenêtre où vous allez rentrer votre code, à droite des log qui permet de voir ce qui se passe avec votre code et en bas à gauche des exemples, bout de codes et syntaxe.

jouer une note midi

play note 64

jouer plusieurs notes à la suite

play note 66
sleep 1
play note 74
sleep 1
play note 76
sleep 1
play note 84
sleep 1

“sleep” permet d'introduire une donnée de temps qui permet de séparer des sons entre eux

jouer 4 fois le code

4.times do
play note 66
sleep 1
play note 74
sleep 1
play note 76
sleep 1
play note 84
sleep 1
end

do et end marche toujours ensemble, à chaque fois que vous mettez un do pensez à mettre un end

Pour mettre en boucle la sérénade rajouter loop do au lieu de x.times do

loop do
  play note 66
  sleep 1
  play note 74
  sleep 1
  play note 76
  sleep 1
  play note 84
  sleep 1
end

note midi

si vous souhaitez continuer à développer du code avec des notes midi, mieux vaut se renseigner un peu sur ce que représentent ces notes. Elles ont aussi des équivalents en notes “musicales classiques”:

C D E F G A B

60 62 64 65 67 69 71

vous pouvez changer les notes midi en notes classiques sous la forme de c1/2/3/4 d1/2/3/4 (pour les octaves)…etc

un pdf pour les équivalences note midi et fréquences : http://www.studio250.fr/docs/divers%20synthese/MIDI%20Pitch%20-%20note%20-%20frequency.pdf

Le son par défaut dans sonic-pi est beep mais vous pouvez changer d'ondes sonores ou de sonorités

use_synth :chipbass
loop do
  play note 66
  sleep 1
  play note 74
  sleep 1
  play note 76
  sleep 1
  play note 84
  sleep 1
end

la syntaxe est toujours use_synth et ensuite le nom de l'onde sonore :fm ou :blade

A chaque note nous pouvons aussi attaché des options qui sont liés à chacun des formes d'ondes/synthé par exemple ici nous avons multiplié le sustain et changer l'attaque de la note. Nous avons aussi enlever “note” dans le code qui ne permet pas de jouer les options, “play” suffit.

use_synth :chipbass
loop do
  play 57, sustain: 30, attack: 1
  sleep 15
  play 65, sustain: 30, attack: 1
  sleep 15
  play 67, sustain: 30, attack: 1
  sleep 15
  play 75, sustain: 30, attack: 1
  sleep 15
end

Sonic-pi est aussi spécialisé dans le sampling

quelques examples de codes utilisant le sample comme base de création sonore:

loop do
  sample :bass_drop_c
  sleep 1
end

vous pouvez changer le sample aprés le :votresample Si vous souhaitez rajouter vos propres samples, il faut rajouter vos sample en .flac dans /usr/share/sonic-pi/samples (linux)

les options de samples sont assez nombreuses, voici un exemple d'utilisation d'un sample avec certains options utiles pour la manipulation des hauteurs ou du rate

loop do
  sample :monsample, pitch: 0.9, rate: 1, window_size: 10, amp: 10
  sleep 1
end

créer des combinaisons musicales ou des arrangements

l'outil pour cela : in_thread do puis end

nous allons combiner une mélodie et un rythme puis ensuite un autre sample.

in_thread do
  use_synth :sine
  loop do
    play 60, sustain: 30, attack: 1
    sleep 15
    play 65, sustain: 30, attack: 1
    sleep 15
    play 67, sustain: 30, attack: 1
    sleep 15
    play 75, sustain: 30, attack: 1
    sleep 15
  end
end
in_thread do
  loop do
    sample :bd_fat, lpf: rrand(1, 131), window_size: 100, amp: 5.7
    sleep 1
  end
end

aléatoire

dans ce code nous avons aussi introduit une donnée aléatoire rrand(x,x) qui peut-être appliqué à la plupart des options.

Autrement pour rajouter des sons, vous pouvez mettre des parties en commentaires.

in_thread do
 # use_synth :sine
  loop do
    play 60, sustain: 30, attack: 1
    sleep 15
    play 65, sustain: 30, attack: 1
    sleep 15
    play 67, sustain: 30, attack: 1
    sleep 15
    play 75, sustain: 30, attack: 1
    sleep 15
  end
end
in_thread do
  loop do
    sample :bd_fat, lpf: rrand(1, 131), window_size: 100, amp: 5.7
    sleep 1
  end
end
in_thread do
  loop do
      sample :guit_harmonics, pitch: rrand(0.3, 1), rate: 1, window_size: 1, amp: 2
      sleep 1
  end
end

les effets

il y a de nombreux effets à disposition pour sonic-pi (filtres, reverb, disto…)

vous pouvez l'utiliser avec des samples comme dans cette example :

in_thread do

loop do
  with_fx :gverb, damp: 0.8, room: 30, spread: 1 do
    with_fx :lpf, cutoff: rrand(5, 100) do
      sample :ambi_piano, pitch: rrand(0.3, 20), rate: 1, window_size: 2, attack: rrand(0.1, 2), amp: 2
      sleep 1
    end
  end
end

end </code>

vous pouvez voir que la commande est toujours organiser comme ci with_fx :effet, amp: 1, changementeffet: 2 do puis le son utilisé et enfin “end” pour finir la commande.

Dans le cas d'un synthé l'effet se place à la suite de l'appel du synthé, simple entre le use_synth et le play

loop do
  use_synth :dsaw
  with_fx :band_eq, freq: 10.5, res: 0.1 do
    play rrand(0.01, 25), amp: 110
  end
  sleep rrand(0.02, 1)
end

fun & autres

jouer une note longue

# play note C4 for 2 hours:
play :C4, sustain: 60 * 60 * 2, amp: 1

live coding et manipulation des différentes composantes du son indépendemment et synchro

live_loop :foo do
  with_fx :flanger, delay: 5, feedback: 0.9, phase: 1.5 do
    use_synth :beep
    play rrand(50, 70), release: 0.5, amp: 5
    sleep 0.5
  end
end
live_loop :bar do
  sync :foo
  sample :drum_bass_hard, amp: 10
  sleep 2.5
end
live_loop :tak do
  sync :foo
  sample :drum_snare_hard, amp: 10
  sleep 3.5
end
live_loop :tak2 do
  sync :foo
  with_fx :echo, decay: rrand(0.1, 2) do
    sample :drum_snare_hard, amp: 0.5
    sleep 1
  end
end
live_loop :bass do
  with_fx :distortion, distort: 0.5 do
    sync :foo
    sample :bass_trance_c, pitch: rrand(0.3, 1), amp: 4
    sleep 1
  end
end
#another livetek coding stuff
in_thread do
  live_loop :bass_drum do
    sample :bd_boom, sustain: 1, amp: 3.7
    sleep rrand(10.01, 11)
    in_thread do
      with_fx :echo, phase: 0.5, amp: 0.3 do
        with_fx :distortion, distortion: 1  do
          with_fx :bitcrusher, bits: 4 do
            sample :drum_snare_soft, amp: rrand(0.1, 1)
            sleep rrand(20.01, 20.1)
          end
        end
      end
    end
  end
  use_synth :saw
  live_loop :bassy do
    p = play (chord :Cb1, :major7).choose - [0, 5, -5].choose, divisor: 0.01, div_slide: rrand(0, 10), depth: rrand(0.001, 2), attack: 0.01, release: rrand(0, 5), amp: 0.5
    control p, divisor: rrand(0.001, 10), amp: 1
    sleep [0.5, 1, 2].choose
    sleep 0.4
  end
end
live_loop :chime do
  sample :elec_chime, amp: rrand(0.1, 0.5)
  with_fx :flanger, delay: 15, feedback: 0.8, amp: 1 do
    sleep rrand(10.1, 10.3)
  end
end
# noise machine

loop do
  use_synth :dsaw
  with_fx :ring_mod, freq: 30  do
    play rrand(112, 130),amp:5
    with_fx :pitch_shift, pitch: 24 do
      play rrand(20, 24),amp:5
      with_fx :gverb, room: 0.6, damp: 0.5 do
        play rrand(0.5, 1),amp:5
      end
    end
  end
  sleep 5
  
end
# dronyMove
in_thread do
  use_synth :sine
  loop do
    play 60, sustain: 30, attack: 1
    sleep 15
    play 65, sustain: 30, attack: 1
    sleep 15
    play 67, sustain: 30, attack: 1
    sleep 15
    play 75, sustain: 30, attack: 1
    sleep 15
  end
end
in_thread do
  loop do
    #sample :bd_fat, lpf: rrand(1, 131), window_size: rrand(1, 100), amp: 5.7
    sleep 1
  end
end
in_thread do
  loop do
    sample :bass_trance_c, pitch: rrand(0.3, 1), rate: 1, window_size: 1, amp: 2
    sleep 1
  end
end
in_thread do
  loop do
    with_fx :echo, mix: 0.3, phase: 0.25 do
      #sample :elec_lo_snare, pitch: rrand(0.3, 1), rate: 1, window_size: 1, amp: 2
      sleep 1
    end
  end
end
in_thread do
  loop do
    with_fx :echo, mix: 0.3, phase: 0.25 do
      #sample :guit_harmonics, pitch: rrand(0.3, 1), rate: 1, window_size: 1, amp: 2
      sleep 1
    end
  end
end
live_loop :noise1 do
  use_synth :pnoise
  play rrand(100, 270), release: 0.5, sustain: 5, amp:0
  with_fx :ring_mod, freq: 100  do
    play rrand(50, 110), sustain: 5,amp:0
    with_fx :pitch_shift, pitch: 24 do
      play rrand(30, 34),amp:0
      with_fx :gverb, room: 1, damp: 0.4 do
        play rrand(0.9, 1), sustain: 0, amp:0
        sleep 2
      end
    end
  end
end

live_loop :noise2 do
  use_synth :pnoise
  play rrand(50, 270), release: 0.5, sustain: 5, amp:0
  with_fx :lpf do
    play rrand(50, 100), sustain: 5,amp:0
    with_fx :pitch_shift, pitch: rrand(2, 15) do
      play rrand(10, 24),sustain: 8, amp:0
      with_fx :gverb, room: 1, damp: 0.4 do
        play rrand(0.9, 1), sustain: 10, amp:0
        sleep 2
      end
    end
  end
end

live_loop :saw1 do
  use_synth :saw
  play rrand(60, 80), release: 0.5, sustain: 10, amp:0
  with_fx :ring_mod, freq: 100  do
    play rrand(50, 110), sustain: 5,amp:0
    with_fx :pitch_shift, pitch: 24 do
      play rrand(10, 34),amp:0
      with_fx :distortion do
        play rrand(0.5, 1), sustain: 0, amp:0
        with_fx :slicer do
          play rrand(0.5, 1), sustain: 10, seed: 0.5, wave: 3, phase: 0.15, mix: 1, amp:2
          sleep 2
        end
      end
    end
  end
end

live_loop :bass1 do
  use_synth :chipbass
  play rrand(20, 50), release: 0.5, sustain: 15, amp:0
  with_fx :ring_mod, freq: 100  do
    play rrand(10, 20), sustain: 5,amp:0
    with_fx :pitch_shift, pitch: 24 do
      play rrand(10, 34),amp:0
      with_fx :distortion do
        play rrand(0.5, 1), sustain: 1, amp:0
        with_fx :krush do
          play rrand(10, 20), sustain: 5, cutoff: rrand(10, 100), res: 0, mix: 0.5, amp:0
          sleep 2
        end
      end
    end
  end
end

faire une boite à rythme sans utiliser des samples (générateur only!)

define :create_kick do |note|
  use_synth :sine
  with_fx :distortion, distort: 0.2 do
    play note, attack: 0, sustain: 0, release: 0.2, amp: 3, pitch: -15
    sleep 0.4
  end
end

live_loop :kick_drum do
  create_kick 40 # Joue un kick à la note MIDI 40
end

define :create_snare do
  use_synth :noise
  play 60, attack: 0.05, sustain: 0.1, release: 0.05, amp: 0.5
  use_synth :fm
  play 60, attack: 0.002, sustain: 0, release: 0.2, amp: 2, pitch: -12
  sleep 1
end

live_loop :snare_drum do
  create_snare # Joue un snare à intervalles réguliers
end

define :create_hihat do
  use_synth :noise
  with_fx :hpf, cutoff: 120 do # Utilisation d'un filtre passe-haut pour simuler le son d'un charleston
    play 70, attack: 0.01, sustain: 0, release: 0.05, amp: 2
  end
end

live_loop :hihat_loop do
  sleep 0.25 # Ajustez ce timing pour créer différents rythmes de charleston
  create_hihat
end