Strudelify

Black Bottom Stomp

Ferdinand Jelly Roll Morton

KeyB♭ majorTempo252 bpm
0:00/0:00
// Black Bottom Stomp — Ferdinand Jelly Roll Morton
// 252 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/4746401; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 202 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(252/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 · trumpet · "B♭ Cornet"
const trumpet = note(`<
  A B C D A B C D E F G@2 H I J K E F G@2 H I J L M N O P Q I J R S T U V Q I W X Y Z AA AB ~@4 Y AC AD AB AE AF AG AH
  AI AJ AK AL AM AN G AO AM AP AQ ~ AR AS AT AU AV AW AX AY AZ BA BB BC ~@18 BD BE ~@19 BF BG BH BI BJ BK BL BM BN BO BP
  BQ BR BS AW BT BU AZ BV BW BX ~@18 BY BZ BK CA CB BA BK CC CD ~ CE CF CG CH BS AW AX BU AZ CI CJ CK CL CA CM CN CO CP
  CQ ~ CR CS CT CU AV CV AX CW AZ CX CY CZ DA DB
>`.pickRestart({
  A: "bb4 c5 db5 d5@9 ~@4", B: "~@4 g4@2 a4@2 g4 a4 ~ g4 f4@2 ~@2", C: "db5 d5@11 ~@2 bb4@2", D: "db5 c5 bb4 ~",
  E: "bb4", F: "a4", G: "g4", H: "g4 f4@2 g4", I: "d4 c4", J: "f4 a4@2 g4", K: "g4 f4 ~ a4 g4@2 f4@2", L: "f4 ~@3",
  M: "db5 d5 ~ bb4 g4@2 ~@2", N: "c5!2 ~ c5 a4@4", O: "~ b4 ~ g4 a4 g4 f4 d4", P: "f4 d4 c4 b3@3 ~@2",
  Q: "eb4 d4@2 eb4", R: "g4 f4 ~ a4 g4@2 ~@2", S: "~ db5 d5 bb4 ~ bb4 c5 bb4", T: "a4 d5 bb4 a4@3 ~@2",
  U: "~ bb4 b4@2 db5 d5 ~@2", V: "~ g4 gb4 g4 ab4 g4 gb4 g4", W: "bb4@2 a4!2 ~ f4 g4@2", X: "eb4 ~",
  Y: "d4@2 ~ g4 d4 g4 d4@2", Z: "g4@2 ~ a4 gb4 a4 gb4@2", AA: "g4 ~ d4!2", AB: "f4 ~", AC: "a4@2 ~ a4 gb4 a4 gb4@2",
  AD: "g4@2 ~ g4 d4 g4 d4@2", AE: "g4 f4@2 ~", AF: "a4 g4 f4 e4 eb4 a4@2 eb4", AG: "d4 db5 c5 b4",
  AH: "bb4 a4 ~ f4 ~ bb4 ~ c5", AI: "bb4@8 ~@2 bb4@2 ~@2 c5 ~", AJ: "bb4@4 ~ bb4 ~ c5", AK: "bb4 ~ bb4 c5 bb4 ~ bb4 c5",
  AL: "bb4@2 eb5 d5 ~ d5 c5@2", AM: "c5", AN: "~ d5 ~ b4 c5@2 eb5@2", AO: "~@2 d5 c5 ~ bb4 c5 ~",
  AP: "~ bb4 a4 bb4 c5 bb4 a4 bb4", AQ: "eb5 db5@7", AR: "~ bb4 ab4@2", AS: "bb4@2 bb4 ab4 ~ d5@3", AT: "g4@3 ~",
  AU: "~@2 b4 c5 ~ c5 b4 c5", AV: "db5 c5 c5@2", AW: "~@2 b4 c5 ~ g4 gb4 g4", AX: "bb4 ab4 ab4@2",
  AY: "~@3 d5 ~ d5 c5@2", AZ: "c5!2 bb4@2", BA: "~@2 c5 d5 ~ bb4 c5@2", BB: "eb5@2 eb4!2 ~ g4 g4@2",
  BC: "bb4!2 ~ bb4 c5@2 bb4@2", BD: "~@2 bb4@2 ~ bb4 ~@2", BE: "bb4@2 ~ bb4 ~@2 bb4@2", BF: "~@3 f5",
  BG: "f5@2 d5@2 d5@2 d5 ~", BH: "d5@4 c5@2 c5@2 ~@2 [bb4,b4,c5] [db5,d5,eb5,e5] [f5,gb5] ~@3, ~@3 g5",
  BI: "eb5@2 c5 ~", BJ: "~@2 eb5 d5 eb5 f5 eb5@2", BK: "d5@2 c5 ~ c5@2 ~@2", BL: "c5 d5 ~ d5 ~ bb4 c5@2",
  BM: "gb5 g5 gb5 f5", BN: "eb5 d5 ~ d5 ~ db5@2 ~", BO: "c5!2 c5@2", BP: "bb4 c5 ~ c5 c5@2 c5@2",
  BQ: "bb4 b4 [c5,db5] d5 eb5@4 g4@8", BR: "~@2 c5 d5 ~ bb4 c5 bb4", BS: "db5@2 c5 ~ c5@4", BT: "bb4@2 ab4 ~ ab4@4",
  BU: "~@2 eb5 d5 ~ d5 c5@2", BV: "c5@2 db5 d5 ~ d5 g5@2", BW: "eb5@2 bb4 b4 c5 eb5 ~@2",
  BX: "d5 eb5 ~ e5 f5@2 d5@2 c5@4 bb4@4", BY: "~@2 g4@2 ~ g4 ~@2", BZ: "g4 ~ bb4 c5 ~ c5 db5 ~",
  CA: "~@2 bb4 c5 ~ bb4 c5@2", CB: "eb5!2 g4 ~", CC: "~ bb4 a4 bb4 b4 c5 db5 d5", CD: "eb5@3 ~@13", CE: "~ d5 c5@2",
  CF: "c5 db5 ~ d5 ~ bb4 c5@2", CG: "eb5 g4", CH: "~@5 bb4 c5 bb4", CI: "c5!2 db5 d5 ~ bb4 c5@2",
  CJ: "~@2 eb5@2 ~ eb5 ~@2", CK: "f5@2 ~ eb5 ~@2 f5@2", CL: "f5 d5 d5@2", CM: "eb5!2 eb5@2", CN: "~@5 f5 ~@2",
  CO: "f5 db5 d5@2 c5@4", CP: "~ bb4 a4 bb4 c5 g5 ~ d5", CQ: "eb5 ~@3", CR: "f5 ~", CS: "d5 ~ bb4 c5 ~ bb4 c5 ~",
  CT: "eb5@2 ~ eb5", CU: "eb5@2 eb5 c5 ~ c5@3", CV: "~@2 b4 c5 ~ c5 bb4@2", CW: "~@8 db5 d5@7",
  CX: "c5@2 db5 d5 ~ bb4 c5@2", CY: "eb5!2 ~@6", CZ: "gb5@2 g5 eb5 ~ gb5 ~ g5", DA: "eb5 db5 c5 bb4", DB: "g4!2 eb4 ~",
})).s("gm_trumpet").gain(0.29)

