Strudelify
KeyD minorTempo153 bpm
0:00/0:00
// Freedom — Rage Against the Machine
// 153 bpm, 4/4, key D minor. 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: duplicate parts dropped: ch 7 "tk7" overdriven guitar (copy of ch 6 "tk6" overdriven guitar)
// note: Full arrangement: all 200 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(153/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.

// bass · electric bass pick · "tk3"
const bass = note(`<
  A B A C A B A D A B A E A B A F G H G I G H G I A B A C A B A D A B A E A B A F G H G H G H G I J K J K J K J K J K J
  K J K L M N@4 O P@2 Q@2 R S@4 T@4 U@8 V@4 W@5 X@2 W@5 X@2 ~@2 Y@6 Z@2 AA@14 AB AC@3 AD AE AF@2 AG@3 AH@4 AI@2 AJ@2 AK
  AL ~@6 AM AN AO@7 AP AQ AR AS AT@7 AU AV AW AX AY@7 AQ AZ AS BA BB@2 ~@4
>`.pickRestart({
  A: "d2 d1 f1 g1 c2@2 g1 f1", B: "g1@3 f1@3 d2@4 ~@2 d2@6 d1@3 f1@3", C: "g1@3 f1@3 d2@8 ~@10",
  D: "g1 f1 g2 gb2 f2 d2 db2 c2", E: "g1 f1 d2@2 ~@4", F: "g1 f1 d2 ~@5", G: "d1@6 d1@8 ~@7 d1@3", H: "d1@3 d1@4 ~@5",
  I: "d1@3 d1@7 ~@2", J: "d1@4 ~@2 d1@8 ~@7 d1@3", K: "d1@2 ~ d1@4 ~@5", L: "c2@5 ~ c2@5 ~ [d2,d3]@5 ~ d2@5 ~",
  M: "c2@4 d2@4 c2@5 c2@5 ~ [d2,d3]@5", // D
  N: "[~ d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5 ~ [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@5 c2@5 ~ [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5 ~ [d2,d3]@5 ~]/4", // D
  O: "d2@5 ~ c2@4 d2@4 c2@5 ~ c2@4", P: "[~ [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5 ~ [d2,d3]@5 ~ d2@5 ~ c2@3]/2",
  Q: "[~ d2@4 c2@5 ~ c2@5 [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5 ~]/2", R: "[d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@4",
  S: "[~@2 c2@5 [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5 ~ [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5 ~ [d2,d3]@24 ~]/4", // D
  T: "[~@2 d2@3 d1@3 f1@3 g1@3 c2@6 g1@3 f1@3 g1@3 f1@3 d2@4 ~@2 d2@6 d1@3 f1@3 d2@3 d1@3 f1@3 g1@3 c2@6 g1@3 f1@3 g1@3 f1@3 d2@8 ~@8]/4",
  U: "[~@2 d2@3 d1@3 f1@3 g1@3 c2@6 g1@3 f1@3 g1@3 f1@3 d2@4 ~@2 d2@6 d1@3 f1@3 d2@3 d1@3 f1@3 g1@3 c2@6 g1@3 f1@3 g1@3 f1@3 g2@3 gb2@3 f2@3 d2@3 db2@3 c2@3 d2@3 d1@3 f1@3 g1@3 c2@6 g1@3 f1@3 g1@3 f1@3 d2@4 ~@2 d2@6 d1@3 f1@3 d2@3 d1@3 f1@3 g1@3 c2@6 g1@3 f1@3 g1@3 f1@3 d2@6 ~@10]/8",
  V: "[~@2 d2@3 d1@3 f1@3 g1@3 c2@6 g1@3 f1@3 g1@3 f1@3 d2@4 ~@2 d2@6 d1@3 f1@3 d2@3 d1@3 f1@3 g1@3 c2@6 g1@3 f1@3 g1@3 f1@3 d2@3 ~@13]/4",
  W: "[~@2 d2@3 c2@3 d2@3 c2@3 d2@3 ~@3 g2@3 f2@3 g2@3 f2@3 g2@3 ~@3 c2@3 b1@3 c2@3 b1@3 c2@3 ~@3 g1@3 f1@3 g1@3 f1@3 g1@3 ~@6 [f2,c3]@8 ~ d2@3 c2@3 d2@3 c2@3 d2@3 ~@3 g2@3 f2@3 g2@3 f2@3 g2@3 ~, ~@71 f1@9 ~@40]/5", // F5
  X: "[~@2 c2@3 b1@3 c2@3 b1@3 c2@3 ~@3 g1@3 f1@3 g1@3 f1@3 g1@3 ~@6 [f2,c3]@7, ~@35 f1@9 ~@4]/2", // F5
  Y: "[~@2 d1@6 d1@8 ~@7 d1@3 d1@6 d1@8 ~@8]/2", Z: "[~@2 d1@6 d1@8 ~@7 d1@3 d1@6 d1@14 ~@2]/2",
  AA: "[~@2 d1@4 ~@2 d1@8 ~@7 d1@3 d1@4 ~@2 d1@8 ~@8]/2", AB: "~@2 c2@5 ~ c2@5 ~ [d2,d3]@5 ~ d2@4",
  AC: "[~@2 c2@4 d2@4 c2@5 ~ c2@5 ~ [d2,d3]@5 ~ d2@5 ~ c2@4 d2@3 c2@5 ~ c2@5 ~ [d2,d3]@5 ~ d2@5 ~ c2@4 d2@3]/3", // D
  AD: "~ c2@5 ~ c2@5 ~ [d2,d3]@5 ~ d2@5", AE: "~ c2@4 d2@4 c2@5 c2@5 ~ [d2,d3]@4",
  AF: "[~@2 d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5 ~ [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4]/2", // D
  AG: "[c2@5 c2@5 ~ [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@5 c2@4]/3", // D
  AH: "[~@2 [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5 ~ [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5 [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5]/4", // D
  AI: "[~ [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5 [d2,d3]@5 ~ d2@5 ~ c2@4]/2", // D
  AJ: "[d2@4 c2@5 ~ c2@5 ~ [d2,d3]@5 ~ d2@5 ~ c2@4 d2@4 c2@5 ~ c2@5 ~]/2", AK: "[d2,d3]@5 d2@5 ~ c2@4 d2@4 c2@5",
  AL: "~ c2@5 ~ [d2,d3]@4 ~@13", AM: "~ d1@4 f1@3 g1@4 ab1@4 a1@4 c2@4", AN: "db2 d2 d1 f1 g1 ab1",
  AO: "[a1@4 c2@4 db2@4 d2@4 d1@4 f1@3 g1@4 ab1@4 a1@4 c2@4 db2@4 d2@4 d1@4 f1@4 g1@4 ab1@4 a1@4 c2@4 db2@4 d2@4 d1@4 f1@4 g1@3 ab1@4 a1@4 c2@4 db2@4 d2@4 d1@4 f1@4 g1@4 ab1@4 a1@4 c2@4 db2@4 d2@4 d1@4 f1@4 g1@4 ab1@3 a1@4 c2@4 db2@3]/7",
  AP: "~ d2@4 d1@4 f1@4 g1@4 ab1@4 a1@3", AQ: "~ c2@4 db2@4 d2@4 d1@4 f1@4 g1@3",
  AR: "~ ab1@3 a1@4 c2@4 db2@4 d2@4 d1@4", AS: "f1 g1 ab1 a1 c2 db2",
  AT: "[d2@4 d1@4 f1@4 g1@4 ab1@4 a1@3 c2@4 db2@4 d2@4 d1@4 f1@4 g1@4 ab1@4 a1@4 c2@4 db2@4 d2@4 d1@4 f1@4 g1@4 ab1@4 a1@3 c2@4 db2@4 d2@4 d1@4 f1@4 g1@4 ab1@4 a1@4 c2@4 db2@4 d2@4 d1@4 f1@4 g1@4 ab1@4 a1@4 c2@3 db2@4 d2@4 d1@4 f1@3]/7",
  AU: "~ g1@4 ab1@4 a1@4 c2@4 db2@4 d2@3", AV: "~ d1@4 f1@4 g1@4 ab1@4 a1@4 c2@3",
  AW: "~ db2@3 d2@4 d1@4 f1@4 g1@4 ab1@4", AX: "a1 c2 db2 d2 d1 f1",
  AY: "[g1@4 ab1@4 a1@4 c2@4 db2@3 d2@4 d1@4 f1@4 g1@4 ab1@4 a1@4 c2@4 db2@4 d2@4 d1@4 f1@4 g1@4 ab1@4 a1@4 c2@4 db2@4 d2@3 d1@4 f1@4 g1@4 ab1@4 a1@4 c2@4 db2@4 d2@4 d1@4 f1@4 g1@4 ab1@4 a1@4 c2@4 db2@4 d2@4 d1@3 f1@4 g1@4 ab1@4 a1@3]/7",
  AZ: "~ ab1@4 a1@4 c2@4 db2@4 d2@4 d1@3", BA: "d2 d1 f1 g1 ab1 a1",
  BB: "[c2@4 db2@4 d2@4 d1@4 f1@3 g1@4 ab1@4 a1@4 c2@4 db2@4 d2@4 ~@5]/2",
})).s("gm_electric_bass_pick").gain(0.46)

