Strudelify

Isn't She Lovely

Ryan Johnson

KeyF majorTempo112 bpm
0:00/0:00
// Isn't She Lovely — Ryan Johnson
// 112 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Alto Sax" named as a reed, played on alto sax (its guitar harmonics patch is not one); ch 3 "Tenor Sax" named as a reed, played on tenor sax (its overdriven guitar patch is not one); ch 4 "Bari Sax" named as a reed, played on baritone sax (its electric guitar muted patch is not one); ch 5 "Trumpet" named as a brass, played on trumpet (its electric guitar jazz patch is not one)
// note: duplicate parts dropped: ch 1 "Alto Sax" alto sax (copy of ch 15 "B♭ Clarinet" clarinet)
// note: Transcription provider: pdmx. https://musescore.com/score/5923727; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 104 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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.

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  ~@3 A B C D@2 E F G F H F I J K@2 L@2 M N O P Q R S@2 T U V@2 W X ~ Y M Z O AA ~@32 AB AC AD AE AF AG AH AI@4 AJ AK AL
  AM AN E F G AO E F AP AQ AR@2 AS AT M Z O AU
>`.pickRestart({
  A: "~@9 g3 ab3 a3", B: "bb3", C: "a3@10 bb3 a3", D: "[ab3@18 ab3@4 g3@12 ~@2 g4@4 ab4@2 ~@2 gb4 g4@3]/2",
  E: "f4@9 ~ eb4@14", F: "~@12 g4@4 ab4@2 ~@2 gb4 g4@3", G: "f4@10 eb4@8 b3 c4@3 bb3@2", H: "f4@3 g4 c4 eb4@7",
  I: "f4@5 eb4@4 c4 g3 bb3", J: "~@6 g4@2 ab4 ~ bb4@2",
  K: "[a4 bb4@9 g4@2 ab4@3 ~@3 a4 bb4@3 ab4@14 ~@4 gb4 g4@3 gb4 g4@3]/2",
  L: "[g4@4 f4@2 eb4@4 f4@8 eb4@2 bb3@2 c4@8 ~@6 g4@4 ab4@2 ~@2 gb4 g4@3]/2", M: "f4 eb4", N: "c4@6 bb3@5 eb4",
  O: "~@4 bb3 c4 eb4 f4 g4 bb4 c5 eb5", P: "eb5@2 ~ eb5@2 ~@3 bb4@4", Q: "g4@3 ~@15 bb3@2 d4@2 bb3@2", R: "c4@2 c4 ~@9",
  S: "[~@4 eb4@4 c4@4 eb4@3 ~@3 f4@4 f4@14 ~@4 bb4@8]/2", T: "g4@3 ~@15 eb4@2 c4@2 d4@2", U: "c4@2 a3 bb3@2 a3 ~@6",
  V: "[~@6 g3@2 bb3@2 ab3@2 c4@3 ~@3 eb4@4 bb3@8 ~@18]/2", W: "~@3 c4@2 eb4 ~@6", X: "~@3 g4@2 bb4 ~@6",
  Y: "~@2 g4 ~ c4 eb4 g4@2 ab4@2 g4@2", Z: "c4@6 ~@2 bb3 ~@2 eb4", AA: "eb5@2 ~ eb5@2 ~@3 eb5 ~@2 d5",
  AB: "~@4 d5@8 c5@4 bb4@2 g4@3 ~@3", AC: "g4@3 a4@2 g4 ~@6", AD: "~@2 c5@4 c5@5 bb4", AE: "~@8 c5 b4@2 bb4",
  AF: "~@2 bb4@4 bb4@2 g4 bb4@2 c5", AG: "bb4@2 g4 a4@2 g4 ~@6", AH: "~@4 c5@8 g4@3 ~@3 f4@4 eb4@2",
  AI: "[~@8 c4 eb4@2 g4@4 ab4@2 bb4 g4@2 ab4 bb4@2 b4@4 c5@2 d5 ~@2 c5 d5@2 eb5@4 d5@2 c5 ~@2 g4 ~ f4 eb4]/4",
  AJ: "g4@3 c4@2 eb4 ~@6", AK: "~ bb3@2 ~ bb3@2", AL: "~@4 bb3@8 bb3@3 ~@3 f4@4 g4@2",
  AM: "~@4 bb4 g4 f4 eb4 c4 bb3 g3 f3", AN: "eb3@4 ~@8 g4@4 ab4@2 ~@2 gb4 g4@3",
  AO: "~@6 c4@2 eb4@2 f4@2 g4@4 ab4@2 ~@2 gb4 g4@3", AP: "f4@6 eb4 ~ bb3 c4 g3 bb3", AQ: "~@3 g4 f4 eb4",
  AR: "[c4@5 g3 c4@2 d4 eb4@2 f4@7 eb4@5 d4]/2", AS: "~@2 c4@7 c4@2 a3",
  AT: "~@2 g3@2 bb3@2 c4@2 eb4@2 f4@2 g4@4 ab4@2 ~@2 gb4 g4@3", AU: "eb5 ~@5",
})).s("gm_clarinet").gain(0.45)

// other · baritone sax · "Bari Sax"
const baritone_sax = note(`<
  ~@3 A B C D@2 E F G F H F I J K@2 L@2 M N O P Q R S@2 T U V@2 W X ~ Y Z AA O AB B C AC@2 B C AD@2 AE AF AG AH AI AJ O
  AB B C AC@2 B C AD@2 AE AF AG AH AI AJ O AB AK AL AM AN AO AP AQ AR@4 AS AT AQ O AU E F G AV E F AW ~ AX AY AZ ~ Z BA
  BB BC
