Strudelify

You Keep Me Hangin' On

Vanilla Fudge

KeyE minorTempo90 bpm
0:00/0:00
// You Keep Me Hangin' On — Vanilla Fudge
// 90 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "Melody 1 Right" alto sax (copy of ch 4 "Melody 2 Left" alto sax, 0.1 beats late); ch 13 "Chorus 1 Right" harmonica (copy of ch 15 "Chorus 2 Left" harmonica, 0.1 beats late)
// note: Full arrangement: all 111 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 · rock organ · "Hammond Left"
const rock_organ = note(`<
  ~@5 A B C D@2 ~@14 E ~@5 F ~ E ~ G H@2 ~ I J K L M ~@3 N ~@3 E ~@5 F ~ E ~ G H@2 ~ I J K L M ~@3 N ~ E ~ E ~ E ~ E ~@6
  O B C P ~@19 Q
>`.pickRestart({
  A: "e4", B: "d4", C: "f#4", D: "[~@16 b3@21 ~@27, ~ e4@16 ~@47, ~@11 d4@16 ~@37]/2", E: "a4@15 ~",
  F: "~@25 [a2,b2,c3,d3] ~ b3@2 [f4,g4] a4 ~, ~@25 e3@2 ~@5, ~@13 [f3,a3] ~@2", // D7 Fsus2 F
  G: "~@27 [d3,e3,f3,a3] b3 ~ a4 ~, ~@14 [c4,d4] ~, ~@29 e4@2 ~", // Dm Csus2
  H: "[f4@18 ~@2 f4@5 ~@3 f4 ~@2 g#4 ~@3 f4@6 ~@3 f4@2 ~@6 f4@5 ~@2 f4 ~@4, a4@26 ~@5 f4@2 ~@31, ~@32 a4@7 ~@5 a4@17 ~@3]/2",
  I: "~@31 a4", J: "[f4,g4] ~@3 [f4,a4] ~@2 f4@17 a#4@2 ~@2 f4@3 ~, ~@7 a4@15 ~@10",
  K: "f4 ~@2 f4@4 a4 ~@4 f4@4 ~@4 f4@6 ~@2 f4@2 ~@2, a4@5 ~@7 a4@18 ~@2",
  L: "g4@9 ~@2 g4@5 ~@4 g4@6 ~ e4 a4 ~@3, ~@27 f4@2 ~@3", M: "~@28 [d3,e3,f3,g3] [g#3,a3,b3,c4] [d4,e4,f4] [g4,a4]",
  N: "~@24 [g2,a2,b2] [d3,e3] a3 [d4,e4] [f4,g4] a4 ~@2", O: "e4@31 ~", P: "~ e4@6 d4@5 b3@20", Q: "~@11 e4@2 ~@19",
})).s("gm_rock_organ").gain(0.4).pan(0.1)

// chords · rock organ · "Hammond Left" · soft notes
const rock_organ_soft = note("<~@30 A ~@3 B ~ C ~@4 D ~@4 E ~@9 A ~@3 B ~ C ~@4 D ~@4 E ~@38>".pickRestart({
  A: "~@14 d4 ~, ~@26 g3@2 e4 ~@3, ~@27 c4@2 ~@3", B: "~@27 g3 ~@2 [f4,g4] ~", C: "~@7 a4@2 ~@23",
  D: "~@27 [d4,g4] ~@4", E: "~@25 c3 [f3,g3] [b3,c4] ~@4",
})).s("gm_rock_organ").gain(0.17).pan(0.1)

