Strudelify

On the Sunny Side of the Street

Dorsey

KeyB♭ majorTempo116 bpm
0:00/0:00
// On the Sunny Side of the Street — Dorsey
// 116 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 83 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 · "Bas"
const bass = note(`<
  A B C D E F G H I J K L M N G O P Q R S T U V W X Y Z AA AB AC W AD P AE AF AG AH AI AJ AK P AL AF AM AN AO@2 AP AQ@2
  AR AS AT AU AV AW AX AY AZ BA BB BC@2 BD BE BF BG BH BI@2 BJ@2 BK BL@2 BM BN@2 BO BP BQ BR@2
>`.pickRestart({
  A: "bb1@4 ~@2 eb2@3 ~ eb1 ~ bb1@3 ~ bb0 ~ eb2@3 ~ eb1 ~", B: "bb1@4 ~@2 eb2@3 ~ eb1 ~ bb1@4 ~@2 eb2@3 ~ eb1 ~",
  C: "bb1@3 ~ bb0 ~ eb2@3 ~ eb1 ~ bb1@4 ~@2 eb2@3 ~ eb1 ~",
  D: "bb1@3 ~ bb0 ~ eb2@3 ~ eb1 ~ bb1@3 ~ bb0 ~ eb2@3 ~ eb1 ~", E: "bb1@3 ~ bb0 ~ eb2@4 ~@2 bb1@8 eb2@2 db2 ~",
  F: "d2@3 ~ d1 ~ d2@3 ~ d1 ~ d2@12", G: "eb2@12 bb2@10 eb2 ~", H: "f2 gb2", I: "g2@6 a2@5 ~ bb2@6 d3@4 g2@2",
  J: "c2@3 ~ c1 ~ bb1@5 ~ a1@6 g1@4 c2@2", K: "c3 g2 c2 gb2@2 e2 f2@2 f1 f2@3", L: "bb1@5 ~ bb1@5 ~ f2@5 ~ f2@5 ~",
  M: "bb1@12 f2@10 bb1 ~", N: "d2@12 a2@9 ~ e2@2", O: "f2@8 g2@2 f2 ~ gb2@8 ab2@2 gb2 ~",
  P: "g2@3 ~ g1 ~ a2@5 ~ bb2@6 d3@4 g2@2", Q: "c3@2 g2@2 c2@2 c2@4 bb1@2 b1@5 ~ c2@4 c1 ~",
  R: "c2@4 c1@2 gb2@6 f2@5 ~ f2@3 ~@3, ~@17 f1@2 ~@5", S: "bb1@5 ~ d2@4 d1 ~ g2@5 ~ f2@4 f1 ~",
  T: "bb1@4 bb0@2 b1@6 bb1@4 f2@6 f1 ~", U: "bb1@3 f2@3 bb2@3 f2@2 e2", V: "eb2@5 ~ f2@5 ~ gb2@5 ~ g2@4 e2 ~",
  W: "eb2@3 ~ eb1 ~ d2@5 ~ c2@6 bb1@4 eb2@2", X: "c2@6 db2@6 c2@4 c1 ~ db2@5 ~", Y: "c2@3 g2@3 c3@3 g2@2 gb2",
  Z: "f2@4 f1 ~ bb1@4 bb0 ~ f2@5 ~ bb1@5 ~", AA: "f2@5 ~ bb1@4 bb0 ~ f2@5 ~ f2@4 f1 ~",
  AB: "bb1@3 ~ bb0 ~ bb1@5 ~ g1@6 f1@4 bb1@2", AC: "d2@6 e2@5 ~ f2@5 ~ gb2@4 d2@2", AD: "f2@3 g2@3 gb2@2 gb1 ab2@3",
  AE: "c2@5 ~ db2@4 db1 ~ c3@2 g2@2 c2@2 db2@4 b1@2", AF: "c2@3 ~ c1 ~ d2@5 ~ eb2@6 g2@4 c2@2",
  AG: "bb1@4 bb0 ~ g2@4 g1 ~ c2@4 c1 ~ f2@5 ~", AH: "bb1@5 ~ a1@5 ~ g1@6 f1@4 bb1@2",
  AI: "d2@4 d1 ~ c2@5 ~ b1@6 ~@4 e2@2, ~@3 a1", AJ: "eb2@4 eb1 ~ d2@5 ~ c2@6 ~@4 gb2@2, ~@3 bb1",
  AK: "f2@5 ~ f2@6 gb2@4 gb1@2 ab2@6", AL: "c2@6 d2@5 ~ eb2@5 ~ e2@4 c2@2", AM: "bb1@5 ~ g2@5 ~ c2@5 ~ f2@5 ~",
  AN: "bb1@4 bb0 ~ bb1@5 ~ bb1@5 ~@5 eb2@2, ~@3 bb1",
  AO: "[d2@4 d1 ~ eb2@4 eb1 ~ d2@5 ~ d2@4 eb2@7 ~ f2@5 ~ gb2@5 ~ g2@4 eb2@2]/2", AP: "f2@5 ~ f2@5 ~ gb2@4 gb1@2 ab2@6",
  AQ: "[g2@3 ~ g1 ~ a2@5 ~ bb2@6 d3@4 c2@7 ~ d2@5 ~ eb2@5 ~ e2@4 c2@2]/2", AR: "f2@3 gb2@3 f2@2 f1 b1@3",
  AS: "bb1@6 c2@5 ~ db2@5 ~ d2@4 bb1@2", AT: "bb1@4 bb1@2 bb2@6 bb2@4 bb1@6 bb1 ~",
  AU: "bb2@4 bb1 ~ bb1@4 bb1 ~ bb1@4 bb1@2 bb2@6", AV: "eb2@4 eb2@2 eb3@6 eb3@4 eb2@6 eb2 ~",
  AW: "eb3@4 eb2 ~ eb2@4 eb2 ~ eb2@4 eb2@2 eb3@6", AX: "c3@5 ~ c2@5 ~ e2@4 g2@6 g1 ~",
  AY: "c3@4 c2 ~ db3@5 ~ c3@5 ~ c2@3 ~@3, ~@17 c1@2 ~@5", AZ: "f2@4 f1 ~ bb1@4 bb0 ~ f2@5 ~ f2@3 ~@3, ~@17 f1@2 ~@5",
  BA: "ab2@4 ab1 ~ ab2@5 ~ ab2@5 ~ ab2@5 ~", BB: "db2@5 ~ gb2@4 gb1 ~ db2@4 db1@2 db2@6",
  BC: "[f2@5 ~ eb2@5 ~ d2@6 c2@4 gb2@7 ~ ab2@5 ~ a2@5 ~ bb2@4 gb2@2]/2", BD: "ab2@5 ~ ab2@4 a1@8 c2@4 a1@2",
  BE: "bb1@3 ~ bb0 ~ c2@5 ~ db2@6 f2@4 bb1@2", BF: "eb2@4 eb1 ~ e2@5 ~ eb2@6 g2@4 eb2@2",
  BG: "eb2@6 f2@5 ~ gb2@6 bb2@4 eb2@2", BH: "ab2@3 gb2@2 ab2 gb2@2 gb1 gb2@3",
  BI: "[f2@3 ~ f1 ~ g2@5 ~ ab2@6 c3@4 bb1@7 ~ c2@5 ~ db2@5 ~ d2@4 bb1@2]/2",
  BJ: "[eb3@2 bb2@2 eb2@2 bb2@2 ~@4 a2@3 ~ a2@2 ~@4 ab2@26]/2", BK: "db2@4 db1@2 c2@4 b1@6 ~@2 b1@3 ~@3, ~@17 b0@2 ~@5",
  BL: "[bb1@5 ~@5 g2@2 a1@4 a0@2 a2@4 ab2@7 ~ bb2@5 ~ b2@5 ~ c3@4 a2 ~, ~ bb1 ~@6]/2",
  BM: "ab2@5 ~ bb2@5 ~ b2@5 ~ c3@4 d2 ~",
  BN: "[db2@5 ~@5 ab2@2 g2@4 g1@2 g2@4 gb2@6 ~@2 gb2@3 ~@3 b1@4 b0@2 b1@6, ~@6 db2@6 ~@17 gb1@2 ~@17]/2",
  BO: "bb1@5 ~ bb1@4 a1@7 ~ a1@6", BP: "ab2@3 ~ ab1 ~ gb2@5 ~ f2@6 eb2@4 ab2@2",
  BQ: "db2@4 db1 ~ gb2@4 gb1 ~ db2@5 ~ db2@5 ~", BR: "[e2@2 gb2 ~@2 db2@19]/2",
})).s("gm_acoustic_bass").gain(0.26)

