A self-contained version of what I have in my sonic-pi-experiments repo. It uses my guitar, 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 guitar, 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.
# Wonderwall - Oasis | |
# Strum a chord with a certain delay between strings | |
define :guitar_strum do |chrd, dt| | |
in_thread do | |
play_pattern_timed chrd.to_a.drop_while{|n| [nil,:r].include? n}, dt | |
end | |
end | |
define :strum do |chrd, pattern=nil, t=0.25, dt=0.025| | |
if pattern == nil then | |
guitar_strum(chrd, dt) | |
else | |
pattern.split(//).each do |shape| | |
case shape | |
when 'D' | |
guitar_strum chrd, dt | |
when 'd' | |
with_fx :level, amp: 0.7 do | |
guitar_strum chrd, dt | |
end | |
when 'U' | |
with_fx :level, amp: 0.8 do | |
guitar_strum chrd.reverse, dt*0.9 | |
end | |
when 'u' | |
with_fx :level, amp: 0.6 do | |
guitar_strum chrd.reverse, dt*0.9 | |
end | |
else | |
# nothing | |
end | |
sleep t | |
end | |
end | |
end | |
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 68 | |
with_fx :reverb, room: 0.9 do | |
at 16 do | |
use_synth :fm | |
use_synth_defaults attack: 0.05, slide: 0.025, depth: 1.5 | |
with_fx :distortion, amp: 0.5 do | |
lyrics "Today is gonna be the day that they're" | |
pl [:r, 0.5, :B4, 0.5, :A4, 0.75, :G4, 0.25, [:A4, :G4], [0.25, 0.25], :A4, 0.25, :G4, 0.25, :A4, 0.5, :A4, 0.25, :G4, 0.25] | |
lyrics "gonna throw it back to you." | |
pl [[:A4, :G4], [0.25, 0.25], :A4, 0.25, :G4, 0.25, :A4, 0.5, :B4, 0.25, :G4, 1.25, :r, 1] | |
lyrics "By now you should've some how" | |
pl [:r, 0.5, :B4, 0.5, :A4, 0.75, :G4, 0.25, :A4, 0.25, :G4, 0.25, :A4, 0.5, :A4, 0.5] | |
lyrics "realised what you gotta do." | |
pl [[:A4, :G4], [0.25, 0.25], :A4, 0.5, :A4, 0.25, :G4, 0.25, [:A4, :B4], [0.5, 0.25], :G4, 1.5, :r, 1] | |
lyrics "I don't believe that anybody" | |
pl [:B4, 0.25, :D5, 0.25, [:B4, :D5], [0.25, 0.75], :D5, 0.25, :E5, 0.75, :D5, 0.25, :A4, 0.5, :G4, 0.75] | |
lyrics "feels the way I do" | |
pl [:A4, 0.75, :A4, 0.25, [:A4, :B4], [0.25, 0.5], :G4, 1] | |
lyrics "about you now" | |
pl [:E4, 0.25, :E4, 0.5, :E4, 0.25, [:G4, :E4], [0.5, 1.75], :r, 5.5] | |
end | |
end | |
use_synth :pluck | |
use_synth_defaults coef: 0.35 | |
with_fx :lpf, cutoff: 110 do | |
em7 = [40, 47, 52, 55, 62, 67] | |
g = [43, 47, 50, 55, 62, 67] | |
dsus4 = [:r, :r, 50, 57, 62, 67] | |
a7sus4= [:r, 45, 52, 55, 62, 67] | |
5.times do | |
strum em7, 'D.d.D.dU' | |
strum g, 'dUD.D.du' | |
strum dsus4, 'DUD.D.d' | |
strum a7sus4, 'U.U.uduDu' | |
end | |
strum em7, 'D.d.D.dU' | |
strum g, 'dUD.D.du' | |
strum dsus4, 'DUD.D.d' | |
strum a7sus4, 'U.U.uduD.' | |
end | |
end |
Nailed it! good job