Strudelify

C'est si bon

Louis Armstrong

KeyE♭ majorTempo116 bpm
0:00/0:00
// C'est si bon — ARMSTRONG LOUIS
// 116 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 86 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A@2 B@3 C D E F C D E F C D E F G H I J K L K@2 M N O P C D E F C D Q R C S T U C V W@2 X Y Z AA X Y AB AC X Y Z AA AD
  AE@2 AF AG AH AI AJ AK AL AM AN X Y Z AA AO AP AQ AR AS AT AB AU AV ~ AW AX@2
>`.pickRestart({
  A: "[~@11 ab2@4 bb1@3 ab2@3 bb1@3]/2", B: "[ab2@3 bb1@3 ab2@3 bb1@2 eb2@4 eb2@2 b2@4 bb1@2 eb2@2 ~@11]/3", C: "bb1!2",
  D: "eb2!2", E: "ab2 eb2", F: "ab2@2 c2 b1", G: "bb1 eb2", H: "bb1@5 d2 eb2@3 g2@3", I: "ab2 ~@3", J: "~ ab2 gb2 b1",
  K: "e2@7 ~@2 e2 b1 ~ e1@7 ~@5", L: "e2@7 ~@2 e2 db2 ~ e1@7 ~@5", M: "f2 bb1", N: "b1@6 b2@6 bb1@11 ~", O: "eb2 bb1",
  P: "~@4 bb1@3 ~@5 c2@6 b1@6", Q: "c2!2", R: "f2@12 f2@5 ~ f2@5 ~", S: "db2!2", T: "eb2 c2", U: "c2 c3 f2@2",
  V: "eb2@2 eb2 g2", W: "[ab2@3 bb1@3 f2@3 e2@2 eb2@2 ~@4 g2@4 gb2@3]/2", X: "f2@3 f2@3 f2@3 g2@2 c2", Y: "bb1!3 d2",
  Z: "eb3 d3 c3 bb2", AA: "eb2!2 g2 c2", AB: "eb2!2 bb2 ab2", AC: "g2@2 eb2 g2@3 gb2@2 d2 gb2@3", AD: "f2!3 d2",
  AE: "[bb1@3 bb1@3 bb1@3 d2@2 eb2@2 ~@11]/2", AF: "~@2 gb2!2", AG: "b1!2 eb2!2", AH: "e2!2 f2!2", AI: "~ gb2 eb2!2",
  AJ: "b1@3 b1@2 gb2 b2@2 gb2 b1@3", AK: "c2@3 c2@3 c2@3 c2@2 e2", AL: "f2 c2 a1 f1", AM: "bb1 ~@7",
  AN: "~@5 g2@4 gb2@3", AO: "f2!3 a1", AP: "bb1@3 bb1@3 bb1@3 bb2@2 ab2", AQ: "g2@3 g2@3 g2@2 c2 db2@2 b1",
  AR: "c2@3 g2@2 d2 c2@3 c2@3", AS: "f2@3 f2@3 f2@3 f2@2 g2", AT: "ab2@3 ab2@3 ab2@3 ab2@2 ab2",
  AU: "g2@3 g2@2 db2 c2@3 c2@3", AV: "f2@3 f2@3 f2@2 g2 ab2@2 bb1", AW: "~@11 bb1",
  AX: "[~@4 bb1@3 ~@3 eb2@20 eb2@2 eb1 ~@15]/2",
})).s("gm_acoustic_bass").gain(0.37)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@5 A B C@2 D B E F A B C@2 A@2 G H I J I@2 K L ~ M A B C@2 D B N O A P C Q R B S ~ T U V B T U B ~ T U V B T W ~@2 X
  Y Z X AA O AB ~ T U V B T U V AC AD AE AF@2 AG ~ AH AI@2
>`.pickRestart({
  A: "~@6 [bb3,db4,f4] ~@11 [bb3,db4,f4] ~@5", B: "~@6 [g3,bb3,eb4] ~@11 [g3,bb3,eb4] ~@5",
  C: "~@6 [ab3,c4,eb4] ~@11 [ab3,c4,eb4] ~@5", D: "~@6 [bb3,db4,eb4] ~@11 [bb3,db4,eb4] ~@5",
  E: "~@6 [ab3,c4,eb4] ~@11 [g3,bb3,db4,eb4] ~@5", F: "~@6 [ab3,c4,eb4] ~@11 [ab3,b3,d4] ~@5", G: "[ab3,c4,eb4] ~@23",
  H: "~@12 [a3,b3]@5 ~ [a3,b3,eb4]@3 ~@3, ~@6 gb3@5 ~, ~@4 eb4 ~@3", I: "~@6 [e3,ab3] ~@11 [e3,ab3] ~@5",
  J: "~@6 [e3,a3] ~@11 [e3,a3] ~@5", K: "~@6 [f3,bb3] ~@11 [f3,bb3] ~@5", L: "~@6 [gb3,b3] ~@11 [f3,bb3] ~@5",
  M: "~@4 [f3,ab3,db4] bb3 ~@12 [ab3,b3,d4] ~@5", N: "~@6 [bb3,c4,eb4,gb4] ~@11 [bb3,c4,eb4,gb4] ~@5",
  O: "~@6 [a3,c4,eb4,f4] ~@11 [a3,c4,eb4,f4] ~@5", P: "~@6 [ab3,db4,e4] ~@11 [ab3,db4,e4] ~@5",
  Q: "~@6 [ab3,c4,eb4] ~@11 [ab3,c4,f4] ~@5", R: "~@6 [bb3,db4,e4] ~@11 [bb3,db4,e4] ~@5",
  S: "~@6 [bb3,db4,f4] ~@5 [bb3,db4,f4] ~@5 [bb3,db4,f4] ~@3 [ab3,c4,eb4] ~", // Bbm Ab
  T: "~@6 [ab3,c4,eb4,f4] ~@11 [ab3,c4,eb4,f4] ~@5", U: "~@6 [bb3,d4,f4] ~@11 [bb3,d4,f4] ~@5",
  V: "~@6 [g3,bb3,d4,f4] ~@11 [g3,bb3,d4,f4] ~@5", W: "~@6 [bb3,d4,f4] ~@11 [bb3,d4,f4] ~@3 [g3,bb3,eb4] ~",
  X: "~@6 [gb3,b3,eb4] ~@11 [gb3,b3,eb4] ~@5", Y: "~@6 [ab3,b3,e4] ~@11 [ab3,b3,db4,f4] ~@5",
  Z: "~@6 [b3,eb4,gb4] ~@11 [gb3,b3,eb4] ~@5", AA: "~@6 [bb3,c4,eb4,f4] ~@11 [bb3,c4,eb4,f4] ~@5",
  AB: "[f3,ab3,bb3,d4] ~@23", AC: "~@6 [g3,bb3,c4,e4] ~@11 [g3,bb3,c4,e4] ~@5",
  AD: "~@3 [f3,ab3,c4,eb4] ~@5 [f3,ab3,c4,eb4] ~@2", AE: "~@6 [f3,ab3,b3,eb4] ~@11 [f3,ab3,b3,eb4] ~@5",
  AF: "~@6 [eb3,g3,bb3,d4] ~@11 [eb3,g3,bb3,d4] ~@5", // Ebmaj7
  AG: "~@6 [f3,ab3,b3,eb4] ~@11 [f3,ab3,b3,eb4] ~@3 [f3,ab3,bb3,d4] ~", AH: "~@11 [eb3,bb3]",
  AI: "[[d4,gb4]@2 ~@2 [eb3,bb3]@2 ~ [eb4,g4]@2 ~ [eb3,g3,bb3,db4,f4]@22 ~@16]/2", // D Eb5 Eb Eb7
})).s("gm_electric_guitar_jazz").gain(0.11).pan(0.6)

