Strudelify
Thought I'd Died and Gone to Heaven cover art

1991 · Waking Up The Neighbours

Thought I'd Died and Gone to Heaven

Bryan Adams

KeyE majorTempo88 bpm
0:00/0:00
// Thought I'd Died and Gone to Heaven — Bryan Adams
// 88 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 26, 4/4 at bar 27, 2/4 at bar 54, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 130 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(88/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.

// bass · electric bass finger · "Bass"
const bass = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B C D@2 E F G E G E G E H I H I H I H I J@2 A K B L A K B M D N O P Q R Q R Q E S T S T S
  T S T U V W V X Y Z E@2 Y Z E@2 A@2 B@2 A@2 B@2 D@2 E F G E G E G E H I H I H I H I AA@2 S T S T S T S T U S T S T S T
  S T S T S T S T S T AB@2
>`.pickRestart({
  A: "g#1!8", B: "f#1!8", C: "f#1!4 a#1!2 b1!2", D: "e1!8", E: "a1!8", F: "c#2!8", G: "b1!7 a1", H: "a1!4 e1!4",
  I: "b1!4 c#2!4", J: "[a1!4 e1@3 b1@5 g#1!4]/2", K: "g#1!4 f#1!4", L: "f#1!4 g#1!4", M: "a#1!2 b1!2 e1!4",
  N: "e1!4 a1!4", O: "a1!4 c#2!4", P: "c#2!4 b1!4", Q: "b1!3 a1!5", R: "a1!4 b1!4", S: "e1!4 b1!4", T: "c#2!4 a1!4",
  U: "e1@3 b1@5", V: "b1 ~@2 b1 ~ b1 ~@2", W: "b1@2 ~@4 b1@2 ~@2 b1!2 b1@2 b1!2", X: "b1@2 ~@4 b1@2 ~@2 b1!2 e2@4",
  Y: "d2!8", Z: "g1!8", AA: "[a1!4 e1@3 b1@9]/2", AB: "[e1@3 b1@9 ~@4]/2",
})).s("gm_electric_bass_finger").gain(0.71)

// chords · string ensemble 1 · "Strings 1"
const string_ensemble_1 = note(`<
  A@2 B@2 A@2 C@2 ~@4 A@2 C@2 ~@23 D@5 ~@19 E@4 F G F H F G I@2 A@2 C@2 A@2 C@2 ~@47
>`.pickRestart({
  A: "[g#3,b3,d#4]/2", B: "[~@5 g#5@3 f#5@8, [f#3,a#3,c#4]]/2", C: "[f#3,a#3,c#4]/2",
  D: "[~ [g#3,b3,d#4]@4 [f#3,a#3,c#4]@4 ~]/5", E: "[b3,e4,f#4]", F: "[d4,f#4,a4]",
  G: "[d4,g4,b4]@3 [d4,f#4,a4]@3 [d4,g4,b4]@2", H: "[a3,c#4,e4]", I: "d4@3 c#4@5, [a3,e4]",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.6)

// chords · synth strings 1 · "Strings 2"
const synth_strings_1 = note(`<
  ~@4 A@2 B@2 ~@8 C D E F G H G H G H I J@6 K@3 ~@7 L@8 M@3 N@8 O P Q@2 R ~@8 S@2 T@2 S@2 T@2 C D E F G H G H G H I J@6
  U@3 N@8 O N@16 V@2
