A self-contained version of what I have in my sonic-pi-experiments repo. It uses my play-helper and lyrics helpers, so here I've pasted them into the buffer so anyone can run it.
Here's a recording of it on Soundcloud.
A self-contained version of what I have in my sonic-pi-experiments repo. It uses my play-helper and lyrics helpers, so here I've pasted them into the buffer so anyone can run it.
Here's a recording of it on Soundcloud.
# Rule The World - Take That | |
# Uses the play_helper and lyric helpers | |
define :pl do |notes, sus=0.5, rel=nil| | |
rel ||= 1 - sus | |
notes.each_slice(2) do |n,d| | |
if d.respond_to?(:each) then # slur | |
dtot = d.reduce(:+) | |
synth = play n[0], sustain: sus * dtot, release: rel * dtot | |
sleep d[0] | |
d[1..-1].zip(n[1..-1]).each do |dd, nn| | |
control synth, note: nn | |
sleep dd | |
end | |
else | |
play n, sustain: sus * d, release: rel * d | |
sleep d | |
end | |
end | |
end | |
class LyricStrx < String | |
def initialize(s) | |
super s | |
end | |
# Override inspect to return the string as-is (without adding quotes) | |
def inspect | |
to_s | |
end | |
end | |
define :lyrics do |str| | |
puts LyricStrx.new(str) | |
end | |
use_debug false | |
use_bpm 82 | |
define :pls do |notes, sus=1| | |
pl notes, sus | |
end | |
with_fx :reverb, room: 0.9, amp: 0.5 do |fx| | |
at 0 do | |
# vocals | |
use_synth :fm | |
use_synth_defaults attack: 0.0625, slide: 0.0625, depth: 1.5 | |
control fx, amp: 1, amp_slide: 32 | |
with_fx :reverb do | |
lyrics "You light" | |
pl [:Fs3, 0.5, :B3, 3.5] | |
lyrics "the skies" | |
pl [:Fs3, 0.5, :Cs4, 2.5] | |
lyrics "up above me;" | |
pl [:Fs3, 1, :A3, 0.5, [:Fs3, :E3], [0.125, 0.875], :E3, 1.5, :r, 5.5] | |
lyrics "a star" | |
pl [:Fs3, 0.5, :B3, 3.5] | |
lyrics "so bright" | |
pl [:D4, 0.5, :E4, 3.5] | |
lyrics "you blind me," | |
pl [:D4, 0.5, [:Cs4, :B3], [0.1875, 0.8125], :B3, 3] | |
lyrics "yeah, yeah." | |
pl [[:A3, :B3, :Fs3], [0.325, 0.175, 2], :r, 1] | |
lyrics "Don't close" | |
pl [:B3, 0.5, :E4, 3.5] | |
lyrics "your eyes;" | |
pl [:B3, 0.5, :D4, 2] | |
control fx, amp: 1.5, amp_slide: 4 | |
lyrics "don't fade away," | |
pl [:B3, 0.5, [:G4, :Fs4], [0.5, 0.5], :Fs4, 0.5, :Cs4, 2] | |
lyrics "don't fade away," | |
pl [:B3, 0.5, [:G4, :Fs4], [0.5, 0.5], :Fs4, 0.5, :E4, 1.5, :r, 0.5] | |
lyrics "oh." | |
pl [[:G4, :Fs4], [1, 1.5], :r, 0.5] | |
lyrics "Yeah, you and me, we can ride on a star;" | |
pl [:Fs4, 0.5], 0.5 | |
pl [:Fs4, 0.5], 0.8 | |
pl [:Fs4, 0.5], 0.5 | |
pl [:Fs4, 0.5]*3 + [:Fs4, 1, :G4, 0.5, :Fs4, 0.5, :Cs4, 1] | |
lyrics "if you stay with me, girl," | |
pl [:Cs4, 0.5, :Cs4, 0.5, :Cs4, 1, :D, 0.5, :Cs4, 0.5, :B3, 1] | |
lyrics "we can rule the world." | |
pl [:Fs4, 0.5, :Fs4, 0.5, [:Fs4, :E4], [0.5, 0.5], :E4, 1] | |
pl [[:G4, :Fs4], [1, 0.5], :r, 1.5], 0.8 | |
lyrics "Yeah, you and me, we can light up the sky;" | |
pl [:Fs4, 0.5], 0.5 | |
pl [:Fs4, 0.5], 0.8 | |
pl [:Fs4, 0.5], 0.5 | |
pl [:Fs4, 0.5]*3 + [:Fs4, 1, :G4, 0.5, :Fs4, 0.5, :Cs4, 1] | |
lyrics "if you stay by my side," | |
pl [:Cs4, 0.5, :Cs4, 0.5, :Cs4, 1, :D, 0.5, :Cs4, 0.5, :B3, 1] | |
lyrics "we can rule the world." | |
pl [:Fs4, 0.5, :Fs4, 0.5, [:Fs4, :E4], [0.5, 0.5], :E4, 1] | |
pl [[:G4, :Fs4], [1, 0.5]], 0.8 | |
end | |
end | |
at 1 do | |
# left hand | |
use_synth :piano | |
#use_synth_defaults pan: -1 | |
with_fx :reverb do | |
pls [:B2, 4, :Fs2, 4, :E2, 4, :Fs2, 4, :B2, 4, :Fs2, 4, :E2, 4, :Fs2, 4] | |
pls [:E2, 3, :Fs2, 1, :B1, 2, :B1, 1, :Cs2, 1] | |
with_fx :level, amp: 0.4 do | |
pls [:Fs1, 0.5]*8 + [:A1, 0.5]*8 + [:D2, 0.5]*8 | |
pls [:B1, 0.5]*3 + [:Fs1, 1] + [:Fs1, 0.5]*6 + [:G1, 1] | |
pls [:G1, 0.5]*6 + [:A1, 1] + [:A1, 0.5]*3 + [:D2, 0.5]*8 | |
end | |
end | |
end | |
at 1 do | |
# right hand | |
use_synth :piano | |
use_synth_defaults sustain: 1 | |
with_fx :reverb do | |
2.times do | |
# Bsus2/Bm | |
play_pattern [[:Fs3, :Cs4], [:Fs3, :D4], [:Fs3, :Cs4], [:Fs3, :D4]] | |
# F#m | |
play_pattern [[:Cs4, :G4], [:A3, :Fs4], [:Fs3, :Cs4], [:Cs3, :A3]] | |
# Em | |
play_pattern [[:E3, :B3], [:B2, :G4], [:E3, :B3], [:B2, :G3]] | |
# F#m | |
play_pattern [[:Fs3, :Cs4], [:D3, :B3], [:Fs3, :Cs4], [:D3, :B3]] | |
end | |
# Em | |
play_pattern [[:E3, :B3], [:B2, :G4], [:E3, :B3], [:B2, :G3]] | |
# Bm | |
play_pattern [[:Fs3, :D4], [:D3, :B3], [:Fs3, :D4], [:D3, :B3]] | |
# F#m (2) | |
play_pattern [[:Fs3, :Cs4], [:Cs3, :A3], [:Fs3, :Cs4], [:Cs3, :A3]] | |
# A | |
play_pattern [[:E3, :Cs4], [:Cs3, :A3], [:E3, :Cs4], [:Cs3, :A3]] | |
2.times do | |
# D | |
play_pattern [chord(:D3, :M)]*4 | |
# Bm/F#m | |
play chord(:B3, :m) | |
sleep 1 | |
play chord(:B3, :m), sustain: 0.5 | |
sleep 0.5 | |
play chord(:Fs3, :m), sustain: 1.5 | |
sleep 1.5 | |
play chord(:Fs3, :m) | |
sleep 1 | |
# F#m/G | |
play chord(:Fs3, :m) | |
sleep 1 | |
play chord(:Fs3, :m), sustain: 0.5 | |
sleep 0.5 | |
play chord(:G3, :M), sustain: 1.5 | |
sleep 1.5 | |
play chord(:G3, :M) | |
sleep 1 | |
# G/A | |
play chord(:G3, :M) | |
sleep 1 | |
play chord(:G3, :M), sustain: 0.5 | |
sleep 0.5 | |
play chord(:A3, :M), sustain: 1.5 | |
sleep 1.5 | |
play chord(:A3, :M) | |
sleep 1 | |
end | |
end | |
end | |
end |