Strudelify

Hands All Over

Soundgarden

KeyD majorTempo100 bpm
0:00/0:00
// Hands All Over — Soundgarden
// 100 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 75 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · electric guitar clean · "Guitar" · A B C D
const electric_guitar_clean = note(`<
  ~@4
  [~@17 [a3,a4]@6 ~@2 [a3,a4]@6 ~]
  [~ [a3,a4]@6 ~@2 a4@4 ~@4 [b3,b4]@6 ~@2 [b3,b4]@6 ~, ~@4 a3@3 ~@9]
  [~@2 [b3,b4]@6 ~@2 b4@4 ~@5 c4@5 ~@2 [c4,c5]@5 ~, ~@9 b3@5 ~@4 c5@4 ~@10]
  [~@2 [c4,c5]@5 ~@3 [c4,c5]@4 ~@5 [d4,d5]@4 ~@3 [d4,d5]@6]
  [~@3 [d4,d5]@5 ~@3 [d4,d5]@5 ~@16]
  ~@66
>`).s("gm_electric_guitar_clean").gain(0.4).pan(0.7)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A@6 B C D E F G H I J K L M N O P Q R S T@2 U@2 V W@8 X@3 Y@3 Z@2 AA AB@2 AC AD AE AF AG AH AI AJ AK@5 AL AM@2 AN AO
  AP AQ AR AS AT AU AV AW AX
