Strudelify

Guerrilla Radio

Rage Against the Machine

KeyF♯ minorTempo105 bpm
0:00/0:00
// Guerrilla Radio — Rage Against the Machine
// 105 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "bass" slap bass 2 (copy of ch 5 "bass" electric bass finger)
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · distortion guitar · "guitar"
const distortion_guitar = note(`<
  ~@4 A@4 B@7 C D ~@15 B@7 C D ~@7 B@7 C E ~@3 A@4 F@7 ~@5 G H G H G H G I G I G I
>`.pickRestart({
  A: "e1@2 f#1@2 f#1@2 e1 f#1@2 e1 f#1@2 a1@2 b1@2",
  B: "[e2,b2,e3]@2 [f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [e2,b2,e3] [f#2,c#3,f#3]@2 [e2,b2,e3] [f#2,c#3,f#3]@2 [a2,e3,a3]@2 [b2,f#3,b3]@2", // E5 F#5 E5 F#5 E5 F#5 A5 B5
  C: "[a2,e3,a3,a4] [f#2,f#3,f#4]@2 [e2,f#3,f#4] [g#2,d#3,g#3,g#4] [f#2,f#3,f#4]@2 [e2,f#3,f#4], ~ c#3@3 ~ c#3@3", // A5 F# Esus2 G#5 F# Esus2
  D: "[f#2,f#3]@3 ~@13, f#4 ~@15", E: "[f#2,c#3,f#3] ~@7", F: "e2@2 f#2@2 f#2@2 e2 f#2@2 e2 f#2@2 a2@2 b2@2",
  G: "[e2,e3] [f#2,f#3]@2 [e2,e3] [c#3,f#3,c#4]@4 [e2,e3] [f#2,f#3]@2 [e2,e3] [c#3,f#3,c#4]@4", // E F# E F#5 E F# E F#5
  H: "[e2,e3] [f#2,f#3]@2 [e2,e3] [c#3,f#3,c#4]@4 ~@8", I: "[e2,e3] [f#2,f#3]@2 [e2,e3] [c#3,f#3,c#4]@3 [c#3,f#3]!9",
})).s("gm_distortion_guitar").gain(0.45)

// other · distortion guitar · "guitar"
const distortion_guitar_2 = note("<A@8 ~@48 B C D A E F G H ~@24>".pickRestart({
  A: "[e1,e2]@2 [f#1,f#2] ~ [f#1,f#2]@2 [e1,e2] [f#1,f#2]@2 [e1,e2] [f#1,f#2]@2 [a1,a2]@2 [b1,b2]@2", // E F# E F# E F# A B
  B: "[f#3,e4]@2 [f#3,f#4] ~ [f#3,f#4]@2 [e3,e4] [f#3,f#4]@2 [e3,e4] [f#3,f#4]@2 [a3,a4]@2 b3@2", // F#7 F# E F# E F# A
  C: "e3@2 f#3 ~ f#3@2 e3 f#3@2 [e2,e3] [f#2,f#3]@2 [a2,a3]@2 [b2,b3]@2", // E F# A B
  D: "[e2,e3]@2 [f#2,f#3] ~ [f#2,f#3]@2 [e2,e3] [f#2,f#3]@2 [e2,e3] [f#2,f#3]@2 [a1,a2,a3]@2 [b1,b2]@2", // E F# E F# E F# A B
  E: "e2@2 f#2 ~ f#2@2 e2 f#2@2 e2 f#2@2 a2@2 [b2,b3]@2", // B
  F: "[e2,e3]@2 [f#2,f#3] ~ [f#2,f#3]@2 [e2,e3] [f#2,f#3]@2 [e2,e3] [f#2,f#3]@2 [a2,a3]@2 [b2,b3]@2", // E F# E F# E F# A B
  G: "[e2,e3]@2 [f#2,f#3] ~ [f#2,f#3]@2 e3 f#3@2 [e3,e4] [f#3,f#4]@2 [a3,a4]@2 [b3,b4]@2", // E F# E F# A B
  H: "[e3,e4]@2 [f#3,f#4] ~ [f#3,f#4]@2 [e3,e4] [f#3,f#4]@2 [e3,e4] [f#3,f#4]@2 [a3,a4]@2 [b3,b4]@2", // E F# E F# E F# A B
})).s("gm_distortion_guitar").gain(0.54)

