Strudelify
KeyD minorTempo150 bpm
0:00/0:00
// Revolver — Rage Against the Machine
// 150 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 176 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(150/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.

// other · overdriven guitar
const overdriven_guitar = note(`<
  A B A C A B A C A B A C A B A C D@24 ~@7 E F@6 G@2 A B A C A B A C A B A C A B A C D@24 ~@7 E F@16 ~@8 A B A C A B A C
  A B A C A B A C ~@8 F@22 G@2
>`.pickRestart({
  A: "c3 db3 d3 d2 f2@2 g2@2", B: "c3@2 d3 c3 d3 f3@3", C: "c3@2 d3 c3 d3 d2@3", D: "d2/2", E: "~@3 d2!5",
  F: "[d3@2 d2@2 f2 g2 f3@4 d2@2 f2 g2 f3@4 d2@2 f2 g2 f3@4 d2@2 f2 g2 c3@2]/2",
  G: "[d3@2 d2@2 f2 g2 f3@4 d2@2 f2 g2 f3@4 d2@2 f2 g2 f3@2 ~@8]/2",
})).s("gm_overdriven_guitar").gain(0.64)

// bass · electric bass finger
const bass = note(`<
  A B A C A B A C A B A C A B A C D@6 E@2 D@6 E@2 D@8 F@8 G@6 H@2 A B A C A B A C A B A C A B A C D@6 E@2 D@6 E@2 D@8
  F@8 G@16 ~@8 A B A C A B A C A B A C A B A C D@8 ~@3 I G@18 H@2
>`.pickRestart({
  A: "c2 db2 d2 d1 f1@2 g1@2", B: "c2@2 d2 c2 d2 f2@3", C: "c2@2 d2 c2 d2 d1@3", D: "d1/2",
  E: "[~@4 d2@3 c2@2 d2@7, d1]/2",
  F: "[d2@2 d1@2 f1 g1 d1@4 d1@2 f1 g1 d1@4 d1@2 f1 g1 d1@4 d1@2 f1 g1 ~@2 d2@2 d1@2 f1 g1 d1@4 d1@2 f1 g1 d1@4 d1@2 f1 g1 d1@4 d1@2 f1 g1 ~@2 d2@2 d1@2 f1 g1 d1@4 d1@2 f1 g1 d1@4 d1@2 f1 g1 d1@4 d1@2 f1 g1 ~@2 d2@2 d1@2 f1 g1 d1@4 d1@2 f1 g1 d1@4 d1@2 f1 g1 d1@2 d1@2 d1@2 d1@2 d1@2, ~@15 d1@2 ~@14 d1@2 ~@14 d1@2 ~@15]/8",
  G: "[d2@2 d1@2 f1 g1 f2@4 d1@2 f1 g1 f2@4 d1@2 f1 g1 f2@4 d1@2 f1 g1 c2@2]/2",
  H: "[d2@2 d1@2 f1 g1 f2@4 d1@2 f1 g1 f2@4 d1@2 f1 g1 f2@2 ~@8]/2", I: "d1!8",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · electric guitar muted
const electric_guitar_muted = note("<~@144 A@6 B@2 ~@24>".pickRestart({
  A: "[~ [a3,d4]@31, d3]/2", B: "[~ a4@15, d3, ~ [a3,d4]@31]/2",
})).s("gm_electric_guitar_muted").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  A@5 B A@7 B A@2 C D C D C D C D C D C D C D C D C D C D C D C D E@7 F G H G I G H G J A@5 B A@7 B A@2 C D C D C D C D
  C D C D C D C D C D C D C D C D E@7 F G H G I G H G H K@8 L@7 M A@5 B A@7 B A@2 C ~ C ~ C ~ C ~@5 G H G I G H G H G H
  G H K@7 N
>`.pickRestart({
  A: "x ~@2 x!2 ~ x ~", B: "x ~@2 x!2 ~@3", C: "x", D: "~ x!2 ~@5", E: "~ x ~ x ~ x ~ x", F: "~ x ~@6",
  G: "x!2 ~@3 x ~@2", H: "~ x ~@3 x ~@2", I: "~ x ~ x ~ x ~@2", J: "~ x ~ x ~@4", K: "x!2", L: "x!8", M: "x!4 ~ x ~ x",
  N: "x ~@2 x ~@4",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  A@3 B A@3 C A@3 B A@3 C A@24 D@7 E F G F H F G F I A@3 B A@3 C A@3 B A@3 C A@24 D@7 E F G F H F G F G J K J K J K J K
  ~@7 L A@3 B A@3 C A@3 B A@3 C ~@10 M@2 F G F H F G F G F G F G J K J K J K J I
>`.pickRestart({
  A: "~ x", B: "~@4 x ~@2 x", C: "~@4 x!2 ~ x", D: "x!4", E: "x ~@3 x ~ x!10", F: "~@2 x!2 ~@2 x!2",
  G: "~@4 x ~ x ~@5 x ~ x!2", H: "~@4 x ~@7 x ~ x!2", I: "~ x ~@2", J: "~ x ~ x", K: "~@2 x ~@3 x!2", L: "~@2 x!2",
  M: "x!16",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~@7 C ~@7 C ~@7 C ~@17 A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~@7 C ~@7 C ~@7 C ~@31 D ~ A ~ B
  ~ A ~ A ~ A ~ B ~ A ~ A ~@32
>`.pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "~@3 x", D: "~@2 x!2",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@175 [~@3 x ~@4]>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@7 C ~@7 C ~@7 C ~@17 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@7 C ~@7 C ~@7 C ~@33 A ~ B ~ A
  ~ B ~ A ~ B ~ A ~ B ~@32
>`.pickRestart({
  A: "~@5 x!2 ~", B: "~@5 x ~@2", C: "~ x!2 ~",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@174 [x!8] [x!3 ~@5]>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@22 A ~@7 A ~@7 A ~@39 A ~@7 A ~@7 A ~@81>".pickRestart({
  A: "~@4 x ~@2 x",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  A@17 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 B@7 C A@17 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 B@8
  D@8 ~@8 A@16 ~@12 B@12 D@7 E
>`.pickRestart({
  A: "x", B: "x!8", C: "x!4 ~@4", D: "x!4", E: "x ~ x!2 ~@4",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct(`<
  A B A B A B A B A B A B A B A B C D C D C D C D C D C D C D C D C D C D C D C D ~@16 A B A B A B A B A B A B A B A B C
  D C D C D C D C D C D C D C D C D C D C D C D ~@32 A B A B A B A B A B A B A B A B E@6 F G ~@24
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~ x!3", D: "x!4", E: "x!2", F: "x", G: "x!16",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@40 [x!4]!7 [x!2 ~@2] ~@48 [x!4]!7 [x!2 ~@2] ~@72>").gain(0.64)

stack(
  overdriven_guitar, bass, electric_guitar_muted, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride,
  tambourine
)

More by Rage Against the Machine