// chords · piano
const piano = note(`<
  A B@2 C D E F G H I J@2 K L M N O P Q R S@3 T@2 U V W X Y Z@2 AA AB@3 AC@2 AD AE AF@2 AG@2 AH@2 AI@2 AJ AK@5 AL@4 AM@2
  AN AO AP AQ@2 AR AS AT@2 AU AV@2 AW AX AY@2 ~ AZ@3 ~ BA@2
>`.pickRestart({
  A: "[d4,f4,bb4]@2 ~ [g3,eb4,bb4]@2 ~ [bb3,d4,f4]@2 ~ [g3,eb4,bb4]@2 ~", // Bb Eb Bb Eb
  B: "[bb3,d4,f4]@2 ~ [g3,eb4,bb4]@2 ~ [d4,f4,bb4]@2 ~ [g3,eb4,bb4]@2 ~", // Bb Eb Bb Eb
  C: "[d4,f4,bb4]@2 ~ [g3,bb3,eb4]@2 ~ [d4,f4,bb4]@2 ~ [g3,bb3,eb4]@2 ~", // Bb Eb Bb Eb
  D: "[bb3,d4,f4]@4 ~@2 [g3,eb4,bb4]@4 ~@2 [d4,f4,bb4]@3 ~ [d4,f4,bb4]@7 ~", // Bb Eb Bb
  E: "[gb3,b3,c4,e4]@2 ~ [c4,e4,a4]@2 ~ [gb3,a3,c4,d4]@2 d3 [gb3,a3,c4,d4] ~@2", // Esus2 Am D7
  F: "[g3,bb3,eb4]@11 ~ [g3,bb3,eb4]@3 ~ eb3@2 [g3,bb3,eb4]@4 ~@2", G: "[eb3,a3,d4,g4]@11 ~@5 [eb3,a3,c4,gb4]@6 ~@2",
  H: "~@10 g2@2 [f3,g3,bb3,d4]@4 g2@2 [f3,g3,bb3,d4]@3 ~@3", // Gm7
  I: "[e3,bb3,d4,a4]@10 ~@2 [e3,bb3,d4,a4]@3 ~ c3@2 [e3,bb3,d4,a4]@2 ~@4", // Dsus2
  J: "[[eb3,g3,bb3,c4]@10 [eb3,g3,a3,b3,d4]@11 ~ [bb3,d4,f4]@11 ~ [bb3,eb4,g4,c5]@4 ~@10]/2", // Cm7 G Bb Cm7
  K: "~@4 [d4,f4,bb4]@5 ~ bb2@2 [d4,f4,bb4]@4 ~@8", // Bb
  L: "[gb3,c4,e4,b4]@11 ~ [gb3,c4,e4,b4]@3 ~ d3 ~ [gb3,c4,e4,b4]@4 ~@2", // Esus2
  M: "[g3,eb4,bb4]@11 ~ [g3,eb4,bb4]@3 ~ eb3 ~ [g3,eb4,bb4]@4 ~@2", // Eb
  N: "[a3,eb4,g4,d5]@3 ~@3 [a3,eb4,g4,d5]@6 [a3,eb4,gb4,c5]@4 gb2@2 [a3,eb4,gb4,c5]@2 ~@4", // Dsus4 Adim
  O: "[bb3,f4,a4,d5]@10 ~@2 [bb3,f4,a4,d5]@3 ~ g2@2 [bb3,f4,a4,d5]@2 ~@4", // Bbmaj7
  P: "[bb3,e4,a4,d5]@5 ~ [a3,eb4,ab4,db5]@2 [bb3,e4,g4,d5]@4", Q: "[bb3,c4,eb4,g4]@10 [a3,db4,eb4,gb4]@11 ~@3",
  R: "[d4,f4,bb4] ~@5", // Bb
  S: "[~@4 [ab3,c4,d4,f4]@5 ~ [ab3,d4,g4,c5]@8 [ab3,eb4,f4,c5]@4 [ab3,c4,d4,f4]@12 [ab5,c6]@2 [ab3,c4,d4,f4,g5,bb5]@4 [bb2,g4]@2 [ab3,c4,d4,f4]@2 ~@2 [d5,gb5]@2 [eb5,g5]@3 ~@21, ~@42 [f5,ab5]@4 [g3,d4,f4,bb4]@21 ~@5]/3", // Dm7b5 Abmaj7 Fm7 Dm7b5 Ab Gm7 Eb Dm7b5 …
  T: "[~@4 bb5@2 [c5,g5,eb6]@4 [c5,g5,eb6]@2 [g3,c4,eb4,bb4]@3 ~ eb3@2 [g3,c4,eb4,bb4]@2 ~@2 [bb3,e4,a4,d5]@12 ~@2 [bb3,d4,e4,a4]@6 [b3,f4,ab4,eb5]@6, [g3,c4,eb4,bb4]@5 ~@3 [c5,g5,eb6]@4 ~@12]/2", // Cm Cm7 Bbmaj7 Fm7b5 Cm7 Cm
  U: "~@6 [bb3,d4,eb4,a4,c6,c7]@4 [bb3,d4,eb4,a4,c6,c7]@2 [bb3,d4,eb4,a4,c6,c7]@3 ~ [bb3,d4,eb4,a4,c6,c7]@2 ~@6", // Adim
  V: "[c3,a3] [d3,bb3] [eb3,c4] [f3,d4], f2", W: "[c4,eb4] [bb3,d4] [a3,c4] [f2,eb3,g3,bb3], f2@17 ~@7",
  X: "[d4,c5,f5]@17 ~@7", Y: "[c4,gb4,ab4,b4,e5]@17 ~@7",
  Z: "[~@10 eb3@2 [c4,g4,bb4,eb5]@4 eb3@2 [c4,g4,bb4,eb5]@3 ~ [a3,eb4,g4,d5]@12 ~@2 [a3,eb4,gb4,c5]@10 ~@2]/2", // Cm7 Dsus4 Adim
  AA: "[bb3,f4,g4,d5]@5 ~", // Gm7
  AB: "[[bb3,e4,g4,d5]@4 [b3,f4,ab4,eb5]@8 ~@4 [bb3,e4,a4,d5]@5 ~ [bb3,eb4,g4,c5]@11 ~ [bb3,eb4,g4,c5]@2 ~@10 [bb3,d4,f4]@8 [f3,b3,eb4,ab4]@6 [e3,bb3,db4,g4]@6 [eb3,a3,c4,gb4]@6]/3", // Em7b5 Fm7b5 Bbmaj7 Cm7 Bb Fm7b5 Edim Ebdim
  AC: "[[g3,c4,d4,f4]@17 ~ g4@3 ~ ab4@2 a4@13 ~@3 d5@2 a4@4 gb4@2, ~@17 bb4@2 ~@3 [gb3,a3,c4,e4]@21 ~@5]/2", // Gsus4 Gbm7b5
  AD: "[g3,d4,f4,bb4]@5 ~, g4@23 ~", AE: "[a3,eb4,g4,d5]@5 ~ [a3,eb4,gb4,c5]@5 ~",
  AF: "[[bb3,g4,d5]@20 ~@2 [bb3,e4,a4,d5]@12 ~@2 [bb3,e4,a4,d5]@3 ~ c3@2 [bb3,e4,a4,d5]@2 ~@4]/2", // Gm Bbmaj7
  AG: "[[bb3,eb4,g4,d5]@9 ~ [bb3,eb4,g4,d5]@2 ~@10 [d4,bb4,f5]@5 ~ [b3,f4,ab4,eb5]@8 [bb3,db4,e4,ab4]@6 [a3,eb4,gb4,db5]@6]/2", // Ebmaj7 Bb Fm7b5 Bbm7b5 Ebm7b5
  AH: "[[a3,d4,f4,c5]@6 [gb3,c4,eb4,a4]@6 [g3,d4,f4,bb4]@3 ~ bb4@2 g4@3 ~ ab4@2 a4@2 ~@2 [db4,g4,c5,f5]@5 ~ [c4,e4,gb4,ab4,b4]@4 ~@2 e5@2 d5@4 a4@2, ~@22 [c4,e4,gb4,b4]@5 ~@21]/2", // Dm7 Gbdim Gm7 Dbmaj7 E Cmaj7
  AI: "[~@10 eb3@2 [g4,eb5]@4 eb3@2 [g4,eb5]@3 ~ [a3,eb4,g4,d5]@4 ~@10 [a3,eb4,gb4,c5]@3 ~@9, ~ bb4@11 bb4@6 bb4@4 ~@26]/2", // Cm Dsus4 Adim
  AJ: "~@10 g2@2 [bb3,f4,a4,d5]@4 g2@2 [bb3,f4,a4,d5]@3 ~@3", // Bbmaj7
  AK: "[~@10 c3@2 [bb3,d4,e4,a4]@4 c3@2 [bb3,d4,e4,a4]@3 ~ [bb3,eb4,g4,d5]@11 ~ [a3,b3,eb4,g4,d5]@11 ~ [d4,f4,bb4]@11 ~ [g3,c4,f4,bb4,bb5]@12 [ab3,bb3,d4,f4]@49 ~]/5", // Bbmaj7 Ebmaj7 G Bb Gm7 Bb7
  AL: "[[g3,c4,f4,bb4]@46 [bb3,e4,a4,d5]@49 ~]/4", AM: "[[a3,eb4,g4,c5]@21 ~ [gb3,db4,f4,bb4]@25 ~]/2",
  AN: "[f3,ab3,bb3,db4]@4 [bb3,db4,gb4]@8 [f3,ab3,db4]@6 db4@2 f4@2 ab4 ~", // Bbm7 Gb Db
  AO: "~@10 f3@2 [eb3,a3,c4,f4]@4 f3@2 [eb3,a3,c4,f4]@3 ~@3", AP: "[gb3,bb3,db4]@5 ~",
  AQ: "[[gb3,c4,eb4,bb4]@6 c4@2 ~@2 [gb3,c4,eb4,a4]@11 ~ [ab3,bb3,db4,f4]@18 ~@8]/2", // Cm7b5 Gbdim Bbm7
  AR: "[g3,db4,f4,c5]@3 [ab3,d4,gb4,db5]@2 [g3,db4,f4,c5]@2 ~@5", AS: "[gb3,db4,f4,bb4]@17 ~@7",
  AT: "[[gb3,db4,eb4,bb4]@6 db4@2 gb4@2 bb4 ~ [ab3,c4,eb4]@10 [ab3,c4,eb4,g4]@12 ~@2 [ab3,c4,eb4,g4]@3 ~ f3@2 [ab3,c4,eb4,g4]@2 ~@4]/2", // Ebm7 Ab Abmaj7
  AU: "~@10 bb2@2 [ab3,d4,gb4,b4]@4 bb2@2 [ab3,d4,gb4,b4]@3 ~@3", // Abm7b5
  AV: "[[gb3,db4,f4,bb4]@3 ~@3 [eb2,eb3,bb3,db4]@2 ~@4 [a2,g3,b3,db4]@3 ~ [a2,g3,b3,db4]@2 ~@4 [ab2,gb3,bb3,db4]@26]/2", // Gbmaj7 Eb7 A7 Gb
  AW: "[f3,ab3,db4]@3 ~@7 [a3,db4,eb4,ab4]@11 ~@3", AX: "[ab3,db4,f4,c5]@3 ~@9 [a3,db4,gb4]@10 ~@2",
  AY: "[~@6 [eb4,eb5]@2 ~@3 f5 [gb4,gb5]@3 ~@3 [bb4,bb5]@4 [db5,db6]@25 ~]/2", // Eb Gb Bb Db
  AZ: "[~@11 e6 [f5,f6]@4 [gb5,gb6]@2 [f5,f6]@4 [db5,db6]@49 ~]/3", // F Gb F Db
  BA: "[[e2,b2,e3,ab3]@2 [gb2,db3,gb3,bb3] ~@2 [db2,ab2,f3,ab3]@19]/2", // E Gb Db
})).s("gm_piano").gain(0.19).pan(0.4)