>`.pickRestart({
  A: "[[g#4,b4,d#5]@3 [g#4,b4,e5]@2 [g#4,b4,d#5]@5 [g#4,b4,e5] [g#4,b4,e5]@2 [g#4,b4,d#5]@3]/2", // G#m E G#m E G#m
  B: "[[f#4,a#4,c#5]@3 [f#4,a#4,d#5]@2 [f#4,a#4,c#5]@5 [f#4,a#4,d#5] [f#4,a#4,d#5]@2 [f#4,a#4,c#5]@3]/2", // F# D#m F# D#m F#
  C: "e5!3 f#5@2 e5@3, [e3,b3,e4,g#4,b4]", D: "e5!3 f#5@2 e5@3, [e4,a4,b4]", E: "~ e5!2 f#5@2 e5@3, [f#4,a4,c#5]",
  F: "~ e5!2 f#5@2 e5@3, [e4,g#4,c#5]", G: "[b3,d#4,f#4]", H: "[a3,c#4,e4]", I: "[a3,c#4,e4]@2 e5!2, ~ [e4,g#4,b4]",
  J: "[d#5 e5@2 ~@5 [a3,c#4,e4]@4 e5@2 e5@2, [b3,d#4,f#4] [c#4,e4,g#4] ~ [e4,g#4,b4], ~@3 f#5@3 e5@6 ~@4]/2", // A B C#m E
  K: "[d#5 e5@2 ~@5 [a3,c#4,e4]@4 [e4,g#4,b4]@3 [b3,d#4,f#4]@5 ~@4, [b3,d#4,f#4] [c#4,e4,g#4] ~@4, ~ f#5 e5@2 ~@4]/3", // A E B C#m
  L: "[~@4 e5!3 f#5@2 e5@3 e5!3 f#5@2 e5@3 ~ e5!2 f#5@2 e5@3 ~ e5!2 f#5@2 e5@3 [b3,d#4,f#4]@8 [a3,c#4,e4]@8 [b3,d#4,f#4]@8 [a3,c#4,e4]@4, ~ [e3,b3,e4,g#4,b4]@2 [e4,a4,b4]@2 [f#4,a4,c#5]@2 [e4,g#4,c#5]@2 ~@7]/8", // B A B A E Esus4 F#m C#m
  M: "[~ [b3,d#4,f#4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]]/3", // B A
  N: "[e5@2 e5@2 d#5 e5@2 ~@5 [a3,c#4,e4]@4, [e4,g#4,b4] [b3,d#4,f#4] [c#4,e4,g#4] ~, ~@7 f#5@3 e5@6]/2", // A E B C#m
  O: "[e4,g#4,b4]@3 [b3,d#4,f#4]@5", P: "b4@6 a4 b4", Q: "e5", R: "e5@3 ~",
  S: "[[g#4,b4,d#5]!3 [g#4,b4,e5]@2 [g#4,b4,d#5]@5 [g#4,b4,e5] [g#4,b4,e5]@2 [g#4,b4,d#5]@3]/2", // G#m E G#m E G#m
  T: "[[f#4,a#4,c#5]!3 [f#4,a#4,d#5]@2 [f#4,a#4,c#5]@5 [f#4,a#4,d#5] [f#4,a#4,d#5]@2 [f#4,a#4,c#5]@3]/2", // F# D#m F# D#m F#
  U: "[d#5 e5@2 ~@5 [a3,c#4,e4]@4 [e4,g#4,b4]@3 [b3,d#4,f#4]@9, [b3,d#4,f#4] [c#4,e4,g#4] ~@4, ~ f#5 e5@2 ~@4]/3", // A E B C#m
  V: "[[e4,g#4,b4]@3 [b3,d#4,f#4]@9 ~@4]/2", // E B
})).s("gm_synth_strings_1").gain(0.48).pan(0.7)

// chords · overdriven guitar · "Guitar 1"
const overdriven_guitar = note(`<
  A@2 B@2 C@2 D@2 ~@4 E ~ F G H I J K L M L M L M N O P O P O P O Q@2 ~@3 R@2 S@2 T@5 U V U V U W X Y X Y X Y X Y Z ~@3
  AA AB AC AB AD AE AF AG@2 ~@8 H I J K L M L M L M N O P O P O P O AH@2 X Y X Y X Y X Y Z X Y X Y X Y X Y X Y X Y X Y X
  Y AI@2