// other · alto sax
const alto_sax = note(`<
  A@4 ~@17 B C D@2 ~@10 E@2 F G H I J K L ~@2 M@5 N O@7 ~@2 P Q R ~@11 S T U@2 V@2 ~@5
>`.pickRestart({
  A: "[~@22 db4@42 bb3@2 db4 ~@3 eb4@12 [gb3,gb4]@8 [e3,e4]@4 [eb3,eb4]@2, ~@22 ab3@48 eb3@9 ~@17]/4", // Gb E Eb
  B: "~@4 ab3@6 b3@2 ab3 ~@11", C: "~@4 a3@6 d4@2 ab3 ~@11", D: "[~@2 ab3@21 ~]/2",
  E: "[~@2 [gb3,c4] [bb3,eb4]@2 [c4,gb4] [eb4,bb4]@2 [gb4,c5] [eb4,bb4]@2 [c4,a4]@4 ~@9]/2", // Gbdim Eb5 Cdim Eb5 Gbdim Eb5 F
  F: "~@2 f3@4 ab3@2 g3 gb3@2 f3", G: "e3@3 ~", H: "~@3 g3@2 ~ ab3@2 ~ c4 ~@3 g4@3 eb4 ~@2 c4@2 ~ ab3@2, ~@21 bb3@2 ~",
  I: "~ g3@11 ~@12", J: "db4", K: "eb4 ~@11", L: "~@6 bb3@4 db4@2 f4@4 bb4@2 c5@4 ab4 ~",
  M: "[~@22 d4@20 bb3@4 c4@23 ~ eb4@20 c4@4 d4@16 ~@10]/5", N: "bb3 c4",
  O: "[d4@10 db4@12 c4@18 ~@2 c4@4 d4@22 ~@2 d4@20 bb3@4 c4@23 ~ eb4@20 c4@4 d4@16 ~@10]/7",
  P: "~@4 f3@2 gb3@4 g3@13 ~", Q: "~@2 c4 db4@2 d4@7", R: "gb3 ~@11", S: "~@5 bb4 db5@2 ~ db5@2 c5", T: "~@11 c3",
  U: "[eb3@2 ~ d3@2 ~ db3@2 ~ c3@2 b2@10 ~@2 bb2]/2", V: "[d3@2 ~ eb3@2 ~ f3@2 ~ eb3@2 d3@4 g2@2 c3@3 ~@4]/2",
})).s("gm_alto_sax").gain(0.44)