// other · alto sax
const alto_sax = note(`<
  A B A B A C D ~@13 E F G F H ~@10 I J K L M N ~@2 O P Q ~ R N ~@3 S ~ T ~ U ~ V W ~@5 X Y@2 Z@2 ~@3 AA@3 ~@7
>`.pickRestart({
  A: "~@2 bb3 c4 ~ c4 d4 ~@5", B: "~@2 bb3 c4 ~ c4 d4@3 c4 ~@2", C: "~@2 d4 e4 ~ e4 gb4 ~@5",
  D: "~@2 gb4 g4@2 d4 eb4 ~@5", E: "g4 ~@5", F: "~@11 db4", G: "d4@2 bb3@7 d4@2 c4", H: "d4 ~@5",
  I: "~@6 b3@2 ~@2 b3@2 bb3@2 ~@2 bb3@2 a3@3 ~@3", J: "~@3 c4@2 b3 c4@2 d4 ~@3", K: "~@2 c4 b3 c4 db4 c4@2 ~@4",
  L: "~@2 g3 bb3 ~ d4 bb3@2 g3 bb3 ~ d4", M: "eb4@3 ~@3 eb4@3 ~@3 a3@3 ~@3 a3@4 gb3@2", N: "a3@2 g3 ~@9",
  O: "~@3 d4@2 d4 db4@2 db4 c4@2 c4", P: "c4@2 c4 a3@2 a3 g3 ~@5", Q: "c4@2 c4 db4@2 db4 c4@2 ~@4",
  R: "a3@4 ~@2 a3@3 ~@3 ab3@2 a3@2 d4@2 ab3@2 a3@2 d4@2", S: "~@2 d4 ~@5 bb3 ~@3", T: "~@2 f4 ~@5 b3 ~@3",
  U: "~@2 g4 ~@5 bb3 ~@3", V: "~@2 a3 bb3@2 bb3 c4@2 c4 a3 ~@2", W: "bb3@2 bb3 c4@2 c4 db4@2 a3@4",
  X: "~@2 g3 ab3@2 ab3 g3@2 g3 db4 ~@2", Y: "[gb3@6 ~@5 bb3@7 ab3@6]/2", Z: "[f3@6 ~@5 d4@13]/2",
  AA: "[~@6 gb3 ~@2 gb3@2 gb3@25]/3",
})).s("gm_alto_sax").gain(0.25).pan(0.7)

