Strudelify

Can't Hold Us

Macklemore & Ryan Lewis

KeyB♭ majorTempo148 bpm
0:00/0:00
// Can't Hold Us — Macklemore & Ryan Lewis
// 148 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5962307; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 59 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(148/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 · flute
const flute = note(`<
  A B C D A E C D A E C ~@5 F G H I ~@4 J@3 K@2 L@2 M N@2 ~@2 N@2 ~@3 O@2 P Q@2 R@2 S@2 T U V W X@2 Y@3
>`.pickRestart({
  A: "~ a5 a5@2 ~ a5 ~ a5", B: "~ e5 e5@2 ~ e5 ~ e5", C: "~ c6 c6@2 ~ c6 ~ c6", D: "~ d6 d6@2 ~ d6 ~ d6",
  E: "~ e5 f5@2 ~ f5 ~ f5", F: "d5@9 d5!2 ~ f5@6 e5@3 f5@3", G: "a5", H: "d6@3 e6@14 ~ e6@3 c6@3", I: "d6@5 ~@3",
  J: "[~@2 f6@2 e6@2 d6@3 ~ f6@2 e6@2 d6@3 ~ f6@2 e6@2 c6@2]/3", K: "[d6@2 a6@2 g6@2 f6@3 ~ f6@2 e6@2 c6@2]/2",
  L: "a5 f6 e6 c6", M: "d6@7 ~", N: "[d4@2 d4@2 f4 d4@2 d4@2 c4 d4@2 f4@2 ~@2]/2",
  O: "[~@11 f5@3 ab5@3 f5@3 c6@6 c6@3 ~@5 f5@3 ab5@3 f5@3 c6@5]/2", P: "~ c6@3 ~@2 f5@3 f5@3 ab5@3 f5@3 c6@6",
  Q: "[~@2 f5@6 f5@3 ab5@3 f5@3 c6@6 c6@2 f5@3 f5@3 f5@3 ab5@3 f5@6 c6@5]/2",
  R: "[c6@3 c6@3 eb6@3 db6@3 c6@5 bb5@6 f5@17 ~@6 c6@2]/2",
  S: "[~ c6@3 eb6@3 db6@3 c6@5 bb5@6 c6@6 f5@3 ab5@3 f5@2 c6@6 c6@3 ~@4]/2",
  T: "~@2 f5@3 ab5@2 f5@3 c6@6 c6@3 ~@3 f5@2", U: "~ f5@2 ab5@3 f5@3 c6@6 ~@3 f5@6",
  V: "f5@2 ab5@3 f5@3 c6@6 c6@3 f5@3 f5@2 f5@2", W: "~ ab5@3 f5@6 c6@6 c6@3 c6@2 eb6@3",
  X: "[db6@3 c6@5 ~ bb5@6 f5@17 ~@5 c6@3 c6@3 eb6@3 db6@2]/2",
  Y: "[~ c6@5 ~ bb5@5 c6@28 ~ f5@3 ab5@3 f5@3 c6@5 c6@3 ~@14]/3",
})).s("gm_flute").gain(0.45)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A B C D A E C D A E C ~ F G@2 H I J K L M@3 N@4 O@2 P@2 L Q@2 R S Q@2 T U ~ V@2 W X@2 Y@2 Z@2 AA AB AC AD@3 AE AF@2
>`.pickRestart({
  A: "~ a5 a5@2 ~ a5 ~ a5", B: "~ e5 e5@2 ~ e5 ~ e5", C: "~ c5 c5@2 ~ c5 ~ c5", D: "~ d5 d5@2 ~ d5 ~ d5",
  E: "~ e5 f5@2 ~ f5 ~ f5", F: "~@2 c4 d4 f4 ~ c4 d4", G: "f4 ~ d4@4 c4 d4", H: "d4 ~ a4@2 g4@2 f4@2",
  I: "d5@9 d5!2 ~ d5@6 e4@3 f4@3", J: "a4", K: "d5 e5@5 e5 c5", L: "d5@7 ~",
  M: "[~@2 f5@2 e5@2 d5@3 ~ f5@2 e5@2 d5@3 ~ f5@2 e5@2 c5@2]/3",
  N: "[d5@2 a5@2 g5@2 f5@3 ~ f5@2 e5@2 d5@3 ~ f5@2 e5@2 d5@3 ~ f5@2 e5@2 c5@2]/4",
  O: "[d5@2 a5@2 g5@2 f5@3 ~ f5@2 e5@2 c5@2]/2", P: "a4 f5 e5 c5", Q: "[d4@2 d4@2 f4 d4@2 d4@2 c4 d4@2 f4@2 ~@2]/2",
  R: "f4 e4 d4 e4 d4 c4 a3 c4", S: "a3 g3 f3 g3 a3@4", T: "a4 ~ c5 ~ d5 ~ e5 ~", U: "f5 ~ e5 ~ d5@4",
  V: "[~@11 f4@3 ab4@3 f4@3 ab4@6 ab4@3 ~@5 f4@3 ab4@3 f4@3 g4@5]/2", W: "~ g4@3 ~@2 f4@3 f4@3 ab4@3 f4@3 g4@6",
  X: "[~@2 f4@6 f4@3 ab4@3 f4@3 ab4@6 ab4@2 f4@3 f4@3 f4@3 ab4@3 f4@6 ab4@5]/2",
  Y: "[ab4@3 ab4@3 c5@6 ab4@5 bb4@6 f4@17 ~@6 g4@2]/2",
  Z: "[~ g4@3 c5@3 bb4@3 g4@5 bb4@6 c5@6 f4@3 ab4@3 f4@2 ab4@6 ab4@3 ~@4]/2",
  AA: "~@2 f4@3 ab4@2 f4@3 g4@6 g4@3 ~@3 f4@2", AB: "~ f4@2 ab4@3 f4@3 g4@6 ~@3 f4@6",
  AC: "f4@2 ab4@3 f4@3 ab4@6 f4@3 f4@3 f4@2 f4@2",
  AD: "[~ ab4@3 f4@6 ab4@6 ab4@3 ab4@2 c5@6 ab4@6 bb4@6 f4@17 ~@5 g4@3 g4@3 bb4@3 ab4@2]/3",
  AE: "~ g4@6 bb4@5 c5@6 bb3@6", AF: "[c4@17 f4@3 ab4@3 f4@3 ab4@5 ab4@3 ~@14]/2",
})).s("gm_clarinet").gain(0.45)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A B C D A E C D A E C ~ F G@2 H F G I J K L M N K O P Q R@3 S T@2 U V T@2 W X ~ Y@2 Z AA@2 AB@2 AC AD@7 AE@3
>`.pickRestart({
  A: "~ a4 a4@2 ~ a4 ~ a4", B: "~ e4 e4@2 ~ e4 ~ e4", C: "~ c4 c4@2 ~ c4 ~ c4", D: "~ d4 d4@2 ~ d4 ~ d4",
  E: "~ e4 f4@2 ~ f4 ~ f4", F: "~@2 c4 d4 f4 ~ c4 d4", G: "f4 ~ d4@4 c4 d4", H: "d4 ~ a4@2 g4@2 f4@2",
  I: "f4 ~ d4@4 e4 c4", J: "d4@15 f4 g4 ~ f4@3 e4@3", K: "d4@6 e4 f4", L: "a4@7 a4", M: "f4 g4@5 f4 e4",
  N: "d4@6 f4 e4", O: "a4@6 g4 a4", P: "c5@6 e5 c5", Q: "d4@4 f4 e4 d4 e4",
  R: "[a3@6 a4@6 g4@2 a4@2 g4@2 f4@9 ~@3 a4@6 g4@2 a4@2 g4@2 f4@9 ~@3 a4@6 g4@2 a4@2 g4@2 f4@6]/3", S: "d4@7 ~",
  T: "[d4@2 d4@2 f4 d4@2 d4@2 c4 d4@2 f4@2 ~@2]/2", U: "f4 e4 d4 e4 d4 c4 a3 c4", V: "a3 g3 f3 g3 a3@4",
  W: "a3 ~ c4 ~ d4 ~ e4 ~", X: "f4 ~ e4 ~ d4@4", Y: "[~@11 f4@3 ab4@3 f4@3 c5@6 c5@3 ~@5 f4@3 ab4@3 f4@3 c5@5]/2",
  Z: "~ c5@3 ~@2 f4@3 f4@3 ab4@3 f4@3 c5@6",
  AA: "[~@2 f4@6 f4@3 ab4@3 f4@3 c5@6 c5@2 f4@3 f4@3 f4@3 ab4@3 f4@6 ab4@5]/2",
  AB: "[ab4@3 ab4@3 c5@6 ab4@5 bb4@6 f4@17 ~@6 g4@2]/2", AC: "~ g4@3 c5@3 bb4@3 g4@5 bb4@6 c5@3",
  AD: "[~@3 f4@3 ab4@3 f4@5 f4@23 eb4@23 eb4@23 f4@23 f4@23 eb4@23 eb4@16]/7",
  AE: "[~@7 f4@34 f4@3 ab4@3 f4@3 c5@5 c5@3 ~@14]/3",
})).s("gm_alto_sax").gain(0.4)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@3 A@5 B C D E ~@4 F G H I J K@2 L@4 M@2 N@2 I O@2 ~@2 O@2 P Q ~ R@2 S T@2 U@2 V@2 W X Y Z AA@2 AB@3
>`.pickRestart({
  A: "[~@4 d4 f4 d4 a4@2 a4 ~@2 d4 f4 d4 a4@2 a4 ~ d4!2 f4 d4 a4@2 ~ d4@2 d4 f4 d4 a4@2 a4 d4!3 f4 d4@2]/5",
  B: "a4@2 a4!2 c5 bb4 a4@2", C: "g4 d4@3", D: "~@2 a4!2 c5 bb4 a4@2", E: "g4 a4@3", F: "d4@9 d4!2 ~ f4@6 e4@3 f4@3",
  G: "a4", H: "d5 e5@5 e5 c5", I: "d5@7 ~", J: "~@2 f5 ~ e5 ~ d5@2", K: "[~@2 f5@2 e5@2 d5@3 ~ f5@2 e5@2 c5@2]/2",
  L: "[d5@2 a5@2 g5@2 f5@3 ~ f5@2 e5@2 d5@3 ~ f5@2 e5@2 d5@3 ~ f5@2 e5@2 c5@2]/4",
  M: "[d5@2 a5@2 g5@2 f5@3 ~ f5@2 e5@2 c5@2]/2", N: "a4 f5 e5 c5", O: "[d4@2 d4@2 f4 d4@2 d4@2 c4 d4@2 f4@2 ~@2]/2",
  P: "a4 ~ c5 ~ d5 ~ e5 ~", Q: "f5 ~ e5 ~ d5@4", R: "[~@11 f4@3 ab4@3 f4@3 c5@6 c5@3 ~@5 f4@3 ab4@3 f4@3 c5@5]/2",
  S: "~ c5@3 ~@2 f4@3 f4@3 ab4@3 f4@3 c5@6", T: "[~@2 f4@6 f4@3 ab4@3 f4@3 c5@6 c5@2 f4@3 f4@3 f4@3 ab4@3 f4@6 c5@5]/2",
  U: "[c5@3 c5@3 eb5@3 db5@3 c5@5 bb4@6 f4@17 ~@6 c5@2]/2",
  V: "[~ c5@3 eb5@3 db5@3 c5@5 bb4@6 c5@6 f4@3 ab4@3 f4@2 c5@6 c5@3 ~@4]/2",
  W: "~@2 f4@3 ab4@2 f4@3 c5@6 c5@3 ~@3 f4@2", X: "~ f4@2 ab4@3 f4@3 c5@6 ~@3 f4@6",
  Y: "f4@2 ab4@3 f4@3 c5@6 f4@3 f4@3 f4@2 f4@2", Z: "~ ab4@3 f4@6 c5@6 c5@3 c5@2 eb5@3",
  AA: "[db5@3 c5@6 bb4@6 f4@17 ~@5 c5@3 c5@3 eb5@3 db5@2]/2", AB: "[~ c5@6 bb4@5 c5@29 f4@6 f4@3 f5@5 f5@3 ~@14]/3",
})).s("gm_trumpet").gain(0.45)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note(`<
  ~@3 A@5 B C D E ~@4 F G H I J K L M J N O P Q R@2 S T@2 ~@2 T@2 U V ~ W@2 X Y@2 Z@2 AA@2 AB AC AD AE@3 AF@3
