Strudelify

the muffin song

The Gregory Brothers

KeyB♭ majorTempo120 bpm
0:00/0:00
// the muffin song — The Gregory Brothers
// 120 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5103615; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · piccolo
const piccolo = note("<A B C ~@13 D E F G ~@15 H ~@4 I E F G J ~@19 D E F G ~@18>".pickRestart({
  A: "~@5 g6 ~@2", B: "~@8 f7@4 eb7@2 d7 eb7", C: "~ d7@4 ~@11", D: "bb6@3 d7 ~@2 eb7@2 ~@8",
  E: "a6@3 g7 ~@2 f7@3 eb7 d7@4 f6@2", F: "f6@3 bb6@2 ~ g6@6 g6!4", G: "a6@3 c7 ~@2 bb6@2 ~@8",
  H: "bb6@3 f6 g6@2 f6 bb5 ~@8", I: "bb6@3 d7 ~@2 eb7@2 bb6@3 f6 g6@2 f6 bb5", J: "f7@2 d7 c7 c7@2 bb6@2 eb7@4 c7@4",
})).s("gm_piccolo").gain(0.3)

// other · flute
const flute = note(`<
  A B C ~@8 D E F G H E I G J K L M ~ K N O ~@8 P E F G H Q I G J R ~@2 S ~@2 T U V ~@7 E F G H E I G J W X Y Z W AA AB
  AC ~@2 G H E I G AD G J
>`.pickRestart({
  A: "~@5 eb5 ~@2", B: "~@8 f5@4 eb5@2 d5 eb5", C: "~ d5@4 ~@11", D: "~@12 c6 bb5!2 a5", E: "bb5@3 d6 ~@2 eb6@2 ~@8",
  F: "a5@3 c6 ~@2 d6@2 ~@6 f5@2", G: "f5@3 bb5@2 ~ g5@6 g5!4", H: "a5@3 c6 ~@2 bb5@2 ~@4 c6 bb5!2 a5",
  I: "a5@3 g6 ~@2 f6@3 eb6 d6@4 f5@2", J: "a5@3 c6 ~@2 bb5@2 ~@8", K: "bb4@2 ~ d5 ~@2 eb5@2 ~@8", L: "~@7 bb5",
  M: "bb5 f5!2 bb5@2 g5@2 ~", N: "a4@2 ~ c5 ~@2 d5@2 ~@8", O: "f4@2 ~ bb4 ~@2 g4@2 ~@8",
  P: "bb5@3 f5 g5@2 f5 bb4 ~@4 c6 bb5!2 a5", Q: "bb5@3 d6 ~@2 eb6@2 bb5@3 f5 g5@2 f5 bb4",
  R: "f6@2 d6 c6 c6@2 bb5@2 eb6@4 c6@4", S: "~ f5 ~@4 bb4@2", T: "bb5 d5 f5 bb5@2 g5@2 ~",
  U: "~@2 bb5@2 bb5 g5 ~ f5@2 eb5 d5@4 ~@2", V: "~@6 g5 ~", W: "bb4@3 bb5@2 ~ g5@6 g5@2 f5@2",
  X: "f5@3 eb5@2 ~ d5@4 c5@2 ~@2 f4@2", Y: "f4@3 g5@2 ~ f5@8 eb5@2", Z: "d5@2 bb4 c5@3 bb4@8 ~@2",
  AA: "f5@3 eb5@2 ~ d5@3 c5 bb4@4 f4@2", AB: "f4@2 f4 g5@2 ~ f5@6 f5@2 f5@2", AC: "a5@3 a5@2 ~ bb5@5 bb5 ~@4",
  AD: "a5@3 c6 ~@2 bb5@2 ~@6 f5@2",
})).s("gm_flute").gain(0.4)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A B C D ~@3 E ~@3 F A G H I A J H D K L M N O ~@3 P ~@6 Q A G H I R J H D S ~@2 T ~@2 U V W ~@3 X Y ~ Z A G H I A J H
  D AA AB ~@2 AA AB AA AC A B H I A J H AD H D
