Strudelify

Trinere All Night

Trinere

KeyC minorTempo98 bpm
0:00/0:00
// Trinere All Night — Trinere
// 98 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 138 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · string ensemble 1 · "MJ Girlz"
const string_ensemble_1 = note(`<
  ~@6 A B@2 ~ C D@2 ~@5 E F ~@2 G H I J ~@3 K A B@2 ~ C D@2 ~@2 K ~ L ~ M ~@6 E N ~@2 G H I J ~@3 K A B@2 ~ C D@2 ~ A
  B@2 ~ C D@2 ~@2 K ~ L ~ M O ~@3 P@2 ~@2 P@2 ~ K ~ Q R S T ~@37
>`.pickRestart({
  A: "[g4,bb4,d5]", B: "[[eb4,g4,bb4]@22 ~ [c4,eb4,ab4]@2 ~@23, ~@23 f4 ~@24]/2", C: "[g4,bb4,d5]@23 ~",
  D: "[[eb4,g4,bb4]@22 ~ [c4,f4,ab4]@2 ~@23, db5 ~@47]/2", // Eb Fm
  E: "[g4,bb4]@2 [g4,bb4,d5] ~@2 [g4,bb4,d5] ~@2 [g4,bb4,d5] ~@2 [g4,bb4,d5] ~@2 [f4,ab4,c5] ~@2 [eb4,g4,bb4] ~@2 [f4,ab4,c5] ~@2 [g4,bb4,d5], d5 ~@23", // Gm Fm Eb Fm Gm
  F: "~@2 [g4,bb4,d5] [ab4,c5] ~@20, ~ f4 ~@6", G: "~@6 d4 ~ [bb3,db4] ~@2 c4 ~@8 g3 bb3 ~ c4",
  H: "[c4,d4] ~@2 d4 ~ d4 ~@2 bb3 ~@2 c4 ~@8 g3 bb3 ~ c4", I: "d4 ~@4 bb3 d4@2 ~ bb3 ~ c4 ~@5 g3 d4@2 c4 bb3 ~ c4",
  J: "~@9 c4 ~ bb3 ~@12", K: "~@14 bb3 c4 ~ bb3 eb4 ~ eb4 c4 ~ bb3",
  L: "~@14 bb3 c4 ~ bb3 [eb4,g4,bb4] ~ [eb4,g4,bb4] [c4,f4,ab4] ~ [bb3,eb4,g4]", // Eb Fm Eb
  M: "~@14 bb3 c4@2 bb3 eb4 ~ eb4 c4 ~ bb3", N: "~@2 [g4,bb4,d5] [ab4,c5] ~@20, ~@3 f4@2 ~@19",
  O: "[g4,bb4,d5]@11 ~ [eb4,g4,bb4]@10 [c4,f4,ab4] ~", // Gm Eb Fm
  P: "[[g4,bb4,d5]@11 ~ [eb4,g4,bb4]@10 ~ [f4,ab4] ~@24, ~@23 c4@2 ~@23]/2", // Gm Eb Fm
  Q: "~@12 [ab4,c5,eb5]@2 [bb4,d5] [c5,eb5] ~ [bb4,eb5,f5] [f4,g4,bb4,c5] ~@2 [eb4,g4,bb4] ~@2, ~@7 g4 ~@4, ~@15 ab4@2 ~ d5@2 ~@4", // Ab Bb Cm Bbsus4 Fsus4 Eb
  R: "[eb4,g4,bb4] ~ [f4,ab4]@2 ~@20, ~@2 c5 ~@21", // Eb Fm
  S: "~@12 [ab4,c5,eb5]@2 [g4,bb4] [ab4,c5]@2 bb4 [g4,bb4,c5,d5] ~@2 [eb4,g4,bb4] ~@2, ~@7 d5 ~@4, ~@15 eb5 ~ [eb5,f5]@2 ~@5", // Ab Gm Ab Gm Eb Ebsus2
  T: "bb4 bb4@3 ~ [f4,ab4] ~@18, [eb4,g4] ~@5", // Fm Eb
})).s("gm_string_ensemble_1").gain(0.19)

