Strudelify

Quiet Afternoon

Stanley Clarke

KeyB majorTempo95 bpm
0:00/0:00
// Quiet Afternoon — Stanley Clarke
// 95 bpm, 4/4, key B major. 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 108 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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 · piano
const piano = note(`<
  A B A C A B A C A B A C A B A C A B A C A B A C A B A C A D@3 E@2 F G H I J K L M N O P Q R@2 S T U V W X Y G H I J K
  L M N O P Q R@2 S T U V W X A C A D@3 E@2 A B A C A B A C A B A C A B A C A B A C A D@3 E@2
>`.pickRestart({
  A: "[b2,b3,c#4,d#4,f#4] [d#2,d#3,f#3,b3,d#4]", B: "e3@2 e3 [a2,g3,b3,e4]@5, [e2,g3,b3]@7 ~@9",
  C: "e2@2 b2 ~ a#2 ~ [a2,g3,b3,e4]@9 ~, [e3,g3,b3]@3 ~@5", // Em
  D: "[e3@2 e3 b3@5 [b2,b3,c#4,d#4,f#4]@3 [d#2,f#3,b3,d#4]@4 [e2,g3,b3,d4]@4 [c3,a#3,d4,f#4]@5, [e2,g3,b3]@6 [a2,g3,e4]@17 ~@25]/3", // B Em7 Daug Em A7
  E: "[[a2,g3,b3,d4,f#4] ~@3 [a2,g3,b3,d4,f#4]@17 ~@11]/2", // Gmaj7
  F: "[b2,b3,c#4,d#4,f#4]@2 ~ [b2,c#4,d#4] ~@2 [d#2,f#3,b3,d#4]@10", G: "[e2,e3,g3,b3]@6 [a2,g3,b3,e4]@9 ~",
  H: "[b2,b3,c#4,d#4,f#4]@2 ~ [b2,b3,c#4,d#4,f#4] ~@2 [d#2,d#3,f#3,b3,d#4]@6 ~@4", // B
  I: "~@2 [e2,g3,b3,d4] ~@5 [g3,b3,e4]@2 a2 [g3,b3,e4] ~@4, ~@8 a2 ~@7", // Em7 Em
  J: "[b2,b3,c#4,d#4,f#4]@2 ~ [b2,b3,c#4,d#4,f#4] ~@2 [d#2,f#3,b3,d#4]@10", // B
  K: "~@2 [e2,g3,b3,d4] ~@2 [e2,b3,d4] ~@2 [a2,g3,b3,e4]@2 ~ [a2,g3,b3,e4] ~@4", // Em7 E7 Em
  L: "[b2,b3,c#4,d#4,f#4]@3 [b2,b3,c#4,d#4,f#4] ~@6 [d#2,d#3,f#3,b3,d#4]@6", // B
  M: "~@6 [e2,e4,g4,b4] ~@2 [e2,e4,g4,b4] ~@4 [a2,g4,b4,e5]@2", // Em
  N: "~@3 [b2,b4,c#5,d#5,f#5] ~@8 [d#2,f#4,b4,d#5] [d#2,f#4,b4] ~@2, ~@6 d#3 ~", // B
  O: "~@6 [e2,e4,g4,b4]@3 [e2,e4,g4,b4] ~@6, ~@6 c5 ~@9", // Em
  P: "~@3 [b2,b4,c#5,d#5,f#5] ~@4 [d#2,d#3,f#4,b4,d#5]@2 ~ [d#2,d#3,f#4,d#5] ~@4", // B D#m
  Q: "~@3 [e3,g3,b3] ~@4 [a2,g3,b3,e4]@3 [g3,b3,e4] ~@4, ~@3 e2@5 ~@3 a2@5", // Em
  R: "[[b2,b3,c#4,d#4,f#4]@6 [d#2,d#3,f#3,b3,d#4]@12 [e2,e3,g3,b3] ~@5 [a2,g3,b3,e4]@8]/2", // B Em
  S: "[b2,b3,c#4,f#4]@3 [d#3,f#3,b3,d#4]@5, d#4 ~@15", T: "[e3,g3,b3,d4]@3 [a2,g3,b3,e4]@5",
  U: "[b2,b3,c#4,d#4,f#4]@2 ~ [b2,b3,c#4,d#4,f#4] ~@2 [d#2,d#3,f#3,b3,d#4]@4 [f#3,b3,d#4] ~ d#3 [f#3,b3,c4,d#4] d#3 ~, ~@6 g#3 ~@9", // B
  V: "~@2 [e2,g3,b3,d4]@3 [e2,g3,b3,d4] ~@2 [a2,g3,b3,e4]@2 ~ [a2,g3,b3,e4] ~@4, ~@2 [a3,e4] ~@13", // Em7 Em A5
  W: "[b2,b3,c#4,d#4,f#4]@6 [d#2,d#3]@4 [d#2,d#3,f#4,d#5]@3 [d#2,d#3,f#4,d#5]@3, ~@3 [f#3,b3,d#4]@5, ~@5 b4@3", // B D# D#m B
  X: "~@2 [e2,e4,g4,b4] ~@2 [e2,e4,g4,b4] ~@4 [a2,g4,b4,e5]@3 [a2,g4,b4,e5] ~@2", // Em
  Y: "~@3 [b2,c#4,d#4] ~@2 [d#2,f#3,b3,d#4]@10", // B
})).s("gm_piano").gain(0.27)

