User Tools

Site Tools


nomades:tuto_sonic-pi

Differences

This shows you the differences between two versions of the page.


Previous revision
nomades:tuto_sonic-pi [2024/03/17 19:24] (current) julien
Line 1: Line 1:
 +====== 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 =====
 +
 +<code>
 +play note 64
 +</code>
 +
 +===== jouer plusieurs notes à la suite =====
 +
 +<code>
 +play note 66
 +sleep 1
 +play note 74
 +sleep 1
 +play note 76
 +sleep 1
 +play note 84
 +sleep 1
 +</code>
 +
 +"sleep" permet d'introduire une donnée de temps qui permet de séparer des sons entre eux
 +
 +jouer 4 fois le code
 +<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
 +</code>
 +
 +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 =====
 +
 +<code>
 +loop do
 +  play note 66
 +  sleep 1
 +  play note 74
 +  sleep 1
 +  play note 76
 +  sleep 1
 +  play note 84
 +  sleep 1
 +end
 +</code>
 +
 +
 +===== 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 =====
 +
 +<code>
 +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
 +</code>
 +
 +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.
 +
 +<code>
 +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
 +</code>
 +
 +===== Sonic-pi est aussi spécialisé dans le sampling =====
 +quelques examples de codes utilisant le sample comme base de création sonore:
 +
 +<code>
 +loop do
 +  sample :bass_drop_c
 +  sleep 1
 +end
 +</code>
 +
 +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
 +
 +<code>
 +loop do
 +  sample :monsample, pitch: 0.9, rate: 1, window_size: 10, amp: 10
 +  sleep 1
 +end
 +</code>
 +
 +===== 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.
 +
 +<code>
 +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
 +</code>
 +
 +
 +===== 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.
 +
 +<code>
 +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
 +</code>
 +
 +===== 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
 +
 +<code>
 +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
 +</code>
 +
 +
 +===== fun & autres =====
 +
 +jouer une note longue
 +<code>
 +# play note C4 for 2 hours:
 +play :C4, sustain: 60 * 60 * 2, amp: 1
 +</code>
 +
 +live coding et manipulation des différentes composantes du son indépendemment et synchro
 +<code>
 +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
 +</code>
 +
 +<code>
 +#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
 +</code>
 +
 +<code>
 +# 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
 +</code>
 +
 +<code>
 +# 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
 +</code>
 +
 +<code>
 +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
 +</code>
 +
 +faire une boite à rythme sans utiliser des samples (générateur only!)
 +<code>
 +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
 +</code>