>`.pickRestart({
  A: "~@9 eb3 d3 db3", B: "c3@10 g2 gb2", C: "f2@10 ab2 a2",
  D: "[bb2@18 db2@2 d2@2 eb2@12 ~@2 g3@4 ab3@2 ~@2 gb3 g3@3]/2", E: "f3@9 ~ eb3@14", F: "~@12 g3@4 ab3@2 ~@2 gb3 g3@3",
  G: "f3@10 eb3@8 b2 c3@3 bb2@2", H: "f3@3 g3 c3 eb3@7", I: "f3@5 eb3@4 c3 g2 bb2", J: "~@6 g3@2 ab3 ~ bb3@2",
  K: "[a3 bb3@9 g3@2 ab3@3 ~@3 a3 bb3@3 ab3@14 ~@4 gb3 g3@3 gb3 g3@3]/2",
  L: "[g3@4 f3@2 eb3@4 f3@8 eb3@2 bb2@2 c3@8 ~@6 g3@4 ab3@2 ~@2 gb3 g3@3]/2", M: "f3 eb3", N: "c3@6 bb2@5 eb3",
  O: "~@4 bb2 c3 eb3 f3 g3 bb3 c4 eb4", P: "eb3@2 ~ eb3@2 ~@3 g2@4", Q: "c2@3 ~@15 eb3@2 g3@2 eb3@2",
  R: "eb3@2 eb3 ~@9", S: "[~@4 eb3@4 eb3@4 f3@3 ~@3 ab3@4 g3@14 ~@4 g2@8]/2", T: "c2@3 ~@15 bb3@2 g3@2 a3@2",
  U: "g3@2 eb3 f3@2 eb3 ~@6", V: "[~@6 eb3@2 g3@2 eb3@2 f3@3 ~@3 ab2@4 eb2@8 ~@18]/2", W: "~@3 ab2@2 ab2 ~@6",
  X: "~@3 g2@2 g2 ~@6", Y: "~@2 f2 ~@9", Z: "bb2!2", AA: "bb2@6 ~@2 bb2 ~@2 eb2", AB: "eb3@2 ~ eb3@2 ~@3 db2 ~@2 c2",
  AC: "[bb2@9 db2 d2 eb2@10 eb3 d3 db3]/2", AD: "[bb2@9 db2 d2 eb2@11 gb2 g2]/2", AE: "ab2", AF: "ab2@10 d2!2",
  AG: "c2", AH: "f2@9 g2 ab2 a2", AI: "bb2", AJ: "bb2@11 eb2", AK: "~@4 c2@8 g2@6 c3@3 ~@3", AL: "f2@3 g2@2 f2 ~@6",
  AM: "~@2 bb2@4 bb2@5 eb2", AN: "~ g2 bb2 c3 bb2 g2@6 db2", AO: "~@2 c2@4 c3@2 g2 bb2@2 c3", AP: "f2@2 c3 g2@2 f2 ~@6",
  AQ: "~@4 bb2@8 bb2@3 ~@3 bb2@4 eb2@2",
  AR: "[~@8 c3 eb3@2 eb3@4 f3@2 g3 eb3@2 f3 g3@2 ab3@4 ab3@2 b3 ~@2 ab3 b3@2 c4@4 c4@2 bb3 ~@2 eb3 ~ d3 c3]/4",
  AS: "eb3@3 c3@2 f2 ~@6", AT: "~ bb2@2 ~ bb2@2", AU: "eb4@4 ~@8 g3@4 ab3@2 ~@2 gb3 g3@3",
  AV: "~@6 c3@2 eb3@2 f3@2 g3@4 ab3@2 ~@2 gb3 g3@3", AW: "f3@6 eb3 ~ bb2 c3 g2 bb2", AX: "~@4 ab2@8 ab2@3 ~@9",
  AY: "~@4 g2@8 g2@3 ~@9", AZ: "~@2 c3@7 c3@2 f2", BA: "bb2@6 ~@2 db2 ~@2 eb2", BB: "~@4 bb2 c3 eb3 f3 g3 bb2 c3 eb3",
  BC: "eb2 ~@5",
})).s("gm_baritone_sax").gain(0.4)

// other · trumpet
const trumpet = note(`<
  ~@4 A B C@2 D ~@13 E F G H I@2 J H K@2 L M ~ N O P E Q ~@32 R S@2 T U V@2 ~@4 W@3 X Y Z AA AB ~ Z AC AD AE AF@2 AG ~ O
  P E AH