>`.pickRestart({
  A: "[~@4 d4 f4 d4 a4@2 a4 ~@2 d4 f4 d4 a4@2 a4 ~ d4!2 f4 d4 a4@2 ~ d4@2 d4 f4 d4 a4@2 a4 d4!3 f4 d4@2]/5",
  B: "a4@2 a4!2 c5 bb4 a4@2", C: "g4 d4@3", D: "~@2 a4!2 c5 bb4 a4@2", E: "g4 a4@3", F: "d4@9 d4!2 ~ f4@6 e4@3 f4@3",
  G: "f4", H: "f4 g4@5 e4 c4", I: "d4@15 f4 g4 ~ f4@3 e4@3", J: "d4@6 e4 f4", K: "a4@7 a4", L: "f4 g4@5 f4 e4",
  M: "d4@6 f4 e4", N: "a4@6 g4 a4", O: "c5@6 e5 c5", P: "d5", Q: "~ a4 g4 f4", R: "c4 a4 g4 f4", S: "d4@7 ~",
  T: "[d4@2 d4@2 f4 d4@2 d4@2 c4 d4@2 f4@2 ~@2]/2", U: "a3 ~ c4 ~ d4 ~ e4 ~", V: "f4 ~ e4 ~ d4@4",
  W: "[~@11 f4@3 ab4@3 f4@3 ab4@6 ab4@3 ~@5 f4@3 ab4@3 f4@3 g4@5]/2", X: "~ g4@3 ~@2 f4@3 f4@3 ab4@3 f4@3 g4@6",
  Y: "[~@2 f4@6 f4@3 ab4@3 f4@3 ab4@6 ab4@2 f4@3 f4@3 f4@3 ab4@3 f4@6 ab4@5]/2",
  Z: "[ab4@3 ab4@3 c5@6 ab4@5 bb4@6 f4@17 ~@6 g4@2]/2",
  AA: "[~ g4@3 bb4@3 ab4@3 g4@5 bb4@6 c5@6 f4@3 ab4@3 f4@2 ab4@6 ab4@3 ~@4]/2",
  AB: "~@2 f4@3 ab4@2 f4@3 g4@6 ab4@3 ~@3 f4@2", AC: "~ f4@2 ab4@3 f4@3 g4@6 ~@3 f4@6",
  AD: "f4@2 ab4@3 f4@3 ab4@6 f4@3 f4@3 f4@2 f4@2",
  AE: "[~ ab4@3 f4@6 ab4@6 ab4@3 ab4@2 c5@6 ab4@6 bb4@6 f4@17 ~@5 g4@3 g4@3 bb4@3 ab4@2]/3",
  AF: "[~ g4@6 bb4@5 c5@29 f4@3 ab4@3 f4@3 ab4@5 ab4@3 ~@14]/3",
})).s("gm_trumpet").gain(0.45)

// other · french horn
const french_horn = note(`<
  A B C D E B C D E B C ~ F G H I J K L M ~@3 N O P Q R F K S I T@2 ~@2 T@2 ~@3 U@2 V W@2 X@7 Y@4 Z@2
