Strudelify

Live Wire

Joel Gonzalez

KeyB♭ majorTempo224 bpm
0:00/0:00
// Live Wire — Joel Gonzalez
// 224 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (1/8 at bar 1, 4/4 at bar 2, 2/4 at bar 169, 4/4 at bar 170, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Transcription provider: pdmx. https://musescore.com/score/5933802; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 183 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(224/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 · "Guitar"
const distortion_guitar = note(`<
  A@4 B@4 C@4 D@4 E@4 F@8 G H I J K L ~@3 M N M N M N M N M N M N M N M O@4 D@4 P@4 D@4 Q@4 F@8 G H I J K L ~@3 M N M N
  M N M N M N M N M N M R S T@2 U V@2 W@7 X@2 Y@2 Z@2 AA@8 AB@8 AC@7 AD@2 AE@7 AF AG AH AI@2 AJ AK ~ AL AM AN@2 AO@5 AP
  AQ AR@2 AS AT@2 AU@2 ~
>`.pickRestart({
  A: "[~@7 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!4 g2@2]/4", // Bb5
  B: "[[bb2,f3,bb3]!2 ~@2 [c3,g3,c4]!2 g2 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!4 g2@2]/4", // Bb5 C5 Bb5
  C: "[c5 g4!2 c5 bb4!2 d5 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!4 g2@2]/4", // Bb5
  D: "[[bb2,f3,bb3]!2 ~@2 [c3,g3,c4]!2 g2 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!3 c4@3]/4", // Bb5 C5 Bb5
  E: "[bb3 g3 f3 d3 db3 c3 bb2 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!6]/4", // Bb5
  F: "[[g3,c4]!3 [g3,c4]@2 [d3,g3]!2 [f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!6]/4", // C5 G5 Bb5
  G: "[g3,c4]!4 g2!2 [d3,a3,d4]@2", H: "[eb3,bb3,eb4]", I: "d3 e3 c3 bb2!2 c3 a2@2", J: "[f3,c4,f4]",
  K: "e3@2 f3@2 d3@2 c3@2 c3@2 d3@2 b2 bb2 a2 ab2", L: "[g2,d3,g3] ~@7", M: "g2!2 [g3,bb3]@2 [a3,c4]@2 g2!2",
  N: "[g3,bb3] [g3,bb3]@2 [a3,c4]@2 g2!3", // Gm Am
  O: "[[g3,bb3]@2 [g3,bb3]@4 [a3,c4]@4 [a3,c4]@2 [ab3,a3,c4] [gb3,g3,b3] [f3,bb3]@6 g2@2 g2@2 g2@2 g2@2 g2@2 [bb2,f3,bb3]@6 g2@2 g2@2 g2@2 g2@2 g2@2 [bb2,f3,bb3]@6 g2@2 g2@2 g2@2 g2@2 g2@4]/4", // Gm Am Ab Gmaj7 Bb5
  P: "[bb3 g3 f3 d3 db3 c3 bb2 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!4 g2@2]/4", // Bb5
  Q: "[bb3 g3 f3 g2@4 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!5 [bb2,f3,bb3]@3 g2!6]/4", // Bb5
  R: "[g3,bb3]@2 [g3,bb3]@4 [a3,c4]@4 [a3,c4]@4 [c3,f3,g3,ab3,a3,bb3,b3,c4] [c3,d3,eb3,e3,f3,gb3,g3,ab3,a3]", // Gm Am
  S: "[g3,bb3]@13 [f4,bb4]@3, db3 ~@15", // Gm Bb5
  T: "[~ [f4,bb4]@2 ~ eb4 ~ d4 ~@2 c4 [b3,f4]@2 ~ a3 ~@2 g3 [gb3,db4]@2 [f3,c4]@13, ~@3 [e4,a4]@2 ab4@2 [db4,g4]@2 ~@3 [bb3,e4]@2 [ab3,eb4]@2 ~@16, ~@8 gb4@2 ~@5 d4@2 ~@15]/2", // Bb5 Bdim Gb5 F5 A5 Dbdim Bbdim Ab5
  U: "[f4,bb4]@4 [f4,bb4] e4 a4 [eb4,ab4] d4 [db4,g4] [c4,gb4] f4 b3 [bb3,e4] [a3,eb4] ab3", // Bb5 Ab5 Dbdim Cdim Bbdim Adim
  V: "[d4 [g3,db4] gb3 [f3,c4] [e3,b3] ~ [eb3,bb3]@13 [f4,bb4]@4 ~ e4 ~@2 d4 ~ db4 [c4,gb4]@2, ~@23 [f4,bb4]@2 a4@2 ~ g4@2 ~@2, ~@13 [eb4,ab4] ~@2]/2", // Gdim F5 E5 Eb5 Bb5 Cdim Bb5 Ab5
  W: "[~ [bb3,e4]@2 ~ ab3 [g3,d4]@2 ~ [f3,c4]@30 ~@6 bb3@34 [f3,c4]@34, [b3,f4]@2 ~ [a3,eb4]@2 ~@2 [gb3,db4]@2 ~@34 g3@35 ~@34]/7", // Bbdim G5 F5 Bdim Adim Gb5
  X: "[~ [eb3,bb3]@31]/2", Y: "[~ [f3,c4]@7]/2", Z: "[~@7 bb3@25, ~@3 g3@13]/2",
  AA: "[~@10 c4@34 [eb3,bb3]@35 [f3,c4]@34 g2@2 g2@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2, ~@9 f3@35 ~@84]/8", // Eb5 F5 Gm Am
  AB: "[~ [g3,bb3]@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 g2@2 g2@2 g2@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 [g3,bb3]@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 g2@2 g2@2 g2@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 [g3,bb3]@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 g2@2 g2@2 g2@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 [g3,bb3]@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 g2@2 g2@2 g2@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2]/8", // Gm Am Gm Am Gm Am Gm Am …
  AC: "[~ [g3,bb3]@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 g2@2 g2@2 g2@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 [g3,bb3]@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 g2@2 g2@2 g2@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 [g3,bb3]@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 g2@2 g2@2 g2@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 [g3,bb3]@2 [g3,bb3]@4 [a3,c4]@4 g2@2 g2@2 g2]/7", // Gm Am Gm Am Gm Am Gm Am …
  AD: "[~ [bb2,bb3]@3 [a2,a3]@4 g2@4 [a2,a3]@2 [bb2,bb3]@5 [a2,a3]@3 [bb2,bb3]@2 [c3,c4]@4 [bb2,bb3]@2 [a2,a3]@2]/2", // Bb A Bb A Bb C Bb A
  AE: "[[bb2,bb3]@4 [a2,a3]@4 g2@4 [a2,a3]@2 [bb2,bb3]@4 [a2,a3]@3 [bb2,bb3]@3 [c3,c4]@4 ~ [a2,a3]@2 [bb2,bb3]@4 [a2,a3]@4 g2@4 [a2,a3]@2 [bb2,bb3]@5 [a2,a3]@2 [bb2,bb3]@3 [c3,c4]@4 [bb2,bb3]@2 [a2,a3]@2 [bb2,bb3]@4 [a2,a3]@4 g2@4 [a2,a3]@2 [bb2,bb3]@4 [a2,a3]@3 [bb2,bb3]@2 [c3,c4]@4 [bb2,bb3]@2 [a2,a3]@2 [bb2,bb3]@4 [a2,a3]@4 g2@4 [a2,a3]@2 [bb2,bb3]@4, ~@14 [bb2,bb3] ~@41]/7", // Bb A Bb A Bb C A Bb …
  AF: "~ [a2,a3]@2 [bb2,bb3]@3 [c3,c4]@4 [bb2,bb3]@2 ~ [bb2,bb3]@3, ~@6 [a2,a3] ~", // A Bb C Bb A
  AG: "~ [a2,a3]@4 g2@4 [a2,a3]@2 [bb2,bb3]@5", AH: "[a2,a3]@2 [bb2,bb3]@3 [c3,c4]@4 [bb2,bb3]@2 [a2,a3]@2 [bb2,bb3]@3",
  AI: "[~ [a2,a3]@3 g2@4 [a2,a3]@2 [bb2,bb3]@5 [a2,a3]@2 [bb2,bb3]@3 [c3,c4]@4 [bb2,bb3]@2 [a2,a3]@2 [bb2,bb3]@4]/2", // A Bb A Bb C Bb A Bb
  AJ: "[a2,a3]@4 g2@4 ~ [bb2,bb3]@5 [a2,a3]@2, ~@4 [a2,a3] ~@3", // A Bb A
  AK: "~ [bb2,bb3]@2 [c3,c4]@4 [bb2,bb3]@2 [a2,a3]@2 ~@5", AL: "~@4 [bb2,f3,bb3]@3 g2", AM: "g2!4 [bb2,f3,bb3]@3 g2",
  AN: "[g2@2 g2 g2@2 g2@2 [bb2,f3,bb3]@6 g2@2 g2@2 g2@2 g2@2 g2@4 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~@3]/2", // Bb5
  AO: "[~ [c3,g3,c4]@2 ~@11 [bb2,f3,bb3]@6 g2@2 g2@2 g2@2 g2@2 g2@2 [bb2,f3,bb3]@6 g2@2 g2@2 g2@2 g2@2 ~ [bb2,f3,bb3]@6 g2@2 g2@2 g2@2 g2@2 g2@4 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~@4 [c3,g3,c4]@2 ~@7, ~@22 g2 ~@17]/5", // C5 Bb5 C5
  AP: "~@2 [bb2,f3,bb3]@3 g2!3", AQ: "g2!2 [bb2,f3,bb3]@3 g2!3",
  AR: "[g2@2 g2@2 [bb2,f3,bb3]@5 g2@2 g2@2 g2@2 g2@2 g2@4 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~@4 [c3,g3,c4]@2 ~]/2", // Bb5 C5
  AS: "~@11 [bb2,f3,bb3]@5", AT: "g2!5 [bb2,f3,bb3]@3",
  AU: "[g2@2 g2 g2@2 g2@2 g2@4 f2@2 e2@2 f2@2 f2@2 bb2@2 a2@2 f2@2 [g2,d3,g3]@4 [g2,d3,g3]@3]/2", // G5
})).s("gm_distortion_guitar").gain(0.4)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@8 A@4 B@4 C@4 D@8 E F G H I J ~@3 K@2 L@2 M@2 L@2 K@2 L@2 M@2 L N ~@3 O P Q P A@4 B@4 C@4 D@8 E F G H I J ~@3 K@2
  L@2 M@2 L@2 K@2 L@2 M@2 L@2 R@2 S T@2 U V@2 W X@2 Y@3 Z@2 AA AB@2 AC AD@2 AE AF@2 L AG@16 AH K L AI@5 K AJ@4 AK AL@2 ~
  AM AN AO@2 AP@5 AQ AR AS@2 AT AU@2 AV@2 ~
