Strudelify

Without a Face

Rage Against the Machine

KeyG majorTempo94 bpm
0:00/0:00
// Without a Face — Rage Against the Machine
// 94 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 85 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(94/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 · distortion guitar · "Staff-1"
const distortion_guitar = note("<[d6!32]!15 ~@12 [d6!32]!16 ~@42>").s("gm_distortion_guitar").gain(0.72)

// other · distortion guitar · "Staff-3"
const distortion_guitar_2 = note(`<
  ~@19 A B A B A B A B A C ~@18 A B A B A B A B D E F G H I H I H I H I ~@2 J K@2 L M@2 N@3 O@2 P Q@3 R
>`.pickRestart({
  A: "g2 f2 g2 f2 g2 f2 g2 f2 g2 f2 g2 f2 g2 f2 g2 f2", B: "f2@2 g2@2 a#3@11 f2", C: "f2 g2 ~@6",
  D: "d5@2 d5@2 d5@2 ~ d5@2 ~ d5@2 ~@4", E: "a5@7 ~ b5@7 ~", F: "c6@2 c6@2 c6@2 ~ c6@2 ~ c6@2 ~@4",
  G: "f#5@6 f#5@2 f5@7 ~ f#5@14 ~@2", H: "~@8 c#4!4 e4!4 c#4!4 e4!4 a4!4 c#5!4",
  I: "~@3 [a4,d5,f#5]@3 [b4,e5,g#5]@8 [a4,d5,f#5]@2", J: "~@27 g2@5",
  K: "[~ f2@6 g2@5 f2@6 g2@6 f2@5 g2@6 f2@6 g2@5 f2@6 g2@6 f2@6]/2", L: "g2@5 f2@6 g2@6 f2@5 g2@6 f2@4",
  M: "[~@2 g2@5 f2@6 g2@6 f2@5 g2@6 f2@6 g2@6 f2@5 g2@6 f2@6 g2@5]/2",
  N: "[f2@6 g2@6 f2@5 g2@6 f2@6 g2@6 f2@5 g2@6 f2@6 g2@5 f2@6 g2@6 f2@5 g2@6 f2@6 g2@6 f2@4]/3",
  O: "[~ g2@6 f2@6 g2@5 f2@6 g2@6 f2@5 g2@6 f2@6 g2@5 f2@6 g2@6]/2", P: "f2@6 g2@5 f2@6 g2@6 f2@5 g2@4",
  Q: "[~@2 f2@6 g2@20 ~@3 g#2@20 ~@2 g2@20 ~@3 [g2,d3,g3,d4,g4]@20]/3", R: "~@3 [g2,d3,g3,d4,g4]@9 ~@20",
})).s("gm_distortion_guitar").gain(0.72)