>`.pickRestart({
  A: "~ d3 d3@2 ~ d3 ~ c4", B: "~ c3 c3@2 ~ c3 ~ c3", C: "~ a2 a2@2 ~ a2 ~ a2", D: "~ bb2 bb2@2 ~ bb2 ~ bb2",
  E: "~ d3 d3@2 ~ d3 ~ d3", F: "d3@5 ~ d3 e3", G: "f3@4 f3!2", H: "d3 ~@2 c3@15 f3 ~@2 e3 ~@2", I: "d3@7 ~",
  J: "d3@15 ~@3 d3@3 e3 ~@2", K: "f3", L: "c3@18 e3 ~@2 c3 ~@2", M: "d3@5 ~@3", N: "~ c4!5 c4@2",
  O: "c4 d4 a3 ~ g3 ~ f3 ~", P: "e3 ~ a3 ~ g3 ~ f3 ~", Q: "c3 ~ a3 ~ g3 ~ f3 ~", R: "d3 ~ a3 ~ g3 ~ f3 ~",
  S: "c3@15 ~@3 e3 ~@2 c3 ~@2", T: "[d3@2 d3@2 f3 d3@2 d3@2 c3 d3@2 f3@2 ~@2]/2",
  U: "[~@23 ab3@3 ab3@3 ab3@14 ab3@3 g3@2]/2", V: "~ g3@3 g3@14 g3@3 g3@3",
  W: "[g3@2 g3@14 ~ g3@3 ab3@3 ab3@2 ab3@11 ~ ab3@6 ab3@2 ab3@3]/2",
  X: "[ab3@14 ~ ab3@2 g3@3 g3@3 g3@14 ~ g3@2 g3@3 g3@3 g3@14 g3@3 ab3@6 ab3@11 ~ ab3@5 ab3@3 ab3@3 ab3@14 ab3@3 g3@3 g3@3 g3@14 g3@3 g3@3 g3@3 g3@14 g3@3 ab3@3 ab3@3 ab3@7]/7",
  Y: "[~@4 ab3@6 ab3@3 ab3@3 ab3@14 ab3@3 g3@3 g3@3 g3@14 g3@3 g3@3 g3@2 g3@14 ~ g3@3 ab3@5 ab3@11 ~]/4",
  Z: "[ab3@6 bb3@5 c4@6 f3@3 ab3@3 f3@3 f3@5 f3@3 ~@14]/2",
})).s("gm_french_horn").gain(0.45)

// other · trombone
const trombone = note(`<
  ~@3 A@5 B C D E F G H I F J K L M N O P Q N O R F J S T U@2 ~@2 U@2 ~@3 V@2 W X@2 Y@7 Z@4 AA@2