>`.pickRestart({
  A: "[~@14 d2@27 ~ d2@30 ~@20 d3@16 ~@17 d3@15 d2@8 f2@3 ~ d2@6 ~ d2@6 ~@9 d2@7 g2@5 d2@2 d2@3 ~, ~@75 d2@30 ~@3 d2@20 ~@37 d3@12 ~@15]/6",
  B: "d2@6 d3@8 d2@3 d2@5 g2@4 d2 ~@2 d2@2 ~", C: "~ d2 ~ d2@4 d3@8 d2@2 ~ d2@5 g2@4 d2 ~ d2@2 ~",
  D: "~ d2 ~ d2@3 ~ d3@8 d2@2 ~@2 d2@3 ~ g2@3 ~ d2 ~ d2@2 ~, ~@23 f2 ~@8",
  E: "~ d2 ~ d2@3 ~ d3@8 d2@2 ~@2 d2@3 ~ g2@3 ~ d2@2 d2@3",
  F: "~ d2 ~ d2@3 ~@2 d3@7 d2@2 ~@2 d2@3 ~ g2@2 ~@2 d2 ~ d2@2 ~",
  G: "~ d2 ~ d2@2 ~ d3@9 d2@2 ~ d2@3 ~ g2@3 ~ d2 ~ d2@2 ~@2", H: "d2@2 d2@4 d3@9 d2@2 ~ d2@3 ~@2 g2@3 ~ d2 ~ d2@2 ~",
  I: "~ d2 d2@3 ~@2 d3@7 d2@2 ~@2 d2@3 ~ g2@3 ~ d2 ~ d2@2 ~@2",
  J: "d2 ~ d2@2 ~@2 d3@8 d2@2 ~@2 d2@2 ~@2 g2@2 ~@2 d2 ~ d2@2 ~@2",
  K: "d2 ~ d2@2 ~ d3@9 d2 ~@3 d2@2 ~@2 g2@2 ~@2 d2 d2@2 ~@2 d2",
  L: "~@2 d2@2 ~ d3@8 ~ d2@2 ~@2 d2@2 ~@2 g2@2 ~@2 d2 ~ d2@2 ~@2",
  M: "d2 ~ d2@2 ~@2 d3@8 d2@2 ~@2 d2@2 ~@2 g2@2 ~@3 d2 ~ d2@2 ~",
  N: "~ d2 ~ d2@2 ~@2 d3@8 d2@2 ~ d2@2 ~@3 g2@2 ~ d2@2 d2@2 ~@2",
  O: "d2 ~ d2@2 ~@3 d3@8 d2@2 ~ d2@2 ~@3 g2@3 d2@2 ~ d2@3", P: "~ d2 d2@3 ~@2 d3@7 ~ d2@2 ~@2 d2@3 g2@3 ~ d2 ~ d2@3 ~",
  Q: "d2@2 d2@4 ~ d3@8 d2@2 ~@2 d2@3 ~ a2@3 d2@2 d2@3 ~", R: "d2@2 ~ d2@3 ~ d3@8 d2@2 ~ d2@4 g2@3 d2 ~@2 d2@2 ~@2",
  S: "d2 ~ d2@3 d3@9 d2@2 ~ d2@4 g2@3 ~ d2 ~ d2@2 ~@2 d2",
  T: "[d2@4 d3@9 d2@2 ~ d2@4 g2@2 ~@2 d2 ~ d2@2 ~@2 d2 d2@3 ~ d3@8 d2@2 ~@2 d2@4 g2@3 ~ d2@2 d2@2 ~ d2@4]/2",
  U: "[~@3 d3@7 d2@2 ~@2 d2@4 g2@3 ~ d2@2 d2@2 ~@2 d2 ~ d2@4 d3@7 d2@2 ~@2 d2@4 g2@3 ~ d2@2 d2@2 ~@2 d2 ~ d2@3]/2",
  V: "d3@9 d2@2 ~@2 d2@3 g2@4 d2@2 d2@2 ~ d2 ~@2 d2@4",
  W: "[d3@6 d2@2 ~@3 d2@4 g2@3 d2 ~ d2@2 ~@3 d2 ~ d2@3 ~ d3@8 d2@2 ~@2 d2@4 g2@3 d2 ~@2 d2@2 ~ d2 ~@2 d2@3 d3@8 d2@2 ~@2 d2@4 g2@3 ~ d2 ~ d2@2 ~@2 d2 ~ d2@4 d3@8 d2@3 d2@3 ~@2 d2 ~@2 d2 ~@2 d2@3 ~ d2 ~ d2@4 d3@8 d2@2 ~@2 d2@3 ~@2 g2@2 ~ d2@2 ~ d2@2 ~@2 d2 ~ d2@4 d3@7 d2@3 ~ d2@2 ~@2 g2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2@4 d3@7 d2@3 ~ d2@3 ~ g2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2@4 d3@8 ~@2 c2@3 c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@2, ~@109 g2@3 ~@144]/8",
  X: "[~@2 c2@3 ~ c2@3 c2@3 ~ c2@2 ~@2 c2@2 ~ c2@2 ~@2 c2@2 ~@2 c2@2 ~ c2@3 ~ c2@2 ~ c2@2 ~@2 c2@3 ~ c2@3 c2@3 ~ c2@2 ~ c2@3 ~ c2@2 ~ c2@2 ~@2 c2@2 ~ c2@2 ~@2 c2@2 ~ c2@2 ~@2 c2@2 ~ c2@2 ~@2 c2@3 ~ d2@3 ~]/3",
  Y: "[d2@3 g2@4 d2@2 d2@3 ~ d2@2 d2@4 d3@9 d2@2 ~ d2@4 g2@3 d2@2 d2@3 ~ d2@2 d2@4 d3@8 d2@3 ~ d2@3 g2@4 d2@2 d2@3 ~ d2@2 d2@4 d3@7 ~ d2@2 ~ d2@4]/3",
  Z: "[g2@3 ~ d2 ~ d2@2 ~ d2@2 ~ d2@4 d3@7 d2@2 ~@2 d2@4 g2@3 ~ d2 ~ d2@3 ~ d2@6 d3@8 d2@2 ~ d2@4 g2@2]/2",
  AA: "~@2 d2@2 d2@2 ~@2 d2 ~ d2@4 d3@8 d2@2 ~@2 d2@4 g2@2",
  AB: "[~ d2 ~ d2@2 ~@2 d2@2 d2@4 d3@7 d2@2 ~@2 d2@4 g2@3 d2@2 ~ d2@2 ~ d2 ~ d2@4 d3@9 d2@3 ~ d2@3 ~ g2@3 d2]/2",
  AC: "~ d2@3 ~@2 d2@6 d3@8 d2@2 ~ d2@3 ~ g2@2 ~@2 d2", AD: "~ d2@2 ~@2 d2 d2@4 d3@8 d2@2 ~@2 d2@3 ~ g2@2 ~@2 d2 ~",
  AE: "d2@2 ~@2 d2 d2@4 d3@8 d2@2 ~@2 d2@3 ~ g2@2 ~ d2 ~ d2@2",
  AF: "~@2 d2@6 d3@7 d2@2 ~@2 d2@3 ~ g2@2 ~@2 d2 ~ d2@2 ~",
  AG: "~ d2 ~ d2@3 d3@7 d2@2 ~@2 d2@3 ~ g2@2 ~@2 d2 ~ d2@2 ~ d2 ~",
  AH: "~ d2@3 d3@8 d2@2 ~@2 d2@3 ~ g2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~",
  AI: "d2@4 d3@7 d2@2 ~@2 d2@4 g2@2 ~ d2 ~ d2@2 ~@2 d2 ~ d2@2",
  AJ: "~@2 d3@7 [c2,d2]@2 ~@2 d2@4 g2@3 d2@2 d2@3 ~ d2@2 ~ d2@3", // Csus2
  AK: "[d3@8 d2@3 d2@4 g2@3 d2@2 d2@3 ~ d2@7 d3@8 d2@2 ~ d2@4 g2@3 ~ d2@2 d2@2 ~ d2@2 ~ d2@3 d3@8 d2@2 ~@2 d2@4 g2@3 d2@2 d2@3 ~ d2 ~ d2@4 d3@8 d2@2 ~@2 d2@4 g2@3 d2@2 ~ d2@2 ~ d2 ~ d2@4 d3@8 d2@2 ~ d2@4 g2@3 ~ d2@2 d2@2 ~ d2@6 d3@7]/5",
  AL: "d2@2 ~@2 d2@4 g2@3 d2@2 d2@2 ~@2 d2 ~ d2@3 d3@7 d2@2 ~",
  AM: "[d2@4 g2@4 d2 ~ d2@2 ~@2 d2@2 d2@4 d3@7 d2@3 ~ d2@3 g2@3 ~ d2@2 d2@2 ~@2 d2@2 d2@3 ~ d3@7 d2@2 ~@2 d2@3]/2",
  AN: "~ g2@3 ~ d2@2 d2@2 ~@2 d2@2 d2@3 d3@8 d2@3 ~ d2@4",
  AO: "g2@3 d2@2 d2@2 ~@2 d2 ~ d2@4 d3@8 d2@2 ~@5 g2@2, ~@27 d2@5",
  AP: "~@2 d2 ~ d2@2 ~@2 d2 ~ d2@4 d3@8 c2@2 ~@2 c2@2 ~ c2@2 ~",
  AQ: "~ c2 ~ c2@2 ~ c2 ~ c2@2 ~@2 c2@3 c2@3 ~ c2@3 ~ c2@2 ~@2 c2@2 ~@2 c2",
  AR: "~ c2@2 ~@2 c2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~@3 c2@2 ~ c2@2 ~ c2 ~@2",
  AS: "c2@2 ~ c2 ~ c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 d2@2 ~ d2@4 g2@3 ~ d2@2 d2@2",
  AT: "~ d2@6 d3@8 ~ d2@2 ~ d2@3 ~ g2@2 ~@2 d2 ~ d2@2 ~", AU: "d2 ~ d2@4 d3@8 d2@2 ~@2 d2@3 g2@3 ~ d2@2 d2@2 ~@2 d2",
  AV: "d2@4 d3@7 d2@2 ~@2 d2@3 ~ g2@2 ~@2 d2 ~ d2@2 ~ d2@4", AW: "~ d3@7 ~@24", AX: "[d1,d2]@5 ~@27",
})).s("gm_electric_bass_pick").gain(0.4)

// chords · overdriven guitar · "Guitar"
const overdriven_guitar = note(`<
  A@3 B@6 ~@3 C D E F@2 G H I@2 ~@14 J K L@2 M@3 ~ N@2 O P@2 ~@18 Q@5 ~ R S T
