Strudelify

I Just Shot John Lennon

The Cranberries

KeyC minorTempo140 bpm
0:00/0:00
// I Just Shot John Lennon — The Cranberries
// 140 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 92 bars on a 16-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): Guitare.
setcpm(140/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.

// other · pad poly · "Dolores 2"
const pad_poly = note(`<
  ~@3 A B C D E F G H I J@3 K J@3 K ~@7 A L M N O G P Q R S T S U V W V X V W V Y Z@2 AA AB Z@2 AA AC ~@8 S T S U V W V
  X V W V Y Z@2 AA AB Z@2 AA AC ~@8
>`.pickRestart({
  A: "~@6 g4!2", B: "c5@2 ~ eb5@3 d5@6 g4@2 g4@2", C: "c5@2 ~ eb5@3 d5@4 g4@2 g4@2 g4@2",
  D: "c5@2 ~ eb5@3 d5@6 d5@2 d5@2", E: "f5 eb5 d5 c5@2 c5!3", F: "c5@2 c5@2 eb5@2 d5@5 ~ g4@2 g4@2",
  G: "c5@2 ~ eb5@3 d5@4 eb5@2 g4@2 g4@2", H: "c5@2 ~ eb5@3 d5@4 eb5@4 eb5@2", I: "f5@2 ~ eb5@3 c5@4 eb5@2 d5@3 ~",
  J: "[~@4 eb5@3 ~ d5@2 eb5@3 ~ c5@5 ~ eb5@3 ~ d5@2 g4@3 ~ c5@5 ~ eb5@3 ~ d5@2 eb5@3 ~ eb5@2]/3",
  K: "f5@2 eb5@2 d5@2 eb5@4 d5@2 c5@3 ~", L: "c5@2 ~ eb5@3 d5@4 eb5@5 ~", M: "~@2 d5@2 eb5@2 d5@3 ~@3 g4@3 ~",
  N: "c5@2 eb5@4 d5@3 ~@3 d5@2 d5@2", O: "f5@2 eb5@2 d5@2 eb5 c5@3 ~@2 c5@2 c5@2",
  P: "c5@2 ~ eb5@3 d5@3 ~ g4@2 g4@2 g4@2", Q: "c5@2 ~ eb5@3 f5@5 ~ f5@3 ~", R: "g5@3 ~ g5@2 ab5@4 g5@2 f5@2 ~@2",
  S: "g5@3 ~ f5@3 ~ g5@3 ~ c5@3 ~", T: "eb5@2 f5@5 ~@3 f5@2 f5@2 ~@2", U: "f5@2 eb5@3 ~ d5@5 ~ d5@2 c5@2",
  V: "d5@3 ~ c5@2 d5@4 eb5@3 ~ c5@2", W: "d5!2 d5@4 d5@5 ~ d5@2 c5@2", X: "eb5!2 d5@4 c5@4 eb5@2 f5@2 eb5@2",
  Y: "eb5!2 d5@4 c5@6 ~@4", Z: "g5@10 f5@2 ab5@3 ~", AA: "g5@2 f5@2 ab5@3 ~ g5@2 f5@2 ab5@3 ~",
  AB: "ab5@3 c6 ~@2 g5 f5", AC: "ab5@3 c6 ~@4",
})).s("gm_pad_poly").gain(0.48)

// chords · acoustic guitar nylon · "Guitare"
const acoustic_guitar_nylon = note("<[~@3 f3 ~@12] ~@22 [g3 ~@7] ~@3 [g3 ~@7] ~@64>")
  .s("gm_acoustic_guitar_nylon").gain(0.08)

// chords · distortion guitar · "Distortion"
const distortion_guitar = note(`<
  A@3 B A@3 B A@3 B A@3 B A@3 B C@2 D@2 C@2 E@2 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B
  A@3 B A@3 B A@3 B A@3 F
>`.pickRestart({
  A: "[eb3,g3,c4]@2 [eb3,g3,c4]!4 [g3,c4,eb4]@2 [g3,c4,eb4]@2 [g3,c4,eb4]!6", B: "[ab3,c4,eb4]@2 [ab3,c4,eb4]!14",
  C: "[[g3,bb3,d4]@3 ~ [g3,bb3,d4]!2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,c4,d4]@4 [g3,c4,d4]@2 [g3,c4,d4]@2 [g3,bb3,d4]@4 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]!2]/2", // Gm Gsus4 Gm
  D: "[[g3,bb3,d4]@3 ~ [g3,bb3,d4]!2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,c4,eb4]@4 [g3,c4,eb4]@2 [g3,c4,eb4]@2 [g3,bb3,d4]@4 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]!2]/2", // Gm Cm Gm
  E: "[[g3,bb3,d4,f5]@3 ~ [g3,bb3,d4]!2 [g3,bb3,d4]@2 [g3,bb3,d4,f5]@2 [g3,bb3,d4]@2 [g3,bb3,d4,f5]@2 ~@2 f5@2 [g3,c4,eb4]@2 [g3,c4,eb4]@2 [g3,bb3,d4]@4 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]!2, ~@4 f5@3 ~@7 [g3,c4,eb4]@4 ~@14]/2", // Gm7 Gm Gm7 Gm Gm7 Cm Gm Cm
  F: "[ab3,c4,eb4] ~@7", // Ab
})).s("gm_distortion_guitar").gain(0.24)

// bass · acoustic bass · "Basse"
const bass = note(`<
  ~@4 A@3 B A@3 B A@3 B A@3 B C@8 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B
  A@3 B A@3 D
>`.pickRestart({
  A: "c2@3 ~ c2@2 eb2@4 eb2@2 eb2@2 eb2@2", B: "ab1!6 bb1 c2", C: "[bb1@7 ~ g1@5 ~ c2@5 ~ c2@2 g1@4 g1@2 g1@2 g1@2]/2",
  D: "ab1@3 ~@13",
})).s("gm_acoustic_bass").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@16 B C B D B C B E A@11 F A@3 F A@3 F A@11 B A@3 B A@3 B A@3 B A@3 F A@11 F A@3 G
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@2 x ~@3 x", C: "~ x ~ x ~ x ~ x", D: "~ x ~ x ~ x ~@2", E: "~ x ~@6", F: "x ~@5 x ~@7 x!2",
  G: "x",
})).gain(0.12)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@3 C B@3 C B@3 C B@3 C D B E F D B E G B@3 C B@3 C B@3 C B@3 C B@3 C H@2 B I H@2 B I B@3 J B@3 J B@3 C B@3 J
  B@3 C H@2 B I H@2 B I B@3 C B@3 ~
