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:// | ||
+ | |||
+ | -démarrer sonic-pi | ||
+ | |||
+ | l' | ||
+ | |||
+ | |||
+ | ===== 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 | ||
+ | </ | ||
+ | |||
+ | " | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | 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:// | ||
+ | |||
+ | ===== Le son par défaut dans sonic-pi est beep mais vous pouvez changer d' | ||
+ | |||
+ | < | ||
+ | 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' | ||
+ | par exemple ici nous avons multiplié le sustain et changer l' | ||
+ | |||
+ | < | ||
+ | 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 : | ||
+ | sleep 1 | ||
+ | end | ||
+ | </ | ||
+ | |||
+ | vous pouvez changer le sample aprés le : | ||
+ | Si vous souhaitez rajouter vos propres samples, il faut rajouter vos sample en .flac dans / | ||
+ | |||
+ | les options de samples sont assez nombreuses, voici un exemple d' | ||
+ | |||
+ | < | ||
+ | loop do | ||
+ | sample :monsample, pitch: 0.9, rate: 1, window_size: | ||
+ | sleep 1 | ||
+ | end | ||
+ | </ | ||
+ | |||
+ | ===== créer des combinaisons musicales ou des arrangements ===== | ||
+ | |||
+ | l' | ||
+ | |||
+ | 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: | ||
+ | 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: | ||
+ | sleep 1 | ||
+ | end | ||
+ | end | ||
+ | in_thread do | ||
+ | loop do | ||
+ | sample : | ||
+ | sleep 1 | ||
+ | end | ||
+ | end | ||
+ | </ | ||
+ | |||
+ | ===== les effets ===== | ||
+ | |||
+ | il y a de nombreux effets à disposition pour sonic-pi (filtres, reverb, disto...) | ||
+ | |||
+ | vous pouvez l' | ||
+ | |||
+ | 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 : | ||
+ | sleep 1 | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | </ | ||
+ | |||
+ | vous pouvez voir que la commande est toujours organiser comme ci with_fx :effet, amp: 1, changementeffet: | ||
+ | |||
+ | Dans le cas d'un synthé l' | ||
+ | |||
+ | < | ||
+ | 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 : | ||
+ | sleep 2.5 | ||
+ | end | ||
+ | live_loop :tak do | ||
+ | sync :foo | ||
+ | sample : | ||
+ | sleep 3.5 | ||
+ | end | ||
+ | live_loop :tak2 do | ||
+ | sync :foo | ||
+ | with_fx :echo, decay: rrand(0.1, 2) do | ||
+ | sample : | ||
+ | sleep 1 | ||
+ | end | ||
+ | end | ||
+ | live_loop :bass do | ||
+ | with_fx : | ||
+ | sync :foo | ||
+ | sample : | ||
+ | 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, | ||
+ | in_thread do | ||
+ | with_fx :echo, phase: 0.5, amp: 0.3 do | ||
+ | with_fx : | ||
+ | with_fx : | ||
+ | sample : | ||
+ | sleep rrand(20.01, | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | use_synth :saw | ||
+ | live_loop :bassy do | ||
+ | p = play (chord :Cb1, : | ||
+ | control p, divisor: rrand(0.001, | ||
+ | sleep [0.5, 1, 2].choose | ||
+ | sleep 0.4 | ||
+ | end | ||
+ | end | ||
+ | live_loop :chime do | ||
+ | sample : | ||
+ | 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 : | ||
+ | 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: | ||
+ | sleep 1 | ||
+ | end | ||
+ | end | ||
+ | in_thread do | ||
+ | loop do | ||
+ | sample : | ||
+ | sleep 1 | ||
+ | end | ||
+ | end | ||
+ | in_thread do | ||
+ | loop do | ||
+ | with_fx :echo, mix: 0.3, phase: 0.25 do | ||
+ | #sample : | ||
+ | sleep 1 | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | in_thread do | ||
+ | loop do | ||
+ | with_fx :echo, mix: 0.3, phase: 0.25 do | ||
+ | #sample : | ||
+ | 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 : | ||
+ | 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 : | ||
+ | play rrand(10, 24), | ||
+ | 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 : | ||
+ | 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 : | ||
+ | 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 : | ||
+ | use_synth :sine | ||
+ | with_fx : | ||
+ | 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 : | ||
+ | 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 : | ||
+ | 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 | ||
+ | </ | ||