====== 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 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