Strudelify
Should I Stay or Should I Go cover art

1982 · Combat Rock

Should I Stay or Should I Go

The Clash

KeyD majorTempo115 bpm
0:00/0:00
// Should I Stay or Should I Go — The Clash
// 115 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 · piano
const piano = note("<~@32 A B@2 C D E F G@2 H ~@25 A B@2 C D E F I@2 H ~>".pickRestart({
  A: "d2@2 ~@4 d4@2 g2@2 ~ d4 ~@2 g3 b3, a3@3 [d2,d4]@2 f#4@5 ~@3 g4@3, ~@2 d3@4 d3 ~@5 [g2,b3]@3 ~, ~@2 f#4@2 a3@2 ~@2 a3 ~ [g3,b3,g4]@3 ~ d4@2", // D G
  B: "[d2@2 a3 ~ d2 ~ d3 ~ a3@2 d3 ~ d2 f#4 d4 a3 d2 ~ [d3,a3] ~ d2 ~ d3 d4 g2@2 b3 d4 g2 ~ [g3,d4] b3, ~@2 d3@4 ~@2 d2 ~@12 a3@2 ~ a3 ~ g3@4 ~@2, ~@2 f#4@2 a3@3 ~@4 d4@2 ~@5 f#4@2 ~ f#4@4 ~ g4@2 ~ g4@3, ~@3 d4@2 f#4@3 ~@2 f#4@2 a3@2 d3@4 ~ d4@3 ~@6 b3@2 ~@2]/2", // D5 G5
  C: "d2@2 a3 ~ d2!2 ~@2 d2 ~ d3 ~ d2 f#4 [d3,d4] [a3,f#4], ~@2 [d3,f#4]@2 a3@7 d4@2 ~@3, ~@3 d4@2 f#4@3 ~@2 f#4@2 ~@4, ~@3 d3@2 ~ a3 ~", // D
  D: "g2@2 b3 d4 ~@2 d4 b3 f2@2 a3 ~ f2 ~ f3 c4, ~@2 [g3,g4]@2 [g2,b3]@3 ~@3 f4@2 ~@4, ~@5 [g3,g4]@2 ~@3 f3@4 ~@2, ~@11 c4@2 [a3,f4]@2 ~", // G Dm
  E: "g2@2 ~@2 g2 ~ g3 ~ [g2,b3]@2 ~@2 g2 ~ [g3,d4] b3, a3 ~ [g3,g4]@4 ~@4 [g3,g4]@4 ~@2, ~@2 b3@2 ~ [b3,g4]@3 ~@5 [b3,g4]@3, ~@3 d4@2 ~@6 d4@2 ~@3", // G G5 G Em
  F: "[d2,d3]@2 ~ d4 d2 ~ [d3,d4] a3 [g2,g3]@2 b3 g3 ~@2 [g3,d4] b3, ~@2 d3@3 f#4@3 ~@2 g4@2 g2@3 ~, ~@2 f#4@2 a3@2 ~@5 d4@2 g4@2 ~", // D G G5
  G: "[[d2,d3]@2 a3 ~ d2 f#4 [d3,d4] a3 d2@2 [d3,a3,f#4] ~@2 f#4 [d3,d4] ~ a1@2 ~ e4 a1 ~ [b1,a2,e4] a3 a4 e4 ~ a4 [a1,e4] ~ [a2,e4,g4,a4] ~, ~@2 d3@4 ~@6 d2@2 ~@2 a2 ~ [a2,a3]@5 ~ a1@2 a2@4 ~@2, ~@2 f#4@2 a3@2 ~@7 a3@2 a3@3 ~@2 c#4@2 ~@4 a3@2 ~ a3@2 ~, ~@3 d4@2 ~@6 d4@2 ~@5 a4@3 a4@2 ~@9]/2", // D Esus4 A5 A7 A
  H: "[a2,a4] ~@7, [a3,e4] ~@15", // A A5
  I: "[[d2,d3]@2 a3 ~ d2 f#4 [d3,d4] a3 d2@2 [d3,a3,f#4] ~@2 f#4 [d3,d4] ~ a1@2 ~ e4 a1 ~ [b1,a2,e4] a3 ~ e4 ~ a4 [a1,e4] ~ [a2,e4,g4,a4] ~, ~@2 d3@4 ~@6 d2@2 ~@2 a2 ~ [a2,a3]@5 ~ [a1,a4]@2 a2@4 ~@2, ~@2 f#4@2 a3@2 ~@7 a3@2 a3@3 ~@2 c#4@2 ~@4 a3@2 ~ a3@2 ~, ~@3 d4@2 ~@6 d4@2 ~@5 a4@3 a4@2 ~@9]/2", // D Esus4 A5 A7 A
})).s("gm_piano").gain(0.27).pan(0.3)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@4 A B C B C B C B D E A F G H C B C B C B D E A F I H C B J K L M N O P Q R S B C B C B T E A F I H C B C B C B T E
  A F I H C B J K L M N O P Q R U F