// other · trombone
const trombone = note(`<
  A B A C A B A C D E F G H I J K D E F G H I J L ~@4 M N O P Q R S T M N O U ~@14 V W X@2 Y Z AA AB AC@2 AD AE AF AG AH
  AI AJ@2 AK AL AM AN AO AP AQ AR ~@18 AS AT ~@20 AU AV AW AX AY AZ AX ~ AY AZ BA T AU AV BB BC AW BD BE BF ~@18 AU BG
  BH BI BJ BK BL BM BN ~ BO@2 BP@2 BQ BR AM AN BS BT BA BU BV BW G BX BV BY BZ CA CB CC CD CE CF ~ CG AN CH CI CJ CK@2
  CL
>`.pickRestart({
  A: "a3 bb3@11 ~@4", B: "c4 ~ f3 ~", C: "f4 eb4 d4 ~", D: "d4", E: "eb4", F: "b3@3 b3", G: "g4", H: "eb4 d4@2 eb4",
  I: "d4 c4", J: "d4 db4@2 db4", K: "c4@2 d4 ~", L: "c4 ~ a3 ~", M: "c3 d3@2 eb3", N: "f3 eb3", O: "d3 db3@2 db3",
  P: "c3@2 ~@4 g3 a3", Q: "bb3 ~@2 d3", R: "d3 ~@2 d4", S: "d4 ~@2 g3", T: "g3 ~@3", U: "c3 ~ d3 ~", V: "ab3 g3 gb3 f3",
  W: "e3 eb3 ~ d3 ~@4", X: "~@2 e4@2 f4 ~@3", Y: "f4 e4", Z: "f4 ~@3", AA: "~@2 d3 f3", AB: "ab3 d4 c4 bb3",
  AC: "[g3@4 bb3 ~ g3 eb4@4 ~ eb4@2 e4@2]/2", AD: "f4 ~ bb3 ~", AE: "ab3 ~ f3 ~", AF: "eb3 ~@2 g3", AG: "bb3 g3@2 ~",
  AH: "~ c4 bb3 c4", AI: "d4 ~ bb3 ab3", AJ: "[g3@2 bb3@2 c4@2 ~ eb4@4 ~@3 b3@2]/2", AK: "c4@3 b3", AL: "bb3@3 ~",
  AM: "ab3@3 ~", AN: "~ eb4 d4 c4", AO: "bb3@2 ~@2 c4@3 d4", AP: "~@3 bb3 bb3@2 ab3@2", AQ: "g3@2 ~@3 e3@3",
  AR: "f3@2 ~@3 db3!2 d3", AS: "~@2 g4@2 ~ g4 ~@2", AT: "g4@2 ~ g4 ~@2 g4@2", AU: "~@2 bb3@2 ~ bb3 ~@2", AV: "bb3 ~@3",
  AW: "~@2 eb3@2 ~ eb3 ~@2", AX: "eb3 ~@3", AY: "~@2 f3@2 ~ f3 ~@2", AZ: "f3 ~@3", BA: "~@2 g3@2 ~ g3 ~@2",
  BB: "~@2 c4@2 ~ c4 ~@2", BC: "c4 ~@3", BD: "f3@2 ~ f3 ~@2 f3@2", BE: "eb3 ~ eb3 e3", BF: "e3 f3 bb2 ~",
  BG: "bb3@2 ~ bb3 ~@2 bb3@2", BH: "bb3 ~ bb3 ~@5", BI: "~ bb3 ~ ab3", BJ: "~ bb3", BK: "eb4@3 e4", BL: "f4 bb3",
  BM: "d4 bb3", BN: "eb4@3 ~@13", BO: "[bb3@4 ~@2 c4 d4@5 ~@2 bb3@2]/2", BP: "[g3@4 bb3@3 eb4@3 d4@2 c4@2 bb3@2]/2",
  BQ: "c4 ~", BR: "~ e3 f3 g3", BS: "bb3@2 ~ c4@3 db4@2", BT: "d4@2 ~ bb3@3 ab3@2", BU: "g3@2 ~@5 f4", BV: "ab4",
  BW: "bb3@4 ~@3 eb4", BX: "bb3@2 ~ bb3 ~@3 f4", BY: "bb3@2 ~ bb3@3 bb3@2", BZ: "~ bb3 a3 bb3 d4 db4 d4 f4",
  CA: "e4 f4 ab4@2 f4@2 d4@2", CB: "bb3@4 ~@3 g4", CC: "ab4@2 ~@2 bb3@2 ~ eb4", CD: "g4 eb4", CE: "bb3@3 g3@3 ~@2",
  CF: "ab3 ~", CG: "~ ab3", CH: "bb3!2 c4 db4", CI: "d4@2 bb3!2 ~ bb3 c4@2", CJ: "eb4 d4 c4 ~", CK: "eb4 d4 c4 bb3",
  CL: "gb3 g3 eb3 ~",
})).s("gm_trombone").gain(0.2).pan(0.6)

