Sonic pi (Create music using code) programs showcased in the activity
# There are no mistakes, only opportunities.
# Sam Aaron
puts "KanchiLug Sonic pi"
# Synths
use_synth :piano
play :C3
# amp, pan, rate (rate reverse)
play 60, amp: 2, pan: 0, rate: 1
# Attack, decay, sustain, release
play 60, attack: 0.3, sustain: 1, release: 1
play 60
#It’s important to note that the duration of a sound is the summation of
#the times of each of these phases. Therefore the following sound
#will have a duration of 0.5 + 1 + 2 + 0.5 = 4 beats:
loop do
play 60, attack: 0.5, attack_level: 1, decay: 1, sustain_level: 0.4, sustain: 2, release: 0.5
sleep 4
end
# ---
# Samples
sample :loop_amen
# What happen when you half the rate
sample :loop_amen, rate: 0.5
# Custom samples
sample "~/Downloads/game-music.wav"
loop do
stop
sample :loop_amen, rate: 0.5, amp: 0.4, pan: 0.8
sleep 8
end
# ADSR
sample :loop_amen, start: 0.5, finish: 0.8, rate: -0.2, attack: 0.3, release: 1
# Effects
with_fx :reverb, room: 1 do # Slicer, echo
sample :loop_amen, rate: 0.5
sleep sample_duration(:loop_amen)
end
#----
# Welcome to Sonic Pi
use_random_seed 40
5.times do
play rrand(50, 100)
sleep 0.5
end
loop do
stop
sample :perc_bell, rate: rrand(0.125, 1.5)
sleep rrand(0.2, 2)
end
# ---
4.times do
sample :drum_heavy_kick
2.times do
sample :elec_blip2, rate: 2
sleep 0.25
end
sample :elec_snare
4.times do
sample :drum_tom_mid_soft
sleep 0.125
end
end
loop do
if one_in(2)
sample :drum_heavy_kick
sleep 0.5
else
sample :drum_cymbal_closed
sleep 0.25
end
end
use_synth :dsaw
loop do
play 50, amp: 0.3, release: 2
play 53, amp: 0.3, release: 2 if one_in(2)
play 57, amp: 0.3, release: 2 if one_in(3)
play 60, amp: 0.3, release: 2 if one_in(4)
sleep 1.5
end
# ---
# List and choose
play choose([50, 55, 62])
# Functions
define :player do |root, repeats|
repeats.times do
play root, release: 0.3
sleep 0.5
end
end
player :e3, 2
sleep 0.5
player :a3, 3
player :g3, 4
sleep 0.5
player :e3, 3
# ---
loop :twinkle do
use_bpm 120
use_synth :piano
play :g3
sleep 1
play :g3
sleep 1
play :d4
sleep 1
play :d4
sleep 1
play :e4
sleep 1
play :e4
sleep 1
play :c4
sleep 2
play :c4
sleep 1
play :c4
sleep 1
play :b3
sleep 1
play :b3
sleep 1
play :a3
sleep 1
play :a3
sleep 1
play :g3
sleep 2
end
# ---
# Welcome to Sonic Pi
use_synth :piano
use_bpm 120
puts "Twinkle Twinkle Little Star"
notes = (ring :G, :G, :D, :D, :E, :E, :C)
notes.each do |n|
play note(n, octave: 4)
sleep 1
end
puts "How I wonder what you are"
notes = (ring :C, :C, :B, :B, :A, :A, :G)
notes.each do |n|
play note(n, octave: 3)
sleep 1
end
# another way of writing this
verse1 = (ring :G, :G, :D, :D, :E, :E, :C)
loop :slow do
stop
use_synth :piano
play verse1.tick, release: 0.5
sleep 0.5
end
# ---
# Multiple loops
live_loop :beats do
sample :loop_compus, rate: 0.8, amp: 0.8
sleep ((1/0.8) * sample_duration(:loop_compus))
end
live_loop :bass do
use_synth :pretty_bell
n = (chord :c2, :minor).tick
3.times do
play n
sleep 1
end
play n
sleep 0.5
play (chord :c2, :minor).tick
sleep 0.5
end
use_synth :pretty_bell
notes = (ring :E4, :Fs4, :B4, :Cs5, :D5, :Fs4, :E4, :Cs5, :B4, :Fs4, :D5, :Cs5)
live_loop :slow do
play notes.tick, release: 0.1
sleep 0.3
end
live_loop :faster do
play notes.tick, release: 0.1
sleep 0.295
end
# ---
# Welcome to Sonic Pi
use_synth :pretty_bell
use_synth :prophet
use_synth :beep
use_bpm 120
verse1 = (ring :G, :G, :D, :D, :E, :E, :C)
verse2 = (ring :C, :C, :B, :B, :A, :A, :G)
verse3 = (ring :D, :D, :C, :C, :B, :B, :A)
verse3 = (ring :D, :D, :C, :C, :B, :B, :A)
verse4 = (ring :C, :C, :B, :B, :A, :A, :G)
verse5 = (ring :G, :G, :D, :D, :E, :E, :C)
live_loop :twinkle do
[verse1, verse2, verse3, verse4, verse5].each do |notes|
notes.each do |n|
if n == :G or n == :A or n == :B
play note(n, octave: 3)
play note(n, octave: 4)
else
play note(n, octave: 4)
play note(n, octave: 5)
end
sample :drum_heavy_kick
sleep 1
end
sample :drum_bass_hard
sample :drum_heavy_kick, rate: 0.75
sleep 0.5
sample :drum_heavy_kick
sleep 0.5
end
sleep 1
end
live_loop :beats do
sample :ambi_drone
sleep sample_duration(:ambi_drone)
end
# ---
# Blockgame
# Coded by DJ_Dave
use_bpm 130
live_loop :met1 do
sleep 1
end
cmaster1 = 130
cmaster2 = 130
define :pattern do |pattern|
return pattern.ring.tick == "x"
end
live_loop :kick, sync: :met1 do
stop
a = 1.5
sample :bd_tek, amp: a, cutoff: cmaster1 if pattern "x--x--x---x--x--"
sleep 0.25
end
with_fx :echo, mix: 0.2 do
with_fx :reverb, mix: 0.2, room: 0.5 do
live_loop :clap, sync: :met1 do
stop
a = 0.75
sleep 1
sample :drum_snare_hard, rate: 2.5, cutoff: cmaster1, amp: a
sample :drum_snare_hard, rate: 2.2, start: 0.02, cutoff: cmaster1, pan: 0.2, amp: a
sample :drum_snare_hard, rate: 2, start: 0.04, cutoff: cmaster1, pan: -0.2, amp: a
sleep 1
end
end
end
with_fx :reverb, mix: 0.2 do
with_fx :panslicer, mix: 0.2 do
live_loop :hhc1, sync: :met1 do
stop
a = 0.75
p = [-0.3, 0.3].choose
sample :drum_cymbal_closed, amp: a, rate: 2.5, finish: 0.5, pan: p, cutoff: cmaster2 if pattern "x-x-x-x-x-x-x-x-xxx-x-x-x-x-x-x-"
sleep 0.125
end
end
end
live_loop :hhc2, sync: :met1 do
stop
a = 1.25
sleep 0.5
sample :drum_cymbal_closed, cutoff: cmaster2, rate: 1.2, start: 0.01, finish: 0.5, amp: a
sleep 0.5
end
with_fx :reverb, mix: 0.7 do
live_loop :crash, sync: :met1 do
stop
a = 0.1
c = cmaster2-10
r = 1.5
f = 0.25
crash = :drum_splash_soft
sleep 14.5
sample crash, amp: a, cutoff: c, rate: r, finish: f
sample crash, amp: a, cutoff: c, rate: r-0.2, finish: f
sleep 1
sample crash, amp: a, cutoff: c, rate: r, finish: f
sample crash, amp: a, cutoff: c, rate: r-0.2, finish: f
sleep 0.5
end
end
with_fx :reverb, mix: 0.7 do
live_loop :arp, sync: :met1 do
with_fx :echo, phase: 1, mix: (line 0.1, 1, steps: 128).mirror.tick do
stop
a = 0.6
r = 0.25
c = 130
p = (line -0.7, 0.7, steps: 64).mirror.tick
at = 0.01
use_synth :beep
tick
notes = (scale :g4, :major_pentatonic).shuffle
play notes.look, amp: a, release: r, cutoff: c, pan: p, attack: at
sleep 0.75
end
end
end
with_fx :panslicer, mix: 0.4 do
with_fx :reverb, mix: 0.75 do
live_loop :synthbass, sync: :met1 do
stop
s = 4
r = 2
c = 60
a = 0.75
at = 0
use_synth :tech_saws
play :g3, sustain: 6, cutoff: c, amp: a, attack: at
sleep 6
play :d3, sustain: 2, cutoff: c, amp: a, attack: at
sleep 2
play :e3, sustain: 8, cutoff: c, amp: a, attack: at
sleep 8
end
end
end
Recent video from sonic pi author: https://www.youtube.com/watch?v=zL1LYRXFEEc
Other audio creation software mentioned in the talks
- VMPK https://vmpk.sourceforge.io/
- LMMS https://lmms.io/
- Ardour https://ardour.org/
Happy exploring…