>`.pickRestart({
  A: "[~@15 [a4,d5]@5 ~@3 [a4,d5]@6 ~@2 [a4,d5]@6 ~@2 [a4,d5]@4 ~@5 [a4,d5]@6 ~@2 [a4,d5]@6 ~@2 [a4,d5]@5 ~@3 [a4,d5]@4 ~@5 [a4,d5]@6 ~@2 [a4,d5]@6 ~, ~@10 d3@31 ~@2 d3@32 ~ d3@20]/3", // D5
  B: "[[a4,d5]@5 ~@3 [a4,d5]@4 ~@5 [a4,d5]@6 ~@2 [a4,d5]@5 ~@3 [a4,d5]@5 ~@2 [a4,d5]@5 ~@4 [a4,d5]@5 ~@3 [a4,d5]@5 ~@3 [a4,d5]@5 ~@3 [a4,d5]@4 ~@5 [a4,d5]@5 ~@3 [a4,d5]@5 ~@3 [a4,d5]@5 ~@3 [a4,d5]@5 ~@4 [a4,d5]@6 ~@2 [a4,d5]@5 ~@3 [a4,d5]@5 ~@3 d5@4 ~@4 [a4,d5]@6 ~@2 [a4,d5]@6 ~@2 [a4,d5]@5 ~@2 [a4,d5]@3 ~@19, ~@12 d3@32 ~ d3@31 ~ d3@32 ~@2 d3@31 ~ d3@32 ~@17, ~@138 a4@5 ~@49]/6", // D5
  C: "~@6 c4@4 f#4@3 c4@3 f#4@6 c4@4 ~@2 c4@4", D: "~@3 c4@4 f#4@4 c4@4 f#4@5 c4@5 ~@2 c4@5",
  E: "~@2 c4@4 ~@3 c4@5 f#4@6 d4@4 ~ d4@7, ~@6 f#4@5 ~@21",
  F: "[~@2 d4@3 f#4@9 ~@2 f#4@20 d4@3 f#4@4 d4@4 c4@11 ~ c4@5]/2", G: "~@2 c4@4 f#4@4 c4@4 f#4@6 c4@4 ~ c4@6 ~",
  H: "~ c4@4 f#4@4 c4@4 f#4@6 d4@4 ~@2 d4@7", I: "[~@2 d4@3 f#4@5 g4@4 f#4@31 ~@19]/2", J: "~@26 c4 ~@5",
  K: "~@2 d4@3 c4@11 b3@15 ~, ~ c4@2 ~@29", L: "[b3@2 ~ b3@2 c4@3 b3@5 a3@18 c4@2 d4@4 c4@6 b3@12 ~ b3@3 b3@2 c4@3]/2",
  M: "[~ b3@5 a3@76 ~@14]/3", N: "[~@11 c4@4 f#4@4 c4@4 f#4@6 c4@5 ~ c4@7 c4@4 f#4@4 c4@4 f#4@6 c4@4]/2",
  O: "~@2 c4@7 ~ c4@4 f#4@4 c4@4 f#4@5 d4@4 ~", P: "[~ d4@7 ~ d4@3 f#4@5 g4@3 f#4@28 ~@16]/2",
  Q: "[~@22 g3@135 ~@3, ~@22 c3@131 ~@7]/5", R: "~@11 d3@21", S: "~@9 [d3,a3]@9 ~@14", T: "d3 d3@2 ~@13, a3@3 ~@13",
})).s("gm_overdriven_guitar").gain(0.26)

// other · distortion guitar · "Guitar"
const distortion_guitar = note("<~@2 A@7 B C D@2 E F G H I J K L ~@15 M@2 N@2 O@8 ~@18 P Q@5 R@2 S>".pickRestart({
  A: "[~@11 d3@59 ~@6 [d3,a3]@129 ~ d3@3 ~ d3@4 g3@3 ~ d3@5 ~, ~@11 a3@33 ~@180]/7", // D5
  B: "~ d3@6 d4@9 d3@2 ~@2 d3@3 ~ g3@3 ~ d3@4", C: "~ d3@6 d4@9 d3@2 ~ d3@3 ~ g3@2 ~@2 d3 ~ d3@3",
  D: "[~ d3@5 d4@8 d3@2 ~@2 d3@2 ~@2 g3@2 ~ d3 ~ d3@2 ~@2 d3@5 d4@9 d3@2 ~@2 d3@2 ~@3 g3@2 ~ d3 ~@2 d3@3 ~]/2",
  E: "d3 ~ d3@3 d4@10 d3@2 ~ d3@3 ~ g3@2 ~@2 d3 ~ d3@2 ~@2",
  F: "d3 ~ d3@2 ~ d4@9 d3@2 ~ d3@2 ~@2 g3@2 ~@2 d3 ~ d3@2 ~@2 d3",
  G: "~ d3@3 d4@9 d3@2 ~@2 d3@2 ~ g3@2 ~@2 d3 ~@2 d3!2 ~@2 d3",
  H: "d3@3 ~ d4@9 d3@2 ~ d3@3 ~@2 g3@2 ~@2 d3 ~ d3@2 ~@2 d3", I: "~ d3@3 d4@9 d3@2 ~@3 d3@3 ~ g3@2 ~@2 d3 ~ d3@2 ~@2",
  J: "d3 ~ d3@3 ~ d4@8 d3@2 ~@2 d3@3 ~ g3@2 ~@2 d3 ~ d3@3 ~",
  K: "~ d3 d3@4 d4@8 d3@2 ~@2 d3@3 ~ g3@2 ~@2 d3 ~ d3@2 ~@2", L: "d3 ~ d3@3 ~ d4@9 ~@17", M: "[~@5 [c3,g3]@59]/2",
  N: "[~@3 c3@59 ~@2, ~@2 g3@59 ~@3]/2", O: "[~@27 [d3,a3]@215 ~@14]/8", P: "~@6 d4 c4, ~@11 c4@2 ~@3",
  Q: "[~ b3@14 b3@3 ~ b3@2 c4@4 b3@5 a3@19 c4@2 d4@5 c4@5 b3@11 ~ b3@2 ~ b3@3 c4@4 ~@3 a3@52 ~@22, ~@83 b3@5 ~@72]/5",
  R: "[~@19 [d4,a4]@42 [d3,a3]@2 ~]/2", S: "[d3,a3] ~@15",
})).s("gm_distortion_guitar").gain(0.26)

// drums · kick
const kick = s("bd").struct("<~@14 [~@11 x ~@4] ~@29 [~@31 x] ~@30>").gain(0.4)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 [~@9 x ~@4 x ~] [~@15 x ~@14 x ~] [~ x!2 ~@12 x] [~ x ~@2 x ~@27] ~@63>").gain(0.4)

// drums · ride bell
const ride_bell = s("rd").struct("<~@8 [~@11 x ~@4] ~@66>").gain(0.4)

// drums · splash
const splash = s("cr").struct(`<
  ~@7 A B C D E F G H I J K L M N ~@16 O P Q ~ R S T U V W X ~@17 Y Z AA AB AC AD AE AF AG AH