// chords · piano
const piano = note(`<
  A B A C A B A C D E F@2 G H I J D E F@2 G H I K D E F@2 G H I J L M N O G H I J P Q R S G H T J P Q R S G H U V W@2 X
  Y Z@2 AA@2 Z@2 AB ~ Z@2 AA@2 AC@2 AD AE AA Z AA AF Z@2 AA@2 Z@2 AB ~ Z@2 AA@2 AC@2 AD AE AA Z AB ~ AG AH AI AJ AK@2 AL
  AM@3 AN AO AP AQ@3 AR AS AT AU AV AW AX AB AV AW AB ~ AV AW AX AB AY AZ BA BB AX BC AA AF Z@2 AA@2 Z@2 AA@2 Z@2 AA@2
  AC@2 AD AE AA Z AX BD Z@2 AA@2 Z@2 AB ~ Z@2 AA@2 AC@2 AD AE AA Z AX BD Z@2 AA@2 Z@2 AB ~ Z@2 AA@2 AC@2 AD AE AA Z AA@3
  BE
>`.pickRestart({
  A: "[bb3,d4,f4]!4", B: "[c4,eb4,g4,bb4]!2 [f4,a4,c5,eb5]!2", C: "[c4,eb4,g4,bb4] [f4,a4,c5,eb5] [bb3,d4,f4] ~",
  D: "[g4,bb4,d5]!4", E: "[d4,gb4,a4,c5]!4", F: "[g4,b4,d5,f5]!4", G: "[c4,eb4,g4] [g4,bb4,d5]@2 [c4,eb4,g4]",
  H: "[bb3,d4,f4] [f4,a4,c5,eb5]", I: "[bb3,d4,f4] [bb3,db4,e4,a4]@2 [a3,db4,eb4,g4]",
  J: "[f4,a4,c5,eb5] [d4,gb4,a4,c5]", K: "[f4,a4,c5,eb5] ~@3", L: "[g4,bb4,d5] ~@2 [g4,bb4,d5]",
  M: "[d4,gb4,a4,c5] ~@2 [d4,gb4,a4,c5]", N: "[g4,b4,d5,f5] ~@2 [g4,b4,d5,f5]", O: "[g4,b4,d5,f5] ~@3",
  P: "[g4,bb4,d5]@2 ~ [g4,bb4,d5]!3 [g4,bb4,d5]@2", Q: "[d4,gb4,a4,c5]@2 ~ [d4,gb4,a4,c5]!3 [d4,gb4,a4,c5]@2",
  R: "[g4,b4,d5,f5]@2 ~ [g4,b4,d5,f5]!3 [g4,b4,d5,f5]@2", // G7
  S: "[g4,b4,d5,f5]@2 ~ [a3,c4,d4,g4] [a3,c4,d4,g4]@2 [g4,b4,d5,f5]@2", T: "[bb3,d4,f4]@4 [bb3,db4,e4,a4]@11 ~",
  U: "[bb3,d4,f4] [a3,db4,eb4] [ab3,c4,d4] [f3,a3,c4]", V: "[c4,eb4,g4,bb4] [f4,a4,c5,eb5] ~ [bb3,d4,f4] ~@4",
  W: "~ [bb3,db4,e4,a4] [bb3,d4,f4] ~", X: "[bb3,d4,f4]!2 [bb3,db4,e4,a4]!2", Y: "[bb3,d4,f4] ~@3",
  Z: "[bb3,d4,f4,ab4]!4", AA: "[eb4,g4,bb4]!4", AB: "[eb4,g4,bb4] ~@3", AC: "[c4,eb4,g4,bb4]!4",
  AD: "[f4,ab4,c5,eb5]!4", AE: "[gb4,ab4,c5,e5]!4", AF: "[bb3,db4,e4,ab4]!4", AG: "d3 [ab4,bb4] bb2 [ab4,bb4], d4@15 ~",
  AH: "f2@2 [bb3,d4,f4]@2 ~@3 bb5, ~@2 [bb5,d6]@3 [ab5,c6]@2 ~, ~@2 bb2 [bb3,d4,f4]", // Bb Ab Bb
  AI: "g5 bb5 ~ g5 [bb3,eb4,g4]@4 [bb2,d6]@4 [bb3,eb4,g4]@4, g2 ~@3", // Eb Bb Eb
  AJ: "g5 bb5 ~ g5 f5@2 gb5@2 g5@2 bb5@2 [c4,gb4,a4,c6]@4, g2 [d4,g4,bb4] gb2 ~", // Gbdim Gm
  AK: "[bb5 c6 bb5 ab5 [ab2,bb5]@2 ~@2 d3@2 bb4 ~ [bb2,ab4]@2 [ab3,bb3,d4]@2, f2 [bb3,d4,f4] ~ [bb3,d4,f4] ~ [ab3,bb3,d4] ~@2, ~@14 f5@5 ~@3 f4@5 ~@5]/2", // Absus2 Bb7 Bb Bb7
  AL: "bb4 c5 ~ bb4 a4@2 bb4@2 ~@2 g5@2 ~@2 d5@2, eb3 [bb3,eb4,g4] bb2 [bb3,eb4,g4]", // Eb
  AM: "[[eb2,eb3]@2 ~ d5 bb4 g4 bb4 ~ f2@2 ~@2 bb2@2 [bb3,d4,f4]@2 d3@2 ~ [bb5,d6] ~ [a5,c6] ~ d5, f5@6 ~@8 d5@8 [ab4,c5]@13 ~@9 [bb3,d4,f4]@4, ~ [d2,d3] [c2,c3] [bb1,bb2] ~ [bb3,d4,f4] ~@3 [bb3,d4,f4] bb2 ~]/3", // Eb Bb Am Ab Bb D C Bb
  AN: "[ab5,c6] f5 [bb3,eb4,g4,d5]@2 [g5,bb5] eb5 [bb3,eb4,g4,bb4]@2, eb3 ~ bb2 ~", // Ab Ebmaj7 Gm Eb
  AO: "[eb2,eb3]@4 ab5 [bb5,b5] [ab5,c6]@2 [d2,d3,g5,bb5]@4 [db2,db3]@4, ~ [bb3,eb4,g4] ~@2", // Eb Bmaj7 Ab Gm Db Eb
  AP: "d6 db6 [e5,d6] bb5 c6 [e5,d6] c6 b5, [c2,c3] [g3,c4,e4] g2 [g3,c4,e4]", // E7 C
  AQ: "[bb5@2 db6@2 d6@2 c6@2 g2@4 [d6,eb6] f6 ~@4 eb6@2 f6@2 ~@4 f6@2 eb6@2 ~@4 eb6@2 [gb5,gb6]@2 ~@4 eb6@2 gb6@2 bb5@2, [c2,c3] [g3,c4,e4] ~ [g3,bb3,c4] [f2,f3] ~ [ab2,ab3] ~ [a2,a3] [a3,c4,gb4] [ab2,ab3] [ab2,a3], ~@7 f5@2 ~@2 eb6@2 ~@2 f6@2 ~@2 [g5,g6]@2 ~@3]/3", // Ebmaj7 Gb C C7 F Ab A Gbdim …
  AR: "[eb5,g5] bb5 c6 [d5,gb5] [eb5,g5] bb5 g5 eb5, [bb2,bb3] [bb3,eb4,g4] [g2,g3] [gb2,gb3]", // Eb D Eb Bb Eb G Gb
  AS: "[d5,bb5] c6 bb5 ~@2 bb5 ab5 bb5, [f2,f3] [bb3,d4,f4] [bb2,bb3] [bb3,d4,f4], ~@3 [c5,ab5]@2 ~@3", // Gm F Bb Fm
  AT: "[eb3,eb4]@2 bb5 bb4 ~ bb5 [b2,b3,bb4]@2, ~ [d3,d4] [c3,c4] ~", // Eb Bmaj7 D C
  AU: "bb5 bb4 ~ bb5 [g2,g3,bb4]@2 [gb2,gb3,bb5]@2, [bb2,bb3] [ab2,ab3] ~@2", // Gm Gb Bb Ab
  AV: "~@2 [bb3,d4,f4,ab4]@2 ~ [bb3,d4,f4,ab4] ~@2", AW: "[bb3,d4,f4,ab4] ~@3",
  AX: "~@2 [eb4,g4,bb4]@2 ~ [eb4,g4,bb4] ~@2", AY: "~@2 [c4,eb4,g4,bb4]@2 ~ [c4,eb4,g4,bb4] ~@2",
  AZ: "[c4,eb4,g4,bb4] ~@3", BA: "~@2 [f4,ab4,c5,eb5]@2 ~ [f4,ab4,c5,eb5]@2 ~", BB: "[gb4,ab4,c5,e5] ~@3",
  BC: "[bb3,d4,f4,ab4]@2 ~ [bb3,d4,f4,ab4] ~@2 [bb3,d4,f4,ab4]@2", // Bb7
  BD: "[eb4,g4,bb4]@2 ~ [eb4,g4,bb4] ~@2 [eb4,g4,bb4]@2", BE: "[eb4,g4,bb4]!3 ~",
})).s("gm_piano").gain(0.13).pan(0.4)

