Strudelify

Year of the Boomerang

Rage Against the Machine

KeyG majorTempo173 bpm
0:00/0:00
// Year of the Boomerang — Rage Against the Machine
// 173 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: pitch bends are ignored
// note: Full arrangement: all 164 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(173/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.

// chords · distortion guitar
const distortion_guitar = note(`<
  A B A B A B A B ~@36 A B A B A B A B A B A B A B A B ~@11 C D@2 E@2 F G@2 ~@18 H@8 ~@8 I@8 J@8 K ~@11 L@2 M N@2 O@2
  P@2 Q R@4 S T@2 U@3 V@2 W
>`.pickRestart({
  A: "[d4,a4,d5,a5,d6]@2 d5 d4", B: "e4 d4 g4 d4", C: "~@17 [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~",
  D: "[[g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2]/2", // C5
  E: "[[g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2]/2", // C5
  F: "~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~", // C5
  G: "[[g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@3 ~@13]/2", // C5
  H: "[~@7 g4@6 d4@26 g4@6 d4@10 d6@8 ~]/8",
  I: "[~@7 [d4,a4,d5,a5,d6]@4 d5@2 d4@2 e4@2 d4@2 g4@2 d4@2 [d4,a4,d5,a5,d6]@4 d5@2 d4@2 e4@2 d4@2 g4@2 d4@2 [d4,a4,d5,a5,d6]@4 d5@2 d4@2 e4@2 d4@2 g4@2 d4@2 [d4,a4,d5,a5,d6]@4 d5@2 d4@2 e4]/8", // D5
  J: "[~ d4@2 g4@2 d4@2 [d4,a4,d5,a5,d6]@4 d5@2 d4@2 e4@2 d4@2 g4@2 d4@2 [d4,a4,d5,a5,d6]@4 d5@2 d4@2 e4@2 d4@2 g4@2 d4@2 [d4,a4,d5,a5,d6]@4 d5@2 d4@2 e4@2 d4@2 g4@2 d4@2 [d4,a4,d5,a5,d6]@4 d5@2 d4@2 e4]/8", // D5
  K: "~ d4@2 g4@2 d4@2 ~",
  L: "[~@14 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2]/2", // C5
  M: "~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~", // C5
  N: "[[g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2]/2", // C5
  O: "[[g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 [g3,c4,g4]@2]/2", // C5
  P: "[[g3,c4,g4]@2 ~ [g3,c4,g4]@2 [g3,c4,g4]@2 g3@2 ~ g3@2 g3@2 g3@2 ~ g3@2 g3@2 a#3@5 f3@4 g3@2 ~ g3@2 g3@2 g3@2 ~ g3@2 g3@2 a#3@4]/2", // C5
  Q: "~ f3@5 g3@2 g3@2 g3@2 g3@2 ~ g3@2 g3@2 a#3@5",
  R: "[f3@5 g3@2 g3@2 g3@2 ~ g3@2 g3@2 g3@2 a#3@5 f3@5 g3@2 g3@2 g3@2 ~ g3@2 g3@2 g3@2 ~ a#3@4 f3@5 g3@2 g3@2 g3@2 ~ g3@2 g3@2 g3@2 ~ a#3@4 f3@5 g3@2 g3@2 g3@2 ~ g3@2 g3@2 g3@2 ~ a#3@4 f3@4]/4",
  S: "~ g3@2 g3@2 g3@2 ~ g3@2 g3@2 g3@2 ~ a#3@4 f3@5",
  T: "[g3@2 g3@2 ~ g3@2 g3@2 g3@2 g3@2 ~ a#3@4 f3@5 g3@2 g3@2 ~ g3@2 g3@2 g3@2 ~ g3@2 a#3@4 f3@5 g3@2]/2",
  U: "[g3@2 ~ g3@2 g3@2 g3@2 ~ g3@2 a#3@5 f3@4 g3@2 g3@2 ~ g3@2 g3@2 g3@2 ~ g3@2 a#3@5 f3@4 g3@2 ~ g3@2 g3@2 g3@2 g3@2 ~ g3@2 a#3@5 f3@4 g3@2 ~ g3@2]/3",
  V: "[g3@2 g3@2 g3@2 ~ g3@2 a#3@5 f3@4 g3@2 ~ g3@2 g3@2 g3@2 ~ g3@2 g3@2 a#3@5 f3@4 g3@2 ~ g3@2 g3@2]/2",
  W: "g3@2 ~ g3@2 g3@2 a#3@5 f3@5 ~@7",
})).s("gm_distortion_guitar").gain(0.64)