// chords · epiano1 · "E Piano"
const epiano1 = note(`<
  ~@6 A B C D E F G H I J I K I L I M@3 N O I K I K A B C D E F G H ~@4 P Q R S I J I K I L I M@3 N O I K I K A B C D E
  F G H A B C D E F G H ~@4 P Q R S P Q R S P Q R S T ~@6 U ~@3 V W@2 X Y@3 Z AA@3 AB AC AD AE AB AF ~@4 AG@2 AH@4 ~@6
>`.pickRestart({
  A: "[ab4,c5]@18 [bb4,d5,f5]@5 ~, [eb5,g5]@2 ~", B: "[ab4,c5,eb5,g5]@17 ~ [bb4,d5,f5]@6",
  C: "[ab4,c5,eb5]@23 ~, g5@7 ~", // Ab
  D: "[f4,g4,ab4,c5,eb5] ~@2 [f4,ab4,c5,eb5] ~@2 [f4,c5,eb5]@3 ab4 ~ [g4,bb4,d5,f5] ~@12, ~@3 ab4 ~@8", // Fm7 F7 Gm7
  E: "[ab4,c5,eb5]@18 [bb4,d5,f5]@5 ~, g5@2 ~", F: "[ab4,c5,eb5,g5]@3 [bb4,d5,f5]", G: "[ab4,c5,eb5,g5]@11 ~",
  H: "[f4,ab4,c5,eb5] ~@2 [f4,ab4,c5,eb5] ~@2 [f4,ab4,eb5]@3 c5 ~ [g4,bb4,d5,f5] ~@12, ~@3 c5 ~@8", // Fm7 Gm7
  I: "[ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@2 [ab4,c5,eb5]@4 ~ [g4,bb4,d5] ~@12", // Ab Gm
  J: "[ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@2 c5 ~ c5@2 ~ [bb4,d5,eb5,f5] ~@12, ~@3 [ab4,eb5]@2 ~@7", // Ab Bb Ab5
  K: "[ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@2 [ab4,c5,eb5]@4 ~ [bb4,d5,f5] ~@12", // Ab Bb
  L: "[ab4,c5,eb5] ~@2 [ab4,eb5] ~@2 [ab4,c5,eb5]@4 ~ [bb4,d5,eb5,f5] ~@12", // Ab Ab5 Ab Bb
  M: "[[ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@2 [ab4,c5,eb5]@4 ~ [bb4,d5,f5] ~@12 f5@18 ~@15 f5@3 ~@8 e5@4, ~@23 bb4@18 ~@7 g4@12 ~@12, ~@8 d5@10 d5@2 ~ g5@3, ~@24 gb5 ~@26 bb4@9 a4@12]/3", // Ab Bb
  N: "[g4,bb4,f5]", O: "~ bb4 [g4,c5,e5]@2, [g4,f5] ~, ~ d5@3 ~@4", P: "[ab4,c5,eb5]@3 [bb4,d5,f5]",
  Q: "[ab4,c5,eb5]@17 ~ [bb4,d5,f5]@6", R: "[ab4,c5,eb5]@23 ~",
  S: "[f4,ab4,c5,eb5] ~@2 [f4,ab4,c5,eb5] ~@2 [f4,ab4,c5,eb5]@5 [g4,bb4,d5,f5] ~@12", T: "[ab4,c5,eb5,g5] ~@11",
  U: "~@21 [ab4,c5,eb5,g5]@2 ~", V: "~@21 [ab4,c5,eb5,g5] ~@2", W: "[~@11 [c5,eb5,g5,bb5]@35 ~@2]/2",
  X: "[ab4,c5,eb5,g5] ~@2 [ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@4 [g4,bb4,d5] ~@12", // Abmaj7 Ab Gm
  Y: "[[ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@2 [ab4,c5] ~ ab4 ~@2 [bb4,d5,f5] ~@9 [ab4,c5]@43 ~@2 [bb4,d5,f5]@4 ~ [ab4,eb5,g5], ~@6 eb5@2 ~@13 [eb5,g5]@41 ~@10]/3", // Ab Bb Ab Bb Abmaj7 Eb
  Z: "~@2 [ab4,c5,eb5] ~@21", // Ab
  AA: "[[ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@2 ab4 ~ [bb4,d5,f5] ~@9 [ab4,c5,eb5,g5]@39 [bb4,d5,f5]@11 [ab4,c5,eb5,g5]]/3", // Ab Bb Abmaj7 Bb Abmaj7
  AB: "~@2 [ab4,c5,eb5]@21 ~", AC: "[g4,ab4,c5,eb5] ~@2 [c5,eb5] ~@2 [ab4,c5,eb5,g5]@4 ~ [g4,bb4,d5,f5] ~@12",
  AD: "[ab4,c5,g5]@3 [g4,bb4,d5,f5]", AE: "[ab4,c5,eb5,g5]@18 [g4,bb4,d5,f5]@5 [ab4,eb5,g5]",
  AF: "[ab4,c5,eb5] eb5 ~ [ab4,c5,eb5] ~@2 c5@3 c5@2 [bb4,d5,f5] ~@9 [ab4,c5,eb5,g5] ~@2, ~@6 [ab4,eb5]@5 ~@13", // Ab Bb Abmaj7 Ab5
  AG: "[[ab4,c5]@35 ~ [bb4,d5,f5]@10 g5 [ab4,c5,eb5], [eb5,g5]@11 ~@5]/2", // Ab Bb Ab Eb
  AH: "[~@2 [ab4,c5,eb5]@45 ~ [c5,eb5,g5,bb5]@42 ~@6, ~@47 ab4@43 ~@6]/4", // Ab Cm7
})).s("gm_epiano1").gain(0.12)