>`.pickRestart({
  A: "~@3 c4 eb4 f4 g4@2 bb4 ~ c5@2", B: "eb5@3 c5 bb4 c5@7",
  C: "[~@3 g5 ab5 g5 eb5 bb4 ab4 gb4 g4 eb5@7 ~@2 [f5,bb5]@4]/2", D: "[eb5,g5] ~@5",
  E: "~@4 bb3 c4 eb4 f4 g4 bb4 c5 eb5", F: "eb5@2 ~ eb5@2 ~ g5@2 ab5@2 g5@2", G: "f5@5 eb5@7",
  H: "~@3 c5 eb5 f5 g5@2 ab5@2 g5@2", I: "[f5@12 eb5@3 ~@3 b4 c5@3 bb4@8 ~@6 g5@4 ab5@4 g5@4]/2", J: "f5@3 g5 c5 eb5@7",
  K: "[f5@12 eb5@3 ~@3 b4 c5@3 bb4@8 ~@18]/2", L: "~@3 c5@2 eb5 ~@6", M: "~@3 eb5@2 g5 ~@6", N: "~@2 g5 ~@9",
  O: "~ ab4@2 ~ c5@2", P: "~@2 eb5@4 ~@2 ab5 ~@2 bb5", Q: "eb5@2 ~ eb5@2 ~@3 bb5 ~@2 g5",
  R: "~@4 g5@8 f5@4 eb5@2 c5@3 ~@3", S: "[eb5@3 f5@2 c5 ~@2 eb5 f5@2 bb5@4 ab5@2 g5 ab5@2 g5 eb5@2 eb5]/2",
  T: "~@8 c5 eb5@2 g5", U: "~@2 [f5,c6]@4 g5@2 c5 eb5@2 f5",
  V: "[g5@2 eb5 f5@2 eb5 ~@2 g5 ab5@2 bb5@4 ab5@2 g5 eb5@2 bb4 ab4@2 g4]/2",
  W: "[~@8 c5 eb5@2 g5@4 ab5@2 bb5 g5@2 c5 eb5@2 [ab5,c6]@4 bb5@2 ab5 g5@2 bb4 c5@2 eb5]/3", // Ab
  X: "~@4 bb5 g5 f5 eb5 c5 bb4 g4 f4", Y: "eb4 ~@5", Z: "~@3 c5 g4 bb4@7", AA: "~@3 g4 c4 eb4@7",
  AB: "~@3 eb5 c5 g5@4 f5@2 eb5", AC: "~@3 g5 c5 eb5@7", AD: "~@3 c5 eb5 g5 ab5@3 bb5@2 g5", AE: "~@3 g5 ab5 bb5",
  AF: "[bb5@5 g5 ab5@2 bb5 ~@2 ab5@7 ~@2 c5 eb5@2 g5]/2", AG: "~@2 f5 eb5@2 f5@4 eb5@2 c5", AH: "g5 ~@5",
})).s("gm_trumpet").gain(0.45)

// other · trombone
const trombone = note(`<
  ~@4 A B C@2 D ~@13 E F G H I@2 J K L@4 M N O P E Q R S T@2 R S U@2 V W X@2 Y Z E Q R S T@2 R S U@2 V W X@2 Y Z E Q AA
  AB ~@2 AC AD AE ~@4 AF@3 E AG AH@2 AI AJ AH@2 AK ~ AL@2 M ~ O P E D
