Strudelify

On the Sunny Side of the Street

Louis Armstrong

KeyB♭ majorTempo116 bpm
0:00/0:00
// On the Sunny Side of the Street — Louis Armstrong
// 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 84 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
const bass = note(`<
  A B C D E@5 F G H I@5 J K@2 L@2 M N O P Q R S T U V W X Y Z AA AB AC AD W AE AF AG AH AI AJ AK W AL AM AN AO@2 AP@2
  AQ@4 AR AS AT AU AV AW AX AY AZ BA BB BC@3 BD BE BF BG BH BI BJ BK@3
>`.pickRestart({
  A: "~@6 bb1@4 ~@2 eb2@3 ~ eb1 ~ bb1@3 ~ bb0 ~", B: "eb2@3 ~ eb1 ~ bb1@4 ~@2 eb2@3 ~ eb1 ~ bb1@4 ~@2",
  C: "eb2@3 ~ eb1 ~ bb1@3 ~ bb0 ~ eb2@3 ~ eb1 ~ bb1@4 ~@2",
  D: "eb2@3 ~ eb1 ~ bb1@3 ~ bb0 ~ eb2@3 ~ eb1 ~ bb1@3 ~ bb0 ~",
  E: "[eb2@3 ~ eb1 ~ bb1@3 ~ bb0 ~ eb2@4 ~@2 bb1@8 eb2@2 db2 ~ d2@3 ~ d1 ~ d2@3 ~ d1 ~ d2@12 eb2@12 bb2@10 eb2 ~ f2@12 gb2@12 g2@6 a2@5 ~ bb2@6]/5",
  F: "d3@4 g2@2 c2@3 ~ c1 ~ bb1@5 ~ a1@6", G: "g1@2 c2 c3 g2 c2 gb2@2 e2 f2@2 f1", H: "f2@6 bb1@5 ~ bb1@5 ~ f2@5 ~",
  I: "[f2@5 ~ bb1@12 f2@10 bb1 ~ d2@12 a2@9 ~ e2@2 eb2@12 bb2@10 eb2 ~ f2@8 g2@2 f2 ~ gb2@8 ab2@2 gb2 ~ g2@3 ~ g1 ~ a2@5 ~ bb2@6]/5",
  J: "d3@4 g2@2 c3@2 g2@2 c2@2 c2@4 bb1@2 b1@5 ~",
  K: "[c2@4 c1 ~ c2@4 c1@2 gb2@6 f2@5 ~ f2@3 ~@3 bb1@5 ~ d2@4 d1 ~ g2@5 ~, ~@23 f1@2 ~@23]/2",
  L: "[f2@4 f1 ~ bb1@4 bb0@2 b1@6 bb1@4 f2@6 f1 ~ bb1@6 f2@6 bb2@6]/2", M: "f2@4 e2@2 eb2@5 ~ f2@5 ~ gb2@5 ~",
  N: "g2@4 e2 ~ eb2@3 ~ eb1 ~ d2@5 ~ c2@6", O: "bb1@4 eb2@2 c2@6 db2@6 c2@4 c1 ~", P: "db2@5 ~ c2@6 g2@6 c3@6",
  Q: "g2@4 gb2@2 f2@4 f1 ~ bb1@4 bb0 ~ f2@5 ~", R: "bb1@5 ~ f2@5 ~ bb1@4 bb0 ~ f2@5 ~",
  S: "f2@4 f1 ~ bb1@3 ~ bb0 ~ bb1@5 ~ g1@6", T: "f1@4 bb1@2 d2@6 e2@5 ~ f2@5 ~",
  U: "gb2@4 d2@2 eb2@3 ~ eb1 ~ d2@5 ~ c2@6", V: "bb1@2 eb2 f2@3 g2@3 gb2@2 gb1", W: "ab2@6 g2@3 ~ g1 ~ a2@5 ~ bb2@6",
  X: "d3@4 g2@2 c2@5 ~ db2@4 db1 ~ c3@2 g2@2 c2@2", Y: "db2@4 b1@2 c2@3 ~ c1 ~ d2@5 ~ eb2@6",
  Z: "g2@4 c2@2 bb1@4 bb0 ~ g2@4 g1 ~ c2@4 c1 ~", AA: "f2@5 ~ bb1@5 ~ a1@5 ~ g1@6",
  AB: "f1@4 bb1@2 d2@4 d1 ~ c2@5 ~ b1@6", AC: "~@4 e2@2 eb2@4 eb1 ~ d2@5 ~ c2@6, a1 ~@3",
  AD: "~@4 gb2@2 f2@5 ~ f2@6 gb2@4 gb1@2, bb1 ~@3", AE: "d3@4 g2@2 c2@6 d2@5 ~ eb2@5 ~",
  AF: "e2@4 c2@2 c2@3 ~ c1 ~ d2@5 ~ eb2@6", AG: "g2@4 c2@2 bb1@5 ~ g2@5 ~ c2@5 ~",
  AH: "f2@5 ~ bb1@4 bb0 ~ bb1@5 ~ bb1@5 ~", AI: "~@4 eb2@2 d2@4 d1 ~ eb2@4 eb1 ~ d2@5 ~, bb1 ~@3",
  AJ: "d2@4 eb2@7 ~ f2@5 ~ gb2@5 ~", AK: "g2@4 eb2@2 f2@5 ~ f2@5 ~ gb2@4 gb1@2", AL: "d3@4 c2@7 ~ d2@5 ~ eb2@5 ~",
  AM: "e2@2 c2 f2@3 gb2@3 f2@2 f1", AN: "b1@6 bb1@6 c2@5 ~ db2@5 ~",
  AO: "[d2@4 bb1@2 bb1@4 bb1@2 bb2@6 bb2@4 bb1@6 bb1 ~ bb2@4 bb1 ~ bb1@4 bb1 ~ bb1@4 bb1@2]/2",
  AP: "[bb2@6 eb2@4 eb2@2 eb3@6 eb3@4 eb2@6 eb2 ~ eb3@4 eb2 ~ eb2@4 eb2 ~ eb2@4 eb2@2]/2",
  AQ: "[eb3@6 c3@5 ~ c2@5 ~ e2@4 g2@6 g1 ~ c3@4 c2 ~ db3@5 ~ c3@5 ~ c2@3 ~@3 f2@4 f1 ~ bb1@4 bb0 ~ f2@5 ~ f2@3 ~@3 ab2@4 ab1 ~ ab2@5 ~ ab2@5 ~, ~@47 c1@2 ~@22 f1@2 ~@23]/4",
  AR: "ab2@5 ~ db2@5 ~ gb2@4 gb1 ~ db2@4 db1@2", AS: "db2@6 f2@5 ~ eb2@5 ~ d2@6", AT: "c2@4 gb2@7 ~ ab2@5 ~ a2@5 ~",
  AU: "bb2@4 gb2@2 ab2@5 ~ ab2@4 a1@8", AV: "c2@4 a1@2 bb1@3 ~ bb0 ~ c2@5 ~ db2@6",
  AW: "f2@4 bb1@2 eb2@4 eb1 ~ e2@5 ~ eb2@6", AX: "g2@4 eb2@2 eb2@6 f2@5 ~ gb2@6",
  AY: "bb2@2 eb2 ab2@3 gb2@2 ab2 gb2@2 gb1", AZ: "gb2@6 f2@3 ~ f1 ~ g2@5 ~ ab2@6", BA: "c3@4 bb1@7 ~ c2@5 ~ db2@5 ~",
  BB: "d2@4 bb1@2 eb3@2 bb2@2 eb2@2 bb2@2 ~@4 a2@3 ~ a2@2",
  BC: "[~@4 ab2@26 db2@4 db1@2 c2@4 b1@6 ~@2 b1@3 ~@3 bb1@5 ~@5 g2@2 a1@4 a0@2, ~@47 b0@2 ~@11 bb1@6 ~@6]/3",
  BD: "a2@4 ab2@7 ~ bb2@5 ~ b2@5 ~", BE: "c3@4 a2 ~ ab2@5 ~ bb2@5 ~ b2@5 ~",
  BF: "c3@4 d2 ~ db2@5 ~@5 ab2@2 g2@4 g1@2, ~@2 db2 ~", BG: "g2@4 gb2@6 ~@2 gb2@3 ~@3 b1@4 b0@2, ~@11 gb1@2 ~@11",
  BH: "b1@6 bb1@5 ~ bb1@4 a1@7 ~", BI: "a1@6 ab2@3 ~ ab1 ~ gb2@5 ~ f2@6",
  BJ: "eb2@4 ab2@2 db2@4 db1 ~ gb2@4 gb1 ~ db2@5 ~", BK: "[db2@5 ~ e2@4 gb2@2 ~@4 db2@38 ~@18]/3",
})).s("gm_acoustic_bass").gain(0.41).pan(0.3)

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