// chords · overdriven guitar · "tk6"
const overdriven_guitar = note(`<
  A B C D A E A F A B C G A E A H I J I K I J I L A B C D A E A F A B C G A E A H I J I M I J I M ~@4 N@4 ~@3 O ~@2 P Q
  R@4 S@3 T U V W@4 ~@16 X@5 Y@2 X@5 Y@2 Z AA@2 AB Z AC Z AB Z AC ~@4 AD@5 AE AF@2 ~@2 AG AH@3 AI@2 AJ AK AL@3 AM AN@5
  AO U AP@6 AQ AR AS AT AU@7 AV AW AX AY AZ@7 BA BB BC BD BE@7 BF BG BH BI BJ@6
>`.pickRestart({
  A: "[d3,d4] [d2,d3] [f2,f3] [g2,g3] [c3,c4]@2 [g2,g3] [f2,f3]", // D F G C G F
  B: "[g2,g3]@3 [f2,f3]@3 [d3,d4]@4 ~@2 [d3,d4]@6 d3@3 [f2,f3]@3", // G F D F
  C: "[d3,d4] d3 [f2,f3] [g2,g3] [c3,c4]@2 [g2,g3] [f2,f3]", // D F G C G F
  D: "[g2,g3]@3 [f2,f3]@3 [d3,d4]@6 d2@2 ~ d2@2 ~ d3@6, ~@9 d2 ~@2", // G F D
  E: "[g2,g3]@3 [f2,f3]@3 [d3,d4]@4 ~@2 [d3,d4]@6 [d2,d3]@3 [f2,f3]@3", // G F D F
  F: "[g2,g3] [f2,f3] [g3,g4] [gb3,gb4] [f3,f4] [d3,d4] [db3,db4] [c3,c4]", // G F G Gb F D Db C
  G: "[g2,g3] [f2,f3] [d3,d4]@2 [d4,d5]@2 [d3,d4]@2", H: "[g2,g3] [f2,f3] [d3,d4] ~@5",
  I: "[a2,d3]@2 ~@10 [a2,d3]@3 [a2,d3]@3 ~@6", J: "~@6 [a2,d3]@2 ~@4 [a2,d3]@3 [a2,d3]@3 ~@6",
  K: "~@6 c3@3 b2@3 c3@3 c3@4 ~@5", L: "~@2 c3 b2 c3 c3@3", M: "~@2 c3 b2 c3!2 ~@2", N: "[a2,d3,g3,d4]/4",
  O: "~@3 [g2,e3]@7 ~@2", // C
  P: "[c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [g2,g3]@2 [f2,f3]@2 [d3,d4]@5 ~ [d3,d4]@2 [c3,c4]@2 [g2,g3]@2", // C G F D C G
  Q: "[c3,c4]@4 [d3,d4]@4 [c3,c4] [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [g2,g3]@2 [f2,f3]@2 [d3,d4]@5", // C D C G F D
  R: "[~ [d3,d4]@2 [c3,c4]@2 [g2,g3]@2 [c3,c4]@4 [d3,d4]@4 [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [g2,g3]@2 [f2,f3]@2 [d3,d4]@5 ~ [d3,d4]@2 [c3,c4]@2 [g2,g3]@2 [c3,c4]@4 [d3,d4]@4 [c3,c4]@2 [c3,c4] [c3,c4]@2 [c3,c4]@2 [g2,g3]@2 [f2,f3]@2 [d3,d4]@5 ~ [d3,d4]@2 [c3,c4]@2 [g2,g3]@2 [c3,c4]@4 [d3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@5 ~]/4", // D C G C D C G F …
  S: "[[d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 ~ [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@3, ~@10 [c3,g3,c4] ~@25]/3", // D5 C5 G5 C5 D5 C5 G5 F5 …
  T: "~ [d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 ~ [f2,c3,f3]@2 [d3,a3,d4]@5 ~ [d3,a3,d4]@2, ~@13 [g2,d3,g3]@2 ~@9", // D5 C5 F5 D5 G5
  U: "[c3,g3,c4] [g2,d3,g3] [c3,g3,c4]@2 [d3,a3,d4]@2 [c3,g3,c4]!4 [g2,d3,g3] [f2,c3,f3]", // C5 G5 C5 D5 C5 G5 F5
  V: "[d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2", // D5 C5 G5 C5 D5 C5
  W: "[[c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 ~ [d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@24 ~, ~@3 [f2,c3,f3] ~@44]/4", // C5 G5 D5 C5 G5 C5 D5 C5 …
  X: "[~@2 [d2,d3]@3 [c2,c3]@3 [d2,d3]@3 [c2,c3]@3 [d2,d3]@3 ~@3 [g2,g3]@3 [f2,f3]@3 [g2,g3]@3 [f2,f3]@3 [g2,g3]@3 ~@3 [c2,c3]@3 [b1,b2]@3 [c2,c3]@3 [b1,b2]@3 [c2,c3]@3 ~@3 [g1,g2]@3 [f1,f2]@3 [g1,g2]@3 [f1,f2]@3 [g1,g2]@3 f2@6 [f2,c3,f3]@8 ~ [d2,d3]@3 [c2,c3]@3 [d2,d3]@3 [c2,c3]@3 [d2,d3]@3 ~@3 [g2,g3]@3 [f2,f3]@3 [g2,g3]@3 [f2,f3]@3 [g2,g3]@3 ~, ~@71 f1@9 ~@40]/5", // D C D C D G F G …
  Y: "[~@2 [c2,c3]@3 [b1,b2]@3 [c2,c3]@3 [b1,b2]@3 [c2,c3]@3 ~@3 [g1,g2]@3 [f1,f2]@3 [g1,g2]@3 [f1,f2]@3 [g1,g2]@3 f2@6 [f2,c3,f3]@7, ~@35 f1@9 ~@4]/2", // C B C B C G F G …
  Z: "~@2 [a2,d3]@2 ~@10 [a2,d3]@3 [a2,d3]@3 ~@4", // D5
  AA: "[~@8 [a2,d3]@2 ~@4 [a2,d3]@12 [a2,d3]@2 ~@10 [a2,d3]@3 [a2,d3]@3 ~@4]/2", // D5
  AB: "~@8 [a2,d3]@2 ~@4 [a2,d3]@3 [a2,d3]@3 ~@4", AC: "~@8 c3@3 b2@3 c3@3 c3@3 ~@4", AD: "[~ [a2,d3,g3,d4]@48 ~@11]/5",
  AE: "~@4 [g2,e3]@7 ~", AF: "[~@7 [g2,e3]@7 ~@10]/2",
  AG: "~@2 [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [g2,g3]@2 [f2,f3]@2 [d3,d4]@5 ~ [d3,d4]@2 [c3,c4]@2", // C G F D C
  AH: "[[g2,g3]@2 [c3,c4]@4 [d3,d4]@4 [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [g2,g3]@2 [f2,f3]@2 [d3,d4]@5 ~ [d3,d4]@2 [c3,c4]@2 [g2,g3]@2 [c3,c4]@4 [d3,d4]@3 [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [g2,g3]@2 [f2,f3]@2 [d3,d4]@5 ~ [d3,d4]@2 [c3,c4]@2 [g2,g3]@2 [c3,c4]@4 [d3,d4]@3]/3", // G C D C G F D C …
  AI: "[~ [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [c3,c4]@2 [g2,g3]@2 [f2,f3]@2 [d3,d4]@5 ~ [d3,d4]@2 [c3,c4]@2 [g2,g3]@2 [c3,c4]@4 [d3,d4]@4 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@4]/2", // C G F D C G C D …
  AJ: "~ [d3,a3,d4] [c3,g3,c4] [g2,d3,g3] [c3,g3,c4]@2 [d3,a3,d4]@2 [c3,g3,c4]!4", // D5 C5 G5 C5 D5 C5
  AK: "[g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4", // G5 F5 D5 C5 G5 C5 D5
  AL: "[[c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [g2,d3,g3]@2]/3", // C5 G5 F5 D5 C5 G5 C5 D5 …
  AM: "[f2,c3,f3]@2 [d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4 [c3,g3,c4]@2", // F5 D5 C5 G5 C5 D5 C5
  AN: "[[c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 ~ [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 ~ [d3,a3,d4]@5 ~ [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4, ~@36 [c3,g3,c4]@2 ~@65 [f2,c3,f3]@2 ~@15]/5", // C5 G5 F5 D5 C5 G5 C5 D5 …
  AO: "[d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3,d4]@5 ~ [d3,a3,d4]@2", // D5 C5 G5 F5 D5
  AP: "[[d3,a3,d4]@5 [d3,a3,d4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [c3,g3,c4]@4 [d3,a3,d4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [g2,d3,g3]@2 [f2,c3,f3]@2 [d3,a3]@35 d2@4 f2@4 g2@4 ab2@4 a2@4 c3@4 db3@4 d3@4 d2@4 f2@4 g2@4 ab2@4 a2@4 c3@4 db3@4 d3@4 d2@3 f2@4 g2@4 ab2@3, ~@31 d4@51 ~@62, ~@31 a2@20 ~@93]/6", // D5 C5 G5 C5 D5 C5 G5 F5 …
  AQ: "~ a2@4 c3@4 db3@4 d3@4 d2@4 f2@3", AR: "~ g2@4 ab2@4 a2@4 c3@4 db3@4 d3@3",
  AS: "~ d2@4 f2@3 g2@4 ab2@4 a2@4 c3@4", AT: "db3 d3 d2 f2 g2 ab2",
  AU: "[a2@4 c3@4 db3@4 d3@4 d2@4 f2@3 g2@4 ab2@4 a2@4 c3@4 db3@4 d3@4 d2@4 f2@4 g2@4 ab2@4 a2@4 c3@4 db3@4 d3@4 d2@4 f2@4 g2@3 ab2@4 a2@4 c3@4 db3@4 d3@4 d2@4 f2@4 g2@4 ab2@4 a2@4 c3@4 db3@4 d3@4 d2@4 f2@4 g2@4 ab2@3 a2@4 c3@4 db3@3]/7",
  AV: "~ d3@4 d2@4 f2@4 g2@4 ab2@4 a2@3", AW: "~ c3@4 db3@4 d3@4 d2@4 f2@4 g2@3",
  AX: "~ ab2@3 a2@4 c3@4 db3@4 d3@4 d2@4", AY: "f2 g2 ab2 a2 c3 db3",
  AZ: "[d3@4 d2@4 f2@4 g2@4 ab2@4 a2@3 c3@4 db3@4 d3@4 d2@4 f2@4 g2@4 ab2@4 a2@4 c3@4 db3@4 d3@4 [d2,a2,d3]@4 [f2,c3,f3]@4 [g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@3 [c3,g3,c4]@4 [db3,ab3,db4]@4 [d3,a3,d4]@4 [d2,a2,d3]@4 [f2,c3,f3]@4 [g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@4 [c3,g3,c4]@4 [db3,ab3,db4]@4 [d3,a3,d4]@4 [d2,a2,d3]@4 [f2,c3,f3]@4 [g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@4 [c3,g3,c4]@3 [db3,ab3,db4]@4 [d3,a3,d4]@4 [d2,a2,d3]@4 [f2,c3,f3]@3]/7", // D5 F5 G5 Ab5 A5 C5 Db5 D5 …
  BA: "~ [g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@4 [c3,g3,c4]@4 [db3,ab3,db4]@4 [d3,a3,d4]@3", // G5 Ab5 A5 C5 Db5 D5
  BB: "~ [d2,a2,d3]@4 [f2,c3,f3]@4 [g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@4 [c3,g3,c4]@3", // D5 F5 G5 Ab5 A5 C5
  BC: "~ [db3,ab3,db4]@3 [d3,a3,d4]@4 [d2,a2,d3]@4 [f2,c3,f3]@4 [g2,d3,g3]@4 [ab2,eb3,ab3]@4", // Db5 D5 F5 G5 Ab5
  BD: "[a2,e3,a3] [c3,g3,c4] [db3,ab3,db4] [d3,a3,d4] [d2,a2,d3] [f2,c3,f3]", // A5 C5 Db5 D5 F5
  BE: "[[g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@4 [c3,g3,c4]@4 [db3,ab3,db4]@3 [d3,a3,d4]@4 [d2,a2,d3]@4 [f2,c3,f3]@4 [g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@4 [c3,g3,c4]@4 [db3,ab3,db4]@4 [d3,a3,d4]@4 [d2,a2,d3]@4 [f2,c3,f3]@4 [g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@4 [c3,g3,c4]@4 [db3,ab3,db4]@4 [d3,a3,d4]@3 [d2,a2,d3]@4 [f2,c3,f3]@4 [g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@4 [c3,g3,c4]@4 [db3,ab3,db4]@4 [d3,a3,d4]@4 [d2,a2,d3]@4 [f2,c3,f3]@4 [g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@4 [c3,g3,c4]@4 [db3,ab3,db4]@4 [d3,a3,d4]@4 [d2,a2,d3]@3 [f2,c3,f3]@4 [g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@3]/7", // G5 Ab5 A5 C5 Db5 D5 F5 G5 …
  BF: "~ [c3,g3,c4]@4 [db3,ab3,db4]@4 [d3,a3,d4]@4 [d2,a2,d3]@4 [f2,c3,f3]@4 [g2,d3,g3]@3", // C5 Db5 D5 F5 G5
  BG: "~ [ab2,eb3,ab3]@4 [a2,e3,a3]@4 [c3,g3,c4]@4 [db3,ab3,db4]@4 [d3,a3,d4]@4 [d2,a2,d3]@3", // Ab5 A5 C5 Db5 D5
  BH: "[f2,c3,f3] [g2,d3,g3] [ab2,eb3,ab3] [a2,e3,a3] [c3,g3,c4] [db3,ab3,db4]", // F5 G5 Ab5 A5 C5 Db5
  BI: "[d3,a3,d4] [d2,a2,d3] [f2,c3,f3] [g2,d3,g3] [ab2,eb3,ab3] [a2,e3,a3]", // D5 F5 G5 Ab5 A5
  BJ: "[[c3,g3,c4]@4 [db3,ab3,db4]@4 [d3,a3,d4]@4 [d2,a2,d3]@4 [f2,c3,f3]@3 [g2,d3,g3]@4 [ab2,eb3,ab3]@4 [a2,e3,a3]@4 [c3,g3,c4]@4 [db3,ab3,db4]@4 [d2,a2,d3,a3,d4]@20 [d2,a2,d3,a3,d4]@83 ~@2]/6", // C5 Db5 D5 F5 G5 Ab5 A5 C5 …
})).s("gm_overdriven_guitar").gain(0.5).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  A B A C A B A D A B A C A B A E F G F G F G F G A B A C A B A D A B A C A B A E F G F G F G F G F G F G F G F G F G F
  G F G H I J K L M N O P Q R S T U V W X Y X Z X Y X AA X Y X AB X Y X AC X AD X AE AF AG AH X AD X AE AF AG AH ~@2 AI
  AJ AI AJ AI AJ AI AJ AI AJ AI AJ AI AJ AI AJ AI AJ AI AJ AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB
  BC BD BE ~@20 BF BG BH BI BJ BK BL BM BN BO BP BQ@2 BR BS BT BU BV BW BX BY BZ CA CB CC CD CE
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x!3 ~@5", C: "x!3 ~ x!3 ~", D: "x!8", E: "x ~@2 x ~@6 x ~@4 x ~@2 x ~@5", F: "x ~ x ~@4 x",
  G: "x!2 ~@2", H: "x!3 ~ x ~@3 x ~ x!2", I: "~@4 x ~@3 x!2 ~ x ~@3 x ~@7 x", J: "~@3 x ~ x ~@5 x ~@3 x ~ x ~ x ~@3 x",
  K: "~@7 x ~@3 x ~ x ~@5 x ~@3 x", L: "~ x!2 ~@3 x ~@7 x ~@3 x ~ x ~@3", M: "~ x ~ x!3 ~ x ~@3 x",
  N: "~@2 x ~ x ~@5 x ~@3 x ~ x ~ x ~@2 x ~@2", O: "~@5 x ~@3 x ~ x ~@5 x ~@3 x ~ x",
  P: "~ x ~@3 x ~@7 x ~@3 x ~ x ~@4", Q: "~ x ~@3 x ~ x ~ x ~@3 x ~@6 x ~@3", R: "x!2 ~@2 x ~ x!3 ~ x ~",
  S: "~@2 x ~ x!2 ~@2 x ~ x!2", T: "x ~@3 x ~@6 x ~@3 x ~ x ~@5 x", U: "~@3 x ~ x ~ x ~@3 x ~@7 x ~@3 x",
  V: "~ x ~@5 x ~@3 x ~ x ~ x ~@3 x ~@3 x", W: "~@23 x", X: "~@2 x ~@8 x ~@12", Y: "~@2 x ~@2 x ~@2 x ~@15",
  Z: "~@2 x ~@2 x ~@2 x ~@4 x ~@3 x ~@2 x ~@3", AA: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
  AB: "~@2 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@3", AC: "~@2 x ~@2 x ~@7 x ~@3 x ~@2 x ~@3", AD: "~@2 x ~@2 x ~@18",
  AE: "~@2 x ~@11 x ~@8 x", AF: "~@14 x ~@2 x ~@6", AG: "~@14 x ~@8 x", AH: "~@7 x ~@4", AI: "~@2 x ~@5 x ~@14 x",
  AJ: "~ x ~@2 x ~@7", AK: "~ x!3 ~ x ~@3 x ~ x", AL: "x ~@2 x ~ x!3 ~ x ~@2",
  AM: "~@2 x ~@3 x ~ x ~@5 x ~@2 x ~ x ~ x ~@2", AN: "~ x ~@7 x ~@3 x ~ x ~@5 x ~@2",
  AO: "~ x ~ x ~ x ~@3 x ~@7 x ~@3 x ~ x", AP: "~@5 x ~@3 x!2 ~ x ~@3 x ~@7", AQ: "x ~ x!2 ~@2 x ~ x!3 ~",
  AR: "x ~@3 x ~ x!2 ~@2 x ~", AS: "x ~ x!2 ~@3 x ~@7 x ~@3 x ~ x ~@2", AT: "~ x ~@6", AU: "~@15 x ~@4 x ~@3",
  AV: "~ x ~@4 x ~@4 x", AW: "~@2 x ~@2 x ~@4 x ~", AX: "~@6 x ~@5 x ~@4 x ~@6", AY: "~@3 x ~@9 x ~@5 x ~@4",
  AZ: "~ x ~@9 x ~@9 x ~@2", BA: "~@3 x ~@4 x ~@9 x ~@5", BB: "~@2 x ~@2 x ~@2 x ~@3", BC: "~ x ~@4 x ~@2 x ~@2",
  BD: "x ~@8 x ~@9 x ~@4", BE: "~ x ~@5 x ~@16", BF: "~@11 x ~@3 x ~@3 x ~@3 x",
  BG: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x", BH: "~@3 x ~@3 x ~@6 x ~@3 x ~@3 x ~", BI: "~ x ~ x ~ x ~ x ~@3 x",
  BJ: "~ x ~ x ~ x ~ x ~ x ~ x", BK: "~@6 x ~@2 x ~@3 x ~@3 x ~@3 x ~@2", BL: "~ x ~@3 x ~@7 x ~@3 x ~@3 x ~@2",
  BM: "~ x ~@3 x ~@3 x ~@3 x ~@7 x ~@2", BN: "~ x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3", BO: "~ x!5",
  BP: "x ~@3 x ~@7 x ~@3 x ~@2 x ~@3 x", BQ: "~@3 x ~@3 x ~@3 x ~@7 x ~@3 x", BR: "~@3 x ~@7 x ~@2 x ~@3 x ~@5",
  BS: "~ x ~ x ~ x ~@3 x ~ x", BT: "~ x ~@3 x ~ x ~ x ~@2", BU: "~@2 x ~@3 x ~@2 x ~@7 x ~@3 x ~@2",
  BV: "~ x ~@7 x ~@3 x ~@3 x ~@6", BW: "~ x ~@3 x ~@3 x ~@7 x ~@3 x ~@2", BX: "x ~ x!3 ~", BY: "x!3 ~ x!2",
  BZ: "x ~@7 x ~@3 x ~@3 x ~@2 x ~@3 x", CA: "~@3 x ~@3 x ~@3 x ~@3 x ~@8", CB: "~@11 x ~@11 x", CC: "~@11 x ~@10 x ~",
  CD: "~@5 x ~@6", CE: "~@3 x",
})).gain(0.51)