// bass · fretless bass
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R S T A B C D E F U V U W U X Y@2 Z AA AB AC AD AE AF AG AH AI AH AJ AK AL AM AN AO
  AP AQ AR Z AA AB AC AD AE AF AG AH AI AH AJ AK AL AM AN AO AP AQ AR U V U W U X Y@2 I J K L M N O P Q R S T A B C D E
  F U V U W U X AS@2
>`.pickRestart({
  A: "b1 d#1", B: "e1@6 a1@8 a#2 ~", C: "b1@3 ~@5", D: "e1 b2 a#2 a2@2 a1@3", E: "b1 ~", F: "~@6 a1@9 ~",
  G: "~@3 b2 ~@12", H: "e1@6 a1@8 a#2 a#1", I: "~@3 b2 ~@4 d#1@8", J: "e1@3 a1@5", K: "b1@5 ~@3 d#1@8",
  L: "~ b2 a#2 a2@2 ~@3", M: "b1@5 ~@11", N: "~@3 e2 e1@2 a1@4 a2 ~@2 a#2 a#1@2", O: "b1@3 b2 ~@2 b1@2 d#1@3 d#2 ~@4",
  P: "e1@3 e2 g#1@2 a1@4 a2 ~ a1 a#2 a#1@2", Q: "b1@3 b2 ~@2 d#1@4 d#2 ~@2 d#2 d#1@2",
  R: "e1@2 e2 ~ a1@2 a1@4 a2 ~@2 a#2 a#1@2", S: "b1@3 b2 ~@2 b1@2 ~@3 d#2 ~@4", T: "e1@2 b2@2 a#2@2 a2@4 a1@5 ~",
  U: "b1 b2 b1 b2 d#1 d#2 ~ d#2, ~@3 d#1", V: "e1@2 e2@2 ~@2 e2@2 a1@2 a2@2 a1@2 a2 a#1, ~ e1 ~@2",
  W: "e1 e2 ~ e2 a1 a2 a1 a2, ~ e1 ~@2", X: "e1 e2 e1 e2 c2 c3 c2 a#1", Y: "[a1@2 ~@2 a1@27 ~]/2",
  Z: "b1@3 b2 ~@2 d#1@2 d#1@2 ~@4 d#2!2", AA: "e1@3 e2 ~@2 g#1@2 a1@2 ~@3 a2 a#1@2", AB: "b1@3 b2 ~ b2 d#1@3 ~@6 d#2",
  AC: "e1@3 e2 ~ e2 g#1@2 a1@3 ~ b2 a#2 a2 a#1", AD: "b1@3 b2 ~@2 d#1@3 ~@5 d#2 d#1",
  AE: "e1@3 e2 g#1 e2 a1@6 a2 a#2 a#1@2", AF: "b1@3 b2 ~ d#2 d#1@4 ~@4 d#2 ~",
  AG: "e1@3 e2 ~ e2 a1@2 a2 ~ a1@2 a2 a#1@3", AH: "b1@3 b2 ~ b2 d#1@3 ~@5 d#2 d#1", AI: "e1@3 e2 ~ e2 a1@6 a2 a#1@3",
  AJ: "e1@3 e2 ~ e2 a1@4 a2 ~ a#1 a#2 a#1@2", AK: "b1@3 b2 ~@10 d#2 d#1",
  AL: "e1@3 e2 ~ e2 a1@6 a2 ~ a#2 ~, ~@13 a#1@3", AM: "b1@3 b2 ~@2 d#1@8 d#2 d#1",
  AN: "e1@2 e2 e1@2 e2 a1@2 a2!2 a1@2 a#2 a#1@3", AO: "b1@3 b2 ~ d#2 d#1@3 ~@5 d#2 d#1",
  AP: "e1@3 e2 ~ e2 a1@5 ~@2 a2 a#1@2, ~@6 a1 ~", AQ: "b1@3 b2 ~ b2 d#1@8 d#2 d#1",
  AR: "e1@3 e2 ~ e2 a1@4 a2@2 a#1 a#2 a#1@2", AS: "[a1 ~ a1@10 ~@4]/2",
})).s("gm_fretless_bass").gain(0.34)

// bass · fretless bass · soft notes
const bass_soft = note(`<
  ~ A B ~ C D E ~ F ~ G H I J K ~@2 L M ~@2 A B ~ C D ~@8 N O P Q R Q S ~@5 T ~ U ~ V Q ~@2 N O P Q R Q S ~@5 T ~ U ~ V
  Q ~@10 F ~ G H I J K ~@2 L M ~@2 A B ~ C D ~@8