// other · distortion guitar · "guitar" · soft notes
const distortion_guitar_soft = note("<~@56 A B C ~ D ~ E ~@25>".pickRestart({
  A: "~@7 b4", B: "e4@2 f#4 ~ f#2@2 e2 f#2@2 ~@7", C: "~@7 f#1@2 e1 f#1@2 ~@2 b3@2",
  D: "e1@2 f#1 ~ f#1@2 ~@3 e3 f#3@2 a3@2 ~@2", E: "~@4 f#4@2 [e2,e4] [f#2,f#4]@2 e2 ~@6",
})).s("gm_distortion_guitar").gain(0.2)

// other · overdriven guitar · "guitar" · F# E F# E F# E F# A …
const overdriven_guitar = note(`<
  [[f#2,f#3]!16]!8
  ~@52
  [[e1,e2]@2 [f#1,f#2] ~ [f#1,f#2]@2 [e1,e2] [f#1,f#2]@2 [e1,e2] [f#1,f#2]@2 [a1,a2]@2 [b1,b2]@2]!4
  ~@3
  [[d#2,g3,c#4,f#4]!2 [e2,g3,c#4,g4] [e2,f#3,d4,g4] [e2,g3,d4,g#4] [f2,g3,c#4,g4] [f2,g#3,d4,g#4] [f#2,g3,d4,g#4] [f#2,g#3,d4,a4] [f#2,g3,d4,g#4] [g2,a3,e4,a4] [g2,a3,f4,a#4] [g#2,g#3,a3,e4,a4,a#4]@4, ~@6 [g2,d#4] ~]
  [[f#4,b4]@4 [e4,a4] ~ [f#4,b4]@4 [e4,b4] c#5 b4 a4 f#4@2]!3
  [[f#3,b3,f#4,a#4,b4]@3 ~ [f3,a#3,f4,a4,a#4]@3 ~ [e3,a3,d#4,g#4,a4,f5]@3 ~ [d#3,g#3,c#4,d#4,g4,g#4,e5]@3 ~]
  ~@16
>`).s("gm_overdriven_guitar").gain(0.3)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@4 A@11 B C D E D F D G D H D I J H D H ~ A@7 B C D E D H D H ~ A@7 B G ~@3 A@11 K ~@4 L M L M L M L M L M L M
>`.pickRestart({
  A: "e1@2 f#1@2 f#1@2 e1 f#1@2 e1 f#1@2 a1@2 b1@2", B: "a1 f#1@2 e1 g#1 f#1@2 e1", C: "f#1 ~",
  D: "~@4 a1 a1@2 ~ b1 b1@2 ~ c2 c2@2 ~", E: "a1@9 ~@7", F: "a1 ~@3", G: "f#1 ~@3", H: "f#1@5 ~@11", I: "f#1@3 ~@13",
  J: "f#2 c#2 b1 f#1 a1 a1@2 ~ b1 b1@2 ~ c2 c2@2 ~", K: "b1@3 ~ a#1@3 ~ a1@3 ~ g#1@3 ~",
  L: "e1 f#1@2 e1 [f#1,f#2]@3 ~ e1 f#1@2 e1 [f#1,f#2]@3 ~", M: "e1 f#1@2 e1 [f#1,f#2]@3 ~@9",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · contrabass · "synth" · F# E F# E A F# Gmaj7 F# …
const contrabass = note(`<
  ~@64
  [[f#4,f#5]@4 [e4,e5] ~ [f#4,f#5]@4 [e4,e5] ~@2 [a4,a5]@3, ~@6 [f#4,f#5] ~]!3
  [[g4,f#5]!2 [f#4,f#5] [f4,f#5]!2 [f4,f5]!2 [e4,f5]!2 [d#4,e5] [d#4,d#5] [d4,d#5] [d#4,d5] [d4,d5] [c4,c#5] [c4,c5]]
  [[f#4,c#5,f#5,b5]@4 [e4,e5,a5] ~ [f#4,c#5,f#5,b5]@4 [e4,e5,b5] c#6 b5 a5 f#5@2, ~@6 f#4 ~, ~@13 a4@3]!3
  [[f#4,a#4,b4]@3 ~ [f4,a4,a#4]@3 ~ [d#4,g#4,a4,f6]@3 ~ [d#4,g4,g#4,e6]@3 ~]
  ~@16
>`).s("gm_contrabass").gain(0.45)

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

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@72 [~ x!3] [x!4]!3 ~@12>").gain(0.54)

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

// drums · crash
const crash = s("cr").struct("<A ~@7 A@9 ~@15 A@9 ~@7 A@9 ~@7 A ~@6 A ~@4 B@11 A>".pickRestart({
  A: "x", B: "x!2",
})).gain(0.54)

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

More by Rage Against the Machine