0:00/0:00
// Heaven — Bryan Adams
// 69 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 3, 4/4 at bar 4, 2/4 at bar 23, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(69/4)
// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.
// chords · piano · "Piano - Right Hand"
const piano = note(`<
A B A C@2 D E F G D E F H I J K L M N K O@2 P Q R S T U R S T V W X Y Z AA X AB AC AD AE AF AG AH@2 AI@2 AJ AK AL AM
AL AN X Y Z AA X AB AC AO@4 ~
>`.pickRestart({
A: "c4@3 d4@2 e4@3 c4@3 d4@2 e4@3, [c3,g3] [a2,e3]", B: "c4@3 d4@2 e4@3 f4@3 e4@3 d4@2, [g2,e3] [f2,c3]",
C: "[c4@3 d4@2 e4@3 [f2,c3,g3,a3,c4,f4]@16 [c4,e4]@2 g3@2 [c4,e4]@2 g3@2, [g2,d3] ~@2 c3]/2", // F C G5
D: "[c4,e4] a3 [c4,e4] a3 [b3,d4] g3 [b3,d4] g3, a2 g2", E: "[b3,d4] g3 [b3,d4] g3 [d4,f4] a3 [d4,f4] a3, g2 d3",
F: "[c4,e4] a3 [c4,e4] a3 [c4,d4,f4] a#3 [c4,d4,f4] a#3, a2 a#2", // C Dm7
G: "[c4,d4,g4] g3 [b3,d4,g4] g3 [c4,e4] g3 [c4,e4] g3, g2 c3", // Csus2 G C
H: "[c4,f4] a3 [c4,f4] a3 [c4,d4,f4] g3 [c4,d4,f4] g3, a2 g2", // F5 Dm7
I: "[b3,d4,g4] g3 [b3,d4,g4] g3 [f2,c3,f3,a3,c4]@2 [g2,d3,g3,b3,d4]@2, g2 ~", // G F G
J: "[a2,e3,a3,c4,e4]@4 [a3,c4,e4]@2 e4 f4 [c3,e3,g3]@4 [c3,e3,g3]@4, ~ [a2,e3] ~@2", // Am C A5
K: "[f3,a3,c4]@4 [f3,a3,c4]@3 a3 [f2,c3,f3,a3,c4]@4 [g2,d3,g3,b3,d4]@4, [f2,c3] ~", // F G F5
L: "[a2,e3,a3,c4,e4]@4 [a3,c4,e4]@2 d4 c4 [g3,b3,d4]@4 [g3,b3,d4]@2 a3@2, ~ [a2,e3] [g2,d3]@2", // Am G A5 G5
M: "[g3,b3,d4]@4 [g3,b3,d4]@3 g3 [f2,c3,f3,a3,c4]@4 [g2,d3,g3,b3,d4]@4, [g2,d3] ~", // G F G G5
N: "[a2,e3,a3,c4,e4]@4 [a3,c4,e4]@2 e4 f4 [c4,e4,g4]@4 [c4,e4,g4]@4, ~ [a2,e3] [c3,g3]@2", // Am C A5 C5
O: "[[a2,e3,a3,c4,e4]@4 [a3,c4,e4]@2 d4 c4 [g2,d3,g3,d4]@16 c4@3 d4@2 e4@3, ~ [a2,e3] ~@4 [c3,g3]@2]/2", // Am G5 A5 C5
P: "c4@3 d4@2 e4@3 c4@3 d4@2 e4@3, [a2,e3] [g2,e3]", Q: "[f2,c3,g3,a3,c4]",
R: "[c4,e4] g3 [c4,e4] g3 [c4,e4] a3 [c4,e4] a3, c3 a2", S: "[b3,d4] g3 [b3,d4] g3 [b3,d4] g3 [b3,d4] g3, g2!2",
T: "[d4,f4] a3 [d4,f4] a3 [c4,e4] a3 [c4,e4] a3, d3 a2", // Dm C
U: "[c4,d4,f4] a#3 [c4,d4,f4] a#3 [c4,d4,g4] g3 [b3,d4,g4] g3, a#2 g2", // Dm7 Csus2 G
V: "[c4,d4,f4] a#3 [c4,d4,f4] a#3 [c4,f4] a3 [c4,f4] a3, a#2 a2", // Dm7 F5
W: "[c4,d4,f4] g3 [c4,d4,f4] g3 [b3,d4,g4] g3 [b3,d4,g4] g3, g2!2", // Dm7 G
X: "[f2,c3,f3,a3,c4]@4 [g2,d3,g3,b3,d4]@4 [a2,e3,a3,c4,e4]@4 [a3,c4,e4]@2 e4 f4, ~@3 [a2,e3]", // F G Am A5
Y: "[c3,e3,g3]@4 [c3,e3,g3]@4 [f3,a3,c4]@4 [f3,a3,c4]@3 a3, ~ [f2,c3]", // C F F5
Z: "[f2,c3,f3,a3,c4]@4 [g2,d3,b3,d4]@4 [a2,e3,g3,a3,c4,e4]@4 [a3,c4,e4]@2 d4 c4, ~@3 [a2,e3]", // F G Am7 Am A5
AA: "[g3,b3,d4]@4 [g3,b3,d4]@2 a3@2 [g3,b3,d4]@4 [g3,b3,d4]@3 g3, [g2,d3]!2", // G G5
AB: "[c4,e4,g4]@4 [c4,e4,g4]@4 [f3,a3,c4]@4 [f3,a3,c4]@3 a3, [c3,g3] [f2,c3]", // C F C5 F5
AC: "[f2,c3,f3,a3,c4]@4 [g2,d3,g3,b3,d4]@4 [a2,e3,a3,c4,e4]@4 [a3,c4,e4]@2 d4 c4, ~@3 [a2,e3]", // F G Am A5
AD: "[d3,g3,d4]@4 d3 c3 ~ b3@5 [g3,b3,d4]@4, ~ [g3,d4]@2 ~, ~@6 d3@5 ~@5", // G5 G G5
AE: "g3 [d3,g3,c4]@2 [d3,g3,b3] [d3,g3,a3]@2 [b2,d3,g3]@2, d4!2", // Csus2 G Dsus4 G
AF: "f3@6 d4 e4 [d4,f4]@2 e4 ~ c4@2 c4@2, [d3,a3]@8 [d3,a3]@3 d4@3 ~@2, ~@3 e3", // Dm D5
AG: "~@7 c4 a4 g4@3 ~ g4 f4 g4, [f3,a3,c4]@3 ~@5, ~ f2@2 [g2,d3]", // F G5
AH: "[[a3,c4,e4]@6 ~ e4 f4 e4@2 d4!2 c4 ~@2 [g3,b3]@4 [g3,b3,d4]@4 [b2,g3,b3,d4]@4 ~ [c3,e3,g3,c4]@3, [a2,e3]@7 ~ [a2,e3]@8 b2@8 ~@8, ~@7 d4@3 ~@6]/2", // Am G C A5
AI: "[f3@6 d4 e4 [d4,f4]@2 e4@2 [c4,d4] c4 [f3,c4]@2 [f3,c4]@4 ~@2 c4!2 a4 g4@3 ~ g4 e4 g4, [d3,a3]@2 [d3,a3] e3 ~ f2@2 ~, ~@7 a3@4 ~@3 [f3,c4]@2]/2", // Dm Csus2 F5 D5 F5
AJ: "[e3,g3,c4]@4 [e3,g3,c4]@4 ~@2 [c4,e4,g4]@4 e4 g4, c3 [c3,g3]", // C C5
AK: "[c4,d4,a4]@2 g4 [c4,d4,g4]@2 a4@3 [g2,d3,b3,d4,g4]@8, [g2,d3] ~", // D7 Csus2 G G5
AL: "[f2,c3,f3,a3,c4] [g2,d3,g3,b3,d4] [a2,e3,a3,c4,e4]@2", AM: "[c3,g3,c4,e4] [f2,c3,f3,a3,c4]",
AN: "[g2,d3,g3,b3,d4]@8 [g2,d3,g3,b3,d4]@4 [g2,d3,g3,b3,d4]@3 g4", // G
AO: "[g3,b3,d4] [f3,g3,b3,d4] [e3,g3,b3,d4] [d3,g3,b3,d4]", // G G7 Em7 G
})).s("gm_piano").gain(0.4).pan(0.4)
// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
~@2 A B@2 ~@8 C D C E F D C G@2 H I@2 ~@4 J ~@3 K ~ K L K ~ K M ~@8 N O@2 P Q K ~ K R S@2 T ~@5
>`.pickRestart({
A: "c4 g4", B: "[f4@3 e4@3 c4@2 a3@16 ~@8]/2", C: "~@2 [f3,a3,c4] [g3,b3,d4]", D: "[a3,c4,e4] ~@3",
E: "[a3,c4,e4]@2 ~@5 a3", F: "g3 ~ [f3,a3,c4] [g3,b3,d4]", G: "[[a3,c4,e4] ~ g3@4 ~@2]/2", H: "~@8 f4@3 e4@3 c4@2",
I: "[a3@5 ~@3]/2", J: "b3 c4 d4 ~", K: "[f3,a3,c4] [g3,b3,d4] [a3,c4,e4] ~", L: "~@4 c5 b4 g4 d4@4 ~@5", M: "b2 ~@3",
N: "~@14 e4 g4", O: "[~ g4 a4@6 a4@2 g4 e4 e4@6 a4@2 g4@2 [d4,e4] c4 a3@8, a4 ~@15]/2",
P: "e4!2 d4@2 a4!2 g4@2 d5@6 c5@2", Q: "a4 g4@14 ~", R: "~@6 b3 d4 g4@8",
S: "[c4@10 g3 c4 d4 e4@9 [c4,d4]!2 a3@4 ~@4]/2", T: "a3@3 b3@3 c4@2 g4@4 ~@4",
})).s("gm_electric_guitar_clean").gain(0.48)
// chords · electric guitar clean · "Guitar" · soft notes
const electric_guitar_clean_2 = note("<~@21 A B ~@17 C D@2 ~@2 E F ~@14 G H I J ~>".pickRestart({
A: "~ c4", B: "g4 ~", C: "~@5 b3 d4 b4@9", D: "[~@2 c5@4 b4@2 a4@2 b4 g4@11 ~@10]/2", E: "b3@13 c4@3", F: "a3@3 ~@5",
G: "~ a4 g4 ~@5", H: "a4@4 g4@4 e4@6 c4 d4", I: "e4@3 f4@3 e4@2 c4@4 ~@4", J: "~@3 a4 g4 e4@6 a4@3 a4@2",
})).s("gm_electric_guitar_clean").gain(0.3)
// other · synth strings 1 · "Strings"
const synth_strings_1 = note(`<
A@5 ~@3 B@3 C@3 D E F@2 D E G@4 ~@4 H I J K L M N M O M N M P@2 Q@2 R S@2 T@2 U V@2 W X M N M O M N M O Y ~@3
>`.pickRestart({
A: "[c6@9 ~]/5", B: "[~ c5@2 d5@2 f5]/3", C: "[e5@2 d5@4 d6@4 a5 g5]/3", D: "a5 g5", E: "a5@2 a5 g5",
F: "[a5@2 g5@4 a5 g5]/2", G: "[a5 g5@2 c6@5]/4", H: "c5", I: "d5", J: "f5 e5", K: "e5 d5", L: "d5 g4",
M: "a5 g5 a5@2", N: "g5 a5", O: "g5", P: "g5/2", Q: "a5@13 g5@3", R: "c6", S: "d6/2", T: "c6/2", U: "d6 b5",
V: "[c6@3 a5]/2", W: "a5 b5 c6!2", X: "b5", Y: "g5!4",
})).s("gm_synth_strings_1").gain(0.12)
// other · synth strings 1 · "Strings" · soft notes
const synth_strings_1_soft = note("<~@63 [g5!4]!2 ~>").s("gm_synth_strings_1").gain(0.05)
// bass · fretless bass
const bass = note(`<
A B A C@2 D E F G D H I J K L M N K L M O@2 P Q A R S T U V W X Y Z AA AB AC Z AD AB AE AF AG AH AI AJ AK@2 AL AM Z AN
AO AP Z AN AB AQ Z AN AR AS@4 ~
>`.pickRestart({
A: "c2@6 c2 g1 a1@8", B: "g1 f1", C: "[g1@3 e1 f1@8 c2@4]/2", D: "a1@4 g1@3 g1", E: "g1@6 a1 c2 d2@8",
F: "a1@4 a#1@3 a1", G: "g1@8 c2@6 c2 g1", H: "g1@4 g1 a1 c2@2 d2@8", I: "a1@4 a#1@3 a#1", J: "a1@3 d2 g1@4",
K: "g1@2 f1 g1", L: "a1@6 a1 b1 c2@6 e1@2", M: "f1@2 f1 g1", N: "a1@6 a1@2 g1@6 g1!2", O: "[a1@3 a1 g1@8 c2@4]/2",
P: "a1@4 g1@3 e1", Q: "f1 ~", R: "g1@6 g1@2 g1@6 a1 c2", S: "d2@3 c2 a1@3 a1", T: "a#1@3 a#1 g1@4", U: "c2@3 g1 a1@4",
V: "g1@6 g1@2 g1@4 g1 a1 c2@2", W: "d2 e2 a2@2", X: "a#2@3 a#2 a2@4", Y: "g2 g1", Z: "f1@4 g1@4 a1@6 a1 b1",
AA: "c2@3 e1 f1@4", AB: "f1@2 g1@2 a1@3 a1", AC: "g1@7 g1 g1@8", AD: "c2@6 d1 e1 f1@8", AE: "g1@7 g1 g1@2 g1@5 g1",
AF: "g1@2 g1@5 g1 g1@6 a1 c2", AG: "d2@3 d2 d2@2 e2@2", AH: "f2@10 f2 e2 g1@4", AI: "a1@7 a1 a1@8",
AJ: "b1@7 b1 b1@5 c2@3", AK: "[a1@7 c2 d2@4 e1@2 f1@8 e1!2 a1 g1@5 e1!2]/2", AL: "c1@6 c1!2 c1@2 c1@4 e1 f1",
AM: "g1@2 g1@4 g1!2 g1@8", AN: "c2@6 e1!2 f1@8", AO: "f1@4 g1@4 a1@6 a1!2", AP: "g1@6 g1!2 g1@8", AQ: "g1",
AR: "f1@4 g1@4 a1@6 e1 f1", AS: "g1 f1 e1 d1",
})).s("gm_fretless_bass").gain(0.55)
// other · pad bowed · "Pad 5 (bowed)"
const pad_bowed = note("<A B A C@2 ~@3 D ~@12 E A F ~@42>".pickRestart({
A: "c4@3 d4@2 e4@3 c4@3 d4@2 e4@3", B: "c4@3 d4@2 e4@3 f4@3 e4@3 d4@2", C: "[c4@3 d4@2 e4@3 [g3,a3,c4,f4]@16 ~@8]/2",
D: "~@3 g4 e4@2 ~@2", E: "~@8 c4@3 d4@2 e4@3", F: "f4",
})).s("gm_pad_bowed").gain(0.36)
// other · pad new age · "Pad 1 New Age"
const pad_new_age = note("<~@24 A B C D A E F G ~@34>".pickRestart({
A: "e5 ~ e5 ~ e5 ~ e5 ~", B: "d5@2 ~@2 g5@2 ~@2 d5 ~@3 d5@2 ~@2", C: "d5 ~ f5 ~ e5 ~ e5 ~",
D: "d5@2 ~@2 f5@2 ~@2 d5 ~@3 g5@2 ~@2", E: "d5 ~ g5 ~ d5 ~ d5 ~", F: "f5 ~ f5 ~ e5 ~ e5 ~", G: "f5 ~ f5 ~@5",
})).s("gm_pad_new_age").gain(0.16)
// drums · kick
const kick = s("bd").struct(`<
~@14 A B A B A B ~@3 C ~@9 D A D A D A D A ~ A@7 B A@3 B D A D B D A D ~ A ~@3
>`.pickRestart({
A: "x!2", B: "x", C: "~@12 x!2 ~@2", D: "~ x",
})).gain(0.29)
// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@63 [x!2]!2 ~>").gain(0.14)
// drums · snare
const snare = s("sd").struct("<~@13 A B@6 ~@4 A@10 B@7 ~ B@7 ~ B@3 C A B@2 ~ B@3 ~ B ~@3>".pickRestart({
A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.29)
// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@63 [~ x ~ x]!2 ~>").gain(0.11)
// drums · low tom
const low_tom = s("lt").struct(`<
~@13 A B A B A B A B ~@2 C D@8 E F ~ F G F ~ F ~ H ~@7 I ~@3 J F ~ F ~ F ~ F K ~@4
>`.pickRestart({
A: "~@2 x!2", B: "x", C: "~@13 x ~@2", D: "x ~@2 x!2 ~@3", E: "x ~@5 x ~ x ~@2 x!2 ~@3", F: "x!3 ~",
G: "~@8 x ~@2 x!2 ~@3", H: "x ~ x!2 ~@4", I: "~@9 x!2 ~@3 x!2", J: "~@10 x ~@3 x!2", K: "~@7 x ~ x!2 ~ x!3 ~",
})).gain(0.29)
// drums · hihat
const hihat = s("hh").struct(`<
~@14 A B A B A B C@2 D ~ E ~@8 F A F A F A F A ~ A@7 E A@3 B F A F G F A F ~ A ~@3
>`.pickRestart({
A: "x!2 ~ x!3 ~ x", B: "x!2 ~ x ~@4", C: "~@3 x", D: "~ x ~ x", E: "x", F: "~@4 x!2 ~ x", G: "x!2 ~@6",
})).gain(0.29)
// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@25 [~@5 x ~@2]!8 ~@30 [x!2 ~ x!3 ~ x]!2 ~>").gain(0.18)
// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@17 B ~@7 C ~@3 D ~@3 E ~@3 F ~@4>".pickRestart({
A: "~@12 x!2 ~@2", B: "~@9 x!2 ~ x ~ x!2", C: "~@8 x ~@2 x!3 ~@2", D: "~@9 x ~@2 x!2 ~@2", E: "~@6 x ~ x ~@2 x!5",
F: "~@4 x ~@6 x ~@4",
})).gain(0.29)
// drums · open hat
const open_hat = s("oh").struct(`<
~@13 A B A B A B A B C ~ B D@9 E ~ E ~ E ~ E ~@2 B ~@11 E ~ E ~ E ~ E B@2 ~@3
>`.pickRestart({
A: "~@2 x!2", B: "x", C: "x!2 ~@2", D: "~ x ~@2", E: "x!3 ~",
})).gain(0.18)
// drums · high tom
const high_tom = s("ht").struct("<~@49 [~@4 x ~@2 x ~@8] ~@3 [~@8 x ~@2 x ~@4] ~@7 [~ x ~@6] ~@4>").gain(0.29)
// drums · ride
const ride = s("rd").struct("<~@13 A B A B A B A C D E B@2 ~@8 F ~ F ~ F ~ F ~@14 F ~ F ~ F ~ F ~@5>".pickRestart({
A: "~@2 x!2", B: "x", C: "x ~@13 x!2", D: "~@3 x ~@4 x ~@5 x ~", E: "x ~@5 x ~ x ~@5 x!2", F: "x!3 ~",
})).gain(0.18)
// drums · splash
const splash = s("cr").struct(`<
~@13 A B A B A B A B ~@3 B ~@8 C ~ C ~ C ~ C ~@2 B ~@11 C ~ C ~ C ~ C B@2 ~@3
>`.pickRestart({
A: "~@2 x!2", B: "x", C: "x!3 ~",
})).gain(0.29)
stack(
piano, electric_guitar_clean, electric_guitar_clean_2, synth_strings_1, synth_strings_1_soft, bass, pad_bowed,
pad_new_age, kick, kick_soft, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom, open_hat, high_tom, ride, splash
)
More by Bryan Adams
Summer of '69D major · 136 bpmHave Ever You Really Loved a Woman?G major · 73 bpm(Everything I Do) I Do It For YouD♭ major · 67 bpmRun To YouF♯ minor · 128 bpmAll for LoveD major · 120 bpmCan't Stop This Thing We StartedA major · 119 bpmPlease Forgive MeA major · 66 bpmThought I'd Died and Gone to HeavenE major · 88 bpm
Not in the database
That song isn't here.
Nothing in the database matches this link. It may have been renamed, or the address was mistyped. The closest songs to :
Real transcriptions · Editable patterns · Instrumental
Type a song.
Get Strudel code.
Chords, structure, melody, bass and drums compiled from open transcriptions into Strudel live-coding patterns. Play it here, scrub through the bars, then open it in strudel.cc and start hacking.
Smells Like Teen SpiritNirvana
The JokerSteve Miller Band · 1973
Love Me DoThe Beatles · 1964
I Don't MindJames Brown · 1961
- Real transcriptionsMcGill chord charts, Lakh MIDI and quality-filtered PDMX scores. The library includes alternate transcriptions of some songs.
- One bar, one cycleEvery layer follows the same bar timeline, keeping the code, playback and song structure aligned.
- Instrumental by designDetected vocal parts are removed. Guitar riffs, harmonica and other instrumental leads stay.