// other · alto sax
const alto_sax = note(`<
  A B C B C D E ~ F G H I@6 J K@3 L M N O P ~ Q R S T U V G W@2 X Y Z AA AB AC ~ AD AE AF AG AH AI ~@3 AJ AK AL AM AN AO
  AP AQ@2 AR AS AT AU AV AW AX@2 AY@2 AZ BA@2 BB@7 BC@3
>`.pickRestart({
  A: "~@5 d4 eb4 ~ eb4 f4 ~@2", B: "~@5 d4 eb4 ~ eb4 f4@3", C: "eb4 ~@4 d4 eb4 ~ eb4 f4 ~@2",
  D: "~@5 gb4 g4 ~ g4 a4 ~@2", E: "~@5 a4 bb4@2 f4 g4 ~@2",
  F: "~@10 bb3@2 c4@4 bb3@2 d4@2 eb4 [e4,f4] [gb4,g4] [ab4,a4]", G: "bb4@4 a4@13 [g4,ab4] gb4@2 ~@4",
  H: "g4@2 ~@4 bb4@3 ~@3 g4@2 ~@4 eb4@4 d4@2", I: "[c4@2 f4@13 f3@12 gb3@12 g3@12 a3@12 bb3@2 d4 ~@6]/6",
  J: "~@9 gb4 ~@2", K: "[g4@2 ~@4 bb4@4 b4 bb4 g4@4 bb4@2 c5@4 d5@8 bb4@22 f4@2 bb4@4 c4@14]/3", L: "eb4@2 d4 ~@9",
  M: "~@2 e4 f4@2 d4@7", N: "f4@2 eb4 ~@9", O: "~@2 gb4 g4@2 d4@7", P: "f4@2 e4 ~@9", Q: "~@11 bb3",
  R: "g3@4 eb3@2 f3@3 ~@7 c4@2 d4@3 ~@3", S: "f4@2 d5 ~@8 ab4", T: "a4@2 d5 c5 ~@2 c5 ~@2 c5@2 bb4",
  U: "g4@2 eb4 bb3@2 a3 ~@6", V: "~@6 bb3@2 c4 d4@2 f4",
  W: "[g4@2 ~@4 bb4@3 ~@3 g4@4 bb4@2 c5@4 d5@8 ~@6 d4@2 ~@2 d4@2 db4@2 ~@2 db4@2]/2",
  X: "c4@3 ~@9 d4@4 db4@2 d4@4 f4@2", Y: "~@5 d4 db4 d4 eb4 d4@2 a3", Z: "~@5 bb3 d4 ~ f4 d4@2 bb3",
  AA: "d4@2 ~@2 f4@2 g4@3 ~@3 g4@3 ~@3 d4@3 ~@3", AB: "d4@2 a3 c4@2 bb3 ~@6",
  AC: "~@10 d4@4 db4 [b3,c4] [a3,bb3] [g3,ab3] gb3@4 g3@2", AD: "~@6 f4@2 f4 e4@2 e4",
  AE: "eb4@2 eb4 d4@2 d4 c4@2 c4 bb3 ~@2", AF: "~@3 e4@2 e4 f4@2 f4 e4@2 d4", AG: "~@5 bb4 gb4 g4 bb4 gb4 g4 bb4",
  AH: "gb4@2 g4@2 bb4@2 d4@4 ~@2 d4@3 ~@3 db4@2 d4@2 f4@2", AI: "db4 d4 f4 c4@2 bb3 ~@6", AJ: "~@5 f4 ~@5 c4",
  AK: "~@2 bb3 d4@2 bb3 eb4@2 e4 f4@2 bb4", AL: "~@5 bb4 ~@5 d4", AM: "~@2 eb4 g4@2 eb4 ab4@2 a4 bb4@2 eb4",
  AN: "~@5 c5 ~@5 d4", AO: "~@2 c4 e4@2 c4 f4@2 gb4 g4@2 c5", AP: "~@5 c4 d4@2 d4 eb4@2 eb4",
  AQ: "[c4 ~@2 db4@2 db4 eb4@2 eb4 f4@2 db4@4 ~@2 ab3 bb3 ~ bb3 ab3@2 c4]/2", AR: "~@5 a3 bb3 ~ bb3 c4@2 f3",
  AS: "~@5 c4 db4@2 a3 bb3 ~@2", AT: "~@10 ab3@2 eb4@2 ~@2 ab3@2 gb4@3 ~@3", AU: "f4@2 c4 eb4@2 db4 ~@6",
  AV: "~@5 c4 db4@2 db4 c4@2 c4", AW: "f4 ~@2 bb3@6 ~@2 gb3", AX: "[bb3@2 db4@7 c4@6 ab3@6 ~@2 c4]/2",
  AY: "[eb4@2 e4@13 ~@9]/2", AZ: "~@9 bb4@2 ab4", BA: "[e4@4 db4@26 db4@11 ~ db4@2 ~@4]/2",
  BB: "[db4@2 db4@25 ~@2 c4@4 b3@6 bb3@6 a3@6 ab3@6 g3@6 gb3@12 ~@2 ab3 bb3 ~ bb3 ab3@3]/7",
  BC: "[bb3@2 ab3 b3@2 bb3 ~@2 ab3@19 ~@9]/3",
})).s("gm_alto_sax").gain(0.39).pan(0.6)

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

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

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