>`.pickRestart({
  A: "[~@4 d3 f3 d3 a3@2 a3 ~@2 d3 f3 d3 a3@2 a3 ~ d3!2 f3 d3 a3@2 ~ d3@2 d3 f3 d3 a3@2 a3 d3!3 f3 d3@2]/5",
  B: "a3@2 a3!2 c4 bb3 a3@2", C: "g3 d3@3", D: "~@2 a3!2 c4 bb3 a3@2", E: "g3 a3@3", F: "d3@5 ~ d3 e3", G: "f3@4 f3!2",
  H: "d3 c3@5 f3 e3", I: "d3@7 ~", J: "f3", K: "c4@6 e4 c4", L: "d4@5 ~@3", M: "~ a3 g3 f3", N: "e3 a3 g3 f3",
  O: "c3 a3 g3 f3", P: "a3 c4!5 c4@2", Q: "c4 d4 a3@2 g3@2 f3@2", R: "d3 a3 g3 f3", S: "c4@5 ~ e4 c4", T: "d4@7 ~",
  U: "[d3@2 d3@2 f3 d3@2 d3@2 c3 d3@2 f3@2 ~@2]/2", V: "[~@23 c4@3 c4@3 c4@14 c4@3 bb3@2]/2",
  W: "~ bb3@3 bb3@14 bb3@3 c4@3", X: "[c4@2 c4@14 ~ c4@3 c4@3 c4@2 c4@11 ~ c4@6 c4@2 c4@3]/2",
  Y: "[c4@14 ~ c4@2 bb3@3 bb3@3 bb3@14 ~ bb3@2 c4@3 c4@3 c4@14 c4@3 c4@6 c4@11 ~ c4@5 c4@3 c4@3 c4@14 c4@3 bb3@3 bb3@3 bb3@14 bb3@3 c4@3 c4@3 c4@14 c4@3 c4@3 c4@3 c4@7]/7",
  Z: "[~@4 c4@6 c4@3 c4@3 c4@14 c4@3 bb3@3 bb3@3 bb3@14 bb3@3 c4@3 c4@2 c4@14 ~ c4@3 c4@5 c4@11 ~]/4",
  AA: "[c4@6 bb3@5 c4@6 f3@3 ab3@3 f3@3 c4@5 c4@3 ~@14]/2",
})).s("gm_trombone").gain(0.45)

// bass · tuba
const bass = note(`<
  A B C D A B E F G H E ~ I J K L M N O P ~@4 Q N R S I N T U V@2 ~@2 V@2 ~@3 W@2 X Y@2 Z@5 AA AB AC AD@2 AE AF@2
