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, A@4 for four bars: edit a riff to change every repeat.

// chords · pad warm · "SYNTH RHY"
const pad_warm = note(`<
  A@2 ~@2 B C D E B C D E F G H I F G H J B C D E F G H I F G H J B C D E B C D E F G H I F G H I F G H I F G H J B C D
  E B C D E@2 K L C M K L C ~@2 F G H I F G H J B C D E B C D E F G H I F G H I F G H N B C D E B C D E F G H I F G H I
  F G H I F G O ~ 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 P@3
>`.pickRestart({
  A: "[~ c5@2 ~]/2", B: "[d4,g4,d5]", C: "[d4,a4,d5]@15 ~", D: "[e4,b4,e5]", E: "[c4,g4,c5]", F: "~@2 g4 ~@3 g4 ~",
  G: "~@2 d4 ~@3 d4 ~", H: "~@2 e4 ~@3 e4 ~", I: "~@2 c4 ~@3 c4 ~", J: "~@4 c4 ~@3 c4 ~@3 c4@2 ~@2",
  K: "[a3,e4,a4]@15 ~", L: "[b3,e4,b4]@15 ~", M: "[c4,g4,c5]@15 ~", N: "c4 ~@7", O: "e4 ~@7",
  P: "[[e4,g4,d5]@4 ~@2 [c4,g4,c5]@5 ~@2 e3@27 ~@8, ~@4 [b3,e4]@9 ~@3]/3", // Em7 C5 E5
})).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 G K B@2 C D E F G H I J G K B@2 C D B@2 C D E F G H E F G H E F G H I J G K B@2 C
  D B@2 C D H L M N H L M O ~@2 E F G H I J G P B@2 C D B@2 C D E F G H E F G H E F G Q B@2 C D B@2 C D E F G H E F G H
  E F G H E F R ~ 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 S T@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: "c3 ~ c3@2 c4@2 ~@2 c4@2 ~@2 c4@3 ~",
  L: "a2 ~ a2@2 a3@3 ~ a2 ~ a2@2 a3@3 ~", M: "e2 ~ e2@2 e3@3 ~ e2 ~ e2@2 e3@2 ~@2",
  N: "d2 ~ d2@2 d3@3 ~ d2 ~ d2@2 d3@2 ~@2", O: "d2 ~ d2@2 d3 ~ d3@2 d2 ~ d2@2 d3@3 ~",
  P: "c3 ~ c3@2 c4@2 ~@2 c3@2 c3@2 c3@2 c3@2", Q: "c3@3 ~@13", R: "e3@3 ~@13",
  S: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ d3@2 e3 ~", T: "[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 ~ G ~ H I G ~ H ~@8 J@2 B
  C D E B C D F ~ G ~ H I G ~ H B C D E B C D E B C D K ~ G ~ H I G ~ H B C D E B C D E B C D E B C L ~@2 G ~ H I G ~ H
  ~ G ~ H I G ~ H ~ G ~ H I G ~ H ~ G ~ H M@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: "e5@2 ~@4 d5@2 ~@4 c5@2 a4 ~", K: "c3 ~@7", L: "e3 ~@7",
  M: "[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 F G H J B C D E F G H I F G H J K C D E B C D E F G H I F G H I F G H I F G L J B C D
  E B C D E M N O P M N O P ~@2 F G H I F G L J B C D E B C D E F G H I F G H I F G H Q B C D E K C D E F G H I F G H I
  F G H I F G R ~ 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 S@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] ~@5 [e3,b3] ~ [e3,b3] ~@5", I: "[c3,g3] ~ [c3,g3]@2 ~@4 [c3,g3] ~ [c3,g3]@2 ~@4",
  J: "[c3,g3] ~ [c3,g3] ~@3 [c3,g3] ~ [c3,g3]@3 ~ [c3,g3]@4", // C5
  K: "[d3,g3,d4]@3 ~ [d3,g3,d4] ~ [d3,g3,d4] ~ [d3,g3,d4]@2 ~@2 [d3,g3,d4] ~ [d3,g3,d4]@2", // G5
  L: "[e3,b3] ~ [e3,b3] ~@5 [e3,b3] ~ [e3,b3]@2 ~@4", // E5
  M: "[c3,g3,c4]@3 ~ [c3,g3,c4]@3 ~ [c3,g3,c4] ~ [c3,g3,c4] ~ [c3,g3,c4]@3 ~", // C5
  N: "[a2,e3,a3]@3 ~ [a2,e3,a3]@3 ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3]@3 ~", // A5
  O: "[b2,e3,b3]@3 ~ [b2,e3,b3]@2 ~@2 [b2,e3,b3] ~ [b2,e3,b3] ~ [b2,e3,b3]@2 ~@2", // E5
  P: "[d3,a3,d4]@3 ~ [d3,a3,d4]@2 ~@2 [d3,a3,d4] ~ [d3,a3,d4] ~ [d3,a3,d4]@3 ~", Q: "[c3,g3] ~@15", R: "[e3,b3] ~@15",
  S: "[[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 B C D E ~@8 B C D E ~@8 B C D E B C D E ~@16 B C D E B C D E ~@18 B C D E B C D E ~@12 B C D E B C D E
  ~@16 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 F@3
>`.pickRestart({
  A: "[~ c4@2 ~]/2", B: "[d3,g3,d4]", C: "[d3,a3,d4]@15 ~", D: "[e3,b3,e4]", E: "[c3,g3,c4]",
  F: "[[g3,e4,g4]@6 [g3,g4]@5 ~ [g3,d4,g4]@24 ~@12, ~ c4 ~@6]/3", // C G G5
})).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