Strudelify
Chattanooga Choo Choo cover art

Glenn Miller

Chattanooga Choo Choo

Miller

KeyD♭ majorTempo150 bpm
0:00/0:00
// Chattanooga Choo Choo — Miller
// 150 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 200 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(150/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 · contrabass · "Jazz Bass"
const bass = note("<~@4 [ab2!8]!2 [ab2!7 ~] ~@193>").s("gm_contrabass").gain(0.19).pan(0.3)

// bass · acoustic bass · "Jazz Bass"
const bass_2 = note(`<
  ~@7 A B@4 C D E F G@2 C H E C F@2 I J K L M N O P Q R S T U V W X Y Z AA AB B@4 K@2 C E G J E AC K AD AE AF AG AH B@4
  AI AJ AK AL C D E F G@2 C H E C F@2 I J K L M N O P Q R S T U V W X Y Z AA AB B@4 K@2 C E G J E AC K AD AE AF AG AH
  B@4 AI AJ AM AN AO AP AQ AR AS AT AR AU AQ@3 AR AV AW AX AY AZ@2 BA BB BC BD BE BF BG BH BI BJ BK BL BM BN AX BO BP BQ
  BR BS BT BU AX BV BW AR BR BX AO BY BZ CA K@2 C E G J E AC K AD AE AF AG AH B@4 CB CC CD CE
>`.pickRestart({
  A: "ab2@4 g2@3 ~ f2@4 eb2@3 ~", B: "db2!2 ab1!2", C: "db2 eb2 f2 ab2", D: "db2 ab2 f2 db2",
  E: "db2@3 ab1 ab2@4 f2@4 db2@2 ~ ab1", F: "db2 db3 ab2 f2", G: "ab2 bb2 c3 eb3", H: "db2@4 db2@4 ab2@3 eb2 eb3@3 eb2",
  I: "ab2 eb3 c3 ab2", J: "ab3 ab2 c3 eb3", K: "db3 db2 f2 ab2", L: "db2@4 db2@4 b1@4 db2@3 db1", M: "gb2!2 db2 ab2",
  N: "gb2@2 ~ gb2 c2@4 db2@4 ~ ab2@2 db2, ~@6 db3 ~", O: "gb2@4 gb2@4 db2@3 ab1 ab2@3 ab1",
  P: "gb2@3 gb1 gb2@4 gb2@3 db2 db3@3 db2", Q: "b1!2 c2 gb2", R: "gb2@4 d2@4 eb2@4 eb2@3 eb1", S: "c2 gb2 eb2 c2",
  T: "c2@3 gb1 gb2@3 gb1 db2@4 db2@4", U: "gb2@4 d2@4 db2@2 ~ db2 ab2@4", V: "gb2@4 db3@4 db2@3 db1 db2@4",
  W: "gb2 c2 db2 f2", X: "gb2@3 db2 db3@3 db2 gb2@4 gb2@4", Y: "b2 gb2 c2 eb2", Z: "gb2@3 gb1 gb2@4 eb2@3 eb1 eb2@4",
  AA: "c3 c2 eb2 c2", AB: "ab1@4 db2@3 gb2@2 ~@2 ab1@5", AC: "db2@3 ab1 ab2@3 ab1 ab2@2 ~ ab2 eb3@4",
  AD: "db2@3 ab1 eb2@4 e2@3 ab1 f2@4", AE: "gb2 gb3 db3 bb2", AF: "a1@3 a0 bb1@4 a1@3 a0 eb2@3 eb1",
  AG: "db2@4 ab2@4 bb1@2 ~ bb1 d2@4", AH: "eb2@2 ~ eb2 bb2@4 gb2@4 ab2@3 ab1", AI: "b2!2 bb2!2", AJ: "a2!2 ab2!2",
  AK: "db2 ~@7", AL: "ab2 gb2 f2 eb2", AM: "db2@2 ~ db2 eb2@4 f2@4 gb2@4", AN: "ab2@3 ab1 ab2@4 c2@3 c1 c2@4",
  AO: "f2@3 c2 c3@4 a2@4 f2@2 ~ c2", AP: "f2@3 c2 g2@4 a2@3 c2 c3@3 c2", AQ: "f2@4 c3@4 f3@4 c3@3 gb2",
  AR: "f2 c3 a2 f2", AS: "c2@3 g1 g2@4 e2@4 c2@2 ~ g1", AT: "c2@3 g1 d2@4 e2@3 g1 g2@3 g1",
  AU: "f2@2 ~ f2 c3@4 c2@4 c2@4", AV: "c2 d2 e2 g2", AW: "c2 c3 g2 e2", AX: "f2 g2 a2 c3",
  AY: "f2@4 c3@4 f2@3 c2 c3@3 c2", AZ: "bb1@4 f2@4 f2@3 f1 f2@4", BA: "bb1@4 e2@4 f2@2 ~ f2 c3@4",
  BB: "bb1@3 f1 f2@3 f1 bb1@3 bb0 bb1@3 bb0", BC: "eb2@3 eb1 eb2@4 bb1@4 a1@4", BD: "bb1@3 bb0 bb1@4 g2@3 g1 b1@3 b0",
  BE: "g2 a2 bb2 db3", BF: "g2@3 g1 g2@4 f2@4 f2@4", BG: "bb1@3 f1 f2@3 f1 f2@4 f2@4", BH: "bb1@4 bb1@4 f2@2 ~ f2 c3@4",
  BI: "bb2 f2!2 a1", BJ: "bb1@2 ~ bb1 f2@4 bb1@3 bb0 bb1@4", BK: "eb2@4 eb2@4 bb1@2 ~ bb1 e2@4",
  BL: "bb1@4 ab2@4 g2@3 g1 b1@4", BM: "c2 e2 g2 e2", BN: "c2@3 ~ f2@3 bb2@2 ~@2 c2@4 c2",
  BO: "g2@3 d2 d3@3 d2 c2@2 ~ c2 g2@4", BP: "f2!2 gb2!2", BQ: "f2!2 c2!2", BR: "c2 g2 e2 c2", BS: "c2 g2 c2 db2",
  BT: "f3 f2 a2 c3", BU: "f2@2 ~ f2 e2@4 f2@3 c2@4 [c1,c2]", BV: "g2@4 db2@4 c2@2 ~ c2 g2@4",
  BW: "f2@2 ~ f2 f2@4 gb2@3 db2 db3@3 db2", BX: "c2@3 c1 g2@3 g1 c2@3 c1 db2@3 db1", BY: "bb1@4 c2@4 db2@4 d2@3 ~",
  BZ: "eb2 eb3 bb2 g2", CA: "ab2@3 c2 gb2@3 ~ f2@4 eb2@3 ~", CB: "ab2!2 bb2 eb2", CC: "ab2 ab1 ~@2", CD: "~@2 d3!2",
  CE: "db3@2 ~@2 ab2@2 ~ db2@5 ~@4",
})).s("gm_acoustic_bass").gain(0.19).pan(0.3)

