![]() |
Creat al laboratori de computació de la Universitat de Cambridge
live_loop :low do |idx|
# idx = 0
synth :zawa, wave: 1, invert_wave: 1, phase: 0.25, release: 5, note: :e1, cutoff: (range 60, 120, 10)[idx]
sleep 4
idx += 1
end
live_loop :lands, auto_cue: false do |idx|
use_synth :dsaw
use_random_seed 66679
with_fx :reverb, room: 1 do
16.times do
ns = (scale :e2, :minor_pentatonic, num_octaves: 3)
play ns.choose, detune: 12, release: 0.1, amp: 2, amp: rand + 0.5, cutoff: rrand(70, 120)
sleep 0.125
end
end
end
live_loop :bikes do |idx|
sleep 0.25
sample :guit_em9, rate: -1
sleep 7.75
end
live_loop :time, auto_cue: false do |idx|
sample :bd_haus, amp: 2.5
sleep 0.5
end
Dissenyat sota els principis:
Va començar com un experiment per ensenyar conceptes de programació a les escoles, tot jugant amb el procés de crear nous sons
Ha evolucionat en un potent instrument musical programat, utilitzat per artistes professionals i DJs
L'aprenentatge de Sonic Pi es basa amb la exploració. No hi ha errors, només descubriments. I per sobre de tot, es tracta de divertir-se.
Recorda això: Passa-t'ho bé, explora i hackeja! 😋😋
Xerrada basada en http://sonic-pi.mehackit.org - Creative programming workshop with Sonic Pi
play 60
Provem diferents valors. Com canvia el so?
Sonic Pi entén:
Escriu aquest codi al buffer i pulsa Run (Ctrl+R):
play :C4
play 67
play 69
Efectivament, Sonic Pi ha tocat les 3 notes a la vegada. Això no es una melodía, es un acord!
Si volem que Sonic Pi reprodueixi les notes sequencialment, li hem de dir que descansi de tant en tant. Prova amb la comanda sleep:
play :C4
sleep 1
play 67
sleep 1
play 69
La comanda sleep 1 li diu a Sonic Pi que esperi un "beat" (en català polsació)
En cas que estiguis familiaritzat amb la notació musical, així es com les diferents notes es representen a Sonic Pi:
use_bpm 40
play 72
sleep 0.25
play 76
sleep 0.25
play 76
sleep 0.25
play 72
sleep 0.5
play 83
sleep 0.25
play 74
sleep 0.25
play 83
sleep 0.25
play 79
play 84
Per sort, hi ha una forma fàcil de repetir melodíes (o parts de la mateixa) i evitar-nos el copy&paste 😅😅
2.times do
play :c4
sleep 0.5
play :d4
sleep 0.5
play :e4
sleep 0.5
play :c4
sleep 0.5
end
També podem fer servir repeticions dins de repeticions:
4.times do
4.times do
play :c4
sleep 0.25
end
play :d4
sleep 0.5
play :f4
sleep 0.5
end
Anem a crear un ritme de batería simple, format per bombo (kick), caixa (snare) i charles (hi-hat). Necessitem dues coses noves live_loop i sample
live_loop :drums do
sample :drum_heavy_kick
sleep 1
end
El bucle comença amb un kick, caixa en el segon temps, kick en el tercer, caixa en el quart i torna a començar
use_bpm 100
live_loop :drums do
sample :drum_heavy_kick
sleep 1
sample :drum_snare_hard
sleep 1
sample :drum_heavy_kick
sleep 1
sample :drum_snare_hard
sleep 1
end
use_bpm 100
live_loop :drums do
sample :drum_heavy_kick
sleep 1
sample :drum_snare_hard
sleep 1
sample :drum_heavy_kick
sleep 1
sample :drum_snare_hard
sleep 1
end
live_loop :hats do
sample :drum_cymbal_closed
sleep 0.5
end
use_bpm 95
live_loop :kick do
sample :bd_haus
sleep 1
end
live_loop :snare do
sleep 0.75
sample :drum_snare_hard
sleep 0.75
sample :drum_snare_hard
sleep 0.5
end
live_loop :hats do
sample :drum_cymbal_closed
sleep 0.5
end
Afegim un altre live_loop per els nostres baixos. Composarem un groove de baix simple però sòlid.
Pots fer servir aquest piano dins el browser per ajudar-te a escollir les notes:
use_bpm 95
live_loop :bass do
play :c2
sleep 0.25
play :c2
sleep 2
play :e2
sleep 0.75
play :f2
sleep 1
end
És el moment de fer que la nostra cançó soni més interessant! Podem fer-ho canviant el sons que el sintetitzador està fent servir. El synth per defecte que fa servir Sonic Pi es diu beep. Podem canviar-lo amb el codi use_synth
live_loop :bass do
use_synth :fm
play :c2
sleep 0.25
play :c2
sleep 2
play :e2
sleep 0.75
play :f2
sleep 1
end
Hem utilitzat el synth :fm, però Sonic Pi en conté molts d'altres. Podem veure el llistat amb una mica d'explicació de cada sinte a la ajuda
En ocasions, voldrem produir sons més llargs o a velocitat diferent. Ho podem fer amb els paràmetres opcionals attack i release, que controlen la amplitud d'una nota en funció del temps
# Exemple 1 - Nota de 4 'beats' de durada:
play 60, attack: 1, release: 3
# Exemple 2 - Petit 'staccato':
play 60, attack: 0, release: 0.2
live_loop :bass do
use_synth :fm
play :c2, attack: 0, release: 0.25
sleep 0.25
play :c2, attack: 0, release: 0.3
sleep 2
play :e2
sleep 0.75
play :f2
sleep 1
end
Ha arribat el moment de crear la nostra melodía. En comptes de escriure una pila de comandes play i sleep, farem servir una dreçera: play_pattern_timed
en comptes de:
play :c2
sleep 0.5
play :d2
sleep 0.25
play :e2
sleep 0.75
play :d2
sleep 0.5
pots escriure:
play_pattern_timed [:c2, :d2, :e2, :d2], [0.5, 0.25, 0.75, 0.5]
live_loop :melody do
play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], \
[0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end
use_bpm 100
### ===== DRUMS ==========
live_loop :drums do
sample :drum_heavy_kick
sleep 1
sample :drum_snare_hard
sleep 1
sample :drum_heavy_kick
sleep 1
sample :drum_snare_hard
sleep 1
end
live_loop :hats do
sample :drum_cymbal_closed
sleep 0.5
end
### ===== BASS ==========
live_loop :bass do
use_synth :fm
play :c2, attack: 0, release: 0.25
sleep 0.25
play :c2, attack: 0, release: 0.3
sleep 2
play :e2
sleep 0.75
play :f2
sleep 1
end
### ===== LEAD ==========
live_loop :melody do
play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], \
[0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end
Aquí rau la verdadera potència de Sonic Pi! Podem afegir components aleatoris a la nostra música per a que es generi en directe!
use_bpm 50
live_loop :multi_beat do
use_random_seed 2000
8.times do
c = rrand(70, 130)
n = (scale :e1, :minor_pentatonic).take(3).choose
synth :tb303, note: n, release: 0.1, cutoff: c if rand < 0.9
sample :elec_hi_snare if one_in(6)
sample :drum_cymbal_closed if one_in(2)
sample :drum_cymbal_pedal if one_in(3)
sample :bd_haus, amp: 1.5 if one_in(4)
sleep 0.125
end
end
Ens veiem al fòrum oficial de Sonic Pi! https://in-thread.sonic-pi.net/
Codi font / Transparències: https://github.com/GeeksCAT/2021-intro-sonicpi