>`.pickRestart({
  A: "bb4@3 d5 ~@2 eb5@2 ~@8", B: "a4@3 c5 ~@2 d5@2 ~@8", C: "f4@3 bb4@2 a4 g4@2 ~@8", D: "a4@3 c5 ~@2 bb4@2 ~@8",
  E: "f4@3 f4 ~ f4!2 f4@2 eb4 d4@4 ~@2", F: "~@12 c5 bb4!2 a4", G: "a4@3 c5 ~@2 d5@2 ~@6 f4@2",
  H: "f4@3 bb4@2 ~ g4@6 g4!4", I: "a4@3 c5 ~@2 bb4@2 ~@4 c5 bb4!2 a4", J: "a4@3 g5 ~@2 f5@3 eb5 d5@4 f4@2",
  K: "bb4@2 ~ d5 ~@2 eb5@2 ~@8", L: "a4@2 ~ c5 ~@2 d5@2 ~@8", M: "f4@2 ~ bb4 ~@2 g4@2 ~@8", N: "a3@3 c4 ~@2 bb3@4 ~@6",
  O: "f4 d4 f4@2 bb4@2 bb4@4 g4@2 ~@4", P: "bb4@2 g4 d4 g4@2 bb4@2 a4@2 g4 f4 ~@4",
  Q: "bb5@3 f5 g5@2 f5 bb4 ~@4 c5 bb4!2 a4", R: "bb4@3 d5 ~@2 eb5@2 bb5@3 f5 g5@2 f5 bb4",
  S: "f5@2 d5 c5 c5@2 bb4@2 eb5@4 c5@4", T: "~ f4 ~@4 bb4@2", U: "bb4 d4 f4 bb4@2 g4@2 ~",
  V: "~@2 f5@2 f5 eb5 ~ d5@2 c5 bb4@4 ~@2", W: "~@6 g4 ~", X: "~@14 f4!2", Y: "d4@2 d4@2 eb4@2 eb4 f4 d4@2 ~@6",
  Z: "~ d5@3", AA: "d4@3 eb4@5", AB: "f4@3 d4@5", AC: "c4@3 bb3@5", AD: "a4@3 c5 ~@2 bb4@2 ~@6 f4@2",
})).s("gm_clarinet").gain(0.4)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A B C ~@8 D A B E F A B E ~@2 G H I J ~ K L ~ M N ~@5 A O E P Q R E S ~ T U V ~ W ~@2 X ~ Y Z AA AB ~ AC A O E P Q R E
  AD AE AF AG AF AE AF AE AH A B E P Q R E AD E AD
>`.pickRestart({
  A: "d4@3 f4 ~@2 g4@2 ~@8", B: "c4@3 eb4 ~@2 f4@2 ~@8", C: "bb4@3 d5@2 c5 bb4@2 ~@8", D: "a4@3 bb4@2 ~ f4@10",
  E: "bb4@3 d5@2 ~ bb4@8 ~@2", F: "c5@3 c5 ~@2 bb4@2 ~@8", G: "~@7 bb4", H: "bb4 f4!2 bb4@2 g4@2 ~",
  I: "c4@3 eb4 ~@2 d4@4 ~@6", J: "f4 d4 f4@2 bb4@2 bb4@4 g4@2 ~@4", K: "bb4 d4!3 ~ f4 bb4@2 g4@4 ~@4",
  L: "f5@3 eb5 ~@2 d5@3 c5 bb4@4 ~@2", M: "~@7 g3", N: "c4@2 bb3 d4 ~@2 d4@2 c4 bb3 d4@2 ~@2 c4@2",
  O: "c4@3 eb4 ~@2 f4@2 bb4@3 g4 ~@2 f4@2", P: "c5@3 c5 ~@2 bb4@2 f5@3 eb5 ~@2 d5@2", Q: "~ c5 bb4@4 g4@2 ~@8",
  R: "c4@3 eb4 ~@2 f4@2 bb3@3 c4 ~@2 d4@2", S: "a3@3 c4 ~@2 g3@2 ~@8", T: "f4@3 a4@2 ~ bb4@2 f4@4 ~@4",
  U: "~@5 c4 eb4 ~", V: "a3@4 g4@2 f4@3 eb4 d4@4 ~@2", W: "bb4@3 f4 ~@2 f4@3 eb4 d4@4 ~@2", X: "~@6 g4 ~", Y: "~@3 bb4",
  Z: "a4@2 f4@2 bb4@2 bb4 g4@5 ~@4", AA: "~@14 f4!2", AB: "d4@2 d4@2 eb4@2 eb4 f4 d4@2 ~@6", AC: "~ d4@3",
  AD: "a3@3 c4 ~@2 bb3@2 ~@8", AE: "bb3@3 c4@5", AF: "a3@3 bb3@5", AG: "bb3@3 g3@5", AH: "a3@3 g3@5",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@12 A B C B A B C B D E F G H I H J K L M ~@5 A N C O P Q C B ~ R ~ S T U ~@4 V W ~ X Y Z@2 N C O AA Q C B ~@2 AB AC
  ~@3 AD AE AF C O AA Q C B C B
>`.pickRestart({
  A: "d4@3 d4 ~@2 eb4@2 ~@8", B: "c4@3 c4 ~@2 d4@2 ~@8", C: "d4@3 d4 ~@2 eb4@8 ~@2", D: "~@7 bb3",
  E: "f3@2 ~@2 f3 a3 ~ d4@6 ~ bb3@2", F: "bb3 f3!2 bb3@2 g3@2 ~", G: "a3@3 c4 ~@2 bb3@4 ~@6", H: "d3@2 ~ eb3@2 ~@3",
  I: "c3@2 ~ d3@2 ~@3", J: "c3@2 ~ bb2@2 ~@3", K: "g4@2 eb4 d4 eb4@2 g4@2 f4@2 eb4 d4 ~@4", L: "~@7 g3",
  M: "c4@2 bb3 d4 ~@2 d4@2 c4 bb3 d4@2 ~@2 c4@2", N: "c4@3 c4 ~@2 d4@2 bb3@3 g3 ~@2 f3@2",
  O: "c4@3 c4 ~@2 d4@2 f3@3 eb3 ~@2 d3@2", P: "~ c3 bb2@4 eb4@2 ~@8", Q: "c4@3 c4 ~@2 d4@2 bb3@3 c4 ~@2 d4@2",
  R: "f3@3 a3@2 ~ bb3@2 f3@4 ~@4", S: "~ f4 ~@4 bb3@2", T: "bb3@3 bb3 ~ bb3 f3@2 d4@4 ~@4",
  U: "f3@3 d3 ~@2 d3@3 c3 bb2@4 ~@2", V: "~@3 bb3", W: "a3@2 f3@2 bb3@2 bb3 d3@5 ~@4", X: "~@15 d4",
  Y: "d4@3 bb3 c4@2 bb3!2 d4!2 bb3!2 c4 bb3@2 f3", Z: "[a3@2 ~@6 f4@3 d4 ~ d4 f4@14 d4 ~@3]/2",
  AA: "~ c3 bb2@4 eb4@2 f4@3 d4 ~ c4 bb3@2", AB: "d3@3 eb3@5", AC: "f3@3 g3@5", AD: "~@12 c4 bb3!2 a3",
  AE: "g3@3 bb3 ~@2 c4@2 ~@8", AF: "f3@3 a3 ~@2 bb3@2 ~@8",
})).s("gm_tenor_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~@4 A B C D E F G H I J K J I J K J L M ~@2 N O ~ P Q R S ~@3 T U I J K J I J K V ~@2 W X ~@5 Y Z ~@5 I J K J AA J K J
  ~@8 AB AC K J AA J K J ~@2
>`.pickRestart({
  A: "g2@3 g2@3 c3@2 ~@8", B: "f2@3 a2@3 bb2@2 ~@8", C: "d3@3 d3@3 eb3@2 ~@8", D: "c3@3 c3@3 bb2@2 ~@8",
  E: "g3@3 g3@3 eb3@2 ~@8", F: "c3@3 g3@3 f3@2 ~@8", G: "bb2@3 d3@3 bb2@3 ~@7", H: "d3@3 c3@3 d3@10",
  I: "g3 ~@2 g3 ~@2 c3 ~@3 c3 g3 c4@2 ~@2", J: "f3 ~@2 f3 ~@2 bb2 ~@3 bb2 f3 bb3@2 ~@2", K: "d3 ~@2 d3 ~@2 eb3@8 ~@2",
  L: "bb2@3 bb2!2 d3 ~ eb3@4 ~@3 bb3@2", M: "f3@2 ~@2 f3 a3 ~ bb3@6 ~@3", N: "~@3 d3", O: "f2 a2 d3 c3 bb2@4",
  P: "f3@3 eb3 ~@2 d3@3 c3 bb2@4 ~@2", Q: "c3@2 ~@2 f2@2 ~@2 bb2@3 bb2@2 ~ bb2@2",
  R: "g2@2 ~@2 a2@3 bb2@2 ~ bb2 bb3 a3@2 a2@2", S: "g2@3 bb2@2 ~ a2@2 ~@2 g2@2 ~@2 f2@2",
  T: "g2@3 bb2 ~@2 a2@3 g2@2 ~ f2@4", U: "f2@3 f2 ~@2 g2@8 ~@2", V: "f3 ~@2 f3 ~@2 g3 ~@3 bb2 f3 bb3@2 ~@2",
  W: "~@5 c3 eb3 ~", X: "a2@4 eb3@2 d3@3 c3 bb2@4 ~@2", Y: "~@6 eb3!2", Z: "d3 d3@2 c3@3 bb2 a2 bb2@2 g2@2 ~@4",
  AA: "g3 ~@2 g3 ~@2 c3 ~ f3@3 d3 ~ c3 bb2@2", AB: "g2@3 bb2 ~@2 c3@2 ~@8", AC: "f2@3 a2 ~@2 bb2@2 ~@8",
})).s("gm_baritone_sax").gain(0.4)

// other · french horn · "Mellophone"
const french_horn = note(`<
  ~@8 A B ~ C D E F E D E F E G H ~ I J K L M N O ~ P Q@2 ~@2 D E F E D E F E ~ R S ~ T ~@3 U V ~@2 W ~@3 D X F E D E F
  E ~@4 Y Z AA AB ~ AC F E D E F E ~ E
>`.pickRestart({
  A: "f4@2 f4@2 f4 d4 ~ g4@2 eb4@2 ~@5", B: "c4@3 c4 g4 f4@2 eb4 ~ d4@4 ~@3", C: "bb3@3 c4 ~@2 d4@3 c4 bb3@2 ~@4",
  D: "d4@3 d4 ~@2 eb4@2 ~@8", E: "c4@3 c4 ~@2 d4@2 ~@8", F: "d4@3 d4 ~@2 eb4@8 ~@2", G: "bb3@3 bb3!2 d4 ~ eb4@4 ~@5",
  H: "f4@2 ~@2 f4 a4 ~ bb4@6 ~@3", I: "a3@3 c4 ~@2 bb3@4 ~@6", J: "~@3 d4", K: "f3 a3 d4 c4 bb3@4",
  L: "d3@2 ~ eb3@2 ~@3", M: "f4@3 eb4 ~@2 d4@3 c4 bb3@4 ~@2", N: "~@15 d4", O: "f4@2 bb3!2 c4 bb3@2 d4 ~@8",
  P: "~@2 f4@2 f4@2 d4 c4 ~@4 f4@2 d4 g4", Q: "[~@8 g4@2 f4@2 g4 eb4@2 d4@2 ~@3 bb4@2 bb4 g4 ~ f4@2 ~@5]/2",
  R: "~@15 f4", S: "f4@2 f4!2 d4 f4@2 eb4 ~@8", T: "bb3@3 d4 ~ f4 bb4@2 g4@4 ~@4", U: "g4@3 f4 ~ eb4 ~@2",
  V: "f4 eb4@2 c4 ~@2 d4@4 ~@6", W: "eb4@3 g3 g3@3 g3!3 c4 eb4@3 ~@2", X: "c4@3 c4 ~@2 d4@2 bb3@3 g3 ~@2 f3@2",
  Y: "d4@3 d4@2 ~ eb4@6 eb4@2 d4@2", Z: "c4@3 c4@2 ~ f4@3 eb4 d4@4 d4@2", AA: "d4@2 d4 d4@2 ~ eb4@6 eb4@2 eb4@2",
  AB: "eb4@3 eb4@2 ~ f4@5 bb3 ~@4", AC: "~@8 bb4@3 g4 ~@2 f4@2",
})).s("gm_french_horn").gain(0.3)

// other · trombone
const trombone = note(`<
  A B C D E F G H I F J K L M N O L O N O P Q N R S T U V W X ~ Y Z AA AB ~ L O N O L O N O ~@2 AC AD ~ AE ~@2 AF AG AH
  ~ AI ~@3 L O N O AJ O N O ~@8 A B N O AJ O N O ~@2
>`.pickRestart({
  A: "g2@3 bb2 ~@2 c3@2 ~@8", B: "f2@3 a2 ~@2 bb2@2 ~@8", C: "d3@3 d3 ~@2 eb3@2 ~@8", D: "f2@3 f2 ~@2 g2@2 ~@8",
  E: "c3@3 c3@3 eb3@2 ~@8", F: "a2@3 eb3@3 d3@2 ~@8", G: "f3@3 d3@3 eb3@2 ~@8", H: "f3@3 f3@3 d3@2 ~@8",
  I: "d3@3 bb2@3 c3@2 ~@8", J: "f2@3 bb2@3 g2@3 ~@7", K: "d3@3 c3@3 bb2@10", L: "g3 ~@2 g3 ~@2 c3 ~@3 c3 g3 c4@2 ~@2",
  M: "f3 ~@2 f3 ~@2 bb2 ~@3 bb2 f3 bb3@2 d3@2", N: "d3 ~@2 d3 ~@2 eb3@8 ~@2",
  O: "f3 ~@2 f3 ~@2 bb2 ~@3 bb2 f3 bb3@2 ~@2", P: "bb2@3 bb2!2 d3 ~ eb3@4 ~@5", Q: "f2 ~@2 f2 ~@2 bb2@8 ~@2",
  R: "f2 ~@2 f2 ~@2 bb2@4 ~@6", S: "~@3 d3", T: "f2 a2 d3 c3 bb2@4", U: "bb3 d3!3 ~ f3 bb3@2 g3@4 ~@4",
  V: "f2@3 a2 ~@2 bb2@8 ~@2", W: "g3@2 eb3 d3 eb3@2 g3@2 f3@2 eb3 d3 ~@4", X: "f3@2 bb2!2 c3 bb2@2 d3 ~@8",
  Y: "f3@2 ~@2 f2@2 ~@2 g2 ~@2 bb2 ~@2 bb2@2", Z: "c3@3 eb3 ~@2 d3@3 c3@2 ~ bb2@4", AA: "bb2@3 bb2 ~@2 bb2@2 bb2@2 ~@6",
  AB: "bb2!4 ~@12", AC: "~@5 c3 eb3 ~", AD: "a2@4 eb3@2 d3@3 c3 bb2@4 ~@2", AE: "f3@3 d3 ~@2 d3@3 c3 bb2@4 ~@2",
  AF: "c3@3 eb3 ~@2 d3 ~@2 c3@2 ~ bb2@2 ~@2", AG: "bb2@2 f3 g3 bb2@2 a2 bb2@3 ~@2 eb3@2 eb3@2",
  AH: "d3 d3@2 c3@3 bb2 a2 bb2@2 g2@2 ~@4", AI: "eb3@3 g2 g2@3 g2!3 c3 eb3@3 ~@2", AJ: "g3 ~@2 g3 ~@2 c3 ~@9",
})).s("gm_trombone").gain(0.3)

// bass · tuba
const bass = note(`<
  A B C D E F G H E F G I J K L M J K L M N O P Q R S L T U V W X Y Z AA AB J AC AD M J AC AD M R S L T R S L T AE AF
  ~@6 AG AH L AH AG AH L AH ~@10 L AH AG AH L AH ~@2
>`.pickRestart({
  A: "g1@3 bb1 ~@2 c2@2 ~@8", B: "f1@3 a1 ~@2 bb1@2 ~@8", C: "d2@3 d2 ~@2 eb2@2 ~@8", D: "f1@3 f1 ~@2 g1@2 ~@8",
  E: "g2@3 d3@3 c2@2 ~@2 c2 g2 eb3@4", F: "f2@3 c3@3 bb1@2 ~@2 bb1 f2 d3@4", G: "d2@3 bb2@3 eb2@2 ~@2 eb2 bb2 eb3@4",
  H: "f2@3 c3@3 g2@2 ~@2 g2 d3 g3@4", I: "f2@3 c3@3 g2@2 ~@2 g2 d3 g3@2 ~@2", J: "g1 ~@2 g1 ~@2 c2@2 ~@8",
  K: "f1 ~@2 f1 ~@2 bb1@2 ~@6 d2@2", L: "d2 ~@2 d2 ~@2 eb2@8 ~@2", M: "f1 ~@2 f1 ~@2 g1@2 ~@8", N: "d2@7 eb2@9",
  O: "c2 d2", P: "f2 g2", Q: "a2 bb2", R: "g1 ~@2 g1 ~@2 c2@8 ~@2", S: "f1 ~@2 f1 ~@2 bb1@8 ~@2",
  T: "f1 ~@2 f1 ~@2 g1@8 ~@2", U: "c2@2 ~@2 f1@2 ~@2 bb1@3 bb1@2 ~ bb1@2", V: "g1@2 ~@2 a1@3 bb1@2 ~ bb1 bb2 a2@2 a1@2",
  W: "g1@3 bb1@2 ~ a1@2 ~@2 g1@2 ~@2 f1@2", X: "f2@4 f1@4 g1 ~@2 bb1 ~@2 bb1@2", Y: "c2@3 eb2 ~@2 d2@3 c2@2 ~ bb1@4",
  Z: "bb1@3 bb1 ~@2 bb1@2 bb1@2 ~@6", AA: "g1@3 bb1 ~@2 a1@3 g1@2 ~ f1@4", AB: "f1@3 f1 ~@2 g1@8 ~@2",
  AC: "f1 ~@2 f1 ~@2 bb1@2 ~@8", AD: "d2 ~@2 d2 ~@2 bb1@8 ~@2", AE: "c2@3 eb2 ~@2 d2 ~@2 c2@2 ~ bb1@2 ~@2",
  AF: "bb1@2 f2 g2 bb1@2 a1 bb1@3 ~@6", AG: "g2 ~@2 g2 ~@2 c2 ~@9", AH: "f2 ~@2 f2 ~@2 bb1 ~@9",
})).s("gm_tuba").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C
  D C D C D C D C D ~@10 C D C D C D ~@2
>`.pickRestart({
  A: "~@7 x", B: "x ~@2 x ~@2 x ~@3 x ~@2 x ~@2", C: "x ~@2 x ~@2 x ~@3 x ~@5", D: "x ~@2 x ~@2 x ~@4 x ~@4",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct(`<
  A ~@3 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B C B C B C ~@10 B C B C B C ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~ x", C: "~@4 x ~@2 x!2 ~@3 x ~@3",
})).gain(0.2)

// drums · clap
const clap = s("cp").struct("<~@46 [~ x] ~@39>").gain(0.25)

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

// drums · crash
const crash = s("cr").struct("<[~ x ~ x]!4 x ~@41 [~@10 x!2 ~ x!2 ~] ~@39>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C B A B A B A B A B A B A B A
  B A B A B A B ~@10 A B A B A B ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x!2 ~@3 x ~@3", C: "~ x ~@2",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C B A B A B A B A B A B A B A
  B A B A B A D ~@10 A B A B A D ~@2
>`.pickRestart({
  A: "x ~ x ~ x ~ x!4 ~ x!2 ~ x!2", B: "x!8", C: "x ~ x ~ x ~ x!3 ~@7", D: "x!7 ~",
})).gain(0.3)

// drums · congas
const congas = s("conga:18").struct("<~@46 [~ x] ~@39>").gain(0.79)

// drums · whistle
// … 34 more lines