Strudelify
We Didn't Start the Fire cover art

1989 · Storm Front

We Didn't Start the Fire

Billy Joel

KeyG majorTempo146 bpm
0:00/0:00
// We Didn't Start the Fire — Billy Joel
// 146 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "ROUND BAS" fretless bass (copy of ch 4 "EDGY BASS" synth bass 1)
// note: Full arrangement: all 157 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(146/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 · pad warm · "SYNTH RHY"
const pad_warm = note(`<
  A@2 ~@2 B C D E F G D E H I J K H I J L B C D E H I J K H I M N B C D E F G D E H I J K H I J K H I J K H I J O B C D
  E F G D E P Q R C P Q R G ~@2 H I J K H I J O B C D E F G D E H I J K H I J K H I J S B C D E F G D E H I J K H I J K
  H I J K H I T ~ B C D E F G D E B C D E F G D E B C D E F G D E F G D E U@3
>`.pickRestart({
  A: "[~ c5@2 ~]/2", B: "[d4,g4,d5]", C: "[d4,a4,d5]@15 ~", D: "[e4,b4,e5]", E: "[c4,g4,c5]", F: "[d4,g4,d5]@15 ~",
  G: "[d4,a4,d5]", H: "~@2 g4 ~@3 g4 ~", I: "~@2 d4 ~@3 d4 ~", J: "~@2 e4 ~@3 e4 ~", K: "~@2 c4 ~@3 c4 ~",
  L: "~@4 c4 ~@3 c4@2 ~@2 c4@2 ~@2", M: "~@4 e4@2 ~@6 e4 ~@3", N: "~@4 c4@2 ~@2 c4 ~@3 c4@2 ~@2",
  O: "~@4 c4 ~@3 c4 ~@3 c4@2 ~@2", P: "[c4,g4,c5]@15 ~", Q: "[a3,e4,a4]@15 ~", R: "[b3,e4,b4]@15 ~", S: "c4 ~@7",
  T: "e4 ~@7", U: "[[e4,g4,d5]@4 ~@2 [c4,g4,c5]@5 ~@2 e3@27 ~@8, ~@4 [b3,e4]@9 ~@3]/3",
})).s("gm_pad_warm").gain(0.1)

// bass · synth bass 1 · "EDGY BASS"
const bass = note(`<
  A@2 ~@2 B@2 C D B@2 C D E F G H I J K L B@2 C D E F G H I J K L B@2 C D B@2 C D E M G H E F G H E F G N I J K L B@2 C
  D B@2 C D O P Q R S T U V ~@2 E F G H W J K X B Y C D B Z C D E F G H E F G H E F G AA B@2 C D Y B C D E F G H E F G H
  E F G N E F AB ~ B@2 C D B Y C D Y B C D B@2 C D Z B C D B@2 AC D B@2 C AD AE@3
>`.pickRestart({
  A: "[~ c5@2 ~]/2", B: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 d2 ~", C: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  D: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", E: "g2 ~ g2 ~ g3@2 ~@2 g2 ~ g2@2 g3@2 ~@2",
  F: "d3 ~ d3 ~ d4@2 ~@2 d3 ~ d3 ~ d4@2 ~@2", G: "e3 ~ e3@2 e4@2 ~@2 e3 ~ e3@2 e4@2 ~@2",
  H: "c3 ~ c3 ~ c4@3 ~ c3 ~ c3 ~ c4@3 ~", I: "g2 ~ g2@2 g3@3 ~ g2 ~ g2@2 g3@3 ~",
  J: "d3 ~ d3@2 d4@3 ~ d3 ~ d3@2 d4@3 ~", K: "e3 ~ e3@2 e4@3 ~ e3 ~ e3@2 e4@2 ~@2",
  L: "c3 ~ c3@2 c4@2 ~@2 c4@2 ~@2 c4@3 ~", M: "d3 ~ d3 ~ d4@2 ~@2 d3 ~ d3@2 d4@2 ~@2",
  N: "c3 ~ c3 ~ c4@3 ~ c3 ~ c3@2 c4@3 ~", O: "c3 ~ c3 ~ c4@3 ~ c3 ~ c3 ~ c4@2 ~@2",
  P: "a2 ~ a2@2 a3@3 ~ a2 ~ a2@2 a3@3 ~", Q: "e2 ~ e2@2 e3@3 ~ e2 ~ e2@2 e3@2 ~@2",
  R: "d2 ~ d2@2 d3@3 ~ d2 ~ d2@2 d3@2 ~@2", S: "c3 ~ c3@2 c4@2 ~@2 c3 ~ c3@2 c4@2 ~@2",
  T: "a2 ~ a2@2 a3@2 ~@2 a2 ~ a2@2 a3@2 ~@2", U: "e2 ~ e2@2 e3@3 ~ e2 ~ e2 ~ e3@3 ~",
  V: "d2 ~ d2@2 d3 ~ d3@2 d2 ~ d2@2 d3@3 ~", W: "g2 ~ g2@2 g3@2 ~@2 g2 ~ g2@2 g3@3 ~",
  X: "c3 ~ c3@2 c4@2 ~@2 c3@2 c3@2 c3@2 c3@2", Y: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  Z: "d2 ~ d2 ~ d2 ~ d2 ~ d2@2 d2 ~ d2@2 d2 ~", AA: "c3@3 ~@13", AB: "e3@3 ~@13",
  AC: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 e2 ~", AD: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ d3@2 e3 ~",
  AE: "[g3 ~ c3 a2@2 g2 e2@14 ~@4, ~ e3 ~@22, ~@3 d3@2 ~@43]/3",
})).s("gm_synth_bass_1").gain(0.56)