>`.pickRestart({
  A: "[~@7 bb1@3 g1!5 bb1@3 g1!5 bb1@3 g1!4 g1@2]/4", B: "[bb1!2 ~@2 c2!2 ~ bb1@3 g1!5 bb1@3 g1!5 bb1@3 g1!5 bb1]/4",
  C: "[bb1!2 ~@2 c2!2 ~ bb1@3 g1!5 bb1@3 g1!5 bb1@3 g1!6]/4", D: "[c2!3 c2@2 g1!2 bb1@3 g1!5 bb1@3 g1!5 bb1@3 g1!6]/4",
  E: "c2!4 g1!2 d2@2", F: "eb2!8", G: "d2@2 c2 bb1@2 c2 a1 eb2", H: "f2!8", I: "e2@4 d2@2 c2@4 d2@2 b1 bb1 a1 ab1",
  J: "g1 ~@3", K: "g1!8", L: "f1!8", M: "eb1!8", N: "f1!3 f1@2 f1@2 f1", O: "bb1!2 ~@2 c2@2 ~@2", P: "~ g1 ~ g1",
  Q: "~@2 g1@2 ~ g1 g1@2", R: "[g1@2 g1@2 g1@2 ~ g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 ~ g1@2 g1@2 g1@2 g1@2 g1@2 g1@2]/2",
  S: "~ g1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~ f1@2",
  T: "[f1@2 f1@2 f1@2 f1@2 ~ f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~ eb1@2 eb1@2 eb1@2 eb1@2 eb1@2]/2",
  U: "eb1@2 ~ eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 ~ eb1@2",
  V: "[eb1@2 eb1@2 eb1@2 eb1@2 f1@2 ~ f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~ f1@2 f1@2 f1@2 f1@2]/2",
  W: "f1@2 f1@2 ~ f1@2 f1@2 f1@2 g1@2 g1@2 ~",
  X: "[g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 ~ g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 ~ g1@2 g1@2 f1@2]/2",
  Y: "[f1@2 f1@2 ~ f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~ f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~ f1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 ~ eb1@2 eb1@2]/3",
  Z: "[eb1@2 eb1@2 eb1@2 ~ eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 ~ f1@2 f1@2 f1@2 f1@2 f1@2 f1@2]/2",
  AA: "~ f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~ f1@2",
  AB: "[f1@2 f1@2 f1@2 g1@2 ~ g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 ~ g1@2 g1@2 g1@2 g1@2 g1@2]/2",
  AC: "g1@2 ~ g1@2 g1@2 g1@2 f1@2 f1@2 ~ f1@2",
  AD: "[f1@2 f1@2 f1@2 f1@2 f1@2 ~ f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~ f1@2 f1@2 eb1@2 eb1@2]/2",
  AE: "eb1@2 eb1@2 ~ eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 ~",
  AF: "[eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 ~ eb1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~ f1@2]/2",
  AG: "[~ g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1]/8",
  AH: "~ g1@2 g1 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2",
  AI: "[f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1 f1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1 f1@2 f1@2 f1@2 f1@2 f1@2 g1@2]/5",
  AJ: "[g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 ~ f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 eb1@2 eb1@2 eb1 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2 eb1@2, ~@6 g1 ~@25]/4",
  AK: "eb1!6 f1!2", AL: "[f1@2 f1@2 f1@2 f1@2 f1 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 ~@5]/2",
  AM: "~@4 bb1@3 g1", AN: "g1!4 bb1@3 g1", AO: "[g1@2 g1 g1@2 g1@2 bb1@6 g1@2 g1@2 g1@2 g1@2 g1@4 bb1@2 bb1@2 ~@3]/2",
  AP: "[~ c2@2 ~@11 bb1@6 g1@2 g1@2 g1@2 g1@2 g1@2 bb1@6 g1@2 g1@2 g1@2 g1@2 ~ bb1@6 g1@2 g1@2 g1@2 g1@2 g1@4 bb1@2 bb1@2 ~@4 c2@2 ~@7, ~@22 g1 ~@17]/5",
  AQ: "~@2 bb1@3 g1!3", AR: "g1!2 bb1@3 g1!3",
  AS: "[g1@2 g1@2 bb1@5 g1@2 g1@2 g1@2 g1@2 g1@4 bb1@2 bb1@2 ~@4 c2@2 ~]/2", AT: "~@11 bb1@5", AU: "g1!5 bb1@3",
  AV: "[g1@2 g1 g1@2 g1@2 g1@4 f1@2 e1@2 f1@2 f1@2 bb1@2 a1@2 f1@2 g1@4 g1@3]/2",
})).s("gm_electric_bass_pick").gain(0.4)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A ~@7 A ~@3 A ~@11 B ~@23 C ~@3 D E F E ~@4 A ~@3 A ~@11 B ~@32 G ~@67 H ~
>`.pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "~@6 x!2", C: "~@7 x", D: "x!2 ~@2 x ~@3", E: "~ x ~ x", F: "~ x ~@2", G: "~@7 x ~ x ~@6",
  H: "~@7 x ~@8",
})).gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 A ~@7 B ~@43 A ~@7 C ~@23 D E ~@66 F G ~>".pickRestart({
  A: "~@2 x!4 ~@2", B: "~@6 x!2", C: "~@5 x!3", D: "~@7 x", E: "x ~ x ~@2 x ~@10", F: "~@15 x", G: "~ x ~ x ~ x ~@10",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@30 A ~ A ~@2 B ~@46 A ~ A ~@2 B ~@17 C D E F G H I J ~ K L M B J N E@2 M H O P E Q R S ~@53
