Strudelify
Bulls on Parade cover art

1996 · Evil Empire

Bulls on Parade

Rage Against the Machine

KeyF minorTempo84 bpm
0:00/0:00
// Bulls on Parade — Rage Against the Machine
// 84 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/8 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30, guitar program 30.
setcpm(84/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · distortion guitar
const distortion_guitar = note("<~ A@8 ~@8 B@8 C D C D C D C D B@8 C D C D C D C D ~@24 A@8 ~>".pickRestart({
  A: "[f3,c4,f4] [f2,c3]@3 [f3,c4,f4] ~ [f3,c4,f4] [f2,c3]@3 [f3,c4,f4] ~ [f3,c4,f4] [f2,c3]@3", // F5
  B: "[eb2@2 f2@4 ab2@6 bb2 ab2 eb2 f2@9 f2 eb2@3 eb2 e2@3]/2",
  C: "[gb2,db3] [f2,c3]!2 ~@2 [f2,c3]@3 [eb2,bb2] [f2,c3]!2 ~@2 [f2,c3]@3", // Gb5 F5 Eb5 F5
  D: "[gb2,db3] [f2,c3]!2 ~@2 [f2,c3]@3 [f2,c3]!4 [eb2,bb2] [f2,c3]@3", // Gb5 F5 Eb5 F5
})).s("gm_distortion_guitar").gain(0.6).pan(1)

// chords · overdriven guitar · F5 Bb5 F5
const overdriven_guitar = note(`<
  ~@9
  [[c3,f3]!2 ~ [c3,f3]!2 ~@3]!8
  ~@32
  [[f3,bb3]!2 ~ [f3,bb3]!2 ~@3]!4
  ~@8
  [[c3,f3]!2 ~ [c3,f3]!2 ~@3]!12
  ~@9
>`).s("gm_overdriven_guitar").gain(0.8).pan(1)

// chords · distortion guitar · F5 Bb5 F5
const distortion_guitar_2 = note(`<
  ~@9
  [~@4 [c3,f3]!2 ~@4 [c3,f3]!6]!8
  ~@32
  [~@4 [f3,bb3]!2 ~@4 [f3,bb3]!6]!4
  ~@8
  [~@4 [c3,f3]!2 ~@4 [c3,f3]!6]!12
  ~@9
>`).s("gm_distortion_guitar").gain(0.46).pan(1)

// bass · electric bass pick
const bass = note(`<
  ~ A@8 ~@4 B@3 C D@8 E F E F E F E F D@8 E F E F E F E F G H I J D@8 ~@4 B@3 K B@3 C A@8 ~
>`.pickRestart({
  A: "f2 f1@3 f2@2 f2 f1@3 f2@2 f2 f1@3", B: "f1@2 f1@2 ~ f1 f1@2 f1@2 ~@5 eb1",
  C: "f1@2 f1@2 ~ f1 f1@2 f1@2 eb1@2 f1 eb1@3", D: "[eb1@2 f1@4 ab1@6 bb1 ab1 eb1 f1@9 f1 eb1@2 eb1!2 e1@3]/2",
  E: "gb2 f2 f1 ~@2 f1@3 eb1 f1!2 ~@2 f1@3", F: "gb2 f2 f1 ~@2 f1@3 f1!4 eb1 f1@3",
  G: "bb1@2 bb1@2 ~ bb1 bb1@2 eb2 f2 bb2 ab2 bb2 f2 ab2 ab1",
  H: "bb1@2 bb1@2 ~ bb1 bb1@2 bb2 [f2,ab2] eb2 [bb1,db2] eb2 ab1@3", I: "bb1@2 bb1@2 ~ bb1 bb1@2 eb2 f2!2 eb2 f2!4",
  J: "bb1@2 bb1@2 ~ bb1 bb1@2 ab3 bb3!3 ab2 bb2!3", K: "f1@2 f1@2 ~ f1 f1@2 c2!2 eb1@2 f1 eb1@3",
})).s("gm_electric_bass_pick").gain(0.8)

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

// drums · snare
const snare = s("sd").struct("<A B@8 ~@4 C@3 D B@32 C@3 D B@8 ~@4 C@4 B@11 E ~>".pickRestart({
  A: "~@7 x", B: "~ x ~ x", C: "x ~ x ~ x!3 ~ x ~ x!6", D: "x ~ x ~ x!3 ~ x ~@3 x ~@3", E: "~@2 x ~@2 x!2 ~",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~ A@8 ~@7 B A@32 ~@3 B A@8 ~@8 A@11 C ~>".pickRestart({
  A: "x!8", B: "~@5 x!3", C: "x!5 ~@3",
})).gain(0.8)

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

stack(distortion_guitar, overdriven_guitar, distortion_guitar_2, bass, kick, snare, open_hat, crash)

More by Rage Against the Machine