// other · electric guitar jazz · "GUITAR LI"
const electric_guitar_jazz = note(`<
  A@2 ~@10 B C D E B C D F ~@4 B C D E B C D F ~ G ~ H I G ~ H B C D E B C D E B C D E B C D F ~ J ~ H I G ~ H ~@8 K@2 B
  C D E B C D F ~ J ~ H I G ~ H B C D E B C D E B C D L ~ J ~ H I G ~ H B C D E B C D E B C D E B C M ~@2 G ~ H I G ~ H
  ~ J ~ H I G ~ H ~ J ~ H I G ~ H ~ G ~ H N@3
>`.pickRestart({
  A: "[~ c4@2 ~]/2", B: "~@2 g3 ~@3 g3 ~", C: "~@2 d3 ~@3 d3 ~", D: "~@2 e3 ~@3 e3 ~", E: "~@2 c3 ~@3 c3 ~",
  F: "~@2 c3 ~ c3 ~ c3 ~", G: "~@2 g4 ~ a4 ~ g4 ~", H: "~@2 c5 ~ b4 c5 a4 g4", I: "d4 ~",
  J: "~@4 g4@2 ~@2 a4@2 ~@2 g4@3 ~", K: "e5@2 ~@4 d5@2 ~@4 c5@2 a4 ~", L: "c3 ~@7", M: "e3 ~@7",
  N: "[g4@2 e4 ~ c4@2 a3@4 g3@2 e3@28 ~@8, ~@3 d4@2 ~@43]/3",
})).s("gm_electric_guitar_jazz").gain(0.15)

// chords · acoustic guitar nylon · "GUITAR RH"
const acoustic_guitar_nylon = note(`<
  A@2 ~@2 B C D E B C D E F G H I J K L M B C D E F G N I J K O M P C D E B C D E F G H I F G N I F G N I J K O M B C D
  E B C D E Q R S T Q R S T ~@2 F G N I J K O M B C D E B C D E F G N I F G N I F G H U B C D E P C D E F G N I F G N I
  F G N I F G V ~ B C D E B C D E B C D E B C D E B C D E B C D E B C D E W@3
>`.pickRestart({
  A: "[~ c4@2 ~]/2", B: "[d3,g3,d4]@3 ~ [d3,g3,d4] ~ [d3,g3,d4] ~ [d3,g3,d4]@3 ~ [d3,g3,d4] ~ [d3,g3,d4]@2",
  C: "~@2 [d3,g3,d4] ~@9 [d3,g3,d4] ~ [d3,g3,d4] ~", // G5
  D: "[b2,e3,b3]@3 ~ [b2,e3,b3] ~ [b2,e3,b3]@5 ~ [b2,e3,b3] ~ [b2,e3,b3] ~", // E5
  E: "[c3,g3,c4]@3 ~ [c3,g3,c4] ~ [c3,g3,c4]@5 ~ [c3,g3,c4] ~ [c3,g3,c4] ~", // C5
  F: "[d3,g3] ~ [d3,g3] ~@5 [d3,g3] ~ [d3,g3] ~@5", G: "[d3,a3] ~ [d3,a3] ~@5 [d3,a3] ~ [d3,a3] ~@5",
  H: "[e3,b3] ~ [e3,b3]@2 ~@4 [e3,b3] ~ [e3,b3] ~@5", I: "[c3,g3] ~ [c3,g3]@2 ~@4 [c3,g3] ~ [c3,g3]@2 ~@4",
  J: "[d3,g3] ~ [d3,g3]@2 ~@4 [d3,g3] ~ [d3,g3]@2 ~@4", K: "[d3,a3] ~ [d3,a3]@2 ~@4 [d3,a3] ~ [d3,a3]@2 ~@4",
  L: "[e3,b3] ~ [e3,b3]@2 ~@4 [e3,b3] ~ [e3,b3]@2 ~@4", M: "[c3,g3] ~ [c3,g3] ~@3 [c3,g3] ~ [c3,g3]@3 ~ [c3,g3]@4",
  N: "[e3,b3] ~ [e3,b3] ~@5 [e3,b3] ~ [e3,b3] ~@5", O: "[e3,b3] ~ [e3,b3] ~@5 [e3,b3] ~ [e3,b3]@2 ~@4",
  P: "[d3,g3,d4]@3 ~ [d3,g3,d4] ~ [d3,g3,d4] ~ [d3,g3,d4]@2 ~@2 [d3,g3,d4] ~ [d3,g3,d4]@2", // G5
  Q: "[c3,g3,c4]@3 ~ [c3,g3,c4]@3 ~ [c3,g3,c4] ~ [c3,g3,c4] ~ [c3,g3,c4]@3 ~", // C5
  R: "[a2,e3,a3]@3 ~ [a2,e3,a3]@3 ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3]@3 ~", // A5
  S: "[b2,e3,b3]@3 ~ [b2,e3,b3]@2 ~@2 [b2,e3,b3] ~ [b2,e3,b3] ~ [b2,e3,b3]@2 ~@2", // E5
  T: "[d3,a3,d4]@3 ~ [d3,a3,d4]@2 ~@2 [d3,a3,d4] ~ [d3,a3,d4] ~ [d3,a3,d4]@3 ~", U: "[c3,g3] ~@15", V: "[e3,b3] ~@15",
  W: "[[e3,g3,d4]@4 ~@2 [c3,g3,c4]@5 ~@2 e2@27 ~@8, ~@4 [b2,e3]@9 ~@3]/3", // Em7 C5 E5
})).s("gm_acoustic_guitar_nylon").gain(0.1)