// drums · rim
const rim = s("rim").struct(`<
  ~@16 A B A B A B A B ~@16 A B A B A B A B A B A B A B A B A B A B A ~@49 C D C D C D C D C D C D C D C D C D C D C
  ~@69
>`.pickRestart({
  A: "~@3 x!2 ~", B: "~@12 x ~@3 x ~@4 x ~@2", C: "~@14 x ~@4 x ~@4", D: "~@14 x ~@4 x ~@3 x",
})).gain(0.51)

// drums · snare
const snare = s("sd").struct(`<
  A@3 ~ A@3 ~ A@3 ~ A@3 B ~@8 A@3 ~ A@3 ~ A@3 ~ A@3 B ~@22 C D E F G H I J K L M N O K P Q R@7 ~ R@3 ~ R@3 S R@3 T U@2 V
  R@3 T U@2 V ~@24 W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ ~@19 AR AS AT AU AV ~ U AW AX ~ AY AZ BA@2
  BB R BC BD BE BD BF A BG AQ BH BI BJ AV
>`.pickRestart({
  A: "~ x", B: "~@4 x ~@2 x", C: "x!4", D: "x ~@3 x ~@3 x ~@4 x ~@5 x ~@4", E: "~ x ~@5 x ~@3 x ~@3 x ~@5 x ~@2",
  F: "~@3 x ~@5 x ~@5 x ~@3 x ~@3 x", G: "~@2 x ~@2 x ~@2 x ~@2 x", H: "~ x ~ x ~@2 x ~@2 x ~@2",
  I: "x ~@2 x ~ x ~ x ~@2 x ~", J: "~ x ~@5 x ~@5 x ~@3 x ~@3 x ~@2", K: "~ x ~ x ~ x ~ x",
  L: "~ x ~@3 x ~@5 x ~@4 x ~@5 x ~", M: "~@2 x ~ x ~ x ~@2 x ~@2", N: "x ~@2 x ~@2 x ~ x ~ x ~",
  O: "~@2 x ~@4 x ~@5 x ~@5 x ~@3 x", P: "~@3 x ~@3 x ~@3 x ~@5 x ~@5 x", Q: "~@14 x ~@2 x ~@2 x ~@3", R: "~@7 x ~@4",
  S: "~@14 x ~@8 x", T: "~@5 x ~@18", U: "~ x ~@10", V: "~@2 x ~@14 x ~@6", W: "~ x ~@2 x ~@2 x ~@2 x ~",
  X: "~ x ~ x ~ x ~@2 x ~@2 x", Y: "~@4 x ~@5 x ~@3 x ~@2 x ~@5 x", Z: "~@5 x ~@5 x ~@5 x ~@3 x ~@2",
  AA: "~ x ~@5 x ~@5 x ~@5 x ~@4", AB: "~ x ~@3 x ~@3 x ~@4 x ~@5 x ~@3", AC: "~ x ~@2 x ~ x ~ x ~@2 x",
  AD: "~@2 x ~@2 x ~@2 x ~ x ~", AE: "x ~@4 x ~@5 x ~@5 x ~@5 x", AF: "~@3 x ~@3 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  AG: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@8 x ~", AH: "~@4 x ~@2 x ~ x ~@2", AI: "~@3 x ~@4 x ~@2 x",
  AJ: "~@2 x ~@10 x ~@9 x", AK: "~@5 x ~@3 x ~@11 x ~@2", AL: "~@7 x ~@5 x ~@3 x ~@6", AM: "~@5 x ~@8 x ~@5 x ~@3",
  AN: "x ~@5 x ~@4 x", AO: "~ x!2 ~@2 x", AP: "~@5 x ~@5 x ~@3 x ~@8", AQ: "~ x ~@6",
  AR: "~@4 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x", AS: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  AT: "~@3 x ~@3 x ~@3 x ~@3 x ~@8", AU: "~@11 x ~@12", AV: "~@3 x", AW: "~@3 x ~@4", AX: "~@17 x ~@6", AY: "x",
  AZ: "~ x ~", BA: "~@5 x ~@2", BB: "~@7 x ~@14 x ~", BC: "~@3 x ~@7 x", BD: "~@13 x ~@10", BE: "~@5 x ~@15 x ~@2",
  BF: "~ x ~@3 x", BG: "~ x ~@4", BH: "~@11 x ~@11 x", BI: "~@11 x ~@10 x ~", BJ: "~@5 x ~@6",
})).gain(0.51)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@16 A@7 B ~@16 A@21 C ~@48 D@21 E ~@68>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4", C: "x!2 ~@2", D: "~@5 x ~@5 x ~@5 x ~@5 x", E: "~ x ~@2 x ~@7",
})).gain(0.51)