// chords · piano
const piano = note(`<
  ~@4 A@2 B C D E D E F@4 G H@5 I J@2 K@2 L@4 M@3 N O@5 P Q@3 D E D E R@2 S@2 T@3 U V@2 W X@3 D E D E Y@2 Z S F@4 G H@5
  I J@2 K@2 L@4 M@3 N O@5 P Q@3 D E D E R@2 S@2 T@3 U V@2 W X@3 D E D E AA@4 AB@2 AC AD AE AF AG AH AI@3 AJ AF AK AG
  AL@3 AM@2 AN AO AP AQ@5 AR AS AT AU@2 AV AW AX@5 AY AZ BA BB@2 BC@2 BD@3 R@2 S@2 T@3 U V@2 W X@3 D E D E BE BF BG BH
>`.pickRestart({
  A: "[ab2,ab3]!8", B: "[ab2,ab3]!7 ~", C: "[ab2,ab3]@4 [g2,g3]@3 ~ [f2,f3]@4 [eb2,eb3]@3 ~",
  D: "db2@3 ab2 bb2@2 ~ a5 ab1@3 ab2 bb2@3 ab2, ~@7 [ab4,eb5,bb5]@9", // Absus2
  E: "db2@3 ab2 bb2@2 ~ a5 ab1@3 [ab2,a5] bb2@2 ~@2, ~@7 [ab4,eb5,bb5]@2 ~@2 [ab4,eb5,bb5]@5", // Amaj7 Absus2
  F: "[[f3,db4,ab4]@15 [f3,db4,ab4]@8 [ab3,db4,f4]@7 ~ [f3,ab3,db4]@16 [f3,ab3,db4]@3 ~@14]/4", // Db
  G: "[gb3,c4,eb4,bb4]@6 ~ [c4,eb4,gb4,bb4]@7 ~@2", // Cm7b5
  H: "[~@4 [c4,eb4,gb4,bb4]@3 [gb3,c4,eb4,bb4]@8 [f3,db4,ab4]@16 [f3,db4,ab4]@9 ~@3 [gb3,c4,eb4,bb4]@4 [f3,ab3,db4]@16 [f3,db4,ab4]@3 ~@14, ~@40 ab2@7 ~@33]/5", // Cm7b5 Db Cm7b5 Db
  I: "[ab3,db4,f4]@3 ~@4 [f3,db4,ab4]@9", J: "[~@11 [f3,db4,ab4]@4 [gb3,c4,f4,bb4]@17]/2",
  K: "[[gb3,c4,f4,bb4]@6 ~ [gb3,c4,f4,bb4] ~@7 [f3,ab3,db4]@17]/2", // Gbmaj7 Db
  L: "[[f3,db4,ab4]@4 [f3,db4,ab4]@4 [eb4,gb4,b4]@3 [b3,f4,bb4,eb5]@4 [bb3,gb4,db5]@8 [b3,f4,bb4,eb5]@3 ~@5 [bb3,gb4,db5]@3 ~@6 [b3,f4,ab4,db5]@7 [bb3,gb4,db5]@9 [b3,f4,bb4,eb5]@7 ~]/4", // Db B Bmaj7 Gb Bmaj7 Gb Db7 Gb …
  M: "[[bb3,gb4,db5]@7 [bb3,e4,ab4,eb5]@3 ~@5 [b3,eb4,gb4]@8 ~@4 [a3,eb4,gb4,c5]@4 [bb3,db4,gb4,bb4,gb5]@8 ~@9, ~@23 c3@8 ~@17]/3", // Gb Ebsus4 B Adim Gb
  N: "[a3,c4,eb4,gb4]@3 ~ [a3,eb4,gb4,c5]@12", // Adim
  O: "[[a3,c4,eb4,gb4]@7 ~ [b3,eb4,f4,bb4]@4 [b3,eb4,f4,bb4]@3 [bb3,gb4,db5]@9 [b3,eb4,f4,bb4]@2 ~@5 [bb3,db4,gb4]@9 [b3,eb4,f4,ab4]@7 [bb3,gb4,db5]@9 ~@3 ab4@4 [bb3,gb4,db5]@8 ~ [bb3,eb4,e4,ab4]@2 ~@6, ~@56 [ab3,b3,db4,f4,db5]@7 ~@17]/5", // Adim Bmaj7 Gb Bmaj7 Gb Fm7b5 Gb Ebsus4 …
  P: "[eb4,gb4,b4]@2 ~@5 [a3,eb4,gb4,c5]@8 ~", // B Adim
  Q: "[[bb3,db4,gb4]@2 ~@6 [g3,eb4,b4]@3 [g3,db4,eb4,bb4]@4 [eb3,a3,c4,gb4]@7 ~ [eb3,a3,c4,gb4] ~@7 [eb3,gb3,a3,c4]@5 [f3,bb3,b3,eb4]@3 [gb2,db4,gb4,bb4]@2 ~@2 [ab1,c4,gb4,ab4]@5]/3", // Gb Gaug Eb7 Ebdim Ebsus2 Gb Ab7
  R: "[[f3,ab3,db4]@15 [f3,db4,ab4]@3 ~@14]/2", S: "[f3,ab3,db4]",
  T: "[[gb3,c4,f4,bb4]@15 [gb3,c4,f4,bb4]@16 [f3,db4,ab4]@7 ~ [f3,db4,ab4] ~@8]/3", // Gbmaj7 Db
  U: "[f3,ab3,db4]@7 ~@4 bb4@5, ~ [bb3,c4,eb4,gb4,eb5]", V: "[[ab3,db4,f4]@3 ~ [f3,db4,ab4]@11 [f3,ab3,b3,eb4]@17]/2",
  W: "[bb3,db4,gb4]", // Gb
  X: "[[g3,b3,db4,gb4]@7 [g3,db4,e4,a4]@4 [g3,a3,db4,f4]@4 [f3,db4,ab4]@9 [db4,f4,bb4]@7 [gb3,bb3,eb4]@8 [bb3,db4,gb4]@4 [gb3,bb3,c4,f4]@4 ~]/3", // Gmaj7 A7 Dbaug Db Bbm Ebm Gb Gbmaj7
  Y: "[[f3,bb3,b3,eb4]@7 ~ [g3,db4,f4,c5]@7 [g3,db4,f4,c5]@3 ~@6 [gb3,c4,e4,a4]@2 ~@6]/2", Z: "[f3,db4,ab4] ~@7",
  AA: "[[f3,bb3,b3,eb4]@7 ~ [g3,db4,f4,c5]@7 [g3,db4,f4,c5]@3 ~@6 [gb3,c4,e4,a4]@2 ~@5 [ab3,db4,f4,ab4,f5]@9 [f3,db4,ab4]@4 [f3,c4,eb4,ab4]@3 [f3,c4,eb4,ab4]@8 ~ [e3,c4,ab4]@4 [e3,bb3,d4,a4]@4]/4", // Ebsus2 Csus4 Gbm7b5 Db Fm7 Eaug Dsus2
  AB: "[[a3,c4,f4]@3 ~@4 [a3,c4,f4]@8 [a3,c4,f4]@4 ~ [a3,c4,f4]@12]/2", AC: "[f3,a3,c4]",
  AD: "~@4 [a3,c4,f4]@3 [f3,a3,c4]@9", AE: "[b3,f4,bb4,g5]@3 [bb3,e4,a4,c5]@13",
  AF: "~@3 [e3,bb3,c4,g4] ~@4 [bb3,c4,e4,g4]@6 ~@2", AG: "~@3 [a3,c4,f4]@13",
  AH: "[a3,c4,f4,a4,f5]@7 [e3,bb3,d4,a4]@3 ~@6", // F Dsus2
  AI: "[~@3 [a3,c4,f4] ~@4 [a3,c4,f4]@6 ~ [a3,c4,f4]@16 [a3,c4,f4]@4 ~ [a3,c4,f4]@12]/3", AJ: "[a3,c4,f4]@15 ~",
  AK: "~@4 [bb3,c4,e4,g4]@3 [e3,bb3,db4,ab4]@9", // C7 Bbm7b5
  AL: "[[f3,a3,c4]@2 ~@6 [eb3,a3,c4,f4]@7 [bb3,d4,f4]@9 [a3,b3,eb4,g4,d5]@2 ~@5 [d4,f4,bb4]@8 ~@4 [a3,c4,eb4,f4]@4 ~]/3", // F F7 Bb G Bb F7
  AM: "[~@3 [d4,f4,bb4]@4 ~@4 f4@4 [bb3,d4,f4]@9 [d4,f4,bb4]@3 [ab3,d4,f4,bb4]@5, ~@7 [f3,a3,c4,eb4,c5]@8 ~@17]/2", // Bb Bb7 F7
  AN: "[g3,bb3,eb4]@7 ~ [g3,db4,e4,bb4]@7 ~", AO: "[d4,f4,bb4]@7 [b3,g4,eb5]@5 [ab3,b3,d4,f4]@4", AP: "[bb3,db4,e4,g4]",
  AQ: "[~@8 [a3,f4,db5]@4 [a3,eb4,f4,c5]@3 [bb3,d4,f4]@8 ~@8 [d4,f4,bb4]@8 [a3,c4,eb4,g4]@3 ~@5 [d4,f4,bb4]@8 [a3,eb4,g4,d5]@3 ~@5 [d4,f4,bb4]@8 [d4,f4,bb4]@4 ~@5]/5", // Aaug F7 Bb Am7b5 Bb Dsus4 Bb
  AR: "[g3,bb3,eb4,g4,eb5]@4 [g3,db4,e4,bb4] ~@3", AS: "~@3 [d3,f3,bb3]@4 [b3,eb4,g4]@5 [ab3,b3,d4,f4]@4, d4@7 ~@9",
  AT: "[db4,e4,g4,bb4]@3 ~@4 [bb3,e4,g4,db5]@9", // Dbdim Bbdim
  AU: "[[c2,bb3,db4,e4,g4]@3 ~ [f2,c4,eb4,a4]@3 [bb2,db4,f4,bb4]@2 ~@2 [c2,e4,bb4,c5]@21]/2", // C7 F7 Bbm C7
  AV: "[bb3,g4,d5]@7 ~ [bb3,e4,ab4,db5]@7 ~", AW: "[a3,c4,f4]@7 ~@4 ab4@5, ~ [gb3,b3,db4,e4,db5]",
  AX: "[[a3,f4,c5]@15 [bb3,e4,a4,d5]@16 [bb3,d4,e4,a4]@5 [bb3,g4,d5]@3 [bb3,d4,e4,a4]@5 [db4,e4,ab4]@3 [a3,f4,c5]@16 [a3,f4,c5]@8 ~ [a3,f4,c5]@3 [bb3,e4,ab4,db5]@5]/5", // F Bbmaj7 Gm Bbmaj7 Dbm F Bbm7b5
  AY: "[a3,f4,c5]@15 ~", AZ: "~@11 [e3,bb3,c4,g4]@4 ~", BA: "[f3,a3,c4]@7 ~ [e3,b3,eb4,ab4]@7 ~",
  BB: "[[a3,c4,f4]@15 [e3,a3,bb3,d4]@17]/2", // F Dsus2
  BC: "[[e3,a3,bb3,d4]@3 ~@5 [e3,a3,bb3,d4]@4 [e3,ab3,db4]@3 [f3,a3,c4]@7 ~ [f3,a3,c4] ~@8]/2", // Dsus2 Dbm F
  BD: "[~@3 [ab3,d4,f4,c5] ~@4 [d4,f4,ab4,c5]@6 ~ [g3,db4,f4,c5]@7 ~ [g3,db4,f4,c5] ~@7 [gb3,bb3,c4,f4]@16 ~]/3", // Dm7b5 Csus4 Gbmaj7
  BE: "ab2!2 bb2 eb2", BF: "ab2 [ab1,c4,gb4,bb4] ~@2", BG: "~@2 [d3,a3] [d3,a3,gb4,c5,e5]",
  BH: "[db3,ab3]@2 ~@2 ab2@2 ~ db2@5 ~@4, [f4,bb4,eb5]@3 ~", // Db5 Ebsus2
})).s("gm_piano").gain(0.15).pan(0.3)