>`.pickRestart({
  A: "~@2 d2@2 d2 ~ d2@2 g1 ~ g1@2 a1@2 b1@2", B: "d2@3 ~@13", C: "~@2 d2@2 d2 ~ a1@2 g1 ~ g1@2 a1@2 b1@2",
  D: "~@2 g1 ~ g1 ~ g1@2 f1 ~ f1 ~ f1@2 f1@2", E: "g1@3 ~@13", F: "d2 ~@7", G: "~@2 a1@2 a1@2 a1 ~ a1 ~ a1@2 a1@2 a1@2",
  H: "a1 ~@7", I: "~@2 a1@2 a1@2 a1 ~ a1@2 a1@2 a1@2 a1@2", J: "d2 ~ d2@3 d2!2 ~ g1@2 g1@3 a1 b1@2",
  K: "d2 ~ d2@3 d2@3 d2 ~ d2@3 a1 b1@2", L: "d2 ~ d2@3 b1 a1@2 g1@2 g1@3 a1 b1@2",
  M: "d2 ~ d2@2 ~ d2@3 d2@2 d2 d2@2 d2@3", N: "g1@2 g1@3 ~ g1@2 f1@2 ~ f1@3 f1@2",
  O: "g1@2 ~ g1@2 ~ g1@2 g1@2 ~ g1@3 a1 b1", P: "d2@2 ~ d2@3 d2@2 g1@2 ~ g1@3 a1 b1",
  Q: "d2@2 ~ d2@3 d2@2 d2@2 ~ d2@2 ~ d2@2", R: "a1 ~ a1 ~ a1 ~ a1@2 a1 a1@2 ~ a1 ~ a1 ~",
  S: "a1@2 d2@2 d2 ~ d2@2 g1 ~ g1@2 a1@2 b1@2", T: "~@2 g1 ~ g1 ~ g1@2 f1@2 f1 ~ f1@2 f1@2",
  U: "~@2 d2 ~ d2 ~ d2@2 g1 ~ g1@2 a1@2 b1@2",
})).s("gm_electric_bass_finger").gain(0.41)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  A B C D A E F G F G F G H I J G K L F G F G F G H I J G K L F G M@3 N O P Q R@2 S G F G F G H I J G K L F G F G F G H
  I J G K L F G M@3 N O P Q R@2 T U
>`.pickRestart({
  A: "~@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4] ~ [g3,b3,d4,g4]@2", // D G
  B: "[d3,a3,d4,f#4]@3 ~ [a#3,c4] d#4 ~@2 [a#3,c4] d#4 ~@2 [a#3,c4] d#4 ~@2", // D A#sus2
  C: "~@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,f#4]@2 [g3,b3,g4]@2 g4@2 g4 ~ [g3,b3,d4,g4]@2, ~@3 d4@2 [g3,b3,d4]@2 ~", // D G
  D: "[d3,a3,d4,f#4]@3 ~@5 a4 c5 ~@6", E: "[d3,a3,d4,f#4] ~@7",
  F: "~@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [b3,d4,g4] ~ [b3,d4,g4]@2, ~@3 g3", // D G
  G: "[d3,a3,d4,f#4]@3 ~@13", // D
  H: "~@2 [g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]@2 [f3,c4,f4,g4] ~ [f3,c4,f4,g4]@2 [f3,c4,f4,g4] ~ [f3,c4,f4,g4]@2", // G5 Fsus2
  I: "[g3,d4,g4] ~@7", // G5
  J: "~@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4] ~ [g3,b3,d4,g4]@2", // D G
  K: "~@2 [a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4] ~ [a3,e4,a4] ~ [a3,e4,a4] ~ [a3,e4,a4]@2", // A5
  L: "[a3,e4,g4] ~@7", M: "[a3@8 g2@8 a3@15 ~ a3@8 g2@8, d3]/3", N: "a3, d3 ~@15", O: "g2 [f2,c3]", P: "[g2,d3]@7 a2",
  Q: "[d3,a3]@8 a2 g2@7, [b2,g3] ~@15", R: "[d3@16 a2@13 a2 a3 a2, a3@15 ~, ~ e3]/2",
  S: "[a2,a3]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2", // A D G
  T: "~@2 [d3,f#3,a3,d4,f#4] f3 [d3,f#3,a3,d4,f#4] ~ [d3,f#3,a3,d4,f#4]@2 [d3,g3,b3,d4,f#4,g4]@2 [d3,g3,b3,d4,f#4,g4] ~ [d3,g3,b3,d4,f#4,g4] ~ [d3,g3,b3,d4,g4] ~", // D Gmaj7 G
  U: "[d3,f#3,g3,a3,d4,f#4] ~@7", // D
})).s("gm_overdriven_guitar").gain(0.19)