// chords · banjo
const banjo = note(`<
  A B A C A B A C D E F@2 G H I J D E F@2 G H I K D E F@2 G H I J L M N O G H I J P Q R S G H T J P Q R S G H U V W@2 X
  Y Z@2 AA@2 Z@2 AB ~ Z@2 AA@2 AC@2 AD AE AA Z AF AG Z@2 AA@2 Z@2 AH ~ Z@2 AA@2 AC@2 AD AE AA Z AH ~@21 AI AJ AK AB AI
  AJ AH ~ AI AJ AK AB AL AM AN AO AK AP AA AG AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI@2 Z@2 AA@2 Z@2 AB
  ~ Z@2 AA@2 AC@2 AD AE AA Z BJ BK Z@2 AA@2 Z@2 AB ~ Z@2 AA@2 AC@2 AD AE AA Z AA@3 BL
>`.pickRestart({
  A: "[bb3,d4,f4]!4", B: "[c4,eb4,g4,bb4]!2 [f3,a3,c4,eb4]!2", C: "[c4,eb4,g4,bb4] [f3,a3,c4,eb4] [bb3,d4,f4] ~",
  D: "[g3,bb3,d4]!4", E: "[d3,gb3,a3,c4]!4", F: "[g3,b3,d4,f4]!4", G: "[c4,eb4,g4] [g3,bb3,d4]@2 [c4,eb4,g4]",
  H: "[bb3,d4,f4] [f3,a3,c4,eb4]", I: "[bb3,d4,f4] [bb3,db4,e4,a4]@2 [a3,db4,eb4,g4]",
  J: "[f3,a3,c4,eb4] [d3,gb3,a3,c4]", K: "[f3,a3,c4,eb4] ~@3", L: "[g3,bb3,d4] ~@2 [g3,bb3,d4]",
  M: "[d3,gb3,a3,c4] ~@2 [d3,gb3,a3,c4]", N: "[g3,b3,d4,f4] ~@2 [g3,b3,d4,f4]", O: "[g3,b3,d4,f4] ~@3",
  P: "[g3,bb3,d4]@2 ~ [g3,bb3,d4]!3 [g3,bb3,d4]@2", Q: "[d3,gb3,a3,c4]@2 ~ [d3,gb3,a3,c4]!3 [d3,gb3,a3,c4]@2",
  R: "[g3,b3,d4,f4]@2 ~ [g3,b3,d4,f4]!3 [g3,b3,d4,f4]@2", // G7
  S: "[g3,b3,d4,f4]@2 ~ [a3,c4,d4,g4] [a3,c4,d4,g4]@2 [g3,b3,d4,f4]@2", T: "[bb3,d4,f4] [bb3,db4,e4,a4]@3",
  U: "[bb3,d4,f4] [a3,db4,eb4] [ab3,c4,d4] [f3,a3,c4]", V: "[c4,eb4,g4,bb4] [f3,a3,c4,eb4] ~ [bb3,d4,f4] ~@4",
  W: "~ [bb3,db4,e4,a4] [bb3,d4,f4] ~", X: "[bb3,d4,f4]!2 [bb3,db4,e4,a4]!2", Y: "[bb3,d4,f4] ~@3",
  Z: "[bb3,d4,f4,ab4]!4", AA: "[eb3,g3,bb3]!4", AB: "[eb3,g3,bb3] ~@3", AC: "[c3,eb3,g3,bb3]!4",
  AD: "[f3,ab3,c4,eb4]!4", AE: "[gb3,ab3,c4,e4]!4", AF: "[eb4,g4,bb4]!4", AG: "[bb3,db4,e4,ab4]!4",
  AH: "[eb4,g4,bb4] ~@3", AI: "~@2 [bb3,d4,f4,ab4]@2 ~ [bb3,d4,f4,ab4] ~@2", AJ: "[bb3,d4,f4,ab4] ~@3",
  AK: "~@2 [eb3,g3,bb3]@2 ~ [eb3,g3,bb3] ~@2", AL: "~@2 [c3,eb3,g3,bb3]@2 ~ [c3,eb3,g3,bb3] ~@2",
  AM: "[c3,eb3,g3,bb3] ~@3", AN: "~@2 [f3,ab3,c4,eb4]@2 ~ [f3,ab3,c4,eb4]@2 ~", AO: "[gb3,ab3,c4,e4] ~@3",
  AP: "[bb3,d4,f4,ab4]@2 ~ [bb3,d4,f4,ab4] ~@2 [bb3,d4,f4,ab4]@2", // Bb7
  AQ: "[ab3,bb3] [ab3,b3] [ab3,c4] [ab3,bb3] [ab3,b3] [ab3,c4] [ab3,bb3] [ab3,b3]", // Absus2 Abm Ab Absus2 Abm Ab Absus2 Abm
  AR: "[ab3,c4] [ab3,bb3] [ab3,b3] [ab3,c4] [ab3,bb3] [ab3,b3] [ab3,c4]@2", // Ab Absus2 Abm Ab Absus2 Abm Ab
  AS: "[g3,bb3] [g3,b3] [g3,c4] [g3,bb3] [g3,b3] [g3,c4] [g3,bb3] [g3,b3]", // Gm G C5 Gm G C5 Gm G
  AT: "[g3,c4] [g3,bb3] [g3,b3] [g3,c4] [g3,bb3] [g3,b3] [g3,c4]@2", // C5 Gm G C5 Gm G C5
  AU: "[ab3,bb3] [ab3,c4] [ab3,d4] [ab3,bb3] [ab3,c4] [ab3,d4] [ab3,bb3] [ab3,c4]", // Absus2 Ab Abdim Absus2 Ab Abdim Absus2 Ab
  AV: "[ab3,d4] [ab3,bb3] [ab3,c4] [ab3,d4] [ab3,bb3] [ab3,c4] [ab3,d4]@2", // Abdim Absus2 Ab Abdim Absus2 Ab Abdim
  AW: "[g3,eb4] [g3,d4] [g3,c4] [g3,eb4] [g3,d4] [g3,c4] [g3,eb4] [g3,d4]", // Cm G5 C5 Cm G5 C5 Cm G5
  AX: "[g3,c4] [g3,eb4] [g3,d4] [g3,c4] [g3,eb4] [g3,d4] [g3,c4]@2", // C5 Cm G5 C5 Cm G5 C5
  AY: "[ab3,bb3]!2 [ab3,b3]!2 [ab3,c4]!2 [ab3,db4]!2", AZ: "[ab3,d4]!2 [ab3,db4]!2 [ab3,c4]!2 [ab3,b3]!2",
  BA: "[g3,bb3]!2 [g3,b3]!2 [g3,c4]!2 [g3,b3]!2", BB: "[g3,bb3] [g3,eb4] [g3,d4]!2",
  BC: "~@2 [e3,g3,d4]!2 ~ [e3,g3,db4] [e3,g3,db4]@2", BD: "[e3,g3,c4]!2 ~ [e3,g3,c4] ~ [e3,g3,c4] ~@2",
  BE: "[f3,ab3,c4]!2 ~ [f3,ab3,c4] [e3,g3,c4]!2 ~ [e3,g3,c4]", // Fm C
  BF: "[f3,ab3,c4]@4 [gb3,a3,c4]!2 ~ [gb3,a3,c4] [gb3,a3,c4]@2 [gb3,a3,c4]@2 [gb3,a3,c4]@2 [gb3,a3,c4]@2", // Fm Gbdim
  BG: "[eb3,g3,c4]@2 [eb3,g3,c4]!2 ~ [eb3,g3,c4]!3", BH: "[d3,ab3,c4]@2 [d3,ab3,c4]!2 ~ [d3,ab3,c4]!3",
  BI: "[eb3,g3,c4]!8", BJ: "~@2 [eb4,g4,bb4]@2 ~ [eb4,g4,bb4] ~@2",
  BK: "[eb4,g4,bb4]@2 ~ [eb4,g4,bb4] ~@2 [eb4,g4,bb4]@2", BL: "[eb3,g3,bb3]!3 ~",
})).s("gm_banjo").gain(0.1).pan(0.6)