// other · tenor sax
const tenor_sax = note(`<
  A B A B A C D E F ~@2 G H I J K F L M N O P Q R S ~@2 T U V D W X Y Z AA AB AC AD AE AF AG ~ AH AI AJ AK AL AF ~@3 AM
  AN AO AP AQ AR AS AT AU AV AW AX X AY AZ@2 BA@2 ~ BB@2 BC@3 BD@2 BE@2 BF BG@2
>`.pickRestart({
  A: "~@2 f3 g3 ~ g3 a3 ~@5", B: "~@2 f3 g3 ~ g3 a3@3 g3 ~@2", C: "~@2 a3 b3 ~ b3 c4 ~@5", D: "~@2 a3 bb3@2 gb3 g3 ~@5",
  E: "~@4 f3@2 d4@4 f3@2 c4@3 ~@3 c4@4 a3@2", F: "bb3@2 d3 ~@9", G: "~@4 f3@2 g3@4 f3@2 g3@5 ~ g3@2 ~@4", H: "f3",
  I: "gb3", J: "g3", K: "a3", L: "~@6 gb3 ~@2 g3 ~@2", M: "bb3@4 b3 bb3 g3@4 bb3@2 c4@4 d4@8", N: "bb3@11 f3",
  O: "d4@2 c4@7 eb4@2 d4", P: "~@11 gb3", Q: "g3@2 g3@7 g3@2 g3", R: "~@11 a3", S: "bb3@2 d3@7 f3@2 e3",
  T: "~@8 g3 eb3@2 c3", U: "d3 ~@2 f3@2 g3 f3 ~@5", V: "~@2 d3 a3@2 bb3 a3@2 d3 ~@3",
  W: "~@4 f3@2 c4@2 ~@2 f3@2 eb4@3 ~@3 d4@4 a3@2", X: "c4@2 bb3 ~@9", Y: "~@2 d4 eb4@2 eb4 d4@2 d4 g3@2 g3",
  Z: "g3@2 g3 ~@9", AA: "~@6 ab3@2 ~@2 ab3@2 g3@2 ~@2 g3@2 gb3@3 ~@3", AB: "~@3 bb3@2 a3 bb3@2 c4 ~@3",
  AC: "~@2 gb3 f3 gb3 g3 gb3@2 a3 ~@3", AD: "~@2 eb3 g3 ~ bb3 g3@2 eb3 g3 ~ bb3",
  AE: "d4@3 ~@3 d4@3 ~@3 gb3@3 ~@3 gb3@4 eb3@2", AF: "f3@2 f3 ~@9",
  AG: "~@4 d4@4 db4 [b3,c4] [a3,bb3] [g3,ab3] gb3@4 g3@2 ~@6", AH: "~@3 b3@2 b3 bb3@2 bb3 a3@2 a3",
  AI: "a3@2 a3 gb3@2 gb3 f3 ~@5", AJ: "gb3@2 gb3 g3@2 g3 gb3@2 d3 ~@3", AK: "~@2 bb3 gb3 g3 bb3 gb3 g3 bb3 gb3 g3 bb3",
  AL: "g3@4 ~@2 g3@3 ~@3 f3@2 gb3@2 a3@2 f3@2 gb3@2 a3@2", AM: "~@2 ab3 ~@5 gb3 ~@2 bb3",
  AN: "d4@2 bb3 eb4@2 e4 f4@2 bb3 ~@3", AO: "~@2 c4 ~@5 gb3 ~@2 eb3", AP: "g3@2 eb3 ab3@2 a3 bb3@2 eb3 ~@3",
  AQ: "~@2 d4 ~@5 e3 ~@2 c3", AR: "e3@2 c3 f3@2 gb3 g3@2 c4 ~@3", AS: "~@2 eb3 f3@2 f3 g3@2 g3 eb3 ~@2",
  AT: "gb3@2 gb3 gb3@2 gb3 gb3@2 gb3@4", AU: "~@2 f3 gb3 ~ gb3 f3@2 db3 ~@3", AV: "~@2 f3 g3 ~ g3 a3@2 f3 ~@3",
  AW: "~@2 a3 bb3@2 f3 gb3 ~@5", AX: "~@4 ab3@2 c4@2 ~@2 ab3@2 eb4@3 ~@3 c4@4 ~@2",
  AY: "~@2 db3 d3@2 d3 db3@2 db3 g3 ~@2", AZ: "[db3@6 ~@2 gb3 bb3@2 gb3@7 eb3@6]/2",
  BA: "[eb3@6 ~@2 c4 eb4@2 ab3@13]/2", BB: "[~@6 bb4@2 ab4 e4@2 db4@13]/2", BC: "[db4@11 ~ eb3@2 ~@4 eb3@4 eb3@50]/3",
  BD: "[~ f3@8 eb3@3]/2", BE: "db3/2", BF: "~@2 f3 gb3 ~ gb3 f3@3 gb3@2 f3", BG: "[ab3@2 gb3 ~@2 f3@19]/2",
})).s("gm_tenor_sax").gain(0.25)