>`.pickRestart({
  A: "~@3 c3 eb3 f3 g3@2 bb3 ~ c4@2", B: "eb4@3 c4 bb3 c4@7", C: "[~@3 g4 ab4 g4 eb4 bb3 ab3 gb3 g3 eb4@7 ~@2 eb4@4]/2",
  D: "eb4 ~@5", E: "~@4 bb2 c3 eb3 f3 g3 bb3 c4 eb4", F: "eb4@2 ~ eb4@2 ~@3 eb4@4", G: "c4@3 ~@15 c4@2 eb4@2 c4@2",
  H: "g4@2 g4 ~@9", I: "[~@4 g3@4 bb3@4 c4@3 ~@3 eb4@4 eb4@14 ~@4 eb4@8]/2", J: "c4@3 ~@15 g4@2 eb4@2 f4@2",
  K: "eb4@2 c4 d4@2 c4 ~@6",
  L: "[~@6 g3@2 bb3@2 c4@2 eb4@3 ~@3 f4@4 eb4@8 ~@6 g4@4 ab4@2 bb4@4 bb4@12 g4@2 ab4@4 bb4@2 ~@4 ab4@14 ~@4 c4@2 eb4@4 g4@2]/4",
  M: "~@2 f4 eb4@2 f4@4 eb4@2 c4", N: "~@2 eb4 ~@9", O: "~ c4@2 ~ eb4@2", P: "~@2 c4@4 ~@2 eb4 ~@2 bb3",
  Q: "eb4@2 ~ eb4@2 ~@3 eb4 ~@2 eb4", R: "bb3", S: "a3@10 bb3 a3", T: "[ab3@9 ab3@2 g3@10 g3 ab3 a3]/2",
  U: "[ab3@9 ab3@2 g3@13]/2", V: "~@3 c4 d4 c4", W: "b3@4 c4 b3", X: "[bb3@6 bb3@2 g3 ab3@2 a3@7 ~@2 c4@4]/2",
  Y: "eb4 ~@7", Z: "bb3@11 eb4", AA: "~@4 d4@8 f4@4 eb4@2 c4@3 ~@3", AB: "c4@3 d4@2 c4 ~@6",
  AC: "~@2 f4@4 d4@2 bb3 c4@2 d4", AD: "d4@2 bb3 c4@2 c4 ~@6", AE: "~@4 eb4@8 c4@3 ~@3 c4@4 bb3@2",
  AF: "[~@8 a3 c4@2 c4@4 eb4@2 f4 c4@2 ab3 c4@2 g4@4 f4@2 eb4 c4@2 bb3 c4@2 eb4]/3", AG: "eb3@2 ~ eb2@2 ~@3 eb4@4",
  AH: "c4@3 ~@13 eb4@8", AI: "c4@3 ~@3 eb4@2 c4@2 g4@8 f4@4 eb4@2", AJ: "~@2 eb4",
  AK: "c4@3 ~@3 c4@2 eb4@2 g4@2 eb4@6 c4@4 bb3@2", AL: "~@4 eb4@8 eb4@3 ~@9",
})).s("gm_trombone").gain(0.4)

// chords · epiano1 · "Electric Piano"
const epiano1 = note(`<
  A B C@2 A B C@2 D E F G D E F G H I D E F J K L D E F G D E F G H I D E F M K N D E F G D E F G H I D E F O K N D E F
  G D E F G H I D E F O K N P Q R S P Q R S T U V Q R W X Y D E F G D E F G H I D E F O K Z
