Strudelify

Paper in Fire

John Mellencamp

KeyB majorTempo142 bpm
0:00/0:00
// Paper in Fire — John Mellencamp
// 142 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "Vocals" electric bass pick (copy of ch 3 "Vocals" overdriven guitar)
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(142/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: edit a riff to change every repeat.

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A@3 B A@3 C A@3 B A@3 C A@3 B A@3 D A E A@2 F G D H I@2 J@4 K L M N A@3 B A@3 D A E A@2 F G D H I@2 J@4 K L O P Q@2
  R@2 S@2 T@2 U@5 V@8 W@4 X@5 Y@6 Z@4 AA@6 AB@4 AC@7 V@8 AD@3
>`.pickRestart({
  A: "b2!8", B: "b2!3 a2 b2!2 f#2 a2", C: "b2!4 f#2 a2 b2 a2", D: "b2!7 a2", E: "c#3!8", F: "a2@11 ~ a2@3 ~",
  G: "e2@7 ~ e2@7 ~", H: "f#3!2 e3 d3 b2!4", I: "[d3@5 ~ d3@2 d3@3 ~ d3@2 b2@7 ~ b2@2 b2@2 b2@2 b2@2 a2@2]/2",
  J: "[a2@5 ~ a2@2 a2@3 ~ a2@2 e2@7 ~ e2@2 e2@2 e2@2 e2@2 g#2@2]/2", K: "a2@15 ~", L: "e3!8",
  M: "b2@5 ~ a2@2 b2@2 b2@2 b2@2 a2@2", N: "b2!6 f#2 a2", O: "b2@2 b2@3 ~ b2@2 b2@2 b2@3 ~ b2@2",
  P: "b2@2 b2@3 ~ b2@2 b2@2 b2@2 b2@2 b2@2",
  Q: "[d3@3 ~ d3@3 ~ d3@2 d3@2 d3@2 b2@4 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 a2@2]/2",
  R: "[d3@3 ~ d3@3 ~ d3@2 d3@2 d3@2 e3@4 e3@2 e3@3 ~ e3@2 e3@2 e3@2 b2@2]/2",
  S: "[d3@3 ~ d3@3 ~ d3@2 d3@2 a2@2 b2@4 b2@2 b2@3 ~ b2@2 b2@2 b2@2 b2@2]/2",
  T: "[e2@3 ~ e2@7 ~@11 d3@7 ~ a2@2, ~@7 a2@8 ~]/2",
  U: "[b2!3 ~ b2!3 ~ b2!6 f#2 ~ b2!8 b2!8 b2!8, ~@3 a2@4 a2@8 a2@25]/5",
  V: "[b2!6 f#2 ~ b2!8 b2!8 b2!8 b2!6 f#2 ~ b2!8 b2!8 b2!8, ~@7 a2@32 a2@25]/8",
  W: "[b2!3 ~ b2!2 f#2 ~ b2!8 b2!8 b2!8, ~@3 a2@4 a2@25]/4", X: "[b2!7 ~ b2!8 c#3!8 b2!8 b2!8, ~@7 a2@33]/5",
  Y: "[a2@12 ~@4 e2@7 ~ e2@7 ~ b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 ~@2 f#3@2 f#3@2 e3@2 d3@2 b2@2 b2@2 b2@2 b2@2 d3@5 ~ d3@2 d3@3 ~ d3@2 b2@7 ~ b2@2 b2@2 b2@2 b2@2 a2@2, ~@6 a2@17 a2@24 ~]/6",
  Z: "[a2@6 a2@2 a2@4 ~@2 e2@7 ~ e2@2 e2@2 e2@2 e2@2 g#2@2, ~@3 a2@5]/2",
  AA: "[~@16 e3@2 e3@2 e3@2 e3@2 e3@2 e3@2 e3@2 ~@2 b2@2 b2@3 ~ b2@2 b2@2 b2@3 ~ b2@2 f#3@2 f#3@2 e3@2 d3@2 b2@2 b2@2 b2@2 b2@2 d3@5 ~ d3@2 d3@3 ~ d3@2 b2@4 b2@3 ~ b2@2 b2@3 ~ b2@2 f#2@2, a2@5 a2@11]/6",
  AB: "[a2@6 a2@2 a2@4 ~@2 e2@7 ~ e2@2 e2@2 e2@2 e2@2 a2@8 a2@2 a2@2 a2@2 ~@2 e2@7 ~ e2@2 e2@7 ~, ~@6 a2@9 ~@7 a2@10]/4",
  AC: "[~@16 e2@15 ~ b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 ~@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2, a2@31 a2@25]/7",
  AD: "[b2!6 f#2 ~ b2 ~@15, ~@7 a2@17]/3",
})).s("gm_acoustic_bass").gain(0.72)

// drums · rim
const rim = s("rim").struct("<A@7 B A@7 B A@8 C A@25 C A@29 D A@5 E A@7 C A@29 F A B A F A@3 F G ~@3>".pickRestart({
  A: "x!4", B: "x ~@3 x ~ x!2 ~@2 x!3 ~@3", C: "x ~@3 x ~@5 x!3 ~@3", D: "x ~@3 x ~@3 x ~ x!2 ~@4",
  E: "x ~@3 x ~@3 x!5 ~@3", F: "x ~@3 x ~ x!3 ~@3 x ~@3", G: "x",
})).gain(0.72)

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

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~ A@6 B A@7 B A@8 C A@25 C A@29 D A@5 E A@7 C A@29 F A B A F A@3 F G ~@3
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~@2 x ~@2 x", C: "~ x ~ x!2 ~@2 x", D: "~@2 x ~@3 x ~@8 x", E: "~ x ~ x ~@3 x",
  F: "~ x ~@3 x ~ x", G: "~ x ~@3 x ~@2",
})).gain(0.72)

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

stack(bass, rim, snare, pedal_hat, crash)

More by John Mellencamp