// chords · lead 5 charang · "FANTASY P"
const lead_5_charang = note(`<
  A@2 ~@2 B C D E F G D E ~@8 B C D E ~@8 B C D E F G D E ~@16 B C D E F G D E ~@18 B C D E F G D E ~@12 B C D E F G D E
  ~@16 B C D E F G D E B C D E F G D E B C D E F G D E F G D E H@3
>`.pickRestart({
  A: "[~ c4@2 ~]/2", B: "[d3,g3,d4]", C: "[d3,a3,d4]@15 ~", D: "[e3,b3,e4]", E: "[c3,g3,c4]", F: "[d3,g3,d4]@15 ~",
  G: "[d3,a3,d4]", H: "[[g3,e4,g4]@6 [g3,g4]@5 ~ [g3,d4,g4]@24 ~@12, ~ c4 ~@6]/3",
})).s("gm_lead_5_charang").gain(0.11)

// other · synth drum · "SNARE MID"
const synth_drum = note(`<
  A@2 ~@2 B@2 C D B@2 C D ~@8 B@2 C D ~@8 B@2 C D B@2 C D ~@16 B@2 C D B@2 C D ~@18 B@2 C D B@2 C D ~@12 B@2 C D B@2 C D
  ~@16 B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D E ~@2
>`.pickRestart({
  A: "[~ c5@2 ~]/2", B: "[d6@3 ~ d6 ~ d6 ~ e6@4 g6 ~ a6@4 b6 ~@9 e6 ~ g6 ~]/2", C: "a6@4 b6 ~ a6@4 g6 ~ e6 ~ d6 ~",
  D: "a6@4 b6 ~ a6@4 g6 ~ e6 ~@3", E: "e6 ~@5 c6@2 ~@4 d6@2 ~@2",
})).s("gm_synth_drum").gain(0.13)

// drums · kick
const kick = s("bd").struct("<~@12 [x ~@6 x!2 ~ x ~@3 x ~]!50 ~@95>").gain(0.11)

// drums · snare
const snare = s("sd").struct("<~@12 [~ x ~ x]!50 ~@95>").gain(0.16)

// drums · hihat
const hihat = s("hh").struct("<~@12 [x!8]!50 ~@95>").gain(0.13)

// drums · crash
const crash = s("cr").struct("<~@4 A@8 ~@50 A@10 ~@2 A@3 B A@3 C A@19 D A@22 ~@2 A@28 E ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@2 x ~ x!4", D: "x", E: "x ~ x!2 ~ x!2 ~",
})).gain(0.05)

stack(
  pad_warm, bass, electric_guitar_jazz, acoustic_guitar_nylon, lead_5_charang, synth_drum, kick, snare, hihat, crash
)

More by Billy Joel