Strudelify

Mit Pfefferminz bin ich dein Prinz

Westernhagen

KeyA minorTempo158 bpm
0:00/0:00
// Mit Pfefferminz bin ich dein Prinz — Westernhagen
// 158 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 126 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(158/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 finger
const bass = note(`<
  ~ A B A C D@2 E F G D E H A@3 I D@2 E F G D E H A@3 I D@2 E F G D E J K L@3 M G@2 L N O G P Q R ~ R S T U L V W X Y Q
  R ~ R S T U L V W X Z Q L@3 AA G@2 L AB AC X AD Q L@3 AA G@2 L AB AC X P Q R AE R AF AG ~ R ~@3 AH AI L@3 AA G@2 L AB
  AC AG AJ AK@3 AL ~
>`.pickRestart({
  A: "g1 ~@7", B: "g1@3 ~@13", C: "g1@2 a1@2 a#1@2 b1 ~", D: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  E: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", F: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ c2@2 c#2@2",
  G: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", H: "g1 ~ g1 ~ e1 ~ e1 ~ f1 ~ f1 ~ f#1 ~ f#1 ~",
  I: "g1@4 a1@4 a#1@4 b1@3 ~", J: "g1 a#1 a1 g#1", K: "g1@4 c2@4 b1@4 a#1@3 ~",
  L: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", M: "a1 ~ a1 ~ b1 ~ b1 ~ c2 ~ c2 ~ c#2 ~ c#2 ~",
  N: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2 d2@2 d#2@2", O: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ d#2@2", P: "a1 c2 b1 a#1",
  Q: "a1 f#1 g1 g#1", R: "a1 ~@7", S: "a1 b1 c2 c#2", T: "d2 ~ d2 ~ d2@2 d2 ~ d2@2 d2 ~ d2 ~ d2 ~",
  U: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 e2@2 d2@2", V: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2",
  W: "[d2,e2] ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 d#2 ~", X: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2",
  Y: "a1 c2 b1 a#1, g1 ~@15", Z: "a1@4 c2@4 b1@3 a1 a#1@4, g1 ~@15",
  AA: "a1 ~ a1 ~ b1 ~ b1 ~ c2 ~ c2 ~ [c#2,d#2] ~ c#2 ~", AB: "a1 ~ [a1,b1] ~ a1 ~ a1 ~ a1 ~ a1@2 g1@2 f#1@2",
  AC: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~", AD: "a1@4 c2@4 b1@3 a1 a#1@4", AE: "~@6 e1 g1", AF: "~@6 d2@9 ~",
  AG: "d2 ~@7", AH: "a1@4 c2@4 ~@3 a1 a#1@4, ~@8 b1@5 ~@3", AI: "a1@4 f#1@4 g1@4 g#1@3 ~",
  AJ: "~ a2 g2 e2 d#2 d2 c2 a1",
  AK: "[d2@2 c2@2 g1@2 a1 ~@5 a1@13 ~ e2@2 ~ f2 ~ a2@2 a2@5 a2@2 ~ g2@2 e2@3 d#2@2, ~@25 d2@2 ~ g2@2 ~@18]/3",
  AL: "d2@3 ~@10 a1@3, ~@4 c2@11 ~",
})).s("gm_electric_bass_finger").gain(0.5)

// other · brass section
const brass_section = note(`<
  ~ A@3 B ~@7 C D E@2 F ~@7 C D E@2 F ~@7 G H ~@10 I J K ~ K ~@7 I L K ~ K ~@7 I L ~@10 I J ~@10 I J M ~@9 I J ~@9 N ~
  O@4 ~
>`.pickRestart({
  A: "[g4,g5]@3 ~@13", B: "[g4,g5]@4 [a4,a5]@4 [a#4,a#5]@4 [b4,b5]@3 ~, f4 ~@15", C: "~ e5 f5 f#5", D: "g3@3 ~@13",
  E: "[g3,g4,g5]@3 ~@13", F: "[g4,g5]@4 [a4,a5]@4 [a#4,a#5]@4 [b4,b5]@3 ~", G: "~ g4@3 a#4@4 a4@4 g#4@4",
  H: "g4 [c5,c6] [b4,b5] [a#4,a#5]", I: "a4 c5 b4 a#4", J: "a4 [f#4,f#5] [g4,g5] [g#4,g#5]", K: "[a4,a5]@3 ~@13",
  L: "a4 [f#4,f#5] [g4,g5] [g#4,g#5], ~@8 f4 ~@7", M: "a5 ~@7", N: "[d5,d6] ~@7", O: "[~@12 [g4,a5]@48 ~ [g4,a5]@3]/4",
})).s("gm_brass_section").gain(0.6)

