Strudelify

Take the Power Back

Rage Against the Machine

KeyE♭ minorTempo109 bpm
0:00/0:00
// Take the Power Back — Rage Against the Machine
// 109 bpm, 4/8, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 electric guitar jazz (copy of ch 5 electric guitar jazz, 0.25 beats late)
// note: Full arrangement: all 301 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(109/2)

// 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 · overdriven guitar
const overdriven_guitar = note(`<
  ~@32 A B A B A B A B A B A B A B A B C D E D E D E D C D E D E D E D C D E D E D E D C D E D E D F@2 G H@2 I G H@2 I G
  H@2 I G J@2 K L@4 M@3 C D E D E D E D C D E D E D F@2 G H@2 I G H@2 I G H@2 I G J@2 N O N O N O N O A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B P Q P Q R S R S P Q P Q T ~ T ~ T ~ T ~ U V T ~ T ~ T ~ A B A B A B A B
  A B A B A B A B A B A B A B A W G H@2 I G H@2 I G H@2 I G X@8 ~@26 Y@2 Z@3 AA Z@3 AA Z@3 AA Z@3 AA Z@3 AA Z@3 AA AB AC
>`.pickRestart({
  A: "[eb2,bb2,eb3] ~ [eb2,bb2,eb3] ~ db3@2 ~ gb3", B: "[eb2,bb2,eb3] ~ [eb2,bb2,eb3] ~ db3@4 ~@2 gb3@6",
  C: "[eb2,bb2,eb3] ~ eb3 ~ eb3 ~ eb3 ~", D: "eb3@2 ~@2 [eb2,bb2,eb3] ~ [eb2,bb2,eb3] ~ eb3@2 db3@6",
  E: "~@2 eb3 ~ eb3 ~ eb3 ~", F: "[~@2 eb3 ~ eb3 ~ eb3 [eb3,bb3,eb4]@6 ~@3]/2", G: "eb2 ~ eb3@4 eb2@2",
  H: "[db3@6 d3@6 eb3@4 eb2@2 ~@2 eb2@2 ~@2 [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2] ~, ~@3 a3@4 ~]/2", // Eb5
  I: "[eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2] ~", J: "db3/2",
  K: "eb2 ~ eb3 ~ eb3 ~ eb3 ~", L: "[eb3 ~ eb3 ~ eb3 ~ db3@4 eb3 ~ eb3 ~ eb3 ~]/2",
  M: "[eb3 ~ eb3 ~ eb3 ~ db3@4 eb3 ~ eb3 ~ eb3@10]/3", N: "eb2 ~ eb2 ~ db3@2 ~ gb3", O: "~ eb2 db3@2 ~ gb3@3",
  P: "[eb3,bb3,eb4]@3 [d3,a3,d4]@3 [db3,ab3,db4]@2", Q: "~ [gb2,db3,gb3]@3 [ab2,eb3,ab3]@2 [db3,ab3,db4]@2",
  R: "eb4@3 f4@3 gb4@2", S: "~ ab4@3 ab4@4", T: "[eb2,bb2,eb3] ~ [eb2,bb2,eb3] ~@5",
  U: "[eb2,bb2,eb3] ~ [eb2,bb2,eb3] ~@3 eb5@2", V: "~ eb5 ~ eb5",
  W: "[eb2,bb2,eb3] ~ [eb2,bb2,eb3] ~ db3@4 ~@2 [eb3,bb3,eb4]@6", X: "db3/8", Y: "db2/2",
  Z: "[eb2,bb2,eb3]@4 [d2,a2,d3]@4 [db2,ab2,db3]@4 [db2,ab2,db3] ~ [db2,ab2,db3] ~", // Eb5 D5 Db5
  AA: "~@2 [db2,ab2,db3] ~ [db2,ab2,db3] ~ [db2,ab2,db3] ~ [db2,ab2,db3]@8", AB: "[eb3,bb3,eb4]",
  AC: "[eb3,bb3,eb4] ~@3", // Eb5
})).s("gm_overdriven_guitar").gain(0.64)

// bass · electric bass finger
const bass = note(`<
  ~@8 A ~ A ~ A ~ A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B C@2 D E A ~ D E A ~ D E A ~ D F@2 A ~ A ~ A ~ A ~ A B A B A B A B A B A B A B C@2 D E A ~ D
  E A ~ D E A ~ D F@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B G H G H G H G H G
  H G H A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B A B A B A B A B A B A B A B A B A B A B A I D E A ~ D E A ~ D E A ~ D J@8
  ~@4 K L M N O P M N K L M N O P M N K L M N O P Q@2 R@3 S R@3 S R@3 S R@3 S R@3 S R@3 S T U
>`.pickRestart({
  A: "eb1 ~ eb1 ~@5", B: "~ eb1 ~@6", C: "[eb1 ~ eb1 ~@4 eb1@6 ~@3]/2", D: "eb1 ~ eb2@4 eb1@2", E: "db2@3 d2@3 eb2@2",
  F: "db2/2", G: "eb2@3 d2@3 db2@2", H: "~ gb1@3 ab1@2 db2@2", I: "~@2 eb1 ~@2 eb1@3", J: "db2/8", K: "db1 f1@2 db1",
  L: "db2@2 db1 f1", M: "db1 gb1@2 db1", N: "db2@2 db1 gb1", O: "db1 ab1@2 db1", P: "db2@2 db1 ab1", Q: "db1/2",
  R: "eb1@4 d1@4 db1@4 db1 ~ db1 ~", S: "~@2 db1 ~ db1 ~ db1 ~ db1@8", T: "eb1", U: "eb1 ~@3",
})).s("gm_electric_bass_finger").gain(0.64)