>`.pickRestart({
  A: "~@15 a#1", B: "~@3 d#1@5", C: "~ d#1", D: "e1@6 ~@8 a#1 ~", E: "b1@2 ~ d#1@5", F: "b1@3 ~@3 d#1@2 ~@6 d#2 ~",
  G: "~@3 b1 ~@4", H: "e1 ~@4 a1@3", I: "~@3 b1 d#1@4", J: "e1@3 ~@13", K: "~@15 d#2, ~@7 d#1", L: "~@3 g#1 ~@12",
  M: "~@8 d#1@3 ~@3 d#1@2", N: "~@5 f#2 ~@10", O: "~@4 g#1 e2 ~@4 a2 ~@5", P: "~@7 d#1", Q: "~@10 a2 ~@5",
  R: "~@5 b2 ~@10", S: "~@15 d#1", T: "~@5 b2 d#1@3 ~@7", U: "~@5 d#2 ~@10", V: "~@5 d#1 ~@2",
})).s("gm_fretless_bass").gain(0.2)

// chords · pad metallic
const pad_metallic = note("<~@50 A@2 B C D E@2 F G H@2 I J K@2 L M N O L P Q R S ~@32 T@2>".pickRestart({
  A: "[[b3,d#4,f#4]@8 ~@7 [b3,d4]@9 a4@8]/2", B: "~@3 b4@5, [b3,f#4]", C: "~@11 a4@5, [g3,b3,d4]",
  D: "~@5 b4@11, [b3,d#4,f#4]", E: "[~@8 a4@7 [b3,d#4,f#4]@11 [f#3,b3,d#4]@6, [g3,b3] ~]/2", F: "b3 e4, d4, ~@8 b3 ~@7",
  G: "[b3,d#4] [f#3,b3,d#4]@3, f#4@7 ~@9", // B
  H: "[[g3,b3,d4]@4 [g3,b3,e4]@5 ~@6 d#4, ~@19 [b3,d#4,f#4]@8 ~ a#3@4, ~@11 b4@5]/2", I: "f#3 g3@2 b3@3 d4@2",
  J: "b3@3 d#4 ~@4 [b3,d#4,c#5]@8", K: "[g3@3 b3@5 d4@4 ~@12 b4@8, ~@12 b3@13 ~@7, ~ d#4]/2",
  L: "~@3 a4@5, [g3,b3], ~@3 d4@13", M: "[b3,d#4,f#4]", N: "~ a4, [g3,b3]", O: "~@3 b4@5, [b3,d#4,f#4]",
  P: "~@2 [b3,g#4]@3 b4@9 ~@2, ~ d#4@6 ~, ~@5 b3 ~@10", Q: "~@5 [g3,g4,b4,d5]@3", R: "~@3 f#4, ~ b3, ~@4 d#4@3 ~",
  S: "g4 a4, g3", T: "[[a2,g3,b3,d4,f#4]@3 ~]/2",
})).s("gm_pad_metallic").gain(0.27).pan(0.6)

// chords · pad metallic · soft notes
const pad_metallic_soft = note("<~@50 A@2 B ~@2 C ~ D ~@3 E ~@2 F ~@2 C ~@40>".pickRestart({
  A: "[~@15 g3@10 ~@7]/2", B: "d#4", C: "d4", D: "~@9 b3@7, g3", E: "~@15 a#3", F: "g#4@9 ~@7",
})).s("gm_pad_metallic").gain(0.09).pan(0.6)

// other · slap bass 1
const slap_bass_1 = note(`<
  ~@8 A B A C A D@5 E F A B A G A H@7 I ~ J K L M N O P Q@2 R@2 S T U V ~@24 W X@6 I ~ A B A C A D@5 E F A B A G A H@7 I
  ~