// other · alto sax · soft notes
const alto_sax_soft = note("<~@40 A ~@34 B ~ C ~ D ~@6>".pickRestart({
  A: "~ f3", B: "~@2 f4 g4@2 ~@3 bb4 ~@3", C: "~@2 c3 ~@2 c3 ~@2 b2 ~@3", D: "~@2 g2 ~@2 e3 ~@2 e3 ~@3",
})).s("gm_alto_sax").gain(0.22)

// chords · alto sax
const alto_sax_2 = note(`<
  ~@21 A@4 B C D ~@8 E ~@6 F G@4 H ~ I@2 J@4 H ~ K ~ L@5 M@2 ~ N@4 O@3 P Q R@2 S@2 T ~ U V@2
>`.pickRestart({
  A: "[b3@6 c4@6 db4@6 eb4@6 ~@8 b3 eb4@2 db4@7 b3@3 a3@3, e3@83 ~ e3@12, ab3@24 a3@24 ab3@35 ~@13]/4",
  B: "[ab3,bb3,d4]", C: "[a3,b3,eb4] [ab3,bb3,d4]", D: "~@2 [f3,bb3] [ab3,db4]@2 [bb3,f4] [db4,ab4]@2 [bb3,f4]@4",
  E: "~@6 [db4,gb4]@4 [f3,c4]@9 ~@5", F: "~@6 [db4,f4]@3 ~@3 [db4,f4]@4 f4@2 e4@4 [c4,eb4]@2, ~@8 db4@3 ~",
  G: "[~@10 f4@8 e4@4 [c4,eb4]@15 ~@5 [ab3,c4]@4 [bb3,d4]@7 ~ [bb3,d4] ~@3 [c4,eb4]@2 [d4,f4]@4 [c4,eb4]@2 [bb3,d4]@3 ~ bb3@19 ~@7, ~@10 d4@7 ~ db4@2 ~@76]/4", // Cm Ab Bb Cm Dm Cm Bb
  H: "~@4 d4@3 ~@3 eb4@2 f4@4 eb4 ~ d4@3 ~@3",
  I: "[~@2 [eb4,g4] [f4,ab4]@2 [g4,bb4] [bb4,d5]@3 g4@2 g4@2 ~@11, ~@3 bb4 ~@4, ~@11 eb4 ~@12]/2", // Eb Fm Gm Bb
  J: "[~@10 [g4,bb4]@8 gb4@4 [f3,ab3]@20 c4@3 ~ [bb3,d4]@7 ~ [bb3,d4] ~@3 [c4,eb4]@2 [d4,f4]@4 [c4,eb4]@2 [bb3,d4]@3 ~ bb3@19 ~@7, ~@9 a4 ~@11 ab3@10 ~@17]/4", // Gm Fm Bb Cm Dm Cm Bb
  K: "~@2 [eb4,g4] [f4,ab4]@2 [g4,bb4] [bb4,d5]@3 [g4,bb4]@2 [bb4,eb5]", // Eb Fm Gm Bb Gm Eb5
  L: "[~@10 a4@2 bb4@4 b4@2 bb4@3 ~ [b3,ab4]@12 g4@12 ~@6 a3@2 bb3@4 bb4@8 ab4@4 eb4@43 ~@7, ~@46 ab4@12 b3@12 gb4 ~@49]/5", // E
  M: "[[eb4,bb4]@5 ~ [c4,eb4]@3 ~ [eb4,g4]@8 [c4,eb4]@4 [eb4,f4,a4]@26, g4@9 ~ bb4@6 ~@32]/2", // Eb5 Cm Eb Cm F7
  N: "[~@10 [d4,f4]@8 [db4,e4]@4 [c4,eb4,f4]@19 ~ [ab3,c4]@4 [bb3,d4]@6 [bb3,d4] ~ [c4,eb4]@4 [bb3,d4] ~ [d4,f4]@4 [c4,eb4]@2 [bb3,d4]@3 ~ bb3@19 ~@7]/4", // Dm Dbm F7 Ab Bb Cm Bb Dm …
  O: "[~@6 d4@4 eb4@2 f4@4 eb4 ~ d4@3 ~ [ab3,c4]@24 [bb3,d4]@24 ~@2, ~@11 f4@24 ~]/3", // Ab Bb
  P: "~@2 [g3,db4] [bb3,f4]@2 [db4,g4] [f4,bb4]@2 [db4,g4] [f4,bb4]@2 [e4,g4]", Q: "~@11 c4",
  R: "[eb4@2 c4 d4@2 c4 db4@2 b3 c4@2 b3@10 ~@2 bb3]/2", S: "[d4@2 g3 eb4@2 e4 f4@2 e4 eb4@2 d4@4 g3@2 c4@3 ~@4]/2",
  T: "~@2 [f3,ab3]@3 ab3@3 b3 eb4@2 [bb3,g4], ~@2 eb3@9 ~", U: "~@11 bb3",
  V: "[[d4,gb4]@2 ~@2 bb3 ~ [eb4,g4]@3 ~ [g3,db4,f4]@22 ~@16]/2", // D Eb Gm7b5
})).s("gm_alto_sax").gain(0.27).pan(0.4)

