Making Music with Sonic Pi
Sonic Pi is a new musical instrument that you play by writing programs!
Check out the handout! Credit to Charisse.
Samples
sample :drum_roll
sleep 6
sample :drum_splash_hard, amp: 1.5
Synths
use_synth :fm
play :c, attack: 1, decay: 0, sustain: 0, release: 1, amp: 0.5, pan: rrand(-0.5,0.5)
Loops
live_loop :drums do
4.times do
sample :drum_bass_hard
sleep 0.5
sample :drum_cymbal_closed
sleep 0.5
sample :drum_snare_hard
sleep 0.5
sample :drum_cymbal_closed
sleep 0.5
end
sample :drum_bass_hard
sleep 0.75
sample :drum_bass_hard
sleep 0.25
end
Notes
live_loop :bass do
use_synth :tb303
play :c2
sleep 0.5
end
live_loop :riff do
use_synth :pulse
play :c, attack: 0.5, sustain: 0.5, release: 0.5
sleep 1
play :g, pan: rrand(-0.5, 0.5)
sleep 0.5
play :e
sleep 0.5
end
Randomness
live_loop :my_random_beat do
use_random_seed 220
16.times do
sample :elec_hi_snare if one_in 3
sample :drum_cymbal_closed if one_in 3
sample :drum_cymbal_pedal if one_in 5
sample :bd_haus if one_in 3
sleep 0.125
end
end
live_loop :my_tune do
use_synth :prophet
notes = scale :c4, :minor_pentatonic
use_random_seed 40
6.times do
play notes.choose
sleep [0.25, 0.5].choose
end
end
Tick and look
use_synth :piano
play [:c, :e, :g]
sleep 1
play (chord :c, :major)
sleep 1
live_loop :play do
play (chord :c, :major).tick
sleep 0.5
stop if look > 2
end
Scales
use_synth :prophet
14.times do
play (scale :c4, :major, num_octaves: 2).tick
sleep 0.25
end
live_loop :up_and_down do
use_synth :sine
play (scale :c4, :major_pentatonic).reflect.butlast.tick
sleep 0.25
end
Credit to mehackit
Chords
use_synth :beep
live_loop :chords do
[1, 3, 6, 4].each do |d|
(range -3, 3).each do |i|
play_chord (chord_degree d, :c, :major, 3, invert: i)
sleep 0.25
end
end
end
Credit to Adrian Cheater
Drum patterns
define :pattern do |p|
return p.ring.look == 'x'
end
use_bpm 90
live_loop :drums do
tick
sample :drum_bass_hard if pattern "x-x-----x-x--x--"
sample :drum_snare_hard if pattern "----x--x-x-xx---"
sample :drum_cymbal_closed
sleep 0.25
end
Credit for funk pattern, pattern
Effects
with_fx :slicer do
live_loop :breakbeat do
sample :loop_breakbeat, beat_stretch: 2, amp: 2
sleep 2
end
end
with_fx :wobble, phase: 0.25, invert_wave: 1 do
live_loop :melody do
use_random_seed 20
use_synth :fm
8.times do
play (chord :eb5, :minor7).shuffle.tick
sleep 0.5
end
end
end
Control
notes = (scale :e3, :minor_pentatonic)
sn = synth :prophet, note: :e1, release: 8, cutoff: 100
sleep 1
16.times do
control sn, note: notes.tick, pan: rrand(-1, 1)
sleep 0.125
end
Examples
Song generator
# chords = [(chord :C, :minor7), (chord :Ab, :major7),
# (chord :Eb, :major7), (chord :Bb, "7")].ring
chords = [(chord :A, :minor), (chord :F, :major),
(chord :G, :major), (chord :C, :major)]
chosen = chords[0]
live_loop :melody do
stop
use_synth :blade
r = [0.25, 0.25, 0.5, 1].choose
play chosen.choose #, attack: 0, release: r
sleep r
end
live_loop :keys do
stop
use_synth :blade
play chosen
sleep 1
end
live_loop :bass do
use_synth :fm
use_octave -2
3.times do
play chosen[0]
sleep 1
end
play chosen[2]
sleep 0.5
play chosen[1]
sleep 0.5
chosen = chords.tick
end
live_loop :perc do
stop
sample :drum_cymbal_closed, amp: 0.5
sleep 0.25
end
live_loop :perc1 do
stop
sample :ambi_choir, release: 5, slice: 0.5
3.times do
sample :drum_bass_hard, amp: 2
sleep 1
end
2.times do
sample :drum_bass_hard, amp: 2
sleep 0.5
end
4.times do
sample :drum_bass_hard, amp: 2
sleep 1
end
end
Credit to mehackit
Lofi Hip Hop
Next steps
Check out what other people are doing and remix their work! Good places to go are the Sonic Pi tutorial, forums, or other people’s YouTube channels.
Need help tying your song together?
- Drum patterns
- Note names (and sounds!) and chord progressions
- r/DrumKits is a great place to find samples
Need inspiration? Check out these pieces that other people have made.
Other reference material