// other · string ensemble 1 · "Stringz"
const string_ensemble_1_2 = note(`<
  ~@6 A B ~@2 A B ~@14 C D E@2 A B ~@2 A B ~@22 C D E@2 A B ~@2 A F ~@2 A B ~@2 A B ~@62
>`.pickRestart({
  A: "g5@3 f5 ~@2 g5@3 f5 ~ g5 ~@12", B: "g5@3 f5 ~@2 g5@3 bb5 ~ g5 ~@12", C: "c4 d4", D: "eb4 f4", E: "[g4@19 ~@5]/2",
  F: "g5@3 f5 ~@2 g5@2 ~ bb5 ~ g5 ~@12",
})).s("gm_string_ensemble_1").gain(0.16)

// other · flute
const flute = note(`<
  ~@8 A B ~@2 C D ~@8 E F G H ~@3 I ~@2 A B ~@2 C J ~@6 C D ~@8 E F G H ~@3 I ~@2 A B ~@2 C J ~@2 A B ~@2 C J ~@3 K ~@2
  C D ~@2 C D ~@2 C D ~@3 K ~@10 A B ~@2 A L ~@2 A B ~@2 A B ~@16
>`.pickRestart({
  A: "g5 ~@2 eb5 ~ f5 ~@2 g5 ~@2 eb5 ~@2 c5 ~@5 c5 eb5@2 c5", B: "g5 ~@2 eb5 ~ f5 ~@2 g5 ~@2 c5 ~@12",
  C: "g5@2 ~ eb5 ~ f5 ~@2 g5 ~@2 eb5 ~@2 c5 ~@5 c5 eb5 ~ c5", D: "g5@2 ~ eb5 ~ f5 ~@2 g5 ~@2 c5 ~@12",
  E: "~@17 d5@4 bb4 ~@2, ~@17 c5 ~@6", F: "[c5,a5]@3 bb5@2 a5@6 ~ a5@3 bb5@2 c5@4 a4 ~@2, ~@17 a5@6 ~",
  G: "bb4@2 ~@15 d5@4 bb4 ~@2, ~@17 c5 ~@6", H: "a5@3 bb5@2 ~@4 c5@2 bb4 a5@3 bb5 ~ a5@5 ~@2, c5@2 ~@3 a5@6 ~@13",
  I: "~@15 g4 ab4 a4 bb4 ~@5", J: "g5@2 ~ eb5 ~ f5 ~@2 g5 ~@2 c5 ~@4 ab4 a4 bb4@2 ~@4, ~@15 g4@2 ~@7",
  K: "~@16 ab4 a4 bb4@2 ~@4, ~@15 g4@2 ~@7", L: "g5 ~@2 eb5 ~ f5 ~@2 g5 ~@2 c5 ~@3 g5 ab5 a5 bb5 ~@5",
})).s("gm_flute").gain(0.1).pan(0.3)