// other · tenor sax
const tenor_sax_2 = note(`<
  A B A B A C D E F ~@2 G ~@8 H I J K L ~@3 M N D O P Q R S T U V W X ~@2 Y Z AA ~ AB X ~@3 AC ~ AD ~ AE ~ AF AG ~@5 AH
  AI@2 AJ@2 ~@3 AK@3 ~@7
>`.pickRestart({
  A: "~@2 d3 eb3 ~ eb3 f3 ~@5", B: "~@2 d3 eb3 ~ eb3 f3@3 eb3 ~@2", C: "~@2 gb3 g3 ~ g3 a3 ~@5",
  D: "~@2 gb3 g3@2 d3 eb3 ~@5", E: "~@12 a3@3 ~@3 a3@4 gb3@2", F: "g3 ~@5", G: "~@6 eb3@4 ~@2 eb3@5 ~ eb3@2 ~@4",
  H: "a3 ~@5", I: "~@11 a3", J: "bb3@2 f3@7 f3@2 eb3", K: "~@11 eb3", L: "e3 ~@5", M: "~@3 d3@2 eb3 d3 ~@5",
  N: "~@3 gb3@2 g3 gb3@2 ~@4", O: "~@6 a3@2 ~@4 c4@3 ~@3 c4@3 ~@3", P: "a3@2 g3 ~@9",
  Q: "~@2 bb3 b3@2 b3 bb3@2 bb3 ~@3", R: "eb3@2 eb3 ~@9", S: "~@6 f3@2 ~@2 f3@2 e3@2 ~@2 e3@2 eb3@3 ~@3",
  T: "~@3 g3@2 gb3 g3@2 bb3 ~@3", U: "~@2 a3 ab3 a3 bb3 a3@2 eb3 ~@3", V: "~@2 d3 eb3 ~ g3 eb3@2 d3 eb3 ~ g3",
  W: "a3@3 ~@3 a3@3 ~@3 eb3@3 ~@3 eb3@4 c3@2", X: "d3@2 d3 ~@9", Y: "~@3 ab3@2 ab3 g3@2 g3 gb3@2 gb3",
  Z: "f3@2 f3 eb3@2 eb3 d3 ~@5", AA: "a3@2 a3 bb3@2 bb3 a3@2 eb3 ~@3",
  AB: "eb3@4 ~@2 eb3@3 ~@3 d3@2 eb3@2 gb3@2 d3@2 eb3@2 gb3@2", AC: "~@2 c4 ~@5 eb3 ~@3", AD: "~@2 g3 ~@5 f3 ~@3",
  AE: "~@2 bb3 ~@5 g3 ~@3", AF: "~@2 c3 d3@2 d3 eb3@2 eb3 c3 ~@2", AG: "db3@2 db3 eb3@2 eb3 f3@2 e3@4",
  AH: "~@2 f3 gb3@2 gb3 f3@2 f3 bb3 ~@2", AI: "[eb3@6 ~@5 eb3@7 ab3@6]/2", AJ: "[c3@6 ~@5 b3@13]/2",
  AK: "[~@6 gb3 ~@2 gb3@2 ab3@25]/3",
})).s("gm_tenor_sax").gain(0.25).pan(0.4)

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