>`.pickRestart({
  A: "[eb3,g3,bb3,c4,d4,g5]@3 g5@2 c5 [eb3,g3,bb3,c4,d4,f5] [eb3,g3,bb3,c4,d4,g5] ~ [eb3,g3,bb3,c4,d4,g5]@3, ~ [eb3,g3,bb3,c4,d4] ~@2", // Ebmaj7
  B: "[f3,a3,c4,eb4,g5]@3 g5@2 c5 [f3,a3,c4,eb4,f5] [f3,a3,c4,eb4,g5] ~ [f3,a3,c4,eb4,g5]@3, ~ [f3,a3,c4,eb4] ~@2", // F7
  C: "[[f3,ab3,bb3,d4,g5]@6 g5@4 c5@2 [f3,ab3,bb3,d4,f5]@2 [f3,ab3,bb3,d4,g5]@2 ~@2 e5 f5@3 [eb3,g3,bb3,eb4,eb5]@14 ~@4 [g3,b3,eb4,f4,ab4,b4]@8, ~@3 [f3,ab3,bb3,d4]@3 ~@3 [f3,ab3,bb3,d4]@2 ~@13]/2", // Gm7 Bb7 Gm7 Eb Fm7b5 Bb7
  D: "[c4,eb4,g4,bb4]@3 [c4,eb4,g4,bb4]@3 [c4,eb4,g4,bb4]!2 ~ [c4,eb4,g4,bb4]@3, [c2,c3]", // Cm7 C
  E: "[eb4,f4,a4,c5]@3 [eb4,f4,a4,c5]@3 [eb4,f4,a4,c5]!2 ~ [eb4,f4,a4,c5]@3, [f2,f3]", // F7 F
  F: "[f4,ab4,bb4,d5]@3 [f4,ab4,bb4,d5]@3 [f4,ab4,bb4,d5]!2 ~ [f4,ab4,bb4,d5]@3, [bb2,bb3]", // Bb7 Bb
  G: "[eb4,g4,bb4,eb5]@3 [eb4,g4,bb4,eb5]@3 [eb4,g4,bb4,eb5]!2 ~ [eb4,g4,bb4,eb5]@3, [eb2,eb3]", // Eb
  H: "[eb4,g4,ab4,c5]@3 [eb4,g4,ab4,c5]@3 [eb4,g4,ab4,c5]!2 ~ [eb4,g4,ab4,c5]@3, [ab2,ab3]", // Abmaj7 Ab
  I: "[eb4,f4,ab4,b4]@3 [eb4,f4,ab4,b4]@3 [eb4,f4,ab4,b4]!2 ~ [eb4,f4,ab4,b4]@3, [f2,f3]", // Fm7b5 F
  J: "[f4,ab4,bb4,d5]@3 [f4,ab4,bb4,d5]@3 [f4,ab4,bb4,d5]!2 ~ [f4,ab4,bb4,d5]@2 [eb2,eb3,eb4,g4,bb4,eb5], [bb2,bb3]@11 ~", // Bb7 Eb Bb
  K: "~@4 [bb2,bb3] [c3,c4] [eb3,eb4] [f3,f4] [g3,g4] [bb3,bb4] [c4,c5] [eb4,eb5]", // Bb C Eb F G Bb C Eb
  L: "[eb3,bb3,eb4,g4,eb5]@2 ~ [eb3,bb3,eb4,g4,eb5]@2 ~@3 [f3,b3,eb4,bb4,eb5]@4", // Eb Ebsus2
  M: "[f4,ab4,bb4,d5]@3 [f4,ab4,bb4,d5]@3 [f4,ab4,bb4,d5]!2 [bb2,bb3] ~@2 [eb2,eb3,eb4,g4,bb4,eb5], [bb2,bb3] ~", // Bb7 Bb Eb Bb
  N: "[eb3,bb3,eb4,g4,eb5]@2 ~ [eb3,bb3,eb4,g4,eb5]@2 ~@3 [f3,b3,eb4,bb4,eb5] ~@2 [f3,b3,eb4,bb4,eb5]", // Eb Ebsus2
  O: "[f4,ab4,bb4,d5]@3 [f4,ab4,bb4,d5]@3 [f4,ab4,bb4,d5]!2 [bb2,bb3] [f4,ab4,bb4,d5]@2 [eb2,eb3,eb4,g4,bb4,eb5], [bb2,bb3] ~", // Bb7 Bb Bb7 Eb Bb
  P: "~@2 [c4,eb4,g4,bb4] ~@2 [c4,eb4,g4,bb4] ~@2 [c4,eb4,g4,bb4]@4, ~ [c2,c3]@5", Q: "[f2,f3,eb4,f4,a4,c5]",
  R: "[bb2,bb3,f4,ab4,bb4,d5]", S: "[eb2,eb3,eb4,g4,bb4,eb5]", T: "[ab2,ab3,eb4,g4,ab4,c5]", U: "[f2,f3,eb4,f4,ab4,b4]",
  V: "[c2,c3,c4,eb4,g4,bb4]", W: "[bb2,bb3,f4,ab4,bb4,d5]@11 [eb2,eb3,eb4,g4,bb4,eb5]",
  X: "~@4 [bb2,bb5] [c3,g5] [eb3,f5] [f3,eb5] [g3,c5] [bb3,bb4] [c4,g4] [eb4,f4]", // Bb C5 Ebsus2 F7 C5 Bb C5 Ebsus2
  Y: "[eb3,eb4]@2 ~ eb2@2 ~@3 [f3,b3,eb4,bb4,eb5]@4", Z: "[eb3,bb3,eb4,g4,eb5] ~@5",
})).s("gm_epiano1").gain(0.3)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A B C D A B C D A B C D A B C D E F G H I J K L A B C D A B C D E F G H I M K L A B C D A B C D E F G H I M K L A B C
  D A B C D E F G H I M K L N O@3 N O@3 E F G H I M K P A B C D A B C D E F G H I M K Q
>`.pickRestart({
  A: "c2@5 g2 c2@4 g1 gb1", B: "f1@5 c2 f1@4 ab1 a1", C: "bb1@5 bb2 bb1@3 bb1 db2 d2", D: "eb2@5 bb2 eb2@4 d2 db2",
  E: "ab1@5 eb2 ab1@3 eb2 c2 ab1", F: "g1@5 g2 g1@4 bb1 b1", G: "c2@5 g2 c2@3 c3 g2 gb2", H: "f2@5 c2 f1@3 f1 ab1 a1",
  I: "bb1@5 bb2 bb1@5 bb2", J: "bb1@5 bb2 bb1@3 bb2@2 eb2", K: "~@4 bb1 c2 eb2 f2 g2 bb2 c3 eb3",
  L: "eb2@2 ~ eb2@2 ~@3 g1@4", M: "bb1@5 bb2 bb1@2 bb2 ~@2 eb2", N: "~@2 c2@4 eb2@3 g2@2 c2",
  O: "[f2@3 eb2@2 c2 f1@3 c2@2 bb1@4 bb2@2 f2 bb2@3 bb1@2 eb2@4 f2@2 eb2 g1@3 g2@2 db2]/3", P: "eb3@2 ~ eb2@2 ~@3 g1@4",
  Q: "eb2 ~@5",
})).s("gm_acoustic_bass").gain(0.4)