// other · marimba
const marimba = note(`<
  ~@8 A B ~@2 C D ~@15 E ~@2 A B ~@2 C F ~@6 C D ~@15 E ~@2 A B ~@2 C F ~@2 A B ~@2 C F ~@3 G ~@2 C D ~@2 C D ~@2 C D
  ~@3 G ~@10 A B ~@2 A H ~@2 A B ~@2 A B ~@16
>`.pickRestart({
  A: "g5 ~@2 eb5 ~ f5 ~@2 g5 ~@2 eb5 ~@2 c5 ~@5 c5 eb5@2 c5", B: "g5 ~@2 eb5 ~ f5 ~@2 g5 ~@2 c5 ~@12",
  C: "g5@2 ~ eb5 ~ f5 ~@2 g5 ~@2 eb5 ~@2 c5 ~@5 c5 eb5 ~ c5", D: "g5@2 ~ eb5 ~ f5 ~@2 g5 ~@2 c5 ~@12",
  E: "~@15 g4 ab4 a4 bb4 ~@5", F: "g5@2 ~ eb5 ~ f5 ~@2 g5 ~@2 c5 ~@4 ab4 a4 bb4 ~@5, ~@15 g4@2 ~@7",
  G: "~@16 ab4 a4 bb4 ~@5, ~@15 g4@2 ~@7", H: "g5 ~@2 eb5 ~ f5 ~@2 g5 ~@2 c5 ~@3 g5 ab5 a5 bb5 ~@5",
})).s("gm_marimba").gain(0.25).pan(0.7)

// other · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note("<~@21 A@2 B@2 C ~@27 A@2 B@2 C ~@80>".pickRestart({
  A: "[~@9 [c5,g5]@14 ~]/2", B: "[~@2 d5 c5 ~ a4 d5@2 c5 a4 ~ g4 ~@2 g4 f4@11 ~@22]/2",
  C: "d5@2 c5 ~@2 a4@3 c5 ~@6 f4@6 ~@3, ~@11 g4@10 ~@3, ~@14 a4@7 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.11)