// other · trumpet · "Trumpet 1"
const trumpet = note(`<
  ~@3 A B C D E F@2 G@2 H I D J K L ~ M N O P O Q R S T B I D U V@2 W ~ X Y Z AA AB ~@3 AC AD AE AF AB ~@2 AG@2 AH@2
  AI@2 AJ AK AL@2 AM AN AO AP@2 AQ AR@2 AS AT@2 AU AV@6 AW@4
>`.pickRestart({
  A: "~@8 d4 ~@2 c4", B: "bb3@3 ~@7 c4@2 d4@3 ~@3 f4@4 d5@2", C: "~@8 d5 ~@2 db5", D: "c5 ~@2 c5 ~@2 c5@2 bb4 g4@2 eb4",
  E: "d4@11 [d4,eb4] c4@12", F: "[~@4 bb3@2 c4@4 bb3@2 d4@3 ~@3 bb4@4 a4@13 g4 gb4@2 ~@4 g4@2 ~@4]/2",
  G: "[bb4@3 ~@3 g4@2 ~@4 eb4@4 d4@2 c4@4 f4@24 ~ b3]/2", H: "bb3@2 ~@8 c4@2 d4@3 ~@3 f4@4 d5@2", I: "~@8 ab4 a4@2 d5",
  J: "d4 c4", K: "~@4 bb3@2 c4@4 bb3@2 d4@3 ~@2 [ab4,a4] bb4@2 ~@4", L: "a4@9 ~@2 d4 db4@4 d4@2 ~@6",
  M: "~@2 bb4 bb4@2 bb4!2 ~@2 bb4@2 f4", N: "bb4@2 c4@7 eb4@2 d4", O: "~@11 a4", P: "bb4@2 d4@7 f4@2 eb4",
  Q: "bb4@2 d4@7 f4@2 e4", R: "~@9 g4 ~@2", S: "a4@4 c5@10 ~@3 [eb4,e4] d4@2 ~@4", T: "eb4@2 g4@4 ~@2 d4 ~@2 c4",
  U: "d4@2 c4 ~@9", V: "[~@6 bb3@4 c4@2 d4@4 f4@2 bb4@4 a4@13 [g4,ab4] gb4@2 ~@4 g4@2 ~@4]/2",
// … 222 more lines

More by Dorsey