// other · brass section
const brass_section_2 = note(`<
  ~ A@3 B ~@7 C D E@2 F ~@7 C D E@2 F ~@7 G H ~@10 I J K ~ L ~@7 I M K ~ L ~@7 I M ~@10 I M ~@10 I M N ~@9 I O ~@9 P ~
  Q@4 ~
>`.pickRestart({
  A: "g3@3 ~@13", B: "[g3,g4]@4 [a3,a4]@4 [a#3,a#4]@4 [b3,b4]@3 ~, e5 ~@15", C: "~ e4 f4 f#4", D: "g2@3 ~@13",
  E: "[g2,g3,g4]@3 ~@13", F: "[g3,g4]@4 [a3,a4]@4 [a#3,a#4]@4 [b3,b4]@3 ~", G: "[g2,g3] [a#2,a#3] [a2,a3] [g#2,g#3]",
  H: "[g2,g3] [c3,c4] [b2,b3] [a#2,a#3]", I: "[a2,a3] [c3,c4] [b2,b3] [a#2,a#3]",
  J: "[a2,a3] [f#2,f#3] [g2,g3] [g#2,g#3]", K: "[a3,a4]@3 ~@13", L: "[a2,a3,a4]@3 ~@13",
  M: "[a2,a3]@4 [f#2,f#3]@4 [g2,g3]@4 [g#2,g#3]@3 ~", N: "[a3,a4] ~@7",
  O: "[a2,a3]@4 [f#2,f#3]@4 [g2,g3]@4 [g#2,g#3]@3 ~, b2 ~@15", P: "[d3,d4] ~@7",
  Q: "[~@12 [a2,a3]@48 ~ a2@3, ~@15 a3]/4", // A
})).s("gm_brass_section").gain(0.5)