// bass · slap bass 1
const bass_2 = note(`<
  ~@16 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B A B A B A B A B A B A B A B A B A B A B A C A B A B A B A C A B A B A B A C A
  B A B A B D ~@24 A B A B A B A C A B A B A B D ~@16 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B ~@28 A B A B A B A B A B A B A B A B A B A B A B A D ~@75
>`.pickRestart({
  A: "~@4 db2@2 ~ gb2", B: "~@2 db2@2 ~ gb2@3", C: "~@2 ab2@2 ~ bb2 eb3@2", D: "~@2 db2 ~",
})).s("gm_slap_bass_1").gain(0.64)

// other · overdriven guitar
const overdriven_guitar_2 = note("<~@142 A@2 B@2 C@2 D@2 E F G H ~ I ~@145>".pickRestart({
  A: "[[bb4,eb5]@6 eb5@6 eb5@2 [bb4,eb5] ~]/2", B: "[~@2 [bb4,eb5]@4 eb5@6 [bb4,eb5]@2 [bb4,eb5] ~]/2",
  C: "[~@2 [bb4,eb5]@4 eb5@6 eb5@2 eb5 ~]/2", D: "[~ [bb4,eb5]@2 eb5@4 ~]/2", E: "eb5@6 eb5 db5",
  F: "b4@2 bb4@10 b4 db5 d5@2", G: "eb5 db5 b4 bb4 ab4 gb4 f4 gb4", H: "f4@3 ~", I: "~ eb5 ~@2",
})).s("gm_overdriven_guitar").gain(0.64)

// bass · electric guitar jazz
const bass_3 = note("<~@243 A B C D E F C D A B C D E F C D A B C D E F C D A B C D E F G@2 ~@26>".pickRestart({
  A: "db2 f2@2 db2", B: "f2@2 db2 f2", C: "db2 gb2@2 db2", D: "gb2@2 db2 gb2", E: "db2 ab2@2 db2", F: "ab2@2 db2 ab2",
  G: "db2/2",
})).s("gm_electric_guitar_jazz").gain(0.64)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@31 A B@46 A ~ B@3 A B@3 A B@3 A B ~ B ~@7 A B@14 A ~ B@3 A B@3 A B@3 A B ~ B ~@7 C B@31 D ~@2 E F B@4 E F E F ~@6 G
  H ~@7 A B@23 D B@3 A B@3 A B@3 A B ~@35 I B@2 J F B@2 J F B@2 J F B@2 J F B@2 J F B@2 J F K ~
>`.pickRestart({
  A: "~@4 x ~ x!2", B: "~ x", C: "~@3 x", D: "~@4 x!2 ~@2", E: "x ~@2 x ~@2 x ~", F: "~ x ~@2 x ~@3",
  G: "~@6 x!3 ~ x ~@3 x ~", H: "~@2 x ~@3 x!3 ~ x ~ x ~@3", I: "x!8", J: "~@4 x ~@2 x", K: "~@13 x ~@2",
})).gain(0.64)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~@62 D E ~@37 D E A B A B A B A B ~@44 C@2 A B A B C ~
  C@2 E ~ A B A B ~@99
>`.pickRestart({
  A: "x ~@3 x ~@2 x", B: "x!2 ~ x ~@4", C: "x!2", D: "~ x", E: "x",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@299 [~@7 x] ~>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C D C@7 D C@7 D C@7 D C@7 D C@7 D C@6 ~@24 D C@7 D C@6
  ~@17 A ~ A ~ A ~ A ~@36 D C@3 E F E F ~@3 A ~ A ~@7 A ~ A D C@7 D C@7 D C@6 G ~@49 D@16 H@8 ~@2
>`.pickRestart({
  A: "~ x", B: "~@3 x", C: "x!4", D: "~ x!3", E: "~ x!2 ~", F: "x!2 ~ x", G: "x!3 ~", H: "~ x ~ x",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@32 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@5 B ~ A ~@2 C A ~@2 C A ~@2 C A@2 ~ D ~ D ~ D ~ D ~ A ~@7 A ~@5 B ~ A ~@2 C A
  ~@2 C A ~@2 C A@2 ~@9 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 E F A ~ A ~@3 G C G C ~@16 A ~@7 A ~@7 A ~@6 H A
  ~@2 C A ~@2 C A ~@2 C A@2 ~@35 A@16 I@8 A@2
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~ x", D: "x!2 ~@2", E: "x ~@2 x ~@2 x ~", F: "~ x ~@2 x ~ x ~", G: "x ~@2 x", H: "~@5 x ~@2",
  I: "x!2",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct(`<
  ~@80 A B@2 C A B@2 C A B@2 C A ~@26 A B@2 C A B@2 C A B@2 C A ~@10 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~@2
  D E ~@48 A B@2 C A B@2 C A B@2 C A F G@33 H ~@27
>`.pickRestart({
  A: "~ x", B: "x!2", C: "x", D: "~ x!3", E: "x!4", F: "~ x!7", G: "x!8", H: "x!5 ~@11",
})).gain(0.48)

// drums · cowbell
const cowbell = s("cb").struct("<~@196 [~@4 x!3 ~] [~@3 x] ~@103>").gain(0.64)

// drums · bongos
const bongos = s("bongo:4").struct("<~@196 [~@7 x] [~ x ~ x ~ x ~@2] ~@103>").gain(1.68)

stack(
  overdriven_guitar, bass, bass_2, overdriven_guitar_2, bass_3, kick, snare, low_tom, hihat, mid_tom, open_hat, crash,
  ride, cowbell, bongos
)

More by Rage Against the Machine