// chords · rock organ · "Hammond Right"
const rock_organ_2 = note(`<
  ~ A B C D@4 E ~@12 F G ~ H I J K L I M N O@2 P Q@3 R S T U V W X Y@2 Z G ~ H I J K L I M N O@2 P Q@3 R S T U V W X Y@2
  AA AB@6 AC@2 G A B C AD@4 E ~@12 F G ~@4 AE@2
>`.pickRestart({
  A: "e5", B: "d5", C: "f#5",
  D: "[e5@16 d5@8 ~@8 [e5,f#5]@16 f#5@5 ~@2 f#5@5 ~@3 f#5@6 ~@2 f#5@6 ~@3 f#5@4 ~@4 f#5@4 ~@4 f#5@5 ~@3 f#5@4 ~@4 f#5@6 ~@6 b4@4, ~@24 b4@16 ~@52 b4@15 ~ b4@15 ~@5, ~@32 d5@87 ~ [d5,e5,f#5]@8]/4", // Esus2 D
  E: "~ e5@10 ~ [b4,d5,e5]@20, [b4,d5,f#5]@10 ~ f#5@21", // E7 Bm
  F: "~@2 e5 ~@2 e5 ~ e5 ~@2 e5 ~ e5 ~@2 e5 ~ e5 ~@3 e5 ~@2 e5 ~@3 e5!2 ~@2",
  G: "~ e5!2 ~@3 e5!2 ~@2 e5 ~ e5 ~@3 e5 ~@2 e5 ~@12", H: "[d5,f#5]", I: "[b4,d5,f#5]", J: "[c5,e5,g5]@29 ~@3",
  K: "[e5,g5,b5,d6,e6]@31 ~", L: "[d5,f#5,a5]@31 ~", M: "[c5,e5,g5]@23 ~@7 [b4,c5] [d5,e5,f5]",
  N: "c5 ~ b4@29 ~, [e5,g5]", O: "[~@32 b4@29 ~@3, [d5,f#5]@63 ~]/2", P: "[b4,c5,d5,d#5] ~@30 [b4,c5,d5], [e5,g5]@3 ~",
  Q: "[[e5,f5,g5] ~@23 f5@2 ~@5 c5@7 ~@2 [c5,f5]@2 ~@2 f5@4 ~@8 f5@6 ~ d#5 ~@12 c5@4 d#5 ~@7 [e5,g5]@5 b5 ~ e5, c5@24 ~@16 d5 ~@3 c5@17 ~@2 g5@14 ~@6 c5@8 ~@5, ~@63 c5@8 c6@22 ~@3, ~@64 e5@15 ~ [e5,g5]@5 ~@9 g5@2]/3", // Em F5 Em
  R: "~@4 [b5,d6]@4 ~@4 [c6,e6]@3 ~ [c#6,d6,f6] ~ [d6,f6] f6 [d6,f6] d6 [d6,f6] f6 [d6,f6] ~@2 c6 ~ f5 [d5,e5] [b4,c5], ~@3 g5@2 ~@3 g5@17 ~ f6@2 ~@4, ~@4 a#5 ~@20 d6@3 ~@4", // Bm C C# Dm Dsus2 Cmaj7
  S: "~@4 c5 ~@11 f5@5 ~@3 d5@2 ~@6, ~@8 c5@15 ~@9", T: "c5@5 ~@2 [c5,f5] ~@4 f5 ~@11 f5@7 ~, ~@12 c5@17 ~@3",
  U: "[c5,e5]@7 [c5,e5]@5 ~@4 e5@8 c5 ~@3 [b4,c5] [d5,f5,g5] [a5,b5] ~, ~@16 c5@5 ~@11", // C Cmaj7 G7 Asus2
  V: "[g5,b5]@12 b5@3 ~ [f#5,b5]@10 ~@5 [b4,c5], d6@13 ~@3", // G B5 Cmaj7
  W: "d5 ~@3 [b4,d5,f#5]@2 ~@2 b4@19 ~ b4@3 ~, ~@7 f#5@23 ~@2, ~@8 d5@23 ~, ~@8 g#5 ~@23", // Bm
  X: "[b4,d5,f#5]@24 [d5,f#5]@4 b4@3 ~", // Bm D
  Y: "[[d#5,f#5]@32 [e5,g5]@22 ~@7 [b4,c5] [d5,e5] [a5,b5], b4@27 ~@5, ~@32 f#5 ~@31]/2", // D#m Em Cmaj7 Dsus2 Asus2
  Z: "[c6,d6,e6] f6 e5 ~@2 e5 ~ e5 ~@2 e5 ~ e5 ~@2 e5 ~ e5 ~@3 e5 ~@2 e5 ~@3 e5!2 ~@2", // C
  AA: "[c5,c6,d6] ~ b4@29 ~, [e5,g5]", AB: "[~@32 c5 ~ b4@29 ~, [d5,f#5]@63 ~, ~ [e5,g5]]/2",
  AC: "[~@32 e6 f6 e5 ~@2 e5 ~ e5 ~@2 e5 ~ e5 ~@2 e5 ~ e5 ~@3 e5 ~@2 e5 ~@3 e5!2 ~@2, [d5,f#5]@63 ~]/2", // D
  AD: "[e5@7 d5@5 ~@20 [e5,f#5]@16 f#5@5 ~@2 f#5@5 ~@3 f#5@6 ~@2 f#5@6 ~@3 f#5@4 ~@4 f#5@4 ~@4 f#5@5 ~@3 f#5@4 ~@4 f#5@6 ~@6 b4@4, ~@12 b4@78 ~@2 b4@15 ~ b4@15 ~@5, ~@32 d5@87 ~ [d5,e5,f#5]@8]/4", // Esus2 D
  AE: "[~@33 f#6@10 [e5,b5]@2 ~@19, ~@24 e6@21 ~@19, ~@27 d6@18 ~@19, ~@30 b5@11 ~@2 d5 ~@20]/2", // E5
})).s("gm_rock_organ").gain(0.45).pan(0.9)

