No Stairway to Heaven!

Hi, I figured I’d transcribe the most famous riff into pi and I ran into some trouble. I was wondering if someone with a bit more musical chops could help me whitewash this fence, I mean transcribe this music! Its a lot of fun!

Here’s what I have so far but its not quite right:

tempo = 0.5

live_loop :stairway_lead do
  sleep tempo
  
  play :c4
  sleep tempo
  
  play :e4
  sleep tempo
  
  play :a4
  sleep tempo
  
  play :b4
  sleep tempo
  
  play :e4
  sleep tempo
  
  play :c4
  sleep tempo
  
  play :b4
  sleep tempo
  
  play :c5
  sleep tempo
  
  play :e4
  sleep tempo
  
  play :c4
  sleep tempo
  
  play :c5
  sleep tempo
  
  play :fs4
  sleep tempo
  
  play :d4
  sleep tempo
  
  play :a3
  sleep tempo
  
  play :f4
  sleep tempo
  
  play :e4
  sleep tempo
  
  play :c4
  sleep tempo
  
  play :a3
  sleep tempo
  
  play :e4
  sleep tempo
  
  play :c4
  sleep tempo
  
  play :a3
  sleep tempo
  
  play :e4
  sleep tempo
  
  play :a3
  sleep tempo
  
  play :g3
  sleep tempo
  
  play :a3
  sleep tempo
  
  play :a3
  sleep tempo * 5
  
end

live_loop :starway_bass do
  play :a3
  sleep tempo*4
  play :gs3
  sleep tempo*4
  play :gf3
  sleep tempo*4
  play :fs3
  sleep tempo*4
  play :fs3
  sleep tempo*8
  play :b3
  sleep tempo
  play :a3
  sleep tempo
  play :a3
  sleep tempo
  play :a3
  sleep tempo
  play :f3
  sleep tempo
  play :e3
  sleep tempo
end

I’ve been using this site’s sheet music to transcribe from but I’m not sure if I got the notes right: https://www.musicnotes.com/sheetmusic/mtd.asp?ppn=MN0020073

Anyone got any help here? Please and thanks!

I think I fixed it:

$tempo = 0.5

live_loop :stairway_lead do
  use_synth :pluck
  sleep $tempo
  
  play :c4
  sleep $tempo
  
  play :e4
  sleep $tempo
  
  play :a4
  sleep $tempo
  
  # Half Bar
  
  play :b4
  sleep $tempo
  
  play :e4
  sleep $tempo
  
  play :c4
  sleep $tempo
  
  play :b4
  sleep $tempo
  
  # Bar
  
  play :c5
  sleep $tempo
  
  play :e4
  sleep $tempo
  
  play :c4
  sleep $tempo
  
  play :c5
  sleep $tempo
  
  # Half Bar
  
  play :fs4
  sleep $tempo
  
  play :d4
  sleep $tempo
  
  play :a3
  sleep $tempo
  
  play :f4
  sleep $tempo
  
  # Bar
  
  play :e4
  sleep $tempo
  
  play :c4
  sleep $tempo
  
  play :a3
  sleep $tempo
  
  play :e4
  sleep $tempo
  
  # Half Bar
  
  play :c4
  sleep $tempo
  
  play :a3
  sleep $tempo
  
  play :e4
  sleep $tempo
  
  play :a3
  sleep $tempo
  
  # Bar
  
  play :g3
  sleep $tempo
  
  play :a3
  sleep $tempo
  
  play :a3
  sleep $tempo * 6
  
  # Bar
  
end

live_loop :stairway_bass do
  use_synth :piano
  play :a3
  sleep $tempo*4
  play :gs3
  sleep $tempo*4
  play :g3
  sleep $tempo*4
  play :fs3
  sleep $tempo*4
  play :fb3
  sleep $tempo*8
  play :b3
  sleep $tempo
  play :a3
  sleep $tempo
  play :a3
  sleep $tempo
  play :a3
  sleep $tempo
  play :a3
  sleep $tempo*2
  play :f3
  sleep $tempo
  play :e3
  sleep $tempo
end

Nice!

Note that Sonic Pi already has a built in way to control the tempo, so you can just use sleep 1 instead of sleep $tempo and e.g. sleep 4 instead sleep $tempo*4. Then at the top you can add use_bpm 120 (or another number to adjust the beats per minute.
That should save you a bit of typing :slight_smile:

1 Like

Had a go at this. One or two wrong notes and timing. I also added some sustain and release to the notes giving them a fuller sound. (each note sustains for 90% of its duration and releases over the remaining 10%). I added some reverb as well, and set the tempo to 66 bmp as in the score.
Your variable tempo is essentailly the duration in beats of a quaver here. You could rename the variable q if you like, although I’ve left it here. I also reduced the amp: (volume) for the second live loop to balance things.

It sounds nice. Good choice to use with Sonic Pi.

use_bpm 66
tempo = 0.5
use_synth :pulse
with_fx :reverb,room: 0.8,mix: 0.7 do
  live_loop :stairway_lead do
    sleep tempo
    
    play :c4
    sleep tempo
    
    play :e4
    sleep tempo
    
    play :a4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :b4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :e4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :c4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :b4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :c5,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :e4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :c4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :c5,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :fs4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :d4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :a3,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :f4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :e4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :c4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :a3,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :e4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :c4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :a3,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :e4,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :a3,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :g3,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :a3,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    
    play :a3,sustain:tempo*4*0.9,release: tempo*4*0.1
    sleep tempo * 6
    
  end
  
  use_synth_defaults amp: 0.7
  live_loop :starway_bass do
    play :a3,sustain:tempo*4*0.9,release: tempo*4*0.1
    sleep tempo*4
    play :gs3,sustain:tempo*4*0.9,release: tempo*4*0.1
    sleep tempo*4
    play :g3,sustain:tempo*4*0.9,release: tempo*4*0.1
    sleep tempo*4
    play :fs3,sustain:tempo*4*0.9,release: tempo*4*0.1
    sleep tempo*4
    play :f3,sustain:tempo*8*0.9,release: tempo*8*0.1
    sleep tempo*8
    play :b2,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    play :a2,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    play :a2,sustain:tempo*3*0.9,release: tempo*3*0.1
    sleep tempo*3
    play :a2,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    play :f3,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
    play :e3,sustain:tempo*0.9,release: tempo*0.1
    sleep tempo
  end
end
2 Likes

Thank you so much, its perfect!

1 Like