// bass · electric bass finger
const bass = note(`<
  ~@8 A@24 B ~@3 A@24 C@3 D E@3 F@2 G@2 H I@2 J@2 K L@2 ~@2 M@8 N@8 O@8 P@8 N@16 Q@8 R H S@2 T@2 U V@2 W@4 X Y@4 Z ~@3
  AA@2 AB@2 AC
>`.pickRestart({
  A: "[e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1]/2", B: "e1 ~@7", C: "g1@7 g1@3 ~@9 f1@5", D: "~ g1@7 g1@3 ~@9 f1@4",
  E: "[g1@7 g1@3 ~@4 a#1@5 f1@4 g1@7 g1@3 ~@4 a#1@5 f1@4 g1@7 g1@3 ~@4 a#1@5 f1@4 g1@2 ~]/3",
  F: "[g1@2 g1@2 f1@5 g1@2 a#1@5 f1@5 g1@2 g1@2 g1@2 g1@2 ~ g1@2 g1@2 a#1@5 f1@5 g1@2 g1@2]/2",
  G: "[g1@2 ~ g1@2 g1@2 g1@2 a#1@5 f1@5 g1@2 g1@2 g1@2 ~ g1@2 g1@2 g1@2 ~ a#1@4 f1@5 g1@2 g1@2 g1@2]/2",
  H: "~ g1@2 g1@2 g1@2 ~ a#1@4 f1@5 g1@2 g1@2 g1@2 ~",
  I: "[g1@2 g1@2 g1@2 ~ a#1@4 f1@5 g1@2 g1@2 ~ g1@2 g1@2 g1@2 g1@2 ~ a#1@4 f1@5 g1@2 g1@2 ~ g1@2 g1@2]/2",
  J: "[g1@2 g1@2 ~ a#1@4 f1@5 g1@2 g1@2 ~ g1@2 g1@2 g1@2 ~ g1@2 a#1@4 f1@5 g1@2 g1@2 ~ g1@2 g1@2 g1@2]/2",
  K: "~ g1@2 a#1@5 f1@4 g1@2 g1@2 ~ g1@2 g1@2 g1@2 ~",
  L: "[g1@2 a#1@5 f1@4 g1@2 ~ g1@2 g1@2 g1@2 g1@2 ~ g1@2 a#1@5 f1@5 ~@13]/2",
  M: "[~@7 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@2]/8",
  N: "[~ e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@2]/8",
  O: "[~ e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@7]/8",
  P: "[~@6 d1 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@3 e1@2 ~@3 d1 e1@2 ~@2 d2 e2@2 d1@2]/8",
  Q: "[~@3 e1@6 ~@9 d1@3 g1@7 g1@3 ~@9 f1@5 g1@7 g1@3 ~@9 f1@5 ~ g1@6 g1@3 ~@10 f1@5 g1@7 g1@3 ~@9 f1@4 g1@7 g1@3 ~@4 a#1@5 f1@4 g1@7 g1@3 ~@4 a#1@5 f1@5 g1@6 g1@3 ~@4 a#1@5 f1@5 g1@2 g1@2 g1]/8",
  R: "~@2 f1@4 g1@2 a#1@5 f1@5 g1@2 g1@2 g1@2",
  S: "[g1@2 g1@2 g1@2 ~ a#1@4 f1@5 g1@2 g1@2 g1@2 ~ g1@2 g1@2 g1@2 ~ a#1@4 f1@5 g1@2 g1@2 g1@2 ~ g1@2]/2",
  T: "[g1@2 g1@2 ~ a#1@4 f1@5 g1@2 g1@2 ~ g1@2 g1@2 g1@2 g1@2 ~ a#1@4 f1@5 g1@2 g1@2 ~ g1@2 g1@2 g1@2]/2",
  U: "~ g1@2 a#1@4 f1@5 g1@2 g1@2 ~ g1@2 g1@2 g1@2 ~",
  V: "[g1@2 a#1@5 f1@4 g1@2 g1@2 ~ g1@2 g1@2 g1@2 ~ g1@2 a#1@5 f1@4 g1@2 ~ g1@2 g1@2 g1@2 g1@2 ~ g1@2]/2",
  W: "[a#1@5 f1@4 g1@2 ~ g1@2 g1@2 g1@2 g1@2 ~ g1@2 a#1@5 f1@4 g1@2 ~ g1@2 g1@2 g1@2 ~ g1@2 g1@2 a#1@5 f1@4 g1@2 ~ g1@2 g1@2 g1@2 ~ g1@2 g1@2 a#1@5 f1@4 g1@2 ~ g1@2 g1@2 g1@2 ~ g1@2 g1@2 a#1@4]/4",
  X: "~ f1@5 g1@2 g1@2 g1@2 g1@2 ~ g1@2 g1@2 a#1@5",
  Y: "[f1@5 g1@2 g1@2 g1@2 ~ g1@2 g1@2 g1@2 a#1@5 f1@5 g1@2 g1@2 g1@2 ~ g1@2 g1@2 g1@2 ~ a#1@4 f1@5 g1@2 g1@2 g1@2 ~ g1@2 g1@2 g1@2 ~ a#1@4 f1@5 g1@2 g1@2 g1@2 ~ g1@2 g1@2 g1@2 ~ a#1@4 f1@4]/4",
  Z: "~ g1@2 g1@2 g1@2 ~ g1@2 g1@2 g1@2 ~ a#1@4 f1@5",
  AA: "[~@11 a#1@5 f1@4 g1@2 ~ g1@2 g1@2 g1@2 g1@2 ~ g1@2 a#1@5 f1@4 g1@2 ~ g1@2]/2",
  AB: "[g1@2 g1@2 g1@2 ~ g1@2 a#1@5 f1@4 g1@2 ~ g1@2 g1@2 g1@2 ~ g1@2 g1@2 a#1@5 f1@4 g1@2 ~ g1@2 g1@2]/2",
  AC: "g1@2 ~ g1@2 g1@2 a#1@5 f1@5 ~@7",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · electric guitar jazz
const electric_guitar_jazz = note("<~@32 A@4 ~@42 B@4 ~@82>".pickRestart({
  A: "[~@7 g3, e2!2 f2!2 g2 f2 e2 ~, ~@2 b2@6 b2@6 c3@6 c3@6 d3@6 c3@6 b2@3 ~@7, ~@4 e3@6 e3@6 f3@6 f3@6 g3@6 f3@6 e3@3 ~@5]/4",
  B: "[~@75 b2@4 ~@3 g3@11 ~@3, ~@13 e3@11 e3@11 f3@11 f3@11 g3@11 f3@11 e3@5 ~@12, ~@17 e2@11 f2@10 f2@11 g2@11 f2@11 e2@11 ~@14, ~@20 b2@11 c3@11 c3@11 d3@11 c3@11 ~@21]/4",
})).s("gm_electric_guitar_jazz").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 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 ~@3 A B A B A B A B C D A D C D A D C D A D C D A D E@3 F G H I
  J K L M N O P Q R S T U ~@2 V@2 W V W V W V W V W V W V W V W V W V W V W V W V W V W V W V W X W ~ W X W ~ W X W ~ W
  X W ~ W J Y Z AA AB K AC M N O P Q R AD T AE AF AG AH AI AJ AK AL AM AN AO AP ~@2 AQ AR AS AT AU
>`.pickRestart({
  A: "x", B: "x!2 ~@2", C: "x ~@6 x", D: "~ x ~@2", E: "x ~@6 x ~@11 x ~@4", F: "~ x ~@6 x ~@11 x ~@3",
  G: "x ~@6 x ~@11 x ~@3 x", H: "~@3 x ~@5 x ~ x", I: "~@5 x ~@11 x ~@6", J: "~@4 x ~@11 x ~@4 x ~@2",
  K: "~@3 x ~@11 x ~@4 x ~@3", L: "~@3 x ~@10 x ~@4 x ~@4", M: "~@2 x ~@10 x ~@4 x ~@5", N: "~ x ~@10 x ~@4 x ~@6",
  O: "x ~@10 x ~@4 x ~@6 x", P: "~@10 x ~@4 x ~@6 x ~", Q: "~@9 x ~@4 x ~@6 x ~@2", R: "~@8 x ~@4 x ~@6 x ~@3",
  S: "~@8 x ~@3 x ~@6 x ~@4", T: "~@7 x ~@3 x ~@6 x ~@5", U: "~@6 x ~@4 x ~@12", V: "~@7 x", W: "~ x ~@5 x", X: "~@3 x",
  Y: "~@2 x ~@5 x ~@2 x", Z: "~@4 x ~@12 x ~@4 x ~", AA: "~@5 x ~@11 x ~@3 x ~@2", AB: "~ x ~@2 x!2",
  AC: "~ x ~@5 x ~@4", AD: "~@7 x ~@4 x ~@6 x ~@4", AE: "~@6 x ~@3 x ~@6 x ~@6", AF: "~@5 x ~@3 x ~@6 x ~@7",
  AG: "~@4 x ~@3 x ~@6 x ~@8", AH: "~@3 x ~@3 x ~@6 x ~@9", AI: "~@2 x ~@3 x ~@6 x ~@10", AJ: "~ x ~@4 x ~@5 x ~@11",
  AK: "x ~@4 x ~@6 x ~@10 x", AL: "~@4 x ~@6 x ~@10 x ~", AM: "~@3 x ~@6 x ~@10 x ~@2", AN: "~@2 x ~@6 x ~@10 x ~@3",
  AO: "~ x ~@6 x ~@10 x ~@4", AP: "x ~@6 x ~@10 x ~@5", AQ: "~@4 x!2", AR: "~@3 x ~@11 x ~@3 x ~@4",
  AS: "~ x ~@5 x ~ x ~@2", AT: "~ x ~@11 x ~@3 x ~@6", AU: "x!2",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B A B A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B@3 A B@3 A B@3 A B@3 C@4 D E B F G H@2 I J
  K L M N O P ~@3 H Q H Q H Q H Q H Q H Q H Q H Q H Q H Q H Q H Q H Q H Q H Q H Q H Q@3 H Q@3 H Q@3 H Q@3 A@4 R G S T I
  J K L M N O P U V W X Y Z@2 AA AB C ~@3 R G H I J
>`.pickRestart({
  A: "~ x", B: "~@4 x ~@2 x", C: "~@5 x ~@2", D: "~@7 x ~@4", E: "~@13 x ~@10", F: "x ~ x ~@4 x ~ x ~ x ~@12",
  G: "~@5 x ~@6", H: "~@3 x ~@4", I: "~ x ~", J: "~@7 x ~@16", K: "~ x ~@2", L: "~@5 x ~@18", M: "~ x ~@4",
  N: "~ x ~@6", O: "~ x ~@10", P: "~ x ~@22", Q: "~@3 x ~@2 x ~", R: "~@11 x ~@12", S: "~@9 x ~@9 x ~ x ~ x",
  T: "~@2 x!3 ~@7", U: "x ~@22 x", V: "~@11 x", W: "~@7 x", X: "~@5 x", Y: "~@19 x ~@4", Z: "~@3 x", AA: "~@17 x ~@6",
  AB: "~@2 x",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@8 A B@15 A B@7 ~@4 A B@7 ~@38 C@15 D C@7 D C@7 D ~@42 E F G H ~@4>".pickRestart({
  A: "~ x!3", B: "x!4", C: "~ x ~ x ~ x ~ x", D: "~ x ~ x ~ x ~@2", E: "~@23 x",
  F: "~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~", G: "x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~ x",
  H: "~@2 x ~ x ~ x ~@2 x ~@3 x ~@10",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@156 [~@7 x!2 ~@3] ~@7>").gain(0.64)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@64 A B C D E F G H I J K L M N O ~@55 D E P G Q R S K T M U V W X Y Z AA AB AC AD AE AF AG ~@2 AH AI AJ AK AL
>`.pickRestart({
  A: "~@3 x ~ x ~ x ~@2 x ~ x ~@3 x ~@4 x ~@2", B: "~@2 x ~ x ~ x ~@2 x ~ x ~@4 x ~@3 x ~@3",
  C: "~ x ~ x ~ x ~@2 x ~ x ~@4 x ~@3 x ~@4", D: "x ~ x ~ x ~@2 x ~ x ~@4 x ~@3 x ~@4 x",
  E: "~ x ~ x ~@2 x ~ x ~@4 x ~@3 x ~@4 x ~", F: "x ~@2 x ~ x ~ x ~@4 x ~@3 x ~@4 x ~ x",
  G: "~@2 x ~ x ~ x ~@4 x ~@3 x ~@4 x ~ x ~", H: "~ x ~ x ~ x ~@4 x ~@4 x ~@3 x ~ x ~@2",
  I: "x ~ x ~ x ~@4 x ~@4 x ~@3 x ~@2 x ~ x", J: "~ x ~ x ~@4 x ~@4 x ~@3 x ~@2 x ~ x ~",
  K: "x ~ x ~@4 x ~@4 x ~@3 x ~@2 x ~ x ~ x", L: "~@2 x ~@3 x ~@4 x ~@3 x ~@2 x ~ x ~ x ~",
  M: "~ x ~@3 x ~@4 x ~@3 x ~@2 x ~ x ~ x ~@2", N: "x ~@3 x ~@4 x ~@4 x ~ x ~ x ~ x ~@2 x", O: "~@3 x ~@4 x ~@15",
  P: "x ~ x ~@2 x ~ x ~@4 x ~@3 x ~@4 x ~ x", Q: "~ x ~ x ~ x ~@4 x ~@3 x ~@4 x ~ x ~@2",
  R: "x ~ x ~ x ~@4 x ~@3 x ~@4 x ~ x ~@2 x", S: "~ x ~ x ~@4 x ~@4 x ~@3 x ~ x ~@2 x ~",
  T: "~ x ~@4 x ~@4 x ~@3 x ~@2 x ~ x ~ x ~", U: "x ~@3 x ~@4 x ~@3 x ~@2 x ~ x ~ x ~@2 x",
  V: "~@3 x ~@4 x ~@4 x ~ x ~ x ~ x ~@2 x ~", W: "~@2 x ~@4 x ~@4 x ~ x ~ x ~ x ~@2 x ~@2",
  X: "~ x ~@4 x ~@4 x ~ x ~ x ~@2 x ~ x ~@3", Y: "x ~@4 x ~@4 x ~ x ~ x ~@2 x ~ x ~@4",
  Z: "x ~@3 x ~@4 x ~ x ~ x ~@2 x ~ x ~@4 x", AA: "~@3 x ~@4 x ~ x ~ x ~@2 x ~ x ~@4 x ~",
  AB: "~@2 x ~@4 x ~ x ~@2 x ~ x ~ x ~@4 x ~@2", AC: "~ x ~@4 x ~ x ~@2 x ~ x ~ x ~@4 x ~@3",
  AD: "x ~@4 x ~ x ~@2 x ~ x ~ x ~@4 x ~@3 x", AE: "~@4 x ~ x ~@2 x ~ x ~ x ~@4 x ~@4 x",
  AF: "~@3 x ~ x ~@2 x ~ x ~ x ~@4 x ~@4 x ~", AG: "~@7 x", AH: "~@18 x ~@4 x",
  AI: "~ x ~ x ~ x ~@2 x ~@3 x ~@4 x ~@4 x ~", AJ: "x ~ x ~ x ~@2 x ~@3 x ~@4 x ~@4 x ~ x",
  AK: "~ x ~@2 x ~ x ~@3 x ~@4 x ~@4 x ~ x ~", AL: "x ~@2 x ~ x ~@4 x ~@13",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@156 [x!2 ~@10] ~@7>").gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@15 A ~@7 A ~@3 A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B@3 C D E F G H I J K L M N O P Q R ~@2 S ~@15 S ~@7 S
  ~@7 S ~ S ~ S ~ S ~ S ~ S ~ S ~ S ~ S T U V W X H I Y K L M N O Z Q AA AB AC AD AE AF AG AH AI AJ AK AL ~@2 X AM AN AO
  AP
>`.pickRestart({
  A: "x", B: "x ~@6 x ~@11 x ~@4", C: "~ x ~@6 x ~@11 x ~@3", D: "x ~@13 x ~@4 x ~@3 x", E: "~@13 x ~@4 x ~@3 x ~",
  F: "~@12 x ~@4 x ~@3 x ~@2", G: "~@11 x ~@4 x ~@4 x ~@2", H: "~@10 x ~@4 x ~@4 x ~@3", I: "~@9 x ~@4 x ~@4 x ~@4",
  J: "~@9 x ~@3 x ~@4 x ~@5", K: "~@8 x ~@3 x ~@4 x ~@6", L: "~@7 x ~@3 x ~@4 x ~@7", M: "~@6 x ~@3 x ~@4 x ~@8",
  N: "~@5 x ~@3 x ~@4 x ~@9", O: "~@4 x ~@3 x ~@4 x ~@10", P: "~@3 x ~@4 x ~@3 x ~@11", Q: "~@2 x ~@4 x ~@3 x ~@12",
  R: "~ x ~@4 x ~@4 x ~@12", S: "~@7 x", T: "~@4 x ~@11 x ~@4 x ~@2", U: "~@2 x ~@5 x ~@2 x", V: "~@4 x ~@12 x ~@4 x ~",
  W: "~@5 x ~@11 x ~@3 x ~@2", X: "~@11 x ~@4 x ~@3 x ~@3", Y: "~@8 x ~@4 x ~@4 x ~@5", Z: "~@3 x ~@3 x ~@4 x ~@11",
  AA: "~ x ~@4 x ~@3 x ~@13", AB: "x ~@4 x ~@3 x ~@13 x", AC: "~@2 x ~ x ~@6 x", AD: "~@3 x ~@3 x ~@13 x ~@2",
  AE: "~ x ~ x ~@6 x ~", AF: "~ x ~@4 x ~@12 x ~@4", AG: "x ~@4 x ~@12 x ~@4 x", AH: "~@2 x ~@6 x ~ x",
  AI: "~@3 x ~@13 x ~@3 x ~@2", AJ: "~ x ~@6 x ~ x ~", AK: "~ x ~@13 x ~@3 x ~@4", AL: "~@7 x ~ x ~@2",
  AM: "~@10 x ~@4 x ~@3 x ~@4", AN: "~@9 x ~@4 x ~@3 x ~@5", AO: "~@8 x ~@4 x ~@3 x ~@6", AP: "~@7 x ~@4 x ~@11",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct(`<
  ~@44 A B A B A B A B A B A B A B A B ~@54 C D C D C D C D C D C D C D C D ~@34
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "~ x ~ x ~ x ~ x", D: "~ x ~ x ~ x ~@2",
})).gain(0.64)

stack(
  distortion_guitar, bass, electric_guitar_jazz, kick, snare, hihat, low_tom, mid_tom, open_hat, high_tom, crash, ride
)

More by Rage Against the Machine