Strudelify
Just Like Heaven cover art

1988 · Kiss Me Kiss Me Kiss Me

Just Like Heaven

The Cure

KeyA majorTempo150 bpm
0:00/0:00
// Just Like Heaven — The Cure
// 150 bpm, 4/4, key A major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 131 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar 1.
setcpm(150/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 · electric guitar clean · "Guitar 1"
const electric_guitar_clean = note(`<
  ~@5 A@2 B@2 ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~
  C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D E F E F E F ~ G ~@3 C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~
  D E F E F E ~@3
>`.pickRestart({
  A: "[[a2,c#3]@2 [a2,c#3]@2 [a2,c#3] [a2,c#3]@2 [g#2,b2]@2 [g#2,b2]@2 [g#2,b2]@2 [g#2,b2] [g#2,b2]@2]/2", // A G#m
  B: "[[b2,d3]@2 [b2,d3]@2 [b2,d3] [b2,d3]@2 [d3,f#3]@2 [d3,f#3]@2 [d3,f#3]@2 [d3,f#3] [d3,f#3]@2]/2", // Bm D
  C: "~@3 [g#2,b2]@2 ~@3", D: "~@3 [d3,f#3]@2 ~@3", E: "~@17 [f#2,c#3,f#3,a3,c#4,f#4] ~@6",
  F: "~@10 [d4,g4] [g2,d3,g3,b3,d4,g4] ~@2 [g2,d3,g3,b3,d4,g4] ~@7 [d4,g4]@2, ~@9 [g2,d3,g3,b3]@2 ~@10 [g2,d3,g3,b3]@3", // G5 G G5 G
  G: "~@7 [d3,a3,d4,f#4]", // D
})).s("gm_electric_guitar_clean").gain(0.4)

// chords · acoustic guitar nylon · "Guitar 2"
const acoustic_guitar_nylon = note(`<
  ~@8 A B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2
  B@2 C@2 B@2 C@2 B@2 C@2 B@2 D@2 E@6 F@4 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 E@6 G ~
>`.pickRestart({
  A: "~@22 e4 [a2,e3,a3,c#4,e4], ~@21 [a2,e3,a3,c#4]@2 ~", // A
  B: "[~ e4@5 ~ e4@5 ~ e4@2 ~ e4@2 ~ e4@2 ~ [b3,e4]@5 ~ [b3,e4]@2 ~ [b3,e4]@5 ~ [b3,e4]@2 ~ [b3,e4]@2 ~ [b3,e4]@2 ~ f#4 [b2,f#3,b3,d4,f#4], [a2,e3,a3,c#4]@6 [a2,e3,a3,c#4]@6 [a2,e3,a3,c#4]@3 [a2,e3,a3,c#4]@3 [a2,e3,a3,c#4]@3 [e2,b2,e3,g#3]@6 [e2,b2,e3,g#3]@3 [e2,b2,e3,g#3]@6 [e2,b2,e3,g#3]@3 [e2,b2,e3,g#3]@3 [e2,b2,e3,g#3]@3 [b2,f#3,b3,d4]@2 ~]/2", // E5 Bm A E Bm
  C: "[~ f#4@5 ~ f#4@5 ~ f#4@2 ~ f#4 [b2,f#3,b3,d4,f#4] ~ f#4@2 [d3,a3,d4,f#4]@6 [d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@6 [d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@3, [b2,f#3,b3,d4]@6 [b2,f#3,b3,d4]@6 [b2,f#3,b3,d4]@3 [b2,f#3,b3,d4]@2 ~ [b2,f#3,b3,d4]@3 ~@27]/2", // Bm D Bm
  D: "[~ f#4@5 ~ f#4@5 ~ f#4@2 ~ f#4 [b2,f#3,b3,d4,f#4] ~ f#4@2 [d3,a3,d4,f#4]@6 [d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@6 [d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@6, [b2,f#3,b3,d4]@6 [b2,f#3,b3,d4]@6 [b2,f#3,b3,d4]@3 [b2,f#3,b3,d4]@2 ~ [b2,f#3,b3,d4]@3 ~@27]/2", // Bm D Bm
  E: "[~ [c#4,f#4]@5 ~ [c#4,f#4]@5 ~ [c#4,f#4]@2 ~ [c#4,f#4]@2 ~ [c#4,f#4]@2 ~ [d4,g4]@5 ~ [d4,g4]@2 ~ [d4,g4]@5 ~ [d4,g4]@2 ~ [d4,g4]@2 ~ [d4,g4]@5, [f#2,c#3,f#3,a3]@2 [f#2,c#3,f#3,a3]@2 [f#2,c#3,f#3,a3]!3 [g2,d3,g3,b3]@2 [g2,d3,g3,b3] [g2,d3,g3,b3]@2 [g2,d3,g3,b3]!2 [g2,d3,g3,b3]@2]/2", // F#5 G5 F#m G
  F: "[[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!3 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!2 [d3,a3,d4,f#4]@2]/2", // D
  G: "[d3,a3,d4,f#4]", // D
})).s("gm_acoustic_guitar_nylon").gain(0.35)

// chords · electric guitar clean · "Guitar 3"
const electric_guitar_clean_2 = note(`<
  ~@17 A B C@2 A B C@2 D E F G A B H@2 ~@16 A B C@2 A B C@2 D E F G A B H@2 ~@15 I J ~@21 K B L@2 ~@12 M N O@2 P@6 Q ~
>`.pickRestart({
  A: "[e4,c#5]!3 [e4,b4]@2 [e4,b4] [e4,a4]@2", B: "[e4,g#4]@2 [e4,g#4] [e4,f#4]@2 [e4,f#4] e4!2",
  C: "[[d4,e4]@2 [d4,e4]!2 [c#4,e4] [d4,e4]@2 b3@2 b3!2 [a3,b3]@2 [a3,b3] b3!2]/2", // Dsus2 C#m Dsus2 Asus2
  D: "[c#4,e4]@2 [c#4,e4] [d4,e4]@2 [d4,e4] e4!2", E: "[e4,f#4]!3 [e4,g#4]@2 [e4,g#4] [e4,a4]!2",
  F: "[e4,b4]!3 [e4,c#5]@2 [e4,c#5] [e4,d5]!2", G: "[e4,e5]!3 [e4,d5]@2 [e4,d5]!3",
  H: "[[d4,e4]@2 [d4,e4]!2 [c#4,e4] [d4,e4]@2 b3@2 b3!2 [a3,b3]@2 [a3,b3] b3 a3]/2", I: "f#4 d4 a3 f#4@2 d4 a3@2",
  J: "[f#3,a3,c#4,f#4]", K: "[e4,c#5]!3 [e4,b4]@2 [e4,b4] [e4,a4]!2",
  L: "[[d4,e4]@2 [d4,e4]!2 [c#4,e4] [d4,e4]@2 b3@4 [a3,b3]@2 [a3,b3] b3 a3]/2", // Dsus2 C#m Dsus2 Asus2
  M: "[e4,c#5]@2 [e4,c#5] [e4,b4]@2 [e4,b4] [e4,a4]@2", N: "[e4,g#4]!3 [e4,f#4]@2 [e4,f#4] e4!2",
  O: "[[d4,e4]@2 [d4,e4]@2 [c#4,e4] [d4,e4]@2 b3@3 b3 [a3,b3]@2 [a3,b3] b3@2]/2", // Dsus2 C#m Dsus2 Asus2
  P: "[~ [c#4,f#4]@18 ~@3 [d4,g4]@26, [f#2,c#3,f#3,a3]@6 ~ [g2,d3,g3,b3]@9]/2", Q: "[f#4,a4,d5]",
})).s("gm_electric_guitar_clean").gain(0.64)

// other · piano
const piano = note("<~@90 A B@2 C A B@2 D@2 E F ~ G H@2 I ~@25>".pickRestart({
  A: "~@5 e5!3", B: "[e5@2 c#5@2 a4@3 b4@2 b4 ~ a4 b4@2 c#5@2]/2", C: "f#4 ~@3", D: "[d5 c#5@2 d5@3 e5 a4@5 ~ a5!3]/2",
  E: "a5@2 b5@2 c#6@3 a5", F: "b5@2 a5 b5@2 a5 b5@2", G: "~@5 d5 c#5 d5", H: "[c#5@2 a4 a4@10 d5 c#5 d5]/2",
  I: "c#5@2 a4 a4@5",
})).s("gm_piano").gain(0.64)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@6 D@2 E@2 A@2 F@2 A@2 F@2 A@2 F@2 A@2 F@2 A@2 F@2 A@2 F@2 A@2 F@2 A@2
  F@2 C@6 G ~
>`.pickRestart({
  A: "[a1!2 a1@2 a1!3 e1@2 e1!2 e1@2 e1!3]/2", B: "[b1@2 b1@2 b1 b1@2 d2@2 d2@2 d2@2 d2!3]/2",
  C: "[f#1@2 f#1@2 f#1!3 g1@2 g1!7]/2", D: "[d2 d3 d2!5 d2@2 d2!7]/2", E: "[d2@2 d2!5 d2@2 d2!6 a1]/2",
  F: "[b1@2 b1@2 b1!3 d2@2 d2!2 d2@2 d2!3]/2", G: "d2",
})).s("gm_electric_bass_finger").gain(0.54)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C D C B C B C B C B C B C D C B C B C B C B C B C B C B C D C B C B C B C B C B C B C B C D C B C B C B C B C B
  C B C B C D C B C B C B C B C B C B C B C D C B C B C B C B C D C B C B C B C B C B C B C B C D C B C B C B C B C B C
  B C B C D C B C B C B ~@2
>`.pickRestart({
  A: "x!2 ~@2 x!2 ~ x", B: "~ x ~@2 x!2 ~ x", C: "x ~@3 x!2 ~ x", D: "~ x ~@2 x ~@2 x",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<A B@3 C B@11 D B@15 D B@15 D B@15 D B@15 D B@9 D B@15 D B@15 D B@6 E ~>".pickRestart({
  A: "~@21 x ~ x", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "~@2 x!2 ~ x!2 ~", E: "x",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B@2 C A B@3 A B@7 A B@7 A B@6 D A B@7 A B@6 D A B@7 A B@6 D A B@7 A B@5 A D A B@3 A B@3 E D A B@7 A B@6 D A B@7 A
  B@5 A D A B@3 A B ~@2
>`.pickRestart({
  A: "x!2 ~ x!5", B: "x!8", C: "x!2 ~ x!2 ~@2 x", D: "x!2 ~@2 x ~@2 x", E: "x!2 ~ x!3 ~ x",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@2 B A ~@3 A ~@6 C A ~@7 A ~@6 C A ~@7 A ~@6 C A ~@7 A ~@6 C A ~@7 A ~@5 A C A ~@3 A ~@3 D C A ~@7 A ~@6 C A ~@7
  A ~@5 A C A ~@3 A ~ E ~
>`.pickRestart({
  A: "~ x ~@2", B: "~@2 x ~@2 x!2 ~", C: "~@2 x!2 ~ x!2 ~", D: "~ x ~ x", E: "x",
})).gain(0.32)

stack(electric_guitar_clean, acoustic_guitar_nylon, electric_guitar_clean_2, piano, bass, kick, snare, hihat, crash)

More by The Cure