// chords · rock organ · "Hammond Right" · soft notes
const rock_organ_soft_2 = note(`<
  ~@5 A@2 B ~@26 C ~@2 D E ~@2 F G ~@3 H ~@13 C ~@2 D E ~@2 F G ~@3 H ~@14 A@2 B ~@21
>`.pickRestart({
  A: "[~@16 e5@23 e5@24 ~]/2", B: "e5@23 ~@9", C: "~@2 c5@23 ~@7", D: "~@30 a5 f5", E: "~@20 e6 ~@7 b5 [g5,a5] ~@2",
  F: "~@29 e5 ~@2", G: "~@12 g5 ~@19", H: "~@30 f5 g5",
})).s("gm_rock_organ").gain(0.28).pan(0.9)

// chords · electric guitar muted · "Guitars"
const electric_guitar_muted = note("<~@35 A B C D E F G H ~@18 A B I D J F G H ~@42>".pickRestart({
  A: "[f3,c4] ~@3 [f3,c4] ~@7 [f3,c4] ~@3 [f3,c4]@7 ~@5 [f3,c4] ~@3", // F5
  B: "[f3,c4] ~@3 [f3,c4] ~@7 [f3,c4]@9 ~@3 [f3,c4]@5 ~@3", // F5
  C: "[g3,c4] ~@6 c4 g3 ~@3 g3 ~@3 [g3,c4] ~@3 [g3,c4]@8 g3 ~@3", // C5
  D: "[g3,d4] ~@7 [g3,d4] ~@3 g3 ~@3 [g3,d4] ~@7 [g3,d4] ~@3 [g3,d4] ~@3", // G5
  E: "[f3,c4] ~@7 [f3,c4] ~@3 [f3,c4] ~@3 [f3,c4]@7 ~ [f3,c4] ~@3 [f3,c4] ~@3", // F5
  F: "[f3,c4] ~@3 [f3,c4] ~@7 [f3,c4]@5 ~@7 [f3,c4] ~@3 [f3,c4] ~@3", // F5
  G: "[g3,d4] ~@7 [g3,c4] ~@3 g3 ~@3 [g3,c4] ~@3 [g3,c4] ~@3 [g3,c4]@6 ~@2", // G5 C5
  H: "[g3,d4]@11 ~ [g3,d4]@3 ~ [f#3,d4]@12 [f#3,d4]@2 ~@2", // G5 D
  I: "[g3,c4] ~@7 [g3,c4] ~@3 g3 ~@3 [g3,c4] ~@3 [g3,c4]@8 g3 ~@3", // C5
  J: "[f3,c4] ~@7 [f3,c4] ~@3 [f3,c4] ~@3 [f3,c4]@7 ~ c4 f3 ~@2 [f3,c4] ~@3", // F5
})).s("gm_electric_guitar_muted").gain(0.42).pan(0.8)

