Strudelify
The Longest Time cover art

1983 · An Innocent Man

The Longest Time

Billy Joel

KeyE♭ majorTempo92 bpm
0:00/0:00
// The Longest Time — Billy Joel
// 92 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(92/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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, A@4 for four bars: edit a riff to change every repeat.

// other · piano · "Chorus 4"
const piano = note(`<
  A B C D C ~@3 E F G H I ~@3 E F G H I D C D J ~@3 E F G H I K L M L@3 K N ~@3 E F O H I P L M Q L@2 K R ~@3 E F O H S
  T U T U V@3 W@2
>`.pickRestart({
  A: "~@10 c3@2 db3 ~ bb2 ~", B: "eb3@7 ~ d3@4 eb3@3 ~", C: "c3@4 c3 ~ eb3 ~ d3 ~ c3 ~ d3@2 c3 ~",
  D: "eb3@7 ~ d3@3 ~ eb3@3 ~", E: "~@12 f3@2 eb3 ~", F: "d3@7 ~ eb3@3 ~ eb3 ~ g3 ~", G: "f3@7 ~ g3@3 ~ g3 ~ bb3 ~",
  H: "ab3@5 ~ g3 ~ f3@2 ~@2 f3 ~ eb3 ~", I: "f3@5 ~ eb3 ~ eb3@6 ~@2", J: "c3@3 ~ c3@2 eb3 ~ d3@2 c3 ~ d3@2 c3 ~",
  K: "~@2 f3@4 ~@2 f3 ~ f3 ~ f3 ~ f3 ~", L: "~@2 g3@5 ~ g3 ~ g3 ~ g3 ~ g3 ~",
  M: "~@2 gb3@4 ~@2 gb3 ~ gb3 ~ gb3 ~ gb3 ~", N: "~@2 bb2 ~ bb2 ~ c3 ~ bb2@2 ~@2 c3 ~ d3 ~",
  O: "f3@6 ~@2 g3@3 ~ g3 ~ f3 ~", P: "~@2 f3@5 ~ f3 ~ f3 ~ f3 ~ f3 ~", Q: "~@2 g3@4 ~@2 g3 ~ g3 ~ g3 ~ g3 ~",
  R: "~@2 bb2 ~ bb2 ~ c3 ~ bb2@3 ~ c3 ~ d3 ~", S: "f3@4 ~@2 eb3 ~ eb3@5 ~@3", T: "eb4@7 ~ d4@3 ~ eb4@3 ~",
  U: "c4@3 ~ c4 ~ eb4 ~ d4@2 c4 ~ d4@2 c4 ~",
  V: "[eb4@6 ~ d4@3 ~ eb4@3 ~ c4@3 c4 ~ eb4 ~ d4@2 c4 ~ d4@2 c4 eb4@6 ~@2 d4@2 ~ eb4@3 ~ c4@3 ~]/3",
  W: "[c4@2 eb4 ~@2 c4 ~ d4@2 c4 ~ eb4@15 ~@6, ~@2 d4 ~@13]/2",
})).s("gm_piano").gain(0.25).pan(0.8)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A B A B C D C E F G H I C D C E F G H J A B A B C D C E F G H I K L M N O P Q R C D C E F G H I K L M N O S Q R C D
  C T F G H I A U A B V@5
>`.pickRestart({
  A: "eb2@2 bb1 g1", B: "ab1@8 bb1@5 ~ bb1@2", C: "eb2 d2 c2 bb1", D: "ab1@4 eb2@2 ~ bb1",
  E: "a1@4 f1@4 bb1@3 ~ bb1@2 ab1@2", F: "g1 b1 c2@2", G: "d2@2 eb2 g1", H: "ab1 f1", I: "bb1@4 eb2@3 ~",
  J: "bb1@3 bb1 eb2@3 ~", K: "bb1", L: "c2@6 ~ c2", M: "d2@6 ~ d2", N: "eb2@6 ~ f1", O: "g1@6 ~ g1", P: "c2",
  Q: "f1@15 ~", R: "bb1@6 ~ bb1", S: "c2@7 ~", T: "a1@2 f1@2 bb1@2 bb1 ab1", U: "ab1@8 bb1@7 ~",
  V: "[eb2@7 bb1@4 g1@4 ab1@7 bb1@4 ~@3 eb2@8 bb1@3 g1@4 ab1@7 ~ bb1@4 ~ bb1@2 eb2@15 ~@6, ~@14 bb1 ~@25]/5",
})).s("gm_acoustic_bass").gain(0.5)

// drums · kick
const kick = s("bd").struct(`<
  [x!4]!69
  [x ~@3 x ~@2 x ~@3 x ~@3 x]
  [~@2 x ~@3 x ~@3 x ~@2 x ~@2]
  [~ x ~@3 x ~@2 x ~@3 x ~@3]
  [x ~@3 x ~@2 x ~@3 x ~@4]
  ~
>`).gain(0.22)

// drums · snare
const snare = s("sd").struct(`<
  [~ x ~ x ~ x ~ x]!69
  [~@2 x ~@3 x ~@2 x ~@3 x ~@2]
  [~ x ~@2 x ~@3 x ~@3 x ~@2 x]
  [~@3 x ~@3 x ~@2 x ~@3 x ~]
  [~@2 x ~@2 x ~@3 x ~@6]
  ~
>`).gain(0.2)

stack(piano, bass, kick, snare)

More by Billy Joel