// chords · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note("<~@32 A B C D E F G H I J ~@16 K L ~@2 M ~@4 A B C D E F G H I J ~>".pickRestart({
  A: "~@2 [a2,d3,f#3]@3 ~ [a2,d3,f#3]@2 ~@2 [b2,d3,g3]@3 ~ [b2,d3,g3]@2, ~@5 d2@3 g1@4 ~ g1@3", // D G
  B: "~@2 [a2,d3,f#3]@3 d2 a2@2 d2@2 ~@5 d3, d2@2 ~ [d3,f#3]@2 a2 g3 a2, ~@11 d2@2 d3@2 ~", // D
  C: "~@2 [a2,d3,f#3]@3 [d2,a2] [d3,f#3]@2 ~@2 [b2,d3,g3]@3 ~ [d3,g3]@2, d2@4 ~@4 g1@4 ~ [g1,b2]@3", // D D5 D G G5 G
  D: "~@2 [a2,d3,f#3]@3 d2 [a2,d3,f#3]@2 d2 ~@4 d2 ~ [d3,f#3], d2@5 ~@5 a2@2 f#3@2 ~@2, ~@11 d3@2 ~ a2@2", // D
  E: "~@2 [g2,b2,d3,g3]@3 ~ [b2,d3,g3]@2 ~@2 [a2,c3,f3]@3 ~ [a2,c3,f3]@2, g1@7 ~ f1@7 ~, ~@13 f2@3", // G F
  F: "~@2 [g2,b2,d3,g3]@3 ~@2 g2 ~@2 [b2,d3,g3]@3 g2 [b2,d3,g3]@2, g1!2, ~@3 g3@2 ~@3, ~@3 [b2,d3] ~@4", // G Bm
  G: "~@2 [a2,d3,f#3]@3 ~ [a2,d3,f#3]@2 ~@2 [b2,d3,g3]@3 ~ [b2,d3,g3]@2, d2@4 ~ d2@3 g1@8", // D G
  H: "~@2 [a2,d3,f#3]@3 d2 [a2,d3,f#3]@2 d2 ~ [a2,d3,f#3]@3 d2 [a2,d3,f#3]@2, d2 ~@3", // D
  I: "a1@2 ~ a1 a2 ~@4 a2 ~@2 a2 ~ [e3,a3] a2, ~@2 [e3,a3]@4 ~ [e3,a3]@3 [e3,a3]@2 ~@4, ~@2 a2@2 ~@2 [a1,e3]@2 [a1,a2]@2 ~ a1@2 a1@2 ~", // A5 A
  J: "[a1,e3,a3] ~@7", K: "~@3 f3@2 ~ f3 ~ f3 ~@2 f3 ~ f3 ~@2", L: "f3 ~@7", M: "~@2 d3!3 ~@2 d3!2 f3 d3 ~@5",
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.7)