>`.pickRestart({
  A: "g#5@2 f#5@2 c#5 ~ c#5@2 b4@4 g#4@2 f#4@2, f#5 ~@15", B: "e5@3 e5@5", C: "e5 d5 c#5 b4@2 ~@3",
  D: "[e5@6 e5@4 d5@2 c#5@2 b4@4 f#4@2 g#4@2 b4@4 f#4@2 g#4@2 b4@4 d5 ~ d5@2 b4@4 f#4@2 g#4@2 b4@26 ~ a2 ~@2 a2!2 ~@2]/5",
  E: "~@7 a2 ~@2 d#2@2 ~ c#3 d#2@2", F: "e2@2 ~ e3 ~@2 a2@2 ~@8", G: "e5@2 d5@2 c#5@2 b4@4 a2@5 ~",
  H: "[e5@6 e5@4 d5@2 c#5@2 b4@4 f#4@2 g#4@2 b4@4 f#4@2 g#4@2 b4@4 d5 ~ d5@2 b4@4 f#4@2 g#4@2 b4@4 f#4@2 g#4@2 b4@4 f#4@2 g#4@2 b4@4 e5@2 d5@2 b4@4 f#4@2 g#4@2 b4@4 f#4@2 g#4@2 b4@4 f#4@2 g#4@2 b4@4 d5 ~ e5@2 f#5@4 g5@2 b5@2 d6 ~, ~@66 d5 ~@45]/7",
  I: "f#6 ~@3 f#6@12", J: "~@4 e4@2 d4 ~@7 a3 b3", K: "~@12 a3 d4 a3 b3", L: "~ b3@2 ~@13",
  M: "~ d3 f#3 ~ a3 ~ f#3 ~ a3 ~ d3 a2 d3 a2 b2 e3", N: "~ e3 ~@4 b1@5 ~@5", O: "~@5 d2 e2 f#2 a2 d2 a2 ~ a2 e2 ~ b2",
  P: "~ d3@3 b2 ~@11",
  Q: "[~ b4 ~ b4 a4 ~ f#4 ~ a4 ~ f#4 ~@2 d4 ~ d4@2 b3 ~@4 a3 d3 e3 f#3 ~@2 a3 a2 ~ a2, ~@15 b3 ~@14 d3@2]/2",
  R: "[b2 a2 ~@7 b1 f#2 a2 d2!2 b2 a2@2 f#2 b1!2 ~@12, ~@15 e2 ~@16]/2",
  S: "~ d3 [d3,f#3,a3] b3 [f#3,a3] b3 a3 [f#3,a3,b3] d3 [e3,f#3] [a3,b3] a3 f#3 b3 [f#3,a3] a3", // D F#m B7 Esus2 Asus2 F#m
  T: "d3 ~@2 b2 ~ e3 b2 a2 d3 ~ b2 ~ a2 d2 e2 a2", U: "~ a2 e2 b1 ~@2 d2 ~@2 b1 a1@2 b1 d2 ~ e2", V: "~ a2 b1 ~@13",
  W: "~@5 f#4 g#4 b4",
  X: "[~@2 f#4@2 g#4@2 b4@4 f#4@2 g#4@2 b4@4 e5@2 d5@2 b4@4 f#4@2 g#4@2 b4@4 f#4@2 g#4@2 b4@4 f#4@2 g#4@2 b4@4 e5@2 d5@2 b4@4 f#4@2 g#4@2 b4@4 f#4@2 g#4@2 b4@4 f#4@2 g#4@2 b4@4 d5 ~ e5@2 f#5@4 g5@2 b5@2 d6 ~, ~@18 d5 ~@31 d5 ~@45]/6",
})).s("gm_lead_8_bass_lead").gain(0.36)

// other · slap bass 1 · soft notes
const slap_bass_1_soft = note(`<
  ~@8 A ~ A ~ A ~@2 B ~ C ~ D A ~ A ~ A ~@2 B ~@3 E F ~ G ~@2 H ~@5 I ~ J ~@33 E F ~ A ~ A ~ A ~@2 B ~ C ~ D A ~ A ~ A
  ~@2 B ~@3 E F ~