// other · baritone sax
const baritone_sax = note(`<
  A B C B C D E F@2 ~@2 G H@5 I J@3 K L M N O ~ P Q R E S T U V W X Y Z AA AB AC ~ AD AE AF AG AH@2 ~@3 AI AJ AK AL AM
  AN AO AP@2 AQ ~ AR@2 AS AT AU@2 AV@2 AW@2 AX AY@7 AZ@3
>`.pickRestart({
  A: "~@5 bb2!2 ~ f2 bb2 ~@2", B: "~@5 bb2!2 ~ f2 bb2@3", C: "a2 ~@4 bb2!2 ~ f2 bb2 ~@2", D: "~@5 d3!2 ~ d3!2 ~@2",
  E: "~@5 gb3 g3@2 d3 eb3 ~@2", F: "[~@9 gb2@6 g2@2 d3 ~@6]/2", G: "~@10 f2@2 f2@4 f2@2 f2@5 ~",
  H: "[f2 ~@2 f3@12 gb3@12 g3@12 ~@2 f2@4 ~@2 gb2@4 g2@2 d3 ~@6]/5", I: "~@9 gb3 ~@2",
  J: "[g3@2 ~@4 bb3@4 b3 bb3 g3@4 bb3@2 c4@4 d4@8 bb3@22 f3@2 bb2@4 c3@14]/3", K: "eb3@2 d3 ~@9",
  L: "~@2 d2 eb2@2 eb2@7", M: "eb2@2 eb2 ~@9", N: "~@2 b2 c3@2 d3@7", O: "f3@2 e3 ~@9", P: "~@11 f2",
// … 243 more lines

More by Louis Armstrong