>`.pickRestart({
  A: "[g#3,d#4,g#4]/2", B: "[~@6 [c#4,f#4] [d#4,g#4] [c#4,f#4]@24]/2",
  C: "[[g#3,b3,d#4]!3 [g#3,b3,e4]@2 [g#3,b3,d#4]@5 [g#3,b3,e4] [g#3,b3,e4]@2 [g#3,b3,d#4]@3]/2", // G#m E G#m E G#m
  D: "[[f#3,a#3,c#4]!3 [f#3,a#3,d#4]@2 [f#3,a#3,c#4]@5 [f#3,a#3,d#4] [f#3,a#3,d#4]@2 [f#3,a#3,c#4]@3]/2", // F# D#m F# D#m F#
  E: "[g#2,d#3,g#3,b3,d#4,g#4]", F: "[f#2,c#3,f#3,a#3,c#4,f#4]", G: "~@2 a#2 b2",
  H: "e4!3 f#4@2 e4@3, [e2,b2,e3,g#3,b3]", I: "e4!3 f#4@2 e4@3, [e3,a3,b3]", J: "~ e4!2 f#4@2 e4@3, [f#3,a3,c#4]",
  K: "~ e4!2 f#4@2 e4@3, [e3,g#3,c#4]", // C#m
  L: "[b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]!2 [b2,f#3]@2 [a2,e3]@2", // B5 A5
  M: "[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]!2 [a2,e3]@2 [a2,e3]@2", N: "[a2,e3]!4 [e2,b2,e3]!2 ~@2",
  O: "[b2,f#3,b3]!2 ~@2 [c#3,g#3,c#4]!2 ~@2", P: "[a2,e3,a3]!2 ~@2 [e2,b2,e3]!2 ~@2",
  Q: "[[a2,e3,a3]!2 ~@2 [e2,b2,e3]@3 [b2,f#3,b3]@5 ~@4]/2", R: "[~ [g#2,d#3,g#3,b3,d#4,g#4]@2 ~]/2",
  S: "[~ [f#2,c#3,f#3,a#3,c#4,f#4]@2 ~]/2", // F#
  T: "[a#2@2 b2@2 e4!3 f#4@2 e4@3 e4!3 f#4@2 e4@3 ~ e4!2 f#4@2 e4@3 ~ e4!2 f#4@2 e4@3 [b2,f#3]!4, ~ [e2,b2,e3,g#3,b3]@2 [e3,a3,b3]@2 [f#3,a3,c#4]@2 [e3,g#3,c#4]@2 ~]/5", // B5 E Esus4 F#m C#m
  U: "[b2,f#3]@2 [b2,f#3]!2 [b2,f#3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2", // B5 A5
  V: "[a2,e3]@2 [a2,e3]!2 [a2,e3]@2 [a2,e3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2", // A5 B5
  W: "[a2,e3]@2 [a2,e3]!2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2", // A5
  X: "[e2,b2,e3]!2 ~@2 [b2,f#3,b3]!2 ~@2", Y: "[c#3,g#3,c#4]!2 ~@2 [a2,e3,a3]!2 ~@2", Z: "[e2,b2,e3]@3 [b2,f#3,b3]@5",
  AA: "~@10 b2!2 e3@4", AB: "[d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@2",
  AC: "[d3,g3,d4]@3 [d3,a3,d4]@3 [d3,g3,d4]@2", AD: "[a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]!2",
  AE: "[d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] [d3,a3,d4,f#4]@2", // D
  AF: "[b2,d3,g3,d4]@3 [d3,a3,d4]@2 [d3,a3,d4] [b2,d3,g3,d4]@2", // G D5 G
  AG: "[a2,e3,a3,d4]@2 [a2,e3,a3,d4] [a2,e3,a3,c#4]@3 [a2,e3,a3,c#4]@2", // Asus4 A
  AH: "[[a2,e3,a3]!2 ~@2 [e2,b2,e3]@3 [b2,f#3,b3]@9]/2", AI: "[[e2,b2,e3]@3 [b2,f#3,b3]@9 ~@4]/2",
})).s("gm_overdriven_guitar").gain(0.33).pan(0.3)

// other · electric guitar clean · "Guitar 2"
const electric_guitar_clean = note(`<
  ~@20 A B A B A B C D@6 E@3 ~@11 F G H G H G I J@8 K ~@24 A B A B A B C D@6 L@3 J@8 K J@16 M@2