// drums · kick
const kick = s("bd").struct("<A@22 B C A@13 D B C A@13 D B C A@13 D B C E A@3 E A@8 D B C A@13 D B F>".pickRestart({
  A: "x ~@4 x!2 ~@4 x", B: "~ x ~@2", C: "x ~@2 x ~@2 x ~ x ~@3", D: "x ~@4 x!2 ~ x ~@2 x", E: "x ~ x ~@2 x!2 ~@4 x",
  F: "x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<A@21 B C D A@13 E C D A@13 E C D A@13 E C D F A@3 F A@8 E C D A@13 E C D>".pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@7 x", C: "~@4 x!8", D: "x", E: "~@3 x ~@4 x ~@2 x", F: "x ~ x!2 ~@5 x ~@2",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<A@21 B C ~ A@13 D C ~ A@13 D C ~ A@13 D C ~ E A@3 E A@8 D C ~ A@13 D C ~>".pickRestart({
  A: "x!12", B: "x!10 ~@2", C: "~@4 x!8", D: "x!6 ~@6", E: "~@3 x!9",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@15 A ~@15 A ~@15 A ~@15 A ~@16>".pickRestart({
  A: "~ x",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  A ~@22 B A ~@12 C ~ B A ~@12 C ~ B A ~@12 C ~ B D ~@3 D ~@8 C ~ B A ~@12 C ~ A
>`.pickRestart({
  A: "x", B: "x ~ x", C: "~@8 x ~@2 x", D: "~ x ~@4",
})).gain(0.4)

// drums · congas
const congas = s("conga:18").struct("<A@22 ~ B A@14 C B A@14 C B A@14 C B D A@3 D A@9 C B A@14 C E>".pickRestart({
  A: "~ x ~@2 x!3 ~@2 x!3", B: "x!2 ~@2", C: "~@4 x!8", D: "~@2 x ~ x!3 ~@2 x!3", E: "x",
})).gain(0.95)

// drums · congas
const congas_2 = s("conga:33").struct("<A@22 ~ B A@14 C D A@14 C D A@14 C D E A@3 E A@9 C B A@14 C F>".pickRestart({
  A: "x ~ x!2 ~@3 x!2 ~@3", B: "x ~@2 x ~@4 x ~@3", C: "~@4 x!8", D: "x ~@2 x ~@4 x ~@2 x", E: "~@2 x!2 ~@3 x!2 ~@3",
  F: "x",
})).gain(0.95)

stack(clarinet, baritone_sax, trumpet, trombone, epiano1, bass, kick, snare, hihat, mid_tom, crash, congas, congas_2)