>`.pickRestart({
  A: "~@4 x!12", B: "~ x ~ x", C: "~@3 x!2 ~@4 x ~@2 x!4", D: "~@4 x ~@6 x!2 ~@3", E: "~@4 x ~@5 x!3 ~@3",
  F: "~@4 x ~@7 x!4", G: "~@4 x ~ x!3 ~ x!3 ~ x!2", H: "~@4 x ~@6 x!5", I: "~@3 x!2 ~@4 x ~ x!2 ~ x!2",
  J: "~@3 x!2 ~@4 x ~@2 x!3 ~",
})).gain(0.12)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@3 x [x!16]!87 x>").gain(0.12)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@39 A ~@3 A ~@3 A ~@3 B ~@3 B ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B ~@3 B ~@3 A ~@4
>`.pickRestart({
  A: "~@14 x!2", B: "~@7 x",
})).gain(0.12)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@21 A ~@3 A ~@13 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@4
>`.pickRestart({
  A: "~@7 x", B: "~@12 x!2 ~@2",
})).gain(0.12)

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

// drums · ride
const ride = s("rd").struct("<~@3 x [x!8]!87 x>").gain(0.12)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 [x!16]!87 x>").gain(0.62)

stack(
  pad_poly, acoustic_guitar_nylon, distortion_guitar, bass, kick, snare, pedal_hat, mid_tom, high_tom, crash, ride,
  cabasa
)

More by The Cranberries