// chords · trombone
const trombone = note(`<
  A@4 ~ B C D@2 E C F G B C D@2 B@2 H ~ I J I@2 K L M N B C D@2 E C O P ~@4 Q R S T ~ U ~ V ~@7 V ~@11 W@7 ~ X ~@2 Y Z
  ~@5
>`.pickRestart({
  A: "[~@22 [bb3,e4,ab4]@48 [ab3,c4,eb4]@9 ~@3 [ab3,b3,d4]@12 [g3,bb3,db4]@2]/4", // Bbm7b5 Ab Abdim Gdim
  B: "~@6 [bb3,db4,f4] ~@11 [bb3,db4,f4] ~@5", C: "~@6 [g3,bb3,eb4] ~@11 [g3,bb3,eb4] ~@5",
  D: "~@6 [ab3,c4,eb4] ~@11 [ab3,c4,eb4] ~@5", E: "~@6 [bb3,db4,eb4] ~@11 [bb3,db4,eb4] ~@5",
  F: "~@6 [ab3,c4,eb4] ~@11 [g3,bb3,db4,eb4] ~@5", G: "~@6 [ab3,c4,eb4] ~@11 [ab3,b3,d4] ~@5", H: "[ab3,c4,eb4] ~@23",
  I: "~@6 [e3,ab3] ~@11 [e3,ab3] ~@5", J: "~@6 [e3,a3] ~@11 [e3,a3] ~@5", K: "~@6 [f3,bb3] ~@11 [f3,bb3] ~@5",
  L: "~@6 [gb3,b3] ~@11 [f3,bb3] ~@5", M: "~@4 f3@2 ab3@4 bb3@2 db4@4 f3 ~@7", N: "~@18 [ab3,b3,d4] ~@5",
  O: "~@4 eb3@2 [bb3,c4,eb4,gb4] ~@3 bb3@2 c4@4 eb4@2 [bb3,c4,eb4,gb4] ~@5, ~@3 gb3@2 ~@7", // Cm7b5
  P: "~@6 [a3,c4,eb4,f4] ~@11 [a3,c4,eb4,f4] ~@5", Q: "[bb3,e4]", R: "[g3,bb3] ~@11",
  S: "~@6 [db4,f4]@4 bb3 ~ [db4,f4]@4 bb3 ~ [db4,e4]@4 [c4,eb4]@2", T: "~@5 f4@4 e4@2 eb4",
  U: "~@6 d4@2 ~@2 eb4@2 f4@4 eb4@2 d4@3 ~ d4@2", V: "~@4 bb3 ~@5 c4@2 d4@4 c4@2 bb3@4 ab3@2",
  W: "[~@10 f4@8 e4@4 ~ eb4@27 ~@2 d4@2 eb4@4 d4 ~ f4@4 eb4@2 d4@3 ~ d4@28 ~@4 bb3@4 c4@2 d4@4 c4@2 bb3@4 ab3@48 ~@2]/7",
  X: "~@4 c3@19 ~", Y: "~@11 d4", Z: "~@3 d4@2 c4 ~@6",
})).s("gm_trombone").gain(0.25).pan(0.4)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  A@2 B C ~@40 D ~ E ~ F ~ G ~ D ~ E ~ F ~ H ~ I@3 ~@5 J@7 K ~ L@2 M N O ~@2 P@2
>`.pickRestart({
  A: "[~@11 ab5@4 e5 ~@2 e5@3 eb5 ~@2]/2", B: "eb5@3 db5 ~@2 db5@2 ab4 bb4@2 c5", C: "~@2 eb5 ~@2 gb5@4 e5@2 eb5",
  D: "~@5 bb4@4 a4@2 ab4", E: "~@3 bb4 ~ c5 d5@2 c5 bb4@2 g4", F: "~@2 bb4 ~@2 c5 d5@2 c5 bb4@2 ab4",
  G: "~@2 bb4 c5@2 d5 g5@3 d5@2 c5", H: "~@2 bb4 c5@2 d5 g5@3 bb4@2 eb5",
  I: "[~@5 d5 eb5@2 e5 eb5@2 gb5@6 eb5 ~@2 eb5 db5@2 b4@6 bb4@4 ab4@2 gb4]/3",
  J: "[~@10 bb4@8 a4@4 ab4@28 ~@2 bb4@2 c5@4 bb4 ~ d5@4 c5@2 bb4@4 g4@28 ~@4 bb4@4 c5@2 d5@4 c5@2 bb4@4 ab4@48 ~@2]/7",
  K: "~@2 g4 bb4@2 db5 f5@2 db5 f5@2 e5", L: "[~@22 [f4,b4,eb5]@21 ~@5]/2", M: "~@11 d5", N: "~@3 g4@2 c5 ~@6",
  O: "~@2 f4@3 ab4@3 b4 eb5@2 g5", P: "[[bb4,d5,gb5]@3 ~@3 [bb4,eb5,g5]@3 ~ [bb4,db5,f5]@23 ~@15]/2",
})).s("gm_brass_section").gain(0.64)

// other · muted trumpet · "MT TRUMPET"
const muted_trumpet = note("<~@60 A@3 ~@5 B@7 C ~ D@2 E F G ~@2 H@2>".pickRestart({
  A: "[~@5 d5 eb5@2 e5 eb5@2 gb5@6 eb5 ~@2 eb5 db5@2 b4@6 bb4@4 ab4@2 gb4]/3",
  B: "[~@10 bb4@8 a4@4 ab4@28 ~@2 bb4@2 c5@4 bb4 ~ d5@4 c5@2 bb4@4 g4@28 ~@4 bb4@4 c5@2 d5@4 c5@2 bb4@4 ab4@48 ~@2]/7",
  C: "~@2 g4 bb4@2 db5 f5@2 db5 f5@2 e5", D: "[~@22 [f4,b4,eb5]@21 ~@5]/2", E: "~@22 d5 ~", F: "~@3 g4@2 c5 ~@6",
  G: "~@4 f4@6 ab4@5 ~ b4@2 eb5@4 g5@2", H: "[gb5 ~@2 g5@2 f5@11 ~@8]/2",
})).s("gm_muted_trumpet").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  A B C D ~ E@14 F ~ E@7 G E@14 C H E@3 C B E@2 I E@3 C B C ~ J C K L E@3 M H E@3 C B E@2 C E@3 C N ~ A O P
>`.pickRestart({
  A: "~@11 x", B: "~ x", C: "x ~@5 x ~@4 x", D: "~@5 x ~@5 x", E: "x!2", F: "x ~@2 x!2 ~", G: "~ x ~ x ~@2",
  H: "~@5 x ~@3 x ~@2", I: "x ~@4 x ~@3 x ~@2", J: "~@2 x!2", K: "x ~@4 x!2 ~@5", L: "x!3 ~", M: "x", N: "~@6 x ~@4 x",
  O: "~ x ~@4", P: "~ x ~",
})).gain(0.42)

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A@14 B ~ A@7 C A@14 D ~ A@3 E A@7 E A F ~ G A@2 H A@3 B ~ A@3 E A@7 E A ~@4
>`.pickRestart({
  A: "~ x ~ x", B: "x", C: "~@3 x", D: "x ~@2 x ~@2 x ~@2 x ~ x", E: "~@3 x ~@5 x ~ x", F: "~ x ~@2", G: "~@2 x!2",
  H: "~@2 x ~@6 x ~@2",
})).gain(0.63)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@5 A@12 ~@4 A@22 ~ B A@4 C A@2 D A@4 C A ~@2 A@6 ~ B A@4 C A@2 E A@4 C ~@4
>`.pickRestart({
  A: "x!2", B: "~@7 x!2 ~@3", C: "~ x", D: "x ~@6 x!2 ~@3", E: "x",
})).gain(0.28)