>`.pickRestart({
  A: "~ d3 d3@2 ~ d3 ~ d3", B: "~ c3 c3@2 ~ c3 ~ c3", C: "~ a2 a2@2 ~ a2 ~ a2", D: "~ bb2 bb2@2 ~ bb2 ~ bb2",
  E: "a2!2 a2@2 a2!2 ~ a2", F: "bb2!2 bb2@2 bb2!2 ~ bb2", G: "d3!2 d3@2 d3!2 ~ d3", H: "c3!2 c3@2 c3!2 ~ c3",
  I: "d2@5 ~ d2 e2", J: "f2@4 f2!2", K: "d2 ~@2 c2@15 f2 ~@2 e2 ~@2", L: "d2@7 ~", M: "d2@15 ~@3 d2@3 e2 ~@2", N: "f2",
  O: "c3@18 e3 ~@2 c3 ~@2", P: "d3@5 ~@3", Q: "d2", R: "c3", S: "d3", T: "c3@15 ~@3 e3 ~@2 c3 ~@2", U: "d3@7 ~",
  V: "[d3@2 d3@2 f3 d3@2 d3@2 c3 d3@2 f3@2 ~@2]/2", W: "[~@23 f2@3 f2@3 f2@5 f2@3 f2@3 ~@3 f2@3 eb2@2]/2",
  X: "~ eb2@3 eb2@5 eb2@3 eb2@3 ~@3 eb2@3 c3@3",
  Y: "[c3@2 c3@6 c3@3 c3@3 ~@3 c3@3 db3@3 db3@2 db3@6 db3@3 db3@3 ~@3 db3@3 f2@2 f2@3]/2",
  Z: "[f2@6 f2@3 f2@3 ~@3 f2@2 eb2@3 eb2@3 eb2@6 eb2@3 eb2@3 ~@3 eb2@2 c3@3 c3@3 c3@6 c3@3 c3@3 ~@2 c3@3 db3@3 db3@3 db3@6 db3@3 db3@3 ~@2 db3@3 f2@3 f2@3 f2@6 f2@3 f2@3 ~@2 f2@3 eb2@3 eb2@3 eb2@5]/5",
  AA: "~ eb2@2 eb2@3 ~@3 eb2@3 c3@3 c3@3 c3@6", AB: "c3@2 c3@3 ~@3 c3@3 db3@3 db3@3 db3@5 db3@2",
  AC: "~ db3@3 ~@3 db3@3 f2@3 f2@3 f2@5 f2@3",
  AD: "[f2@3 ~@3 f2@3 eb2@3 eb2@3 eb2@5 eb2@3 eb2@3 ~@3 eb2@3 c3@3 c3@2 c3@6 c3@3 c3@2]/2",
  AE: "~@4 c3@3 db3@3 db3@2 db3@6 db3@3 db3@3", AF: "[~@3 db3@3 db3@11 f2@3 ab2@3 f2@3 f2@5 f2@3 ~@14]/2",
})).s("gm_tuba").gain(0.45)

// drums · high tom
const high_tom = s("ht").struct(`<
  A@2 B@4 C@5 D E@6 C F ~@11 G A@3 H A@2 I J K L M N O P Q R S T U V W X Y Z AA AB AC
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x ~ x!6", D: "~@12 x ~@2 x ~@2 x!2 ~ x ~@2",
  E: "x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x!2 ~ x!2 ~", F: "x!7 ~@5", G: "x ~ x!11 ~@5 x ~@5", H: "x ~ x!5 ~", I: "~ x ~@2",
  J: "~@6 x!2", K: "x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2 x!2 ~ x!2 ~ x ~@2", L: "x ~@5 x ~@4 x ~@5 x ~@5 x",
  M: "~@2 x!2 ~ x ~@2 x ~@4 x ~ x!2 ~ x!2 ~@2 x ~", N: "~ x!2 ~ x ~ x ~@5 x ~ x!3 ~ x ~@2 x ~@2",
  O: "x!3 ~@2 x ~@5 x ~ x!3 ~ x ~@2 x ~@2 x", P: "x!2 ~@2 x ~@2 x ~ x!3 ~ x!2 ~ x!2 ~ x ~ x ~ x",
  Q: "x ~@2 x ~@5 x!2 ~ x!2 ~ x ~ x ~@2 x ~ x!2", R: "~@2 x ~@5 x!2 ~ x!2 ~ x ~ x ~@2 x ~ x!2 ~",
  S: "~ x ~@5 x!2 ~ x!3 ~@2 x ~@2 x ~ x!2 ~@2", T: "x ~@2 x!2 ~ x!2 ~ x!3 ~ x!2 ~@2 x ~ x!2 ~@2 x",
  U: "~@5 x!3 ~ x!2 ~@2 x ~@2 x!2 ~ x ~@2 x ~", V: "~@3 x ~ x!2 ~ x!2 ~@2 x ~@2 x!2 ~ x ~@2 x ~@2",
  W: "~@2 x ~ x!2 ~ x!2 ~@2 x ~@2 x!2 ~ x ~@2 x ~ x ~", X: "x!2 ~ x!2 ~ x!3 ~ x ~@2 x!2 ~ x ~@2 x ~@4",
  Y: "x ~ x!2 ~ x!2 ~@2 x ~@2 x!2 ~ x ~ x ~@5 x", Z: "~ x!3 ~ x ~@2 x ~@2 x!3 ~@2 x ~@5 x!2",
  AA: "~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@5 x ~ x!3 ~", AB: "x ~ x!3 ~ x!3 ~ x ~@3 x ~ x!2 ~@2 x ~@2 x",
  AC: "x ~ x ~@4 x ~@16",
})).gain(0.4)