// other · tenor sax · "Sax Solo"
const tenor_sax = note(`<
  ~@100 A B C D E F G@2 H I J K L M N O P Q R S T U V W X Y@2 Z AA AB AC@2 AD AE ~@4
>`.pickRestart({
  A: "~@2 g3 ~ g3 ~ g3@2 ab3 ~ ab3 ~ ab3@2 bb3 ~ bb3 ~ bb3@2 c4 ~ c4 ~",
  B: "c4@2 d4 ~ d4 ~ d4@2 eb4 ~ eb4 ~ eb4@2 f4@2 f4 ~@2 g4 ~@4, ~@9 f4 ~@2",
  C: "~@3 bb4@7 ~ bb4@4 g4 ~ bb4@4 g4 ~@2, ~@3 ab4 ~@20", D: "~@5 d5@4 bb4 ~ bb4@4 g4 ~ bb4@4 c5 ~@2, ~@5 c5 ~@18",
  E: "~@3 f4 g4 bb4 g4@6 f4 bb4 ~ bb4@6 f4 c5 d5, ~@7 c5 ~@4",
  F: "c5@6 f4 g4 ~ bb4@6 [f4,g4] bb4@2 ab4@3 g4 ~@2, ~@4 c5 ~@7", // Fsus2
  G: "[~@8 f4 ~@2 f4 f4@2 ~ f4@2 ~ f4@2 bb4 c5@2 f5@9 d5@2 ~ bb4@7 g4@2 bb4 ~@3, ~@21 db5 ~@10 c5 ~@15]/2",
  H: "~@6 f4 g4 bb4 g4@6 f4 [bb4,c5] ~ bb4@6", // Bbsus2
  I: "ab4@2 bb4 ab4@2 g4 f4@2 g4 f4 ~ eb4 d4@2 c4 bb3@2 ab3 g3@2 ab3 bb3 c4 g4",
  J: "f4 ~@2 bb4 ~ g4@4 f4 ~@5 bb4@2 g4@4 f4@2 ~", K: "~@3 c5@2 g4@3 ~ [f4,bb4] c5@2 bb4@3 [f4,ab4] bb4@2 ab4@3 g4@2 ~",
  L: "~@5 c4 f4@2 c4 f4 ~ g4 ~@5 c4 g4 ~@2 eb4 ~@2", M: "f4@2 ~@3 c4 f4 ~ c4 f4 ~ g4@2 ~@11",
  N: "f4 ~@3 c4 ~ f4@2 c4 f4 ~ g4 ~@5 c4 g4 ~@2 eb4 ~@2", O: "f4@2 ~@2 c4 ~ f4 ~ c4 f4 ~ g4@2 ~@7 bb3@4, ~@11 a4 ~@12",
  P: "f3@2 ~@3 c3 f3 ~ c3 f3 ~ g3 ~@5 c3 g3 ~@2 eb3 ~@2", Q: "f3 ~@4 c3 f3 ~ c3 f3 ~ g3@6 f3 eb3@5 ~, ~@11 f3 ~@12",
  R: "f3 ~@4 c3 f3 ~ c3 f3 ~ g3 ~@6 g3 ~@2 eb3 ~@2", S: "f3@2 ~@3 c3 f3 ~ c3 f3 ~ g3@2 ~ g3 ~ g3 ab3 g3@2 ab3 g3@2 eb3",
  T: "f3@8 ~@6 g3@3 ab3 g3@2 ab3 g3@2 ~", U: "eb3@2 f3 ~@11 ab3 g3@2 f3 eb3@2 c3 eb3 ab3 ~",
  V: "g3@2 ~@3 eb3 ~ eb3 ~ f3 ~ g3 ~@6 g3 ~@2 eb3 ~@2, ~@3 f3 ~@8",
  W: "f3 ~@2 eb3 f3 ~ g3@2 ~ bb3 ~ c4 d4@2 eb4 f4 g4@2 ~ bb4 ~ g4 ~@2, ~@4 ab3 ~@4 ab4 ~@2",
  X: "f4@2 ~@3 eb3 f3@2 c3 f3 ~ g3 ~@6 g3 ~@2 eb3 ~@2",
  Y: "[f3 ~@4 c3 f3@2 c3 f3 ~ g3@2 ~ g3 ~ g3 ~ g3@2 ~ bb3@2 g3@5 ~@2 f3@2 eb3 f3 ~ g3@2 ~@5 g3 ~@2 eb3 ~@2, ~@21 ab3 ~@26]/2",
  Z: "f3 ~@4 c3 f3@2 c3 f3 ~ g3@2 ~@2 eb3 ~ f3 g3@2 ~ bb3 c4 ~, ~@7 c3 ~@2 ab3 ~",
  AA: "~@2 g3@3 eb3 f3 ~ eb3 f3@2 g3 ~@6 g3 ~@2 eb3 ~@2",
  AB: "f3 ~@4 c3 f3 ~ c3 f3 ~ g3 ~@3 d3@2 ~@2 g3 ~@3 [f3,g3], ~@7 c3 ~ f3 ~@2", // Fsus2
  AC: "[ab3@2 bb3 eb3 ~@2 ab3@2 bb3 g3 ~ eb3 ab3@2 bb3 g3 ~ eb3 g3@2 bb3 g3 ~ g3@3 ab3 g3 ~ f3 ~@2 eb3 f3@2 g3 ~@5 eb3 [f3,g3] ~@2 eb3 ~@2, ~@5 g3@2 ~@41]/2", // Fsus2
  AD: "f3 ~@4 c3 f3 ~ c3 f3 ~ g3 ~@5 [c3,eb3] g3 ~@2 eb3 ~@2", AE: "f3 ~@11",
})).s("gm_tenor_sax").gain(0.19)

// other · tenor sax · "Sax Solo" · soft notes
const tenor_sax_soft = note("<~@104 A B ~@2 C ~@9 D ~ E ~ F ~ F G H ~ F I ~@3 J K L M N>".pickRestart({
  A: "~@13 g4 ~@7 bb4 ~@2", B: "~@8 bb4 ~@15", C: "~@6 bb4 ~@17", D: "~@17 c3 ~@6", E: "gb3 ~@23", F: "~@17 eb3 ~@6",
  G: "~@21 g3 ~@2", H: "~@5 [c3,eb3] ~@11 eb3 ~@6", I: "~@16 eb3 ~@4 ab3 ~@2",
  J: "~@5 eb3 f3 ~ eb3 f3 ~@2 f3 g3@4 f3 eb3@5 ~", K: "f3@2 ~@3 c3 f3 ~ c3 f3 ~ g3 ~@5 c3 [f3,g3] ~@2 eb3 ~@2",
  L: "f3 ~@4 c3 f3 ~ c3 f3 g3 ~@3 f3 ~@2 g3 ~@2 bb3@4", M: "g3 ~@5 f3 ~@4 g3 ~@2 f3 eb3 ~@8",
  N: "f3 ~@4 c3 f3 ~ c3 f3 ~ g3 ~@2 eb3 ~@2 eb3 ~ eb3 ~ f3@2 ~",
})).s("gm_tenor_sax").gain(0.07)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@2 A B A C A B A C A B A C A B A C A B A C D E D F A B A G A B A C A B A H A B A C A B A C A B A C A B A C D E D F A
  B A G A B A C A B A H A B A C A B A H A B A I A B A C A B A C A B A C A B A I A B A C A B A C A B A C A B A J A B A C
  A B A C A B A C A B A C A B A C A B A C