// bass · electric bass finger · "Staff-4"
const bass = note("<~@3 A@8 B@8 C D@8 E@5 A@8 F@7 D@6 E@5 G@4 H@7 I@5 J K@8 L>".pickRestart({
  A: "[e2@11 ~ a1@7 ~ a#1@7 ~@33 e2@2 d2@2 e2@11 ~ a1@7 ~ a#1@7 ~ g1@26 ~@6 e2@2 d2@2 e2@11 ~ a1@7 ~ a#1@7 ~@33 e2@2 d2@2 e2@11 ~ a1@7 ~ a#1@7 ~ g1@26 ~@6 e2@2 d2@2, ~@7 f1@32 f1@25]/8",
  B: "[e2@11 ~ a1@7 ~ a#1@7 ~@33 e2@2 d2@2 e2@11 ~ a1@7 ~ a#1@7 ~ g1@18 ~@6 f1@4 f1@4 f1@132, ~@7 f1@22 ~@35]/8",
  C: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 f1, ~ f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~",
  D: "[~@2 g1@2 ~@12 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 f1, f1@15 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~]/2",
  E: "[~@4 g1@4 ~@20 e2@2 d2@2 e2@11 ~ a1@7 ~ a#1@7 ~@33 e2@2 d2@2 e2@11 ~ a1@7 ~ a#1@7 ~ g1@26 ~@6 e2@2 d2@2, f1@3 f1@5]/5",
  F: "[e2@11 ~ a1@7 ~ a#1@7 ~ f1@164 g1@2 ~@2 g1@2 ~@2 g1@2 ~@2 g1@2 ~@2 g1@2 ~@2 g1@2 ~@2 g1@2 ~@2 g1@2 f1@2, ~@97 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~]/7",
  G: "[e2@11 ~ a1@7 ~ a#1@7 ~@33 e2@2 d2@2 e2@11 ~ a1@7 ~ a#1@7 ~ g1@26 ~@6 e2@2 d2@2, ~@7 f1@25]/4",
  H: "[e2@11 ~ a1@7 ~ a#1@7 ~@33 e2@2 d2@2 e2@11 ~ a1@7 ~ a#1@7 ~ g1@26 ~@6 e2@2 d2@2 g1@43 ~@3 g1@5 ~@6 g1@6 ~@5 g1@6 ~@6 g1@5 ~@6 g1@5, ~@28 f1@151 f1@12 f1@11 f1@11 f1@11]/7",
  I: "[~@7 g1@5 ~@6 g1@6 ~@5 g1@6 ~@6 g1@5 ~@6 g1@6 ~@6 g1@5 ~@6 g1@6 ~@5 g1@6 ~@6 g1@5 ~@6 g1@6 ~@5 g1@6 ~@6 g1@6 ~@5 g1@6 ~@6 g1@5, ~ f1@11 f1@12 f1@11 f1@11 f1@12 f1@11 f1@12 f1@11 f1@11 f1@12 f1@11 f1@12 f1@11 f1@11]/5",
  J: "~@6 g1@6 ~@5 g1@6 ~@6 g1@3, f1@12 f1@11 f1@9",
  K: "[~@8 g1@6 ~@6 g1@5 ~@6 g1@6 ~@5 g1@6 ~@6 g1@6 ~@5 g1@6 ~@6 g1@6 ~@5 g1@6 ~@5 g1@6 ~@6 g1@6 ~@5 g1@6 ~@6 g1@6 ~@5 g1@6 ~@5 g1@6 ~@6 g1@20 ~@3 g#1@20 ~@2 g1@20 ~@3 g1@20, ~@3 f1@11 f1@11 f1@12 f1@11 f1@120 ~@88]/8",
  L: "~@3 g1@9 ~@20",
})).s("gm_electric_bass_finger").gain(0.72)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@2 B@11 C ~@4 D E F G F E F G F H B@13 C ~@4 D E F G F E F G B@12 ~@2 I J K L M N O P Q R S T U ~@3
>`.pickRestart({
  A: "x ~@3 x ~@4 x!2 ~ x ~@3", B: "x ~ x ~@2 x!2 ~", C: "x ~ x ~ x!4", D: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3",
  E: "x ~ x ~ x ~ x ~@2 x!2 ~@5", F: "x!2 ~ x!2 ~@3 x!2 ~ x!2 ~@3", G: "x ~ x!2 ~ x ~ x!2 ~ x!2 ~ x ~@2", H: "x!2 ~@6",
  I: "~@16 x ~@4 x ~@5 x ~@4", J: "~@4 x ~@2 x ~ x ~@22", K: "x ~@2 x ~@5 x ~@7 x ~@2 x ~@2 x ~@8",
  L: "~@14 x ~@2 x ~@4 x ~@8 x", M: "~@2 x ~@2 x ~@21 x ~@2 x ~", N: "~@4 x ~@7 x ~@2 x ~@2 x ~@13",
  O: "~@9 x ~@2 x ~@4 x ~@8 x ~@2 x ~@2", P: "x ~@21 x ~@2 x ~@5 x", Q: "~@8 x ~ x ~@2 x ~@18",
  R: "~@4 x ~@2 x ~@5 x ~@7 x ~@2 x ~@2 x ~@4", S: "~@9 x!2 ~@2 x ~@2", T: "~@3 x ~@2 x ~ x ~@22 x", U: "~ x ~@14",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct(`<
  ~ A@13 B ~@3 C D E F G F E F G F ~ A@13 B ~@3 C D E F G F E F G A@12 ~@2 H I J K L M N O P Q R S T ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x!16", D: "~@4 x ~@2 x ~@4 x ~@2 x", E: "~@2 x!2 ~@2 x!2",
  F: "~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x!2", G: "~@4 x ~@7 x ~@2 x", H: "~@16 x ~@4 x ~@10",
  I: "~@7 x ~ x ~@14 x ~ x!2 ~ x ~@2", J: "~@3 x ~@16 x ~@2 x ~@8", K: "~@5 x ~ x ~ x ~ x ~@5 x ~@14",
  L: "~@2 x ~@2 x ~@13 x ~ x ~ x!2 ~@5 x ~", M: "~@15 x ~@2 x ~@13", N: "x ~ x ~ x ~ x ~@5 x ~@16 x ~@2",
  O: "x ~@13 x ~ x ~ x ~ x ~@4 x ~@6", P: "~@10 x ~@2 x ~@14 x!2 ~ x", Q: "~ x ~@5 x ~@16 x ~@2 x ~@4",
  R: "~@9 x ~ x ~ x ~ x ~@4 x ~@11", S: "~@6 x ~ x ~@14 x ~ x!2 ~ x ~@3", T: "~ x ~@14",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~ A B C A@5 C A@4 D E@4 ~@9 F A@6 C A@6 D E@4 ~@8 C@12 ~@2 G ~@15>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!5 ~ x!2", D: "x!4 ~@4", E: "x!4", F: "~ x!3", G: "~@16 x ~@4 x ~@10",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@3 A ~@5 A ~@25 A ~@19 A@12 ~@2 B ~@15>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@6 A ~@3 B A ~@3 C@9 D A ~@3 A ~@2 A ~@5 B A ~@3 C@8 A ~@3 A ~@3 A ~@3 E F G H I J K L M N O P Q R S ~ T U