>`.pickRestart({
  A: "~@2 d5 ~@5", B: "~ e5 ~@6", C: "~@8 a2 ~@3 g2 ~@3", D: "~@2 e2 ~ g#2 ~@11", E: "~@10 f5 ~@5", F: "g6 ~@15",
  G: "~@4 d4 ~@11", H: "~@3 d3 f#3 d3 ~@10", I: "~@11 d2 ~ a2 ~@2", J: "~@5 a3 ~@7 a3 ~ b3",
})).s("gm_lead_8_bass_lead").gain(0.23)

// chords · electric guitar jazz
const electric_guitar_jazz = note("<~ A@2 B C@4 ~@97 D@3>".pickRestart({
  A: "[~@19 [b4,c#5,f#5]@13, ~@13 f#4@2 [g4,g#4]@17, ~@7 a4@9, ~ f#4]/2", B: "~@14 [c#4,f#4] [d#4,g#4]",
  C: "[f#4@3 [f#4,b4]@9 ~@4 f#4@3 [f#4,b4]@7 ~@6, c#4@12 ~@3 [c#4,f#4] c#4@10 ~@6, ~@31 [d#4,g#4]@21 ~@12]/4", // B5 F#5 G#5
  D: "[~@20 [a3,g4,f#5]@25 ~@3, ~@7 g4@3 ~@14, ~@5 b4@10 ~, ~@16 d5@29 ~@3]/3", // D
})).s("gm_electric_guitar_jazz").gain(0.27).pan(0.4)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@30 A B C ~@8 D ~@3 E ~ E D C ~@11 D ~@3 E ~ E D C ~@10 C ~@23 A B ~@2
>`.pickRestart({
  A: "~@4 x!2 ~ x", B: "~ x ~ x ~@4", C: "~ x", D: "~@5 x ~@2", E: "~@7 x",
})).gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@33 A ~@8 B ~@6 C ~@12 B ~@6 C ~@11 A ~@26>".pickRestart({
  A: "~@7 x ~@8", B: "~@3 x", C: "~@13 x ~@2",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  A@19 B A@12 C A D E F G H I J K L M N O P Q R ~ S T U V D E F G H I J K L M N O P Q R ~ S T U V A@6 C A@12 B A@12 W ~
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "x ~@3 x ~@3 x ~@3 x!2 ~@2", D: "~ x ~@3 x ~@10", E: "~@5 x ~@2 x ~@7",
  F: "~ x!2 ~@2 x ~@5 x ~@3 x", G: "~@4 x!2 ~@9 x", H: "~ x!2 ~@5 x ~@3 x ~@2 x", I: "~@4 x ~@3 x!2 ~@3 x!3",
  J: "~@5 x ~@4 x!2 ~@4", K: "x!2 ~ x ~@5 x ~@5 x", L: "~@4 x!2 ~@5 x ~@3 x", M: "~@2 x ~@2 x ~@5 x ~@4",
  N: "~ x!2 ~ x!2 ~@4 x ~@4 x", O: "~@15 x", P: "~@3 x ~@4 x ~@3 x ~@2 x", Q: "~@2 x ~@2 x ~@2 x!2 ~@2 x ~@2 x",
  R: "~@2 x ~ x!2 ~@2 x ~@6 x", S: "x ~@2 x ~@4 x ~@3 x ~@3", T: "~ x ~@2 x!2 ~@2 x ~@2 x ~@4",
  U: "~@2 x ~ x!2 ~@4 x ~@3 x ~", V: "~ x ~@3 x ~@3 x ~@6", W: "x!2 ~@2",
})).gain(0.21)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@34 A B C D E F G ~ H I C ~ J K C ~ J L C ~ A B C D E F G ~ H I C ~ J K C ~ J L C ~@35
>`.pickRestart({
  A: "~ x ~@2 x ~@5 x!2 ~@3 x", B: "~ x ~@2 x ~@11", C: "~@11 x ~@4", D: "~ x ~@14", E: "~@4 x!2 ~@9 x",
  F: "~ x!2 ~@2 x ~@10", G: "~@2 x ~ x ~@10 x", H: "~ x ~@13 x", I: "~@4 x ~@6 x ~@3 x", J: "~@15 x", K: "~ x ~@2",
  L: "x ~@14 x",
})).gain(0.08)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@7 A ~@3 B ~@7 A ~@3 B ~@7 A ~ C ~ A ~ A ~@7 D ~@3 E ~@5 A ~ A ~@7 D ~@3 E ~@9 A ~ C ~@3 B ~@7 A ~@3 B ~@7 A ~@2
>`.pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@5 x ~@2", D: "~@5 x ~@3 x ~ x ~@4", E: "~@5 x ~@3 x ~@6",
})).gain(0.33)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~@3 A ~@3 A ~@2 B@5 C ~@3 A ~@3 A ~@3 A ~@5 D ~@19 D ~@17 A ~@3 A ~@5 A ~@2 B@5 C ~@3 A ~@3 A ~@3 A ~@2
>`.pickRestart({
  A: "~@7 x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x!2 ~", D: "~@3 x",
})).gain(0.12)

// drums · high tom
const high_tom = s("ht").struct("<~@7 A ~@11 A ~@11 A ~@5 B ~@7 C ~@11 B ~@7 C ~@13 A ~@13 A ~@11 A ~@2>".pickRestart({
  A: "~@5 x ~@2", B: "~@9 x ~@6", C: "~@3 x ~@12",
})).gain(0.29)
// … 32 more lines