// chords · percussive organ
const percussive_organ = note(`<
  ~@38 A B C D E F G H I J ~@5 K L@4 M@2 ~@5 K L@4 M@2 ~@2 N@2 O@2 P@5 Q ~@2 R@4 S@2 T@2 U V ~@3 W ~ X Y@2 ~@6 Z@3 AA@3
  AB@3 ~@7
>`.pickRestart({
  A: "~@3 e5 g5 e5 [e5,g5] g5 e5 [e5,g5] g5 [e5,g5] e5 g5 [e5,g5] e5", // Em
  B: "[e5,g5] g5 [e5,g5] e5 g5 e5 [e5,g5] g5 e5 [e5,g5] g5 e5 g5 e5 [g#5,a#5,b5] ~, ~@7 a5", // Em G#m
  C: "~@2 [g#5,a5] ~ [g#5,a5] ~ [g#5,a5] ~ [g#5,a5] ~ [g#5,a5] ~ g5@2 e5 ~", // Amaj7
  D: "g5@2 e5@2 d5 ~ c5 ~ a4 ~ c5 ~ c5 ~ a4@2", E: "c5@3 ~ c5@3 ~ [a4,b4] ~@3 [a4,b4] ~@3, b4 ~@3 b4 ~@3 c5@3 ~ c5@3 ~",
  F: "[a4,b4] ~@3 [a4,b4] ~@3 [a4,b4] ~@2 a4 c5@3 ~, c5@3 ~ c5@3 ~ c5@3 ~ b4 ~@3", G: "e5 g5 e5 g5 e5 g5 e5 g5",
  H: "e5 g5 e5 [e5,g5] g5 e5 g5 e5 [e5,g5] g5 e5 g5 [e5,g5] e5 g5 e5", // Em
  I: "a5 e5 g5 e5 a5 e5 g5 e5 a5 e5 g5 e5 d5 [a4,b4,c5] [c5,d5] [e5,f5,g5,a5]", J: "b5 d6@2 ~@13, c6@15 ~",
  K: "~@14 c4 ~", L: "[a3@32 ~@8 e4@2 ~@2 e4@17 ~@3, e4@5 ~@3, ~@16 a3@5 a3@11]/4",
  M: "[e4@7 a#3 a3@7 ~, b3@6 ~ d4@8 ~]/2",
  N: "[[a3,e4]@18 d#4 e4 [e4,a4] ~ [e4,a4] ~ [d#4,e4] ~ e4 ~ [e4,a4] ~ [e4,a4] ~, ~@9 a4 ~@2 a4 ~@3]/2", // A5 Emaj7 A5
  O: "[[a3,e4]@31 ~, d4 ~@31]/2", P: "[d4@32 e4@31 ~ [b3,e4]@13 ~ [a#3,d#4]@2, a3@13 ~@3, ~@32 d#4 ~@47]/5",
  Q: "[a3,d4]", // D5
  R: "[e4@17 ~ [e4,a4]@3 ~ [e4,a4] ~ [d4,g4] ~ [d4,g4] ~ e4@2 ~ [a3,e4]@19 d#4@2 e4@2 g4@2 a4@2 g4@2 e4@2 a3 ~, a3@25 ~ a3@4 ~@34, ~@18 d#4 ~@9 a4 ~@35]/4", // A5 G5 A5
  S: "[[a3,d4]@31 ~]/2", T: "[a3,e4]/2", U: "[b3,e4]@13 ~ [a#3,d#4]@2", V: "[a3,d4]@15 ~",
  W: "~@2 [d#4,e4] ~ [e4,g4] ~ [e4,g4] ~ d#4@2 d4@2 c4@2 a3 ~, ~ g4 ~@2 g4@3 ~", // Emaj7 Em
  X: "~@2 [d4,e4] c4 e4 c4 e4 [c4,e4] c4 e4 c4 e4 c4 [c4,e4] e4 c4", // Dsus2 C
  Y: "[[e4,f4] ~@13 b4@3 ~ a4 ~ g4 ~ [a4,e5] ~ [a4,e5]@2 g4 ~ [a4,e5]@2 ~@2, ~@14 e5@7 ~@11, ~@14 a#4 ~@17]/2", // Fmaj7 A5
  Z: "[[a3,e4]@18 [d#4,e4] ~ d#4 ~ d4 ~ c4 ~ d4 ~ d#4 ~ [a3,e4]@18, ~@18 a4@5 ~ a4@5 ~@19]/3", // A5 Emaj7 A5
  AA: "[[c4,d4] e4 c4 e4 [c4,e4] c4 e4 c4 [c4,e4] e4 c4 [c4,e4] e4 ~ [a3,d4]@34]/3", AB: "[[a3,e4]@30 [b3,e4]@17 ~]/3",
})).s("gm_percussive_organ").gain(0.45)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@50 A@2 B C D E@2 F G H I J K L M N O P@4 Q@3 ~@22 R ~ S T ~ U V W X ~ Y ~ Z AA ~@5 AB ~@4 AC AD@3 ~@2
>`.pickRestart({
  A: "[~@4 [a3,d4]@2 ~@2 d4@2 c#4@4 a3 ~ [a3,d4]@3 ~ d4@2 c#4@8 a3 ~, a2@15 ~, ~@8 a3@5 ~@7 a3@9 ~@3, ~@20 b3 ~@11]/2", // D5
  B: "~@4 [a3,d4]@3 ~ d4@2 c#4@6, a2@15 ~, ~@4 e4 ~@3 a3@7 ~", // D5
  C: "[a2,a3]@4 [b2,b3]@4 [c3,c4]@3 ~ c#4@3 d#4, ~@11 c#3@5", // A B C
  D: "[e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [d#4,e4,g4] ~ [e4,g4]@2 [e4,g4]@2 [d#4,e4,g4] ~ [e4,g4] ~", // Em D# Em D# Em
  E: "[[e4,g4]@2 [d#4,e4] ~ e4 ~ [e4,g4]@2 [e4,g4]@2 g4 ~ [e4,g4]@2 e4@6 g4@2 [e4,a4]@4 [e4,g4]@2 ~@2 e4 ~, ~@2 g4@2 ~@4 d#4 ~@5 a4@5 ~@9 a4@4]/2", // Em Emaj7 Em A5 Em
  F: "[a4,c5] c5 a4 c5 a4 c5 a4 c5 [a4,c5] a4 c5 a4 c5 a4 c5 a4", // Am
  G: "[a4,c5] c5 a4 c5 a4 c5 a4 c5 a4 c5 [a4,c5] a4 c5 a4 c5 a4", // Am
  H: "c5 a4 [a4,c5] c5 a4 c5 a4 c5 a4 [a4,c5] c5 a4 c5 a4 [b4,c5] [a4,c5]", I: "a4 c5 b4 a#4", J: "a4 ~@3",
  K: "a3@5 ~ b3@2 c#4@4 b3@3 ~", L: "d4@3 ~ c#4@3 ~ b3@2 g#3@2 a3@4", M: "f#4@3 ~ e4@3 d4@5 c#4@4",
  N: "b3@2 c#4 a3 e4@4", O: "g4@3 ~ g4@3 ~ g4@3 ~ g4@4",
  P: "[a4@2 g4@2 a4@2 g4@2 a4@2 g4@4 a4@6 g4@2 e4 ~ g4 e4@2 ~ g4@2 e5@4 e5@5 ~ e5@5 ~ e5@5 e5@5 ~ e5@6 ~]/4",
  Q: "[e5@4 d#5@2 d5@2 c5@2 a4@2 ~ a4@7 g4@2 e4@2 d#4@2 d4@2 c4@2 a3@5 g3@3 e3@2 d#3@2 d3@2 c3@2 a2@2, ~@12 g4@2 ~@16 c4 ~@17]/3",
  R: "~@6 [e3,a3] ~", S: "[e3,a3] ~@7", T: "~@2 a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~@3", U: "~@2 e4@13 ~", V: "[a3,d4]@3 ~@13",
  W: "~@2 a3@3 a3@3 ~ a3@3 a3@3 ~", X: "[e3,a3]@3 ~@13, b3 ~@15", Y: "[b3,e4] ~@7", Z: "a3 c4 b3 a#3",
  AA: "a3@4 f#3@4 g3@3 g#3@4 ~", AB: "~@2 a4@2 ~ e4@2 d#4@2 d4@2 ~@5, ~@2 g4 ~@5",
  AC: "~@2 a4@2 ~ e4@2 d#4@2 ~ d4@2 c4@2 a3@2, ~@2 g4 ~@5", AD: "[[c4,d4] c4 g3 a3 ~@2 [e3,a3]@18]/3",
})).s("gm_distortion_guitar").gain(0.8)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  ~ A@2 B C D E F G H I J K L M N O D E P G H I J K L M N O D E P G Q I J R S@2 T U V W X@2 Y Z AA AB AC ~@24 AD@4 AA@2
  AD@2 AE AA AB AC AD@4 AA@2 AD@2 AE AA AB AC ~@12 AD@4 AA@2 AD@2 AE ~@7
>`.pickRestart({
  A: "g3@3 ~@13", B: "g2@3 ~@13", C: "g2@4 a2@4 a#2@4 b2@3 ~",
  D: "[c3,g3] ~ [c3,g3] ~ [c3,g3,a3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,a3] ~ [c3,g3] ~", // C5 Am7 C5 F C5
  E: "[c3,g3] ~ [c3,g3] ~ [c3,a3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,a3]@2 [c3,g3,a3] ~", // C5 F C5 F Am7
  F: "[g2,d3] ~ [g2,d3] ~ [g2,e3]@2 [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,e3]@2 [g2,d3] ~", // G5 C G5 C G5
  G: "[g2,d3] ~ [g2,d3] ~ [g2,e3]@2 [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,e3] ~ [d3,g3]@2", // G5 C G5 C G5
  H: "[d3,a3] ~ [d3,a3] ~ [d3,b3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,b3] ~ [c3,g3] ~", // D5 G D5 G C5
  I: "[c3,g3] ~ [c3,g3] ~ [c3,a3] ~ [c3,g3] ~ a3@2 g3@2 e3@2 c3 ~", // C5 F C5
  J: "[g2,c3,d3] ~ [g2,d3] ~ [g2,e3] ~ [g2,d3] ~ [g2,c#3,d3] ~ [g2,d3] ~ [g2,e3] ~ [g2,d3] ~", // Gsus4 G5 C G5 G G5 C G5
  K: "[g2,d3] ~ [g2,d3] ~ e2@4 f2@3 f#2@4 ~", L: "[g2,d3]@3 ~@13, f2 ~@15", M: "[g2,d3]@3 ~@13, [a2,c3] ~@15",
  N: "[g2,d3]@3 ~@13", O: "g2@4 a2@4 a#2@3 ~ b2@3 ~",
  P: "[g2,d3] ~ [g2,d3] ~ [g2,e3]@2 [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,e3] ~ [g2,d3] ~", // G5 C G5 C G5
  Q: "[d3,a3] ~ [d3,a3] ~ [d3,b3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,b3] ~ [c3,g3]@2", R: "g2 a#2 a2 g#2",
  S: "[g2@4 c3@4 b2@4 a#2 ~ [a2,e3]@4 [a2,e3] ~ [a2,e3]@2 [a2,e3] ~ [a2,e3]@2 [a2,e3] ~ [a2,f#3]@2 e3 ~]/2", // A5 D
  T: "[a2,e3]@2 [a2,e3] ~ [a2,f#3]@2 [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,f#3] ~ [a2,g3]@2", // A5 D A5 D A7
  U: "g3 ~ [a2,g3] ~ f#3 ~ f#3 ~ [a2,e3]@2 [a2,e3] ~ [a2,f#3]@2 [a2,e3] ~, ~ a2 ~@2", // A7 A5 D A5
  V: "[a2,e3] ~ [a2,e3] ~ [b2,e3] ~ [b2,e3] ~ [c3,e3] ~ [c3,e3] ~ [c3,c#3] ~ c#3 ~", // A5 E5 C C#maj7
  W: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3]@2 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // D5
  X: "[[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [a2,e3]@4 [a2,e3] ~ a2@2 e3 ~ [a2,e3] ~ [a2,e3] ~ [a2,f#3]@2 [a2,e3] ~, ~@14 b2 ~@5 f#3 ~@11]/2", // D5 A5 D A5
  Y: "[a2,g3]@2 [a2,e3] ~ [a2,f#3]@2 [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,f#3]@2 [a2,e3] ~", // A7 A5 D A5 D A5
  Z: "[b2,e3] ~ [b2,e3] ~ [b2,e3]@2 [b2,e3] ~ [b2,e3]@2 [b2,e3]@2 [b2,e3]@2 [b2,e3] ~", // E5
  AA: "[a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~", AB: "a2 c3 b2 a#2",
  AC: "a2 f#2 g2 g#2", AD: "[a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~",
  AE: "[b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~", // E5
})).s("gm_distortion_guitar").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A ~ B@2 ~ C@3 D@4 E ~ B@2 ~ C@3 D@4 E ~ B@2 ~ C@3 D@6 C D@2 F D@3 G D@4 B ~ B H I@3 D C D@3 B ~ B H I@3 D C D@3 C D I
  E I D@2 J D@4 C D I E I D@2 J D@4 K@10 D H C D I E I D@2 J D B L M N O P ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "x", C: "x ~@3 x ~@2 x", D: "x!2", E: "x ~@2 x ~@4", F: "x ~@2 x ~ x ~ x", G: "x ~ x!2 ~ x ~@2",
  H: "x!8", I: "x ~@2 x!2 ~@3", J: "x ~@2 x!3 ~@2", K: "x!4", L: "~@3 x ~ x ~ x", M: "~@12 x ~@2 x",
  N: "x ~ x!2 ~ x!2 ~ x!2 ~ x ~ x!2 ~", O: "x ~ x ~ x ~@2 x!2 ~@7", P: "~@13 x ~@2",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct(`<
  A B@3 C B@3 C B@3 D B@3 C B@3 C B@3 D B@3 C B@3 C B@8 E B C B F G B@3 ~@4 B@3 C B@4 ~@4 B@3 C B@7 H B G B G@3 I B@4 H
  B G B G@3 I B ~@3 J ~@6 B G B@3 H B G B G@2 ~ E K ~ L M ~
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@2 x!3", D: "~ x!2 ~ x!4", E: "~ x!2 ~ x ~ x ~", F: "~ x ~@2 x ~ x!2",
  G: "~@2 x ~@3 x!2", H: "~ x!2 ~ x!3 ~", I: "~ x!3", J: "~ x ~@6", K: "x ~@2 x ~@4", L: "~@9 x ~ x ~ x ~ x",
  M: "~ x ~ x!2 ~@2 x ~@8",
})).gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@45 A ~@7 B ~@11 B ~@35 C ~@19 D ~@4>".pickRestart({
  A: "~@2 x!2", B: "x!8", C: "~@5 x!2 ~", D: "~ x ~@2",
})).gain(0.5)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@45 A ~@7 B ~@11 B ~@35 C ~@19 D ~@4>".pickRestart({
  A: "~ x ~@2 x ~@3", B: "x", C: "~@5 x ~@2", D: "~@3 x ~@12",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A B@2 C A B@2 D A@3 E A B@2 C A B@3 A@3 E A B@2 C A B@2 D A@5 ~@10 A@3 B A ~@9 A B A ~@10 F ~ F ~@3 F ~@2 A@2 ~ F ~
  F ~@3 F ~@2 A@2 ~@5 G ~@4 B@2 ~ F ~ F ~@3 F ~@8
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!3 ~", D: "x ~@3 x ~@3 x ~@4 x ~@2", E: "x ~@2 x ~@4", F: "~@7 x", G: "~@3 x",
})).gain(0.25)

// drums · high tom
const high_tom = s("ht").struct("<~@45 [~ x ~@6] ~@55 [~@5 x!2 ~] ~@19 [~@3 x ~@12] ~@4>").gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A@2 ~@3 A B A ~ A ~@3 A ~@3 A B A ~ A ~@2 A@2 ~@3 A@6 ~ A ~ A ~ A ~ A@5 ~ A ~ A ~ A ~ A ~ A@3 ~ A ~ A ~ A ~ A ~
  A@3 ~@3 A ~ A ~ A B A@3 ~@3 A ~ A ~ A B A@3 ~@3 A ~ A ~@2 A ~@2 A ~@3 A ~ A ~ A@2 ~ C D E F ~
>`.pickRestart({
  A: "x", B: "x ~@2 x", C: "~@3 x", D: "x!2 ~ x ~ x ~@4 x!3 ~ x ~", E: "x!4 ~@4", F: "~@13 x ~@2",
})).gain(0.4)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@121 [~@14 x!2] [~@2 x ~ x ~ x!2 ~ x ~@6] ~@3>").gain(0.25)

// drums · ride
const ride = s("rd").struct("<~@36 A ~ B C B D B C B A C B ~@6 B C B E B C ~@6 B C B E B C ~@33 F ~@20>".pickRestart({
  A: "x", B: "~ x!3", C: "x!4", D: "x ~ x!2", E: "x!3 ~", F: "~@5 x!2 ~",
})).gain(0.5)
// … 5 more lines