// bass · acoustic bass
const bass = note(`<
  A B A C A B A C D E D@2 F G H I J K J@2 F G L M D N D O F G P Q R S R@2 F G T U R V R@2 F G H Q R V R@2 F W X Y Z@2 AA
  AB AC AD AE AF AG AH AI ~ AD AJ AE AF AK AL AM AN AO AP AQ AR AG@2 AS@2 AG@2 AI ~ AD@2 AT AU AV AW AX M AY AD AZ BA
  ~@20 BB AB BC AI BB AB AI ~ BB AB BC AI BD BE BF BG BC BH BI ~ AD@2 AE AF AG AJ AI BJ AD AJ AE AF BK AL BL BM AF AP BN
  AF AG@2 AS BO AD AG AI ~ AD@2 AT AU BK@2 BP BM AF AG BC BQ AD AG AT AF AG@2 AI ~ AD AG AE AF BR BS BP BM AS AG BT@2 BU
  BV
>`.pickRestart({
  A: "bb2 ~ f2 ~", B: "c2 ~ f2 g2", C: "c2 f2 bb2 ~", D: "g2 ~ d2 ~", E: "a2 ~ f2 ~", F: "c2 d2@2 eb2",
  G: "f2 g2 a2 f2", H: "bb2 ~ db2 ~", I: "c2 ~ gb2 ~", J: "g2", K: "d2", L: "bb2 db2@2 bb2", M: "a2 ~ gb2 ~",
  N: "a2 ~ d2 ~", O: "g2 f2 eb2 d2", P: "bb2 ~@2 db2", Q: "c2 gb2 g2 a2", R: "g2 ~@3", S: "d2 ~@2 d2", T: "bb2 ~@2 g2",
  U: "f2 ~@3", V: "d2 ~@3", W: "f2 ~ a2 ~", X: "bb2 g2 gb2 f2", Y: "bb2 f2 bb1 ~", Z: "~ bb1!2 ~", AA: "~ bb1 bb1@2",
  AB: "bb1 ~@3", AC: "f2 ~ d2 ~", AD: "f2 ~ bb1 ~", AE: "eb2 g2 bb2 g2", AF: "eb2 bb2 g2 eb2", AG: "d2 ~ bb1 ~",
  AH: "c3 ab2 g2 f2", AI: "eb2 ~@3", AJ: "bb2 ab2 g2 f2", AK: "c2 ~ c2 g2", AL: "c3 g2 e2 c2", AM: "f2!2 ab2 c3",
  AN: "eb3!2 d3 a2", AO: "bb2 g2 eb2 g2", AP: "f2 bb2 c3 d3", AQ: "eb3 ~ bb2 g2", AR: "e2 bb2 g2 e2", AS: "eb2 ~ bb1 ~",
  AT: "eb2 ~ bb2 ~", AU: "g2 ~ eb2 ~", AV: "c2 ~ g2 ~", AW: "e2 ~ c2 ~", AX: "f2 ~ c2 ~", AY: "eb2 ~ g2 ~",
  AZ: "eb2 ~ bb2@2 ~ bb2 ~@2", BA: "bb2@2 ~ bb2 ~@4", BB: "~@2 bb1@2 ~ bb1 ~@2", BC: "~@2 eb2@2 ~ eb2 ~@2",
  BD: "~@2 c2@2 ~ c2 ~@2", BE: "c2 ~@3", BF: "~@2 f2@2 ~ f2 ~@2", BG: "a2 ~@3", BH: "bb1@2 ~ bb1 ~@2 bb1@2",
  BI: "eb2 bb1 ~@2", BJ: "~@3 e2", BK: "c2 g2 e2 c2", BL: "f2 c3 ab2 f2", BM: "a2!2 ab2 gb2", BN: "eb3!2 bb2 g2",
  BO: "eb2 ~ e2 ~", BP: "f2 ~ f2 ~", BQ: "eb2@2 ~ eb2 ~@2 eb2@2", BR: "c2 g2 e2 ~", BS: "c2 c3 g2 e2",
  BT: "eb2 ~ bb1 bb2", BU: "bb2 ab2 g2 ab2", BV: "bb2!2 eb2 ~",
})).s("gm_acoustic_bass").gain(0.32).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A@14 B A B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@4 C@2 A B A@6 B ~ A@18 B ~ A@10 B ~@21 D B D B D B@2 ~ D B D B D B D B
  D E F ~ A@6 B ~ A@18 B ~ A@10 G E A@6 B ~ A@14