>`.pickRestart({
  A: "f2@2 ~@3 c2 f2 ~ c2 f2@2 g2@2 ~@4 c2 g2 ~@2 eb2 ~@2", B: "f2@2 ~@3 c2 f2 ~ c2 f2 ~ g2@2 ~@5 bb1@3 ~@3",
  C: "f2@2 ~@3 c2 f2 ~ c2 f2 ~ g2@2 ~@11", D: "g2@2 ~@3 d2 g2 ~ d2 g2@2 a2@2 ~@4 d2 a2 ~@2 f2 ~@2",
  E: "g2@2 ~@3 d2 g2 ~ d2 g2 ~ a2@2 ~@5 c2@3 ~@3", F: "g2@2 ~@3 d2 g2 ~ d2 g2 ~ a2@2 ~@11",
  G: "f2@2 ~@3 c2 f2 ~ c2 f2 ~ g2@2 ~@3 ab2 a2 bb2 ~@5, ~@15 g2@2 ~@7",
  H: "f2@2 ~@3 c2 f2 ~ c2 f2 ~ g2@2 ~@2 g2 ab2 a2 bb2 ~@5",
  I: "f2@2 ~@3 c2 f2 ~ c2 f2 ~ g2@2 ~@3 ab2 ~ bb2@2 ~@4, ~@15 g2@2 a2@2 ~@5",
  J: "f2@2 ~@3 c2 f2 ~ c2 f2 ~ g2@2 ~@3 ab2 a2 bb2@2 ~@4, ~@15 g2@2 ~@7",
})).s("gm_electric_bass_pick").gain(0.31)

// drums · kick
const kick = s("bd").struct("x!2").gain(0.54)

// drums · clap
const clap = s("cp").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@7 x ~ x ~@2",
})).gain(0.42)

// drums · snare
const snare = s("sd").struct("~ x ~ x").gain(0.6)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ B C D ~@16
>`.pickRestart({
  A: "~ x", B: "~@4 x!4", C: "x!8", D: "x!6 ~@2",
})).gain(0.18)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9 A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "~@3 x",
})).gain(0.6)

// drums · ride
const ride = s("rd").struct("<~@98 A B C D E F G H I J K L M N O P Q R ~@10 S T U V ~@8>".pickRestart({
  A: "x ~@3 x ~ x ~@4 x ~@5 x!2 ~ x ~@3", B: "x ~ x ~@3 x ~@4 x ~@6 x ~@5", C: "x ~@5 x ~@3 x ~@6 x!2 ~@2 x ~@2",
  D: "x ~@5 x ~@2 x ~ x ~@2 x ~@2 x!2 ~@2 x ~@2", E: "x ~@5 x ~@4 x ~@2 x ~@2 x!2 ~@2 x ~@2",
  F: "x ~@2 x ~@2 x ~@2 x ~ x ~@2 x!2 ~ x!2 ~@2 x ~ x", G: "x ~@4 x!2 ~@2 x ~ x ~@2 x ~@2 x!2 ~@2 x ~ x",
  H: "x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x!2 ~@2 x ~ x", I: "x ~@2 x ~@2 x ~@2 x ~ x ~ x ~@3 x!2 ~@2 x ~@2",
  J: "x ~@2 x ~ x!2 ~@2 x ~ x ~@2 x ~@2 x!2 ~ x!2 ~@2", K: "x ~@4 x!2 ~ x!2 ~ x ~@2 x ~@2 x!2 ~ x!2 ~@2",
  L: "~@2 x ~@3 x ~@2 x ~ x ~@2 x!2 ~@2 x ~@5", M: "x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x!2 ~ x!2 ~@2",
  N: "x ~@2 x ~ x!2 ~@2 x ~ x!2 ~ x!2 ~ x!2 ~@2 x ~ x", O: "x ~@2 x ~@7 x ~ x!2 ~@2 x!2 ~@2 x ~@2",
// … 38 more lines