>`.pickRestart({
  A: "b2 f#3 e4 d#4 b3 e4 d#4 b3", B: "a2 e3 e4 b3 a3 e4 b3 a3", C: "a3 e4 b3 a3 [e2,b2,e3,g#3,b3,e4]@2 e4@2",
  D: "[d#4 e4@2 f#4@3 e4@6 [e2,b2,e3,g#3,b3,e4]@2 e4@2]/2", // E
  E: "[d#4 e4@2 f#4@3 e4@6 [e2,b2,e3,g#3,b3,e4]@3 [b2,f#3,b3,d#4]@5 ~@4]/3", F: "~@4 b2 f#3 e4 d#4",
  G: "b3 e4 d#4 b3 a2 e3 e4 b3", H: "a3 e4 b3 a3 b2 f#3 e4 d#4", I: "a3 e4 b3 a3!2 e4 b3 a3",
  J: "[[e2,b2,e3,g#3,b3,e4]@2 e4@2 d#4 e4@2 f#4@3 e4@6]/2", K: "[e2,b2,e3,g#3,b3,e4]@3 [b2,f#3,b3,d#4]@5",
  L: "[d#4 e4@2 f#4@3 e4@6 [e2,b2,e3,g#3,b3,e4]@3 [b2,f#3,b3,d#4]@9]/3", // E B
  M: "[[e2,b2,e3,g#3,b3,e4]@3 [b2,f#3,b3,d#4]@9 ~@4]/2", // E B
})).s("gm_electric_guitar_clean").gain(0.5)

// other · distortion guitar · "Guitar 3"
const distortion_guitar = note("<~@70 A B@3 C D E@5 F G H ~@28 I J K L M@2 N@2 O P Q R S@2 T ~@3>".pickRestart({
  A: "~@5 a3 d4 e4", B: "[d4@12 ~ a3 a3@10]/3", C: "e4@3 a3", D: "~@2 f#3 g#3 b3 g#3 b3 b3@7 c#4@2",
  E: "[d#4@10 c#4 d#4 f#4@8 f#4@2 d#4@2 d#4 f#4 d#4@8 d#4 c#4 d#4@3 c#4 d#4 c#4 g#3@8 a#4@2 d#4@2 b4@8 b4@8 c#5 b4 g#4@6 a#4 b4]/5",
  F: "c#5 d#5@2 f#5@4 f#5", G: "d#5 f#5@2 d#5 f#5@4 f#5@2 d#5 c#5 c#5@2 b4@2", H: "b4", I: "[b4,e5]@2 [b4,e5]!14",
  J: "[b4,e5]@2 e5 f#5!2 e5!2 c#5", K: "[b4,e5]@7 f#5", L: "g#5 a5@2 b5 b5@2 a4 g#4", M: "[a4@4 f#4 g#4 a4 b4@9]/2",
  N: "[g#4@4 g#4@2 e4@2 f#4@2 g#4@2 f#4@2 e4@14 e4@2 c#4 b3]/2", O: "b4@2 c#5 c#5@2 b4!2 c#5!2 b4 b4@2 b4 c#5 c#5@2",
  P: "b4 c#5@3 b4@2 b4 c#5!2 b4 b4@2 b4 c#5 e5@2", Q: "[b4,e5]!8", R: "[b4,e5]!2 e5 g#5 a5 g#5 f#5 e5",
  S: "[[b4,e5]!4 e5@3 f#5@4 g#5@4 a5]/2", T: "b5",
})).s("gm_distortion_guitar").gain(0.47)

// chords · overdriven guitar · "Guitar 4"
const overdriven_guitar_2 = note("<~@35 A B C D E B C D F ~@31 B@2 D@2 B@2 D@2 ~@47>".pickRestart({
  A: "~@8 [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~", // G#5
  B: "[g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~", // G#5
  C: "[g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~", // G#5 F#5
  D: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~", // F#5
  E: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [g#2,d#3] ~", // F#5 G#5
  F: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~@9", // F#5
})).s("gm_overdriven_guitar").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B A@3 B C D C E C D C F D@9 E A@8 G H A C A D A C A G A@9 D@8 F I J K J I D@3 L D@2 M N A@3 B A@3 B D@9 E A@8 O ~
  D@3 E D@3 P I D@3 Q D@3 M D@7 R S ~
>`.pickRestart({
  A: "x ~@3 x ~@2 x", B: "x ~@7 x ~@2 x ~@2 x ~", C: "x!2", D: "x ~@2 x!2 ~@3", E: "x ~@2 x!2 ~@2 x",
  F: "x ~@5 x ~ x ~@2 x ~@2 x ~", G: "x ~@2 x ~@2 x ~ x ~@5 x ~", H: "~ x", I: "x ~@2 x ~@4", J: "x ~@2 x ~ x ~@2",
  K: "x ~@2 x ~ x ~ x", L: "x ~@5 x ~ x ~ x!2 ~@4", M: "x ~@5 x ~ x ~@2 x ~@4", N: "x ~@5 x ~@4 x ~@3 x",
  O: "x ~@2 x ~@2 x ~@3 x ~ x ~@3", P: "x ~@2 x ~@2 x ~", Q: "x ~@5 x ~ x ~@5 x!2", R: "x ~@4 x ~@2 x!2 ~ x ~@2 x ~",
  S: "~ x!2 ~@5",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  A@19 B A@5 C D A@8 E A@11 D A@5 F A@8 G A@3 H A@7 I A@11 B A@5 C D A@7 J ~ A@3 C A@3 K L A@3 H A@3 G A@7 M N ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x ~ x!2 ~ x", C: "~@2 x ~@2 x!2 ~", D: "~@2 x ~ x!2 ~ x ~@4 x ~@3", E: "~@3 x",
  F: "~@2 x ~ x ~@5 x ~ x!2 ~ x", G: "~@2 x ~@3 x!2", H: "~@4 x ~@5 x!3 ~@3", I: "~ x!3", J: "~@2 x ~ x ~@2 x",
  K: "~@2 x ~ x ~ x!2", L: "x!2 ~ x", M: "~@4 x ~ x ~@5 x!2 ~@2", N: "x ~@2 x ~@4",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  A B A B A B A B@5 A B A B A@5 B A B A B C D@8 E B@3 F B F B F@5 B F B F B G H@8 I B J B K A@9 B A B A B A B A@5 B A B
  A B C D@7 L ~ H@7 M I H@16 ~@2
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!2 ~@3 x ~ x", D: "x!2 ~ x ~ x ~ x", E: "~@4 x!4", F: "x!4 ~ x!3", G: "x!6 ~@2",
  H: "~ x ~ x!3 ~ x", I: "~ x ~ x ~@4", J: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x!2", K: "x!5 ~ x ~", L: "x!2 ~ x ~@4",
  M: "~ x ~ x!3 ~@2",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@20 A@5 ~ B ~@8 C ~@12 D@5 E ~@8 F ~@3 A@9 ~@12 A@5 ~ B ~@7 G ~@26 H ~>".pickRestart({
  A: "~@3 x", B: "~@3 x ~@4", C: "~ x!3 ~@4", D: "~ x ~@2", E: "~@7 x", F: "~@5 x!3", G: "~@5 x!2 ~", H: "~ x!2 ~@5",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  A ~ A ~ A ~ A ~@5 A ~ A ~ A@4 B C B C B ~ D E@7 F ~@4 G ~ G ~ G@5 H I H I H G J@8 K ~@3 C B@8 A ~ A ~ A ~ A ~ A@4 B C
  B C B ~ D E@7 F ~ J@8 L J@16 K ~
>`.pickRestart({
  A: "x", B: "x ~@2 x", C: "~@3 x", D: "x ~ x!2", E: "~ x!3", F: "~@2 x ~ x ~@2 x", G: "~ x", H: "~ x ~@2",
  I: "~ x!2 ~", J: "x!2 ~ x", K: "x ~@2 x ~@4", L: "x ~@2 x ~@2 x ~",
})).gain(0.8)

stack(
  bass, string_ensemble_1, synth_strings_1, overdriven_guitar, electric_guitar_clean, distortion_guitar,
  overdriven_guitar_2, kick, snare, hihat, mid_tom, crash
)

More by Bryan Adams