// drums · mid tom
const mid_tom = s("mt").struct("<~@77 [~ x ~] ~@122>").gain(0.51)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@7 B A@7 B A@7 C A@7 B A@7 B A@21 ~ D E F@2 G@2 H I@2 J D@2 K F@2 ~@17 L@3 M L@2 N L@3 M L@2 N ~@2 L@21 ~ G@2 O I@2 P
  D@2 Q R S T@2 U V@2 W X@2 Y R ~@32 Z AA T@2 U V@2 X@2 AB ~@5
>`.pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "x ~ x ~ x ~ x!2", D: "x!6", E: "x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x",
  F: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x", G: "~ x ~ x ~ x ~ x ~ x ~ x", H: "~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@2",
  I: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", J: "~ x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3",
  K: "x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x", L: "~ x ~@2 x ~@2 x ~@2 x ~", M: "~ x ~@5 x ~@2 x ~",
  N: "~ x ~@2 x ~@2 x ~@4", O: "~@2 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@2", P: "~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3",
  Q: "x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x", R: "~ x ~@6", S: "~@15 x ~@6 x ~", T: "~@3 x ~@3 x ~@3 x",
  U: "~@6 x ~@6 x ~@7 x ~@2", V: "~@5 x ~@7 x ~@7 x ~@2", W: "~@5 x ~@6 x ~@7 x ~@3", X: "~ x ~ x ~ x",
  Y: "~@3 x ~@7 x ~@7 x ~@4", Z: "~@7 x ~@7 x ~@7 x", AA: "~@7 x ~@6 x ~@7 x ~", AB: "~ x ~@4",
})).gain(0.51)

// drums · crash
// … 39 more lines

More by Rage Against the Machine