// other · brass section
const brass_section = note("<~@43 A B C D E F G B H I J K L@3 ~@9 M N O P Q R S P T U V>".pickRestart({
  A: "~@2 [d3,d4,d5] ~ [d3,d5] ~ [d4,d5]@2 [f3,f4,f5]@2 [d3,d4,d5] ~ [d4,d5]@2 [f3,c5]@2, ~@4 d4@2 d3 ~@5 d3 ~@3", // D F D F5
  B: "[d3,d4,d5] ~@7", // D
  C: "~@2 [d3,d4,d5] ~ [d4,d5] ~ [d4,d5]@2 [f3,f4,f5]@2 [d3,d5]@2 [f4,f5]@2 [f3,f4,f5]@2, ~@4 d3@2 ~@6 f3 ~@3", // D F D F
  D: "[d3,d5] ~@7, f4 ~@15", // D
  E: "~@2 [g3,g4,g5] ~ [g3,g4,g5] ~ [g3,g4,g5] ~ [f3,f4,f5] ~ [f3,f4,f5] ~ f3@2 f3@2, ~@3 f5, ~@12 f4 ~ f4 ~", // G F
  F: "[g3,g4,g5] ~@7", // G
  G: "~@2 [d3,d4,d5] ~ [d3,d4,d5] ~ [d4,d5]@2 [f3,f4,f5]@2 [d3,d4,d5] ~ [d4,d5]@2 [f3,c5]@2, ~@6 d3 ~@5 d3 ~@3", // D F D F5
  H: "~@2 [a3,a4] ~ [a3,a4] ~ [a3,a4] ~ [a3,a4] ~ [a3,a4] ~ [a3,a4] ~ [a3,a4] ~", I: "[a4,a5] ~@7, a3 ~@15",
  J: "~@4 [d3,d4,d5,f#5] ~ [d3,d4,d5,f#5] ~ [g3,d5,g5] ~ [g3,d5,g5] ~ [g3,d5,g5] ~ [g3,d5,g5]@2", // D G5
  K: "[d3,d4,d5,f#5] ~@7", L: "[[d5,e5,a5]@42 [a4,b4,c5] [b3,c4,d4,e4,f4,g4] [e3,f3,g3,a3] ~@3]/3",
  M: "~@2 [d4,d5] ~ [d4,d5] ~ [d4,d5] ~ f5@2 [d4,d5] ~ d5@2 c4@2, ~@8 f4 ~@3 d4 ~ c5 ~", N: "[d4,d5] ~@3",
  O: "~@2 [d4,d5] ~ [d4,d5] ~ [d4,d5] ~ [f4,f5]@2 [d4,d5] ~ [d4,d5]@2 [c4,c5] ~", P: "[d4,d5]@3 ~@13",
  Q: "~@2 [g4,g5] ~ [g4,g5] ~ [g4,g5] ~ [f4,f5] ~ [f4,f5] ~ [f4,f5] ~ f4@2, ~@14 f5 ~", R: "[g4,g5] ~ [g4,g5]@2 ~@12",
  S: "~@2 [d4,d5] ~ [d4,d5] ~ [d4,d5] ~ f5@2 [d4,d5] ~ [d4,d5]@2 c4@2, ~@8 f4 ~@5 c5 ~", // D
  T: "~@2 a5 ~ [a4,a5] ~ [a4,a5] ~ c6@2 [a4,a5] ~ [a4,a5]@2 g4@2, ~@8 c5 ~@5 g5 ~", // A
  U: "[a4,a5]@2 d5@2 d5 ~ d5@2 [f4,f5]@2 [d4,d5]@2 [f4,f5] ~ [f4,f5]@2, ~@2 d4 ~ d4@4 ~@8", V: "[d4,d5] ~@7",
})).s("gm_brass_section").gain(0.41)

// other · electric guitar clean · "Electric Guitar"
const electric_guitar_clean_2 = note(`<
  ~@58
  [~@4 f3@2 ~ f3 ~ f3 ~@2 f3 ~ f3 ~]
  [~ f3@2 ~@13]
  ~@2
  [~@3 d3!3 ~@2 d3!2 f3 d3 ~@4]
  ~@15
>`).s("gm_electric_guitar_clean").gain(0.36).pan(0)

// drums · kick
const kick = s("bd").struct("<~@5 A@25 B ~ C@8 D E F A@22 B ~ C@8 D ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!3 ~ x", C: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", D: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~ x",
  E: "~ x ~ x", F: "x",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@4 A B@26 C D@8 E F A B@23 C D@8 E G H>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x ~@6 x", D: "~ x ~ x ~ x ~ x", E: "~ x ~ x ~ x ~@2", F: "x!2 ~@3 x ~ x",
  G: "x!2 ~ x!5", H: "x",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@30 A ~@5 B C ~@2 B D ~@23 A ~@5 B C ~@2 B E ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~@7 x ~@4", C: "~@3 x ~@2 x ~@4 x ~@2 x ~", D: "~@3 x ~@2 x ~", E: "~ x ~ x!2 ~ x ~",
})).gain(0.41)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@5 [~@3 x ~ x ~ x] [~ x ~ x ~ x ~ x]!25 ~@12 [~ x ~ x ~ x ~ x]!23 ~@12>")
  .gain(0.23)

// drums · mid tom
const mid_tom = s("mt").struct("<~@30 A ~@5 B@2 ~@2 C A ~@23 A ~@5 B@2 ~@2 C D ~>".pickRestart({
  A: "~ x", B: "x!2", C: "x ~@3 x ~@2 x", D: "~@5 x ~@2",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct("<~@5 A ~@26 A ~@5 A ~@28 A ~@5 A ~@4>".pickRestart({
  A: "x",
})).gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("<~@20 A@11 ~ B@3 C D@2 B@2 D ~@14 A@11 ~ B@3 C D@2 B@2 D ~@2>".pickRestart({
  A: "~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~@2", D: "x!16",
})).gain(0.45)

stack(
  piano, bass, overdriven_guitar, electric_guitar_clean, brass_section, electric_guitar_clean_2, kick, snare, low_tom,
  hihat, hihat_soft, mid_tom, crash, tambourine
)

More by The Clash