// drums · china
const china = s("cr").struct("<~@11 A@7 B ~@12 C ~ D ~ D ~@3 C A ~ E F G ~ H I J ~ K L M N O P ~ Q ~>".pickRestart({
  A: "~ x", B: "~@2 x!2", C: "~@3 x", D: "~@5 x ~@2", E: "~@5 x ~@6", F: "~@3 x ~@4", G: "~ x ~", H: "~ x ~@2",
  I: "~@5 x ~@18", J: "~ x ~@4", K: "~ x ~@10", L: "~ x ~@22", M: "x", N: "~@7 x", O: "~@5 x", P: "~@19 x ~@4",
  Q: "~@11 x ~@12",
})).gain(0.45)

// drums · ride bell
const ride_bell = s("rd").struct("<~@6 [~@3 x ~ x ~@2]!4 [~@3 x ~ x ~ x] ~@22 [~@3 x ~@4] ~ [~@3 x ~@4] ~@23>")
  .gain(0.4)

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

// drums · whistle
const whistle = s("ballwhistle:1").struct("<~@6 [~@3 x ~ x ~@2]!5 [~ x] [~@3 x ~ x ~@2]!7 ~@16 [~@3 x ~ x ~@2] ~@23>")
  .gain(0.58)

// drums · whistle
const whistle_2 = s("ballwhistle:0").struct(`<
  ~@2 A@8 B C A@6 D ~@12 E ~@6 F@2 G ~ H I J K L M N O P Q R S T U V W X
// … 17 more lines