// other · overdriven guitar · "Guitars"
const overdriven_guitar = note("<~@43 A B C@2 ~@22 A B C@2 ~@38>".pickRestart({
  A: "b5, c6 ~@15", B: "d6@10 c#6 b5 c#6 b5@14 ~ b5@3 ~", C: "[b5@28 g#5 [f#5,g#5] f#5 e5@30 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.42).pan(0.8)

// other · overdriven guitar · "OverDrive Gtr."
const overdriven_guitar_2 = note(`<
  ~@9 A B C@2 D E@2 F G H I J K L@2 ~@14 M ~@8 K N@2 O ~@13 M ~@16 K P ~@8 A B C@2 D E@2 F G H I J K P Q R S T U V
>`.pickRestart({
  A: "e3", B: "d3", C: "[b3@31 c4@33, a#3 ~@63]/2", D: "e4@31 ~", E: "[d4@31 b3@32 ~]/2", F: "c4@15 ~",
  G: "[b3,e4]@23 ~ [b3,e4]@7 ~", H: "[a3,d4]@15 ~", I: "[b3,d4]@15 ~", J: "[c4,e4]@29 ~@3",
  K: "~@2 e5 ~@2 e5 ~ e5 ~@2 e5 ~ e5 ~@2 e5 ~ e5 ~@3 e5 ~@2 e5 ~@3 e5!2 ~@2",
  L: "[~ e5!2 ~@3 e5!2 ~@2 e5 ~ e5 ~@3 e5 ~@2 e5 ~@3 b5@40 ~]/2",
  M: "~@4 g5 a5@2 g5 ~@6 g5 a5 g5@2 ~@2 g5 [g5,a5] a5@9 ~", // Gsus2
  N: "[~ e5!2 ~@3 e5!2 ~@2 e5 ~ e5 ~@3 e5 ~@2 e5 ~@38 e5 d5 e5 d5 c5 b4, ~@23 b5@41]/2",
  O: "[c5,d5] b4 a4 [f4,g4,a4,b4] g4 e4@17 ~@10", P: "~ e5!2 ~@3 e5!2 ~@2 e5 ~ e5 ~@3 e5 ~@2 e5 ~@12",
  Q: "~@2 [e4,e5]!2 ~@2 e5 e4 [e4,e5] ~@3 [e4,e5] ~@2 [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~", // E
  R: "~ [e4,e5] ~ [e4,e5] ~@3 [e4,e5] ~@2 [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~", // E
  S: "~ [e4,e5] ~@3 [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~@2 [e4,e5]", // E
  T: "~@3 [e4,e5]!2 ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~ [e4,e5] ~@2 [e4,e5] ~@2 [e4,e5] ~@3 [e4,e5] ~ [e4,e5]", // E
  U: "~@2 [e4,e5]!2 ~@3 [e4,e5] e5 e4 ~@2 [e4,e5]!2 ~@3 [e4,e5] ~@2 [e4,e5] ~@11", V: "~@11 e3 ~@20",
})).s("gm_overdriven_guitar").gain(0.28).pan(0.2)

// chords · distortion guitar · "Dist. Guitar"
const distortion_guitar = note(`<
  ~@9 A B C D E F G H I J K H ~@10 L ~@25 L ~@33 A B C D E F G H I J K H ~@8
>`.pickRestart({
  A: "[b3,e4]@29 ~@3", B: "[a3,d4]@29 ~@3", C: "[b3,d4]@7 ~", D: "[c4,e4]@15 ~", E: "~ [b3,e4]@29 ~@2",
  F: "[a3,d4]@7 ~", G: "[b3,d4]@29 ~@3", H: "[c4,e4]@29 ~@3", I: "[b3,e4]@27 ~ e4@4, ~@14 b3 ~",
  J: "[a3,d4]@13 ~ [a3,d4] ~", K: "[b3,d4]@27 ~ [b3,d4]@2 ~@2", L: "e3@23 ~@9, e4@17 ~@15",
})).s("gm_distortion_guitar").gain(0.29).pan(0.8)

// bass · fretless bass · "Bass Guitar"
const bass = note(`<
  ~@9 A B@2 C D@2 E F G H I J K L ~ M N O P Q R O S Q R T U V W X Y Z AA AB AC AD AE AF K L ~ M N O P Q R O S Q R T U V
  W X Y Z AA AB AC AD AE AF S Q S Q S Q S Q K L ~@8 A B@2 C D@2 E F G H I J K AG AH AI AJ AK AL AM
>`.pickRestart({
  A: "e2@31 ~", B: "[d2@31 b1@33]/2", C: "c2", D: "[~ e2@30 d2@33]/2", E: "b1@31 ~", F: "c2@31 ~",
  G: "e2 b1 e2 b1 e2 b1 e2 b1", H: "f#2@2 d2@2 f#2@2 d2@2 f#2@2 d2@2 f#2@2 d2 ~",
  I: "b1@4 f#2@4 b1@4 f#2@4 b1@4 f#2@4 b1@4 f#2@3 ~", J: "c2@4 g2@4 c2@4 g2@4 c2@4 g2@4 c2@4 g2@3 ~, ~@4 f#2 ~@27",
  K: "e2 ~ e2@2 ~ e2 ~ e2@2 ~ e2 ~ e2 ~@3 e2!2 ~@3 e2 ~@2 e2 ~@3 e2!2 ~@2",
  L: "~ e2!2 ~@3 e2!2 ~@3 e2!2 ~@3 e2 ~@2 e2 ~@12", M: "d2@13 ~ d2@2", N: "b1@7 ~ b1@8", O: "c2@15 ~ c2@15 ~",
  P: "e2@9 ~@3 e2 ~@3 e2@16", Q: "d2@10 ~@2 d2 ~@3 d2@15 ~", R: "b1@10 ~@2 b1 ~@3 b1@15 ~",
  S: "e2@10 ~@2 e2 ~@3 e2@15 ~", T: "c2@11 ~ c2@2 ~@2 c2@13 ~@3", U: "f1@9 ~@3 f1@7 ~ f1@2 ~@2 f1@6 ~@2",
  V: "f1@9 ~@3 f1@6 ~@2 f1@4 g1@4 a1@4", W: "c2@10 ~@2 c2@2 ~@2 c2@7 ~ c2@8", X: "g1@10 ~@2 g1@2 ~@2 g1@7 ~ g1@8",
  Y: "f1@8 f2@4 f1@7 ~ f1@4 f2@8", Z: "f1@9 ~@3 f1@6 ~@2 f1@8 g1@4, g1 ~@31", AA: "c2@10 ~@2 c2@9 ~@3 c2@7 ~",
  AB: "g1@8 f#2@5 ~ f#2@2", AC: "b1@10 ~@2 b1 ~@3 b1@9 ~@3 b1 ~@3", AD: "b1@12 f#2@4 b1@10 ~@2 b1 ~@3",
  AE: "b1@7 ~ b1@6 ~@2 b1@6 ~@2 b1@8", AF: "e2@12 b1@2 ~@2 e2@6 ~@2 e2@5 ~@3",
  AG: "~ e2!2 ~@3 e2!2 ~@3 e2!2 ~@3 e2 ~@2 e2 ~@3 [e1,e2] ~ e1@2 ~ [e1,e2] ~ e1@2, ~@25 e2 ~@4 e2 ~", // E
  AH: "~ e1 ~ e1 ~@3 e1!2 ~@3 e1@2 ~ e1@2 ~@2 g1 g1@2 ~ g1 ~ g1@2 ~ g1 ~ g1@2",
  AI: "~ g1 ~ g1 ~@3 g1 ~@2 g1@2 ~ a1 ~ a1 ~@2 a1 ~ a1@2 ~ a1 ~ a#1@2 ~ a#1 ~ a#1@2",
  AJ: "~ c2@2 ~ c#2@2 ~@2 e2 ~ e2 ~@2 e2 ~ e2@2 ~ e2 ~ e2 ~@2 e2 ~ e2 ~@2 e2 ~@2 e2",
  AK: "~@3 e2!2 ~@2 e2 ~ e2 ~@2 e2 ~ e2 ~@2 e2 ~ e2 ~@2 e2 ~@3 e2 ~@2 e2 ~ e2",
  AL: "~@2 e2 ~ e2 ~@2 e2 ~ e2 ~@2 e2!2 ~@3 e2 ~@2 e2 ~@11", AM: "~@11 e2 ~@20",
})).s("gm_fretless_bass").gain(0.8)

// chords · tenor sax · "Ooh's Refrain"
const tenor_sax = note("<~@26 A@2 ~ B C ~@2 D E ~@17 A@2 ~ B C ~@2 D E ~@13 F G H I J@2 F K ~@29>".pickRestart({
  A: "[~@15 b4@5 g4@4 a4@7 e5@32 ~]/2", B: "a4@15 ~ a4@4 f#4@4 a4@8", C: "b4@4 a4@3 g4@23 ~@2, a#4 ~@31",
  D: "a4, g#4 ~@31", E: "b4@4 a4@4 g4@23 ~", F: "~@4 [b4,g5] [a4,f#5] [g4,d5]@2", G: "[b4,e5]@25 ~@7",
  H: "~@16 [b4,g5]@3 ~ a4@4 [g4,d5]@8, ~@19 f#5@5 ~@8", I: "e5@5 ~@3, b4@15 ~@17, a4 ~@31",
  J: "[~@15 g4 b4@3 ~ a4@4 [g4,d5]@7 ~ e5@25 ~@7, ~@15 g5@4 f#5@5 ~@40, ~@16 a4 ~@14 b4@11 ~@22]/2", K: "[b4,e5] ~@31",
})).s("gm_tenor_sax").gain(0.33)

// other · taiko drum · "Big Boom Drum"
const taiko_drum = note("<~@21 A B ~@24 A B ~@32 A B ~@20 A C D E F G H I>".pickRestart({
  A: "e2 ~ e2@2 ~ e2 ~ e2@2 ~ e2 ~ e2 ~@3 e2!2 ~@3 e2 ~@2 e2 ~@3 e2!2 ~@2",
  B: "~ e2!2 ~@3 e2!2 ~@3 e2!2 ~@3 e2 ~@2 e2 ~@12",
  C: "~ e2!2 ~@3 e2!2 ~@3 e2!2 ~@3 e2 ~@2 e2 ~@3 [e1,e2] ~ e1@2 ~ [e1,e2] ~ e1@2, ~@25 e2 ~@4 e2 ~", // E
  D: "~ e1 ~ e1 ~@3 e1!2 ~@3 e1@2 ~ e1@2 ~@2 g1 g1@2 ~ g1 ~ g1@2 ~ g1 ~ g1@2",
  E: "~ g1 ~ g1 ~@3 g1 ~@2 g1@2 ~ a1 ~ a1 ~@2 a1 ~ a1@2 ~ a1 ~ a#1@2 ~ a#1 ~ a#1@2",
  F: "~ c2@2 ~ c#2@2 ~@2 e2 ~ e2 ~@2 e2 ~ e2@2 ~ e2 ~ e2 ~@2 e2 ~ e2 ~@2 e2 ~@2 e2",
  G: "~@3 e2!2 ~@2 e2 ~ e2 ~@2 e2 ~ e2 ~@2 e2 ~ e2 ~@2 e2 ~@3 e2 ~@2 e2 ~ e2",
  H: "~@2 e2 ~ e2 ~@2 e2 ~ e2 ~@2 e2!2 ~@3 e2 ~@2 e2 ~@11", I: "~@11 e2 ~@20",
})).s("gm_taiko_drum").gain(0.64)

// drums · kick
const kick = s("bd").struct("<~@9 A@12 ~@3 B@23 ~@3 B@31 ~@10 A@12 ~@7 C>".pickRestart({
  A: "x!4", B: "x ~@2 x!2 ~@2 x", C: "~@11 x ~@20",
})).gain(0.68)

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

// drums · clap
const clap = s("cp").struct("<~@37 [~@3 x] ~@73>").gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@23 [~@23 x ~@6 x ~] ~@25 [~@23 x ~@6 x ~] ~@61>").gain(0.61)

// drums · hihat
const hihat = s("hh").struct("<A@10 B@7 C D@3 ~@3 E F@22 ~@3 F@31 ~@18 C D@3 ~@8>".pickRestart({
  A: "x!4", B: "x!2 ~ x", C: "~@4 x ~@6 x ~@8 x ~@7 x ~@3", D: "~ x ~ x ~ x ~ x", E: "~@4 x ~@3 x ~ x!3 ~ x!2",
  F: "x ~ x!3 ~ x ~ x ~@2 x!2 ~ x ~",
})).gain(0.68)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 [~@11 x ~@4] ~@25 [~@11 x ~@4] ~@61>").gain(0.54)

// drums · open hat
const open_hat = s("oh").struct(`<
// … 29 more lines