>`.pickRestart({
  A: "~@3 x", B: "~@3 x ~@4", C: "~@4 x ~@2 x ~@8", D: "~@4 x ~@2 x", E: "~ x ~@14", F: "x ~ x ~@8 x ~@4",
  G: "~@5 x ~@2", H: "~@7 x", I: "~ x ~@2", J: "~@5 x ~@10", K: "x!2 ~@6", L: "~@3 x ~@6 x ~ x ~@3",
  M: "~@11 x ~ x ~@2", N: "~@9 x ~@5 x", O: "~@5 x ~ x ~@8", P: "~@3 x!2 ~@3", Q: "x", R: "~@4 x ~@5 x ~@4 x",
  S: "~@3 x ~@3 x ~@3 x ~@4",
})).gain(0.4)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@9 A B@2 ~ A B@2 ~@21 A B@6 C A B@6 C ~@8 A B@2 ~ A B@2 ~@21 A B@6 C A B@6 C ~@26 D E@6 F D E@6 F A B@2 G H@3 ~ I J
  E@2 K B L M ~@20
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x", D: "~@5 x ~@3 x ~@3 x ~@2", E: "~ x ~@3 x ~@3 x ~@3 x ~@2", F: "~ x ~@14",
  G: "x ~@3 x ~@3 x ~@3 x ~@2 x", H: "~@3 x ~@3 x ~@3 x ~@3 x", I: "~ x ~ x ~ x ~ x", J: "~@2 x ~@3 x ~@3 x ~@2 x ~@2",
  K: "~ x ~@2 x ~@3 x ~@3 x ~@3", L: "x ~@3 x ~@3 x ~@2 x ~@3 x", M: "~@3 x ~@12",
})).gain(0.4)

// drums · cowbell
const cowbell = s("cb").struct("<~@121 [~@7 x ~ x ~ x ~@4] [x!3 ~@5] ~@49 [~@11 x ~@3 x] [~ x ~@6] ~@9>").gain(0.4)

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

More by Joel Gonzalez