Strudelify

The Ghost of Tom Joad

Rage Against the Machine

KeyD minorTempo150 bpm
0:00/0:00
// The Ghost of Tom Joad — Rage Against the Machine
// 150 bpm, 4/8, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 364 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · electric bass finger
const bass = note(`<
  A B C@2 A B C@2 A B C@2 A B C@2 D@8 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E
  ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 A B C@2 A B C@2 A B C@2 A B C@2 D@8 ~@8 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2
  E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~
  C@2 E ~ C@2 A B C@2 A B C@2 A B C@2 A B C@2 D@8 ~@8 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E ~ C@2 E
  ~ C@2 E ~ C@2 F@36 G@2 H@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 D@8 ~@8 I@4
>`.pickRestart({
  A: "d1 d2 c2 a1", B: "g1 f1 d1@2", C: "[c2@2 g1 a1@2 c2@3]/2", D: "d1/8", E: "d1", F: "d1 ~@3 d1 ~@3 d1 ~@3 d1 ~@3",
  G: "d1 ~ d1 ~ d1 ~ d1 ~", H: "d1!4", I: "eb1!2",
})).s("gm_electric_bass_finger").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  A B A C A B A C A B A C A B A C D ~ D ~ D ~ D ~ D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~ E
  C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ G ~ A B A C A B A C A B A C A B A C D ~ D ~ D ~ D ~ D ~ D ~ D ~
  D ~ D ~ E C D B F C D ~ D@3 ~ E C D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~
  E C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ G ~ A B A C A B A C A B A C A B A C D ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~ E C D
  B F C D ~ D@3 ~ E C D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ F ~ D ~ E C E ~ F ~ D
  ~ E C E ~ F ~ D ~ E C E ~ G ~ A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C D ~ D ~ D ~ D ~ D ~ D ~
  D ~ D ~ H ~@3
>`.pickRestart({
  A: "x ~ x!2", B: "~ x", C: "~ x ~@2", D: "x", E: "x!2", F: "x ~@2 x", G: "~ x ~ x", H: "x!2 ~@2",
})).gain(0.64)

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

// drums · hihat
const hihat = s("hh").struct("<~@20 [~@2 x!2] [x!2] x ~@341>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@16 A B@3 ~@2 A C A C@7 A C@7 A C@7 A C@7 A C@7 A C@7 A C@7 A C@6 B ~@16 A B@15 A C@3 A C@3 A C@3 A C@3 A C@7 A C@7 A
  C@7 A C@7 A C@7 A C@7 A C@7 A C@6 B ~@16 A B@15 A C@3 A C@3 A C@3 A C@3 A C@7 A C@7 A C@7 A C@7 A C@7 A C@7 A C@7 A
  C@6 B ~@33 B@15 ~@4
>`.pickRestart({
  A: "~ x", B: "x", C: "x!2",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  A@16 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@6 C A@16 B ~@15 B ~@3 B ~@3 B ~@3 B ~@3 B ~@7 B ~@7 B ~@7 B
  ~@7 B ~@7 B ~@7 B ~@7 B ~@6 C A@16 B ~@15 B ~@3 B ~@3 B ~@3 B ~@3 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@6 C
  A@32 B ~@19
>`.pickRestart({
  A: "x!2", B: "x", C: "~ x",
})).gain(0.64)

stack(bass, kick, snare, hihat, open_hat, crash)

More by Rage Against the Machine