>`.pickRestart({
  A: "~@7 x ~@8", B: "~@3 x ~@3 x ~@14 x ~@3 x ~ x ~@3", C: "x ~ x ~@3 x ~@3 x ~@4 x ~@3 x ~@4 x ~@3 x ~ x ~",
  D: "~ x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~ x ~@2",
  E: "~ x ~ x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~ x ~@2 x", F: "~@2 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3",
  G: "x ~ x ~@3 x ~@3 x ~@4 x ~@3 x ~@3 x ~@2 x ~@2 x ~@2", H: "x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x ~@2 x",
  I: "~ x ~@3 x ~@2 x ~@4 x ~@3 x ~@3 x ~@2 x ~ x ~@5", J: "~@3 x ~@5 x ~@3 x ~@3 x ~@3 x ~@2 x ~ x ~@3 x ~",
  K: "x ~@4 x ~@3 x ~@3 x ~@3 x ~@4 x ~@2 x ~ x ~@4", L: "~@2 x ~@4 x ~@2 x ~@4 x ~@2 x ~@3 x ~@3 x ~ x ~@3",
  M: "x!2 ~ x ~ x ~ x ~ x ~ x ~ x!2 ~", N: "x!2 ~ x ~ x ~ x ~@8", O: "~@21 x ~@4 x ~@4 x",
  P: "~@2 x ~@6 x ~@5 x ~@6 x ~@2 x ~@3 x ~@2", Q: "x ~@3 x ~@3 x ~@2 x ~@20", R: "~@11 x!2 ~@2 x",
  S: "~@2 x ~@3 x ~ x ~@5 x ~@2 x ~@3 x ~@3 x ~@2 x ~@3", T: "x ~@3 x ~ x ~@3 x ~ x ~@2 x ~@3 x ~@3 x ~@2 x ~@4 x",
  U: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~",
  V: "~@3 x ~ x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@3 x ~@3 x ~@2",
  W: "~ x ~@2 x ~@2 x ~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3", X: "x!2 ~ x!2 ~@11", Y: "~@15 x",
  Z: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", AA: "~@2 x ~ x ~@2 x ~ x ~@3 x ~@3 x ~@3 x ~@2 x ~@2 x ~@4",
  AB: "x ~@3 x ~ x ~@2 x ~@2 x ~@3 x ~@3 x ~@4 x ~@3 x!2 ~", AC: "~@2 x ~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x!2 ~@3",
  AD: "~@3 x ~@3 x ~@3 x ~@2 x ~@4 x ~@3 x ~@3 x ~ x ~@2", AE: "~ x ~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~ x ~@2 x",
  AF: "~@4 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x ~@2 x ~@2 x", AG: "~@2 x ~@7 x ~@7 x ~@6 x ~@6", AH: "x!2 ~@14",
})).gain(0.4)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@8 A ~@11 B C D E F G H I J K L M N O P Q R S ~ T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR
  AS AT AU ~@8
>`.pickRestart({
  A: "~@15 x ~@16", B: "~@24 x ~@2 x ~ x ~@2", C: "x ~ x ~@4 x ~@3 x ~@3 x ~@2 x ~@3 x ~@4 x ~ x ~@2",
  D: "x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~ x ~@3", E: "x ~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~ x ~@3 x",
  F: "~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~ x ~@3 x ~",
  G: "x ~@2 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@2 x ~@2 x ~@2 x",
  H: "~@2 x ~@3 x ~@3 x ~@3 x ~@4 x ~@2 x ~@2 x ~@2 x ~ x ~", I: "~@2 x ~@2 x ~@4 x ~@3 x ~@3 x ~@3 x ~ x ~@2 x!2 ~@3",
  J: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x ~@3 x ~ x ~@2 x", K: "~@3 x ~@3 x ~@3 x ~@3 x ~@4 x ~@2 x ~@2 x ~@3 x ~",
  L: "~@2 x ~@3 x ~@4 x ~@3 x ~@3 x ~ x ~@3 x ~ x ~@3 x", M: "~@2 x ~@3 x ~@3 x ~@2 x ~@3 x ~ x ~@3 x ~ x ~@4 x ~",
  N: "~@2 x ~@3 x ~@3 x ~@3 x ~@2 x ~@2 x ~@2 x ~ x ~@3 x ~@2", O: "~ x ~@3 x ~@4 x ~@3 x ~@3 x ~@2 x ~@2 x ~ x ~@4 x",
  P: "~@3 x ~@2 x ~@4 x ~@3 x ~@2 x ~@2 x ~@2 x ~ x ~@3 x ~",
  Q: "~@2 x ~@2 x ~@3 x ~@3 x ~@3 x ~ x ~@3 x ~ x ~@3 x ~@2",
  R: "~ x ~@3 x ~@2 x ~@4 x ~@3 x ~ x ~@2 x ~@2 x ~@2 x ~@3", S: "x ~@2 x ~@3 x ~@3 x ~@2 x ~@17", T: "~@29 x ~@2",
  U: "x ~@3 x ~@3 x ~ x ~@2 x ~ x ~@3 x ~@3 x ~@2 x ~@4 x", V: "~@3 x ~@2 x ~ x ~@3 x ~ x ~@3 x ~@2 x ~@2 x ~@7",
  W: "~@2 x ~@6 x ~@4 x ~@2 x ~@3 x ~@3 x ~@2 x ~@3", X: "x ~@3 x ~ x ~@3 x ~ x ~@2 x ~@3 x ~@2 x ~@3 x ~@3 x ~",
  Y: "~ x!2 ~ x ~@2 x ~ x ~ x ~ x ~ x", Z: "~@2 x ~@2 x ~@2 x ~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@2",
  AA: "~ x ~@2 x ~@2 x ~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3", AB: "x ~ x ~@3 x ~ x ~@3 x ~@6 x ~@3 x ~@3 x ~@3 x",
  AC: "~ x ~@5 x ~@2 x ~@3 x ~@4 x ~@4 x ~@3 x ~@2 x", AD: "~@2 x ~@2 x ~ x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~",
  AE: "x ~@3 x ~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~ x",
// … 19 more lines

More by Soundgarden