>`.pickRestart({
  A: "x!2", B: "x", C: "~ x!2 ~", D: "~@2 x ~@2 x ~@2", E: "x ~@2 x ~@2 x ~", F: "x!2 ~@2", G: "x ~ x ~@2 x ~@2",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct(`<
  A B A B A B A B C@6 D C D@4 C@4 D@4 C@4 D@4 C@4 D@4 C@4 D@4 C@4 E@2 F D F@6 ~@2 C@12 F@6 ~@2 C@10 ~@42 C@6 D ~ C@10
  ~@2 C@6 D ~ C@10 D ~ C@6 D ~ C@13 G
>`.pickRestart({
  A: "~ x!3", B: "x!3 ~", C: "~ x ~ x", D: "x", E: "~ x!2 ~", F: "x!2", G: "~ x ~@2",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct(`<
  ~@66 A ~@19 A ~@11 B C ~@18 D C D A D A D A@2 ~ D A D A D A D A D C A ~@19 D C ~@6 E F ~@10 D C ~@21 G
>`.pickRestart({
  A: "x", B: "x ~ x ~@2 x ~@2", C: "x ~@2 x ~@2 x ~", D: "~@2 x ~@2 x ~@2", E: "~@2 x!2", F: "~ x ~@2 x ~ x ~",
  G: "~ x",
})).gain(0.3)

stack(trumpet, trombone, piano, banjo, bass, kick, snare, crash)