// drums · clap
const clap = s("cp").struct("<A ~ A B ~@23 C ~@16 D ~@7 D ~@5 E ~ F ~@2 G ~@3 H I ~@7 J ~@4 K ~@2 L M>".pickRestart({
  A: "~@11 x", B: "~@9 x ~ x", C: "~@2 x", D: "~@5 x ~@3 x ~@2", E: "~@15 x!2 ~ x ~@3 x ~", F: "~@5 x ~@6",
  G: "~@5 x!2 ~@17", H: "x", I: "~@2 x ~@2 x ~@3 x ~@2", J: "~@3 x", K: "~@8 x!2 ~ x", L: "x ~@5 x ~@3 x!5 ~@5 x!4",
  M: "~@5 x!3 ~@16",
})).gain(0.35)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@68 [~ x ~@10] ~@15 [~@15 x!5 ~@4] [x!5 ~@19]>").gain(0.21)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@3 B C@14 B D C@7 E C@14 A B F@13 G H I F@5 G J ~ K@3 L K@3 L K@3 L F ~@2 M N
>`.pickRestart({
  A: "x!4", B: "x", C: "x ~@2 x ~ x!2 ~@2 x ~ x", D: "~@3 x", E: "x ~@5 x ~@2 x ~ x", F: "~@3 x ~ x ~@3 x ~ x",
  G: "~@3 x ~ x ~@3 x ~@2", H: "x!2 ~ x", I: "~ x ~@2", J: "~ x ~@6", K: "~ x ~ x", L: "~@3 x ~@5 x ~ x",
  M: "~@11 x ~ x ~ x!2 ~ x ~ x ~ x ~", N: "x ~ x!2 ~ x ~ x ~@16",
})).gain(0.21)

// drums · open hat
const open_hat = s("oh").struct(`<
  A B@3 ~@16 C ~@22 A ~ D@4 C D@8 E ~@2 D@5 E F ~ G@3 H G@3 H G@3 H D ~@4
>`.pickRestart({
  A: "~@11 x", B: "~@5 x ~@5 x", C: "~ x", D: "x!2", E: "x ~@5 x ~@4 x", F: "x", G: "x ~@4 x!2 ~@4 x",
  H: "x ~@4 x!2 ~@5",
})).gain(0.28)

// drums · crash
const crash = s("cr").struct("<~@3 A ~@24 B ~@15 C D ~@2 E ~@3 A ~@15 C D ~@2 E ~@7 E ~@3 F ~>".pickRestart({
  A: "~@5 x ~@6", B: "~ x ~@4", C: "~@5 x ~@3 x ~@2", D: "x", E: "~@11 x", F: "x ~@2 x ~ x ~@6",
})).gain(0.21)

stack(
  bass, electric_guitar_jazz, alto_sax, alto_sax_soft, alto_sax_2, trombone, brass_section, muted_trumpet, kick, snare,
  snare_soft, clap, clap_soft, hihat, open_hat, crash
)

More by Louis Armstrong