>`.pickRestart({
  A: "x", B: "~@5 x!3", C: "x!8", D: "x!2 ~@6", E: "x ~@10 x ~ x!2 ~ x!2 ~ x!3 ~ x!2 ~ x!3 ~ x!2",
  F: "~ x!2 ~ x!3 ~ x!2 ~ x!2 ~ x ~ x ~@2 x ~@2 x ~@2 x ~@5 x", G: "~@4 x ~@22 x ~@4",
  H: "~ x ~@5 x ~@4 x ~@5 x ~@5 x ~@4 x ~@2", I: "~@3 x ~@5 x ~@4 x ~@5 x ~@5 x ~@5",
  J: "x ~@4 x ~@5 x ~@5 x ~@4 x ~@5 x ~@3", K: "~@2 x ~@4 x ~@5 x ~@5 x ~@4 x ~@5 x ~",
  L: "~@4 x ~@5 x ~@4 x ~@5 x ~@5 x ~@4", M: "x ~@5 x ~@5 x ~@4 x ~@5 x ~@5 x ~@2",
  N: "~@3 x ~@4 x ~@5 x ~@5 x ~@4 x ~@5 x", O: "~@5 x ~@4 x ~@5 x ~@5 x ~@5 x ~@3",
  P: "~ x ~@5 x ~@5 x ~@4 x ~@5 x ~@5 x ~", Q: "~@3 x ~@5 x ~@5 x ~@4 x ~@5 x ~@5",
  R: "x ~@5 x ~@4 x ~@5 x ~@5 x ~@4 x ~@3", S: "~ x ~@2 x ~@11", T: "~@3 x ~@4", U: "~@3 x ~@28",
})).gain(0.72)

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

More by Rage Against the Machine