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