// other · alto sax
const alto_sax = note(`<
  A B C D E F G H ~@4 I J K L@2 M@2 N I J K L@2 M@2 O P Q P Q R@2 S T P Q P Q R@2 U V ~@4 I J K L@2 M@2 N I W X@2 Y@3
  ~@3 Z AA@2 H AB AC AD AE AF AG AD AH AB AC AD AE AF AG AD AI AJ AK AJ AL AM@2 AN AO AJ AK AJ AL AM@2 AP AQ ~@4 AB AC
  AD AE AF AG AD AH AR AS AT AU AV@3 ~@3 AW@3 AX AY AZ AY AZ BA BB AY BC AY AZ AY AZ BA BB AY BD BE@3 BF BG BH BI BJ
  BE@3 BF BG BH BI BK BL@4 BM BN@2 BO BL@4 BM BP@2 BQ BR BS I J K L@2 M@2 N I W X@2 Y@3 ~@3 BT@2 BU@2
>`.pickRestart({
  A: "c4 ~ b3 c4", B: "db4 b3 c4 db4", C: "d4 c4 db4 d4 eb4 db4 d4 eb4", D: "e4 d4 eb4 e4 f4 eb4 e4 f4",
  E: "gb4 ~@11 gb5@2 f5@2", F: "gb5@10 f5 e5 ~@4", G: "gb5@2 f5@2 gb5@2 f5@2 gb5@6 f5 ~",
  H: "ab4@3 ab3 gb3@3 gb4 f4@3 ab3 eb4 ~@3", I: "f3@3 gb3 g3@3 ab3@4 ~@5", J: "~@3 ab3 bb3@3 c4 db4@3 eb4 db4@3 f3",
  K: "bb3@3 ab3@9 ~@4", L: "[~@7 bb3@4 ab3 f3@3 eb3@9 ~@8]/2",
  M: "[~@2 a3 bb3 bb3@2 a3 bb3 bb3@3 ab3 f3@3 db3@5 ~@12, ~@4 a3 ~@3 a3 ~@23]/2", N: "~@8 bb4@3 [ab4,a4] g4 ~@3",
  O: "~@3 ab4@5 gb4@2 ~@2 ab4@2 ~@2", P: "db5@3 bb4 gb4@3 db4 b4@3 ab4 f4@3 db4", Q: "gb4@3 ab4 bb4@3 db5@5 ~@4",
  R: "[b4@3 b4 b4@3 b4 a4@2 ~ a4@2 ~@2 bb4@4 bb4 a4@3 bb4 g4@2 ~ g4@5]/2",
  S: "gb4@2 f4 gb4 gb4@2 f4 gb4 gb4@3 eb4 c4@3 a3, f4 ~@3 f4 ~@3 f4 ~@7", T: "gb4@2 ~ gb4@2 ~@2 f4@2 ~@2 f4@5",
  U: "gb4@2 ~@2 gb4@2 ~@2 gb4@3 eb4 c4@3 a3", V: "gb4@3 eb4 f4@3 eb4@2 ~@2 gb4@5",
  W: "~@3 ab3 bb3@3 c4 db4@3 eb4 db4@3 bb3", X: "[ab3@2 ~ gb3@2 ~@2 db4@20 b4@5]/2",
  Y: "[bb4@3 bb4 a4@3 ab4 bb4@2 ~ ab4@2 ~@2 bb4@2 ~@2 bb4@2 ~@2 db5@2 ~@2 db5 c5@3 bb4@5 ~@12]/3", Z: "b3 bb3",
  AA: "[a3@8 ab3@3 bb3 c4@3 db4@5 ab4@2 a4 [ab4,a4] ab4 [ab4,a4] a4 [ab4,a4] ab4 [ab4,a4] a4 ab4]/2", // Amaj7
  AB: "~@11 ab3 bb3 db4 ~ f4", AC: "ab4 ~@15", AD: "~@3 ab3 bb3 db4 ~ f4 ab4@2 ~ ab3 bb3 db4 ~ f4",
  AE: "ab4@2 ~ db4 f4@3 ab4@2 ~@7", AF: "~@3 bb3 c4 eb4 ~ gb4 ab4@2 ~ bb3 c4 eb4 ~ gb4",
  AG: "ab4@2 ~ c4 eb4@3 ab4@2 ~@7", AH: "ab4@2 ~ db4 f4@3 bb4@2 ~@2 bb4@5", AI: "ab4@2 ~ db5@5 db5@2 ~@2 db5@2 ~@2",
  AJ: "bb3 [bb3,b3] b3 [bb3,b3] ~@4 b3 [b3,db4] db4 [b3,db4] ~@4", AK: "db4@6 ~ b3 ~@3 b3@5",
  AL: "db4 [db4,d4] d4 [db4,d4] ~@7 e4 gb4 bb4 ~ db5", // Dmaj7
  AM: "[gb5@3 gb5 f5@3 gb5 f5@2 ~ eb5@2 ~@2 db5@4 db5 c5@3 db5 b4@2 ~ bb4@5]/2",
  AN: "a4@2 ab4 a4 a4@2 ab4 a4 a4@3 gb4 eb4@3 c4, ab4 ~@3 ab4 ~@3 ab4 ~@7", AO: "a4@2 ~ a4@2 ~@2 a4@2 ~@2 ab4@5",
  AP: "a4@2 ~@2 a4@2 ~@2 a4@3 gb4 eb4@3 c4", AQ: "a4@3 gb4 ab4@3 gb4@2 ~@2 ab4@5", AR: "~@4 db4 ~ c4 ~", AS: "b3",
  AT: "bb3@10 ~ gb4@5", AU: "g4@2 ~ b4@2 ~@2 db5@2 ~@2 eb5@5",
  AV: "[f5@3 e5 eb5@3 db5 f5@2 ~ db5@2 ~@2 f5@2 ~@2 db5@2 ~@2 f5@2 ~@2 e5 eb5@3 db5@5 ~@12]/3",
  AW: "[f4@3 e4 eb4@3 db4 f4@2 ~ db4@2 ~@2 f4@2 ~@2 db4@2 ~@2 f4@2 ~@2 e4 eb4@3 db4@5 ~@7 ab4 ~@4]/3",
  AX: "ab4 ~@6 ab4 ~@3 a4@5", AY: "~@3 f4 a4 c5 ~ d5 f5@2 ~ f4 a4 c5 ~ d5", AZ: "f5@2 ~ a4 c5@3 f5@2 ~@7",
  BA: "~@3 c4 d4 e4 ~ g4 c5@2 ~ c4 d4 e4 ~ g4", BB: "c5@2 ~ e4 g4@3 c5@2 ~@7", BC: "f5@2 ~ f4 a4@2 ~ d4@2 ~@2 d4@5",
  BD: "f5 ~@7", BE: "bb3 a3", BF: "bb3@8 ~@3 f4@5", BG: "eb4 ~@10 g4 ~@3 g4", BH: "~@11 f4@5", BI: "e4 ~@15",
  BJ: "~@11 c5@5", BK: "e4@3 ~ f4@3 g4@2 ~@2 bb4@4 ~",
  BL: "[c5@6 ~ c5@8 bb4@2 ~@2 bb4@5 ~ g4@2 ~@2 d4@2 ~ c4@3 f4@5 ab4@6 ~ g4@17, ~@24 ab4@2 ~ f4@2 ~@35, ~@28 eb4@2 ~ db4@2 ~@31]/4",
  BM: "~@4 d4@3 g4 d4 ~@3 d4@3 g4",
  BN: "[d4@3 d5@5 bb4@3 eb4 e4@3 d4@2 ~@2 [d4,eb4] d4@2 ~ [d4,eb4] d4@2 ~ [d4,eb4] d4@2 ~ [d4,eb4]]/2", // Ebmaj7
  BO: "d4@3 e4 f4@3 g4 a4@2 ~ a4@5", BP: "[d4@3 d5@5 bb4@3 eb4 e4@3 d4@2 ~@3 a4@3 f4 ab4@2 ~ a4 ~@4]/2",
  BQ: "ab4@3 d4 g4@2 ~ ab4 ~@4 ab4@3 f4", BR: "gb4@2 ~ g4 ~@4 g4@3 db4 a4@2 ~ bb4", BS: "~@4 bb4@3 c4 f4@2 ~ gb4 ~@4",
  BT: "[db5@3 db5 c5@3 bb4 db5@2 ~ bb4@2 ~@2 c5@2 ~@2 c5@4 ~@9]/2", BU: "[~@8 e5@6 ~ eb5@13 ~@4]/2",
})).s("gm_alto_sax").gain(0.25).pan(0.6)

// other · alto sax · soft notes
const alto_sax_soft = note("<A ~@4 B C ~@5 D ~@6 E D ~@27 D ~@6 E D ~@121 D ~@6 E D ~@13>".pickRestart({
  A: "~ bb3 ~@2", B: "~@11 eb5 [db5,d5] c5 ~@2", C: "~@15 [eb5,e5]", D: "~@10 g3 [e3,f3,gb3] [d3,eb3] ~@3",
  E: "~@12 [f4,gb4] e4 ~@2", // Gbmaj7
})).s("gm_alto_sax").gain(0.1).pan(0.6)

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

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

More by Miller