Strudelify
American Patrol cover art

Glenn Miller 'in The Movies'

American Patrol

Miller

KeyA♭ majorTempo186 bpm
0:00/0:00
// American Patrol — Miller
// 186 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 148 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(186/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@3 B C D E F A@3 G H I J K L M N O P J Q G R K S T R K U V W ~ X ~ Y ~ Z AA@8 AB@7 AC AD ~@3 AE@8 AF@6 AG@2 AH@7
  AI@2 ~@7 AJ@8 AK@5 ~@3 AL@4 AM@2 AN AO AP AQ AP AR AS AQ AT AU AV AO AW AX AY AZ AW AZ BA@2 BB@2 BA@2 BB@2 BA@2 BB@2
  BC@2 BD@2
>`.pickRestart({
  A: "ab2@5 ~ ab2@5 ~ eb2@5 ~ eb2@5 ~", B: "ab2@5 ~ ab1@5 ~ bb1@5 ~ c2@5 ~", C: "eb2@5 ~ eb2@5 ~ bb2@5 ~ eb2@5 ~",
  D: "ab2@5 ~ ab2@5 ~ f2@5 ~ eb2@5 ~", E: "bb2@5 ~ ab2@5 ~ g2@5 ~ f2@5 ~", F: "eb2@5 ~ bb2@5 ~ g2@5 ~ eb2@5 ~",
  G: "ab2@5 ~ ab2@5 ~ bb2@5 ~ c3@5 ~", H: "db3@5 ~ c3@5 ~ bb2@5 ~ ab2@5 ~", I: "g2@5 ~ f2@5 ~ eb2@5 ~ f2@5 ~",
  J: "eb2@5 ~ eb2@5 ~ f2@5 ~ g2@5 ~", K: "ab2 ~@5", L: "eb2@5 ~ f2@5 ~ g2@5 ~ ab2@5 ~",
  M: "bb2@5 ~ a2@5 ~ bb2@5 ~ eb3@5 ~", N: "eb3@5 ~ db3@5 ~ c3@5 ~ bb2@5 ~", O: "ab2@5 ~ g2@5 ~ f2@5 ~ c2@5 ~",
  P: "eb2@5 ~ f2@5 ~ g2@5 ~ bb2@5 ~", Q: "ab2@5 ~ ab2@5 ~ eb2@5 ~ f2@5 ~", R: "db3 ~@5", S: "g2 ~@5", T: "f2 ~@5",
  U: "eb2@5 ~ eb2@5 ~ g2@5 ~ bb2@5 ~", V: "ab2@5 ~ eb2@4 ab2@3 ~@11", W: "~@4 c2@7 c2@6 ~ c2@4 f2@2",
  X: "~@2 eb2@4 eb2@3 eb2@2 ab2", Y: "~@2 g2@4 g2@3 g2@2 c2", Z: "~@3 bb1@8 bb1@6 bb1@4 eb2@3",
  AA: "[~@23 eb2@5 ~ eb2@5 ~ e2@5 ~ e2@5 ~ f2@5 ~ gb2@5 ~ g2@5 ~ g2@5 ~ ab2@5 ~ f2@5 ~ eb2@5 ~ f2@5 ~ ab2@5 ~ f2@5 ~ eb2@5 ~ c2@5 ~ eb2@5 ~ eb2@5 ~ e2@5 ~ e2@5 ~ f2@5 ~ gb2@5 ~ g2@5 ~ g2@5 ~ ab2@5 ~ f2@5 ~ eb2@5 ~ f2@5 ~ ab2]/8",
  AB: "[~@5 ab1@5 ~ bb1@5 ~ c2@5 ~ db2@5 ~ f2@5 ~ ab2@5 ~ f2@5 ~ ab2@5 ~ g2@5 ~ f2@5 ~ e2@5 ~ eb2@5 ~ f2@5 ~ g2@5 ~ bb2@5 ~ ab2@5 ~ g2@5 ~ f2@5 ~ eb2@5 ~ db2@5 ~ c2@5 ~ bb1@5 ~ db2@5 ~ ab2@5 eb2@5 ~ f2@5 ~ ab2@5 ~@3]/7",
  AC: "~ eb2 d2@2 eb2 db2@3 ~@2 c2@2", AD: "~@2 bb1@3 ~@2 a1@4 ab1",
  AE: "[~@10 eb2@4 ~@2 eb2@4 ~@2 ab2@5 ~ gb2@5 ~ eb2@5 ~ c2@5 ~ ab1@5 ~ ab1@5 ~ bb1@5 ~ c2@5 ~ db2@5 ~ f2@5 ~ ab2@5 ~ f2@5 ~ db2@5 ~ ab1@5 ~ bb1@5 ~ db2@5 ~ ab2@5 ~ gb2@5 ~ eb2@5 ~ c2@5 ~ ab1@5 ~ ab1@5 ~ bb1@5 ~ c2@5 ~ db2@5 ~ f2@5 ~ ab2@5 ~ f2@5 ~ db2@2]/8",
  AF: "[~@4 ab1@5 ~ bb1@5 ~ db2@5 ~ db2@5 ~ f2@5 ~ ab2@5 ~ f2@5 ~ db2@5 ~ db2@5 ~ eb2@5 ~ f2@5 ~ gb2@5 ~ db2@5 ~ bb1@5 ~ db2@5 ~ gb1@4 ~@2 gb2@12 ~@4 f2@2 eb2@4 f2@3 ~@3 gb2@3 ~@3 g2@3 ~@3 ab2@3 ~]/6",
  AG: "[~@4 ab2@12 ab1@3 ~@3 db2@5 ~ f2@5 ~ ab2@5 ~ f2@5 ~ db2@2]/2",
  AH: "[~@22 eb2@5 ~ g2@5 ~ bb2@5 ~ g2@5 ~ f2@5 ~ f2@5 ~ bb1@5 ~ bb1@5 ~ eb2@5 ~ eb2@5 ~ bb1@5 ~ bb1@5 ~ eb2@5 ~ g2@5 ~ bb2@5 ~ bb1@5 ~ eb2@5 ~ g2@5 ~ bb2@5 ~ g2@5 ~ f2@5 ~ g2@5 ~ ab2@5 ~ f2@5 ~ bb2@2]/7",
  AI: "[~@4 bb1@5 ~ c2@5 ~ d2@5 ~ eb2@9 ~ eb2@3 ~@13]/2",
  AJ: "[~@21 ab1@5 ~@2 c2@5 eb2@5 ~ f2@5 ~ ab2@5 ~ f2@5 ~ eb2@5 ~ c2@5 ~ ab1@5 ~ ab2@5 ~ f2@5 ~ eb2@5 ~ c2@5 ~ bb1@5 ~ ab1@5 ~ c2@5 ~ eb2@5 ~ g2@5 ~ bb2@5 ~ eb2@5 ~ ab2@5 ~ f2@5 ~ eb2@5 ~ c2@5 ~ bb1@5 ~ d2@5 ~ f2@5 ~ d2@5 ~ eb2@3]/8",
  AK: "[~@3 bb2@5 ~ g2@5 ~ eb2@5 ~ ab2@5 ~ f2@5 ~ eb2@5 ~ c2@5 ~ ab1@5 ~ c2@5 ~ eb2@5 ~ f2@5 ~ ab2@5 ~ bb2@5 ~ c3@5 ~ eb3@5 ~ ab2@5 ~ f2@5 ~ eb2@5 ~ c2@5 ~ db2@3]/5",
  AL: "[~@21 eb2@5 ~ g2@5 ~ bb2@5 ~ g2@5 ~ eb2@5 ~ eb2@5 ~ f2@5 ~ g2@5 ~ ab2@5 ~ g2@5 ~ f2@5 ~ eb2@5 ab1@4]/4",
  AM: "[~@3 c2@5 ~ eb2@5 ~ c2@5 ~ eb2@5 ~ bb2@5 g2@5 ~@2 f2@5 eb2@4]/2", AN: "~@3 db2@5 c2@5 ~ bb1@5 ~ ab1@4",
  AO: "~@2 c2@5 ~ eb2@5 ~ f2@5 ~ ab2@4", AP: "~@2 g2@5 ~ f2@5 ~ eb2@5 ~ db2@4", AQ: "~@2 f2@5 ~ ab2@5 ~ f2@5 ~ ab2@4",
  AR: "~@2 bb1@5 ~ g1@5 ~ g2@5 ~ f2@4", AS: "~@2 g2@5 ~ ab2@5 ~ eb2@5 ~ db2@4", AT: "~@2 g2@5 ~ f2@5 ~ c2@5 ~ eb2@4",
  AU: "~@2 f2@5 ~ g2@5 ~ eb2@5 ~ ab2@4", AV: "~@2 eb2@5 ~ f2@5 ~ g2@5 ~ ab1@4", AW: "~@2 f2@5 ~ eb2@5 ~ f2@5 ~ ab2@4",
  AX: "~@2 bb2@5 ~ c3@5 ~ eb2@5 ~ ab2@4", AY: "~@2 eb2@5 ~ f2@5 ~ g2@5 ~ ab2@4", AZ: "~@2 f2@5 ~ eb2@5 ~ f2@5 ~ gb2@4",
  BA: "[~@2 f2@5 ~ eb2@5 ~ db2@12 f2@5 ~ ab2@5 ~ f2@5 ~ ab2@4]/2",
  BB: "[~@2 f2@5 ~ ab2@5 ~ ab2@12 f2@5 ~ eb2@5 ~ f2@5 ~ ab2@4]/2",
  BC: "[~@2 f2@5 ~ eb2@5 ~ db2@12 f2@5 ~ ab2@5 ~ f2@5 ~ db2@4]/2",
  BD: "[~@2 f2@5 ~ ab2@5 ~ ab2@12 f2@5 ~ eb2@5 ~ c2@5 ~ ab1 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.6)

// chords · trumpet
const trumpet = note(`<
  ~@8 A ~@7 B C D E F G H I J K L M N K L M ~ O ~ P ~ Q ~ R ~@8 S@3 ~@2 T U V@2 ~@3 W@3 ~ X@3 ~@2 Y@3 Z@2 AA@2 ~@8 AB AC
  AD@3 AE ~ AF AG AH AI AJ AK AL AM AN@2 AO AI AO ~@4 AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE@2 ~@7 BF@2 BG@2
  BH@2 BI@2 BF@2 BG@2 BH@2 BJ@2
>`.pickRestart({
  A: "~@4 [c5,eb5]@3 ~@5 [c5,eb5]@4 ~@8", B: "~@3 eb4@2 f4 [eb4,g4]@2 [f4,ab4] [g4,bb4]@2 [ab4,c5]",
  C: "[bb4,db5] ~ [bb4,db5] ~ [bb4,db5] ~ [bb4,db5] ~", D: "[bb4,db5]@2 [a4,c5] [bb4,db5]@6 [b4,d5]@2 [c5,eb5]",
  E: "~@2 [c5,eb5]@4 [c5,eb5]@2 [bb4,db5] [ab4,c5]@2 [bb4,db5]", F: "[c5,eb5]@3 ~ [ab4,c5]@2",
  G: "[bb4,db5]@3 ~@3 [bb4,db5]@3 ~@3 [bb4,db5]@3 ~@3 [bb4,db5]@4 [bb4,db5]@2", // Bbm
  H: "~@2 [a4,c5] [bb4,db5]@4 ~ [b4,d5]@4", // Am Bbm Bm
  I: "[c5,eb5]@4 [c5,eb5]@3 ~@3 [c5,eb5]@3 ~@3 [bb4,db5]@2 [ab4,c5]@4 [bb4,db5]@2", J: "[c5,eb5]@3 ~",
  K: "[db5,f5] ~@5", L: "[c5,eb5] ~@5", M: "[bb4,db5] ~@5", N: "[ab4,c5] ~@5",
  O: "~@4 [e4,g4]@8 [f4,ab4]@3 ~@3 [g4,bb4]@4 [f4,ab4]@2", P: "~@4 [g4,bb4]@8 [ab4,c5]@3 ~@3 [bb4,db5]@4 [ab4,c5]@2",
  Q: "~@4 [b4,d5]@8 [c5,eb5]@3 ~@3 [d5,f5]@4 [c5,eb5]@2", R: "~@3 [d5,f5]@8 [eb5,g5]@3 ~@3 [f5,ab5]@4 [eb5,g5]@3",
  S: "[~@15 [gb4,ab4]@8 [db5,f5]@3 ~@3 [db5,f5]@3 ~@3 [eb5,ab5]@10 [db5,f5]@2 [c5,eb5]@4 [c5,eb5]@3 ~@3 [db5,f5]@2 [c5,eb5]@4 [bb4,db5]@2 [ab4,c5]@4 ~@3]/3", // Gbsus2 Db Ab5 Db Cm Db Cm Bbm …
  T: "~@5 [db5,f5]@4 [f5,ab5]@14 ~", U: "~@8 [eb5,ab5]@2 ~@4 [eb5,ab5]@3 ~@7",
  V: "[~ [c5,eb5] [b4,d5]@2 [c5,eb5] [db5,e5]@2 [c5,eb5] [db5,e5]@2 [d5,f5] [db5,e5]@2 [d5,f5] [eb5,gb5]@2 [d5,f5] [eb5,gb5]@2 [e5,g5] [eb5,gb5]@2 [e5,g5] [f5,ab5]]/2", // Cm Bm Cm Dbm Cm Dbm Dm Dbm …
  W: "[~@10 [ab4,c5]@3 ~@3 [bb4,db5]@3 ~@3 [c5,eb5]@12 [c5,eb5]@10 [c5,eb5]@14 [f5,ab5]@6 [eb5,gb5]@4 [db5,f5]@3 ~]/3", // Ab Bbm Cm Fm Ebm Db
  X: "[~@22 [c5,eb5]@11 ~ [c5,eb5]@10 [c5,eb5]@14 [f5,ab5]@6 [eb5,gb5]@4 [db5,f5]@3 ~]/3", // Cm Fm Ebm Db
  Y: "[~@2 [eb5,ab5]@3 ~@5 [eb5,ab5]@11 ~ [eb5,gb5]@6 [db5,f5]@4 [c5,eb5]@2 ~@4 [bb4,db5]@8 [ab4,c5]@4 [gb4,bb4]@20 ~@2]/3", // Ab5 Ebm Db Cm Bbm Ab Gb
  Z: "[~@4 [eb5,bb5]@15 ~ [f5,ab5]@2 [eb5,gb5]@4 [d5,f5]@2 ~@4 [db5,eb5]@2 ~@4 [bb4,db5]@2 ~@4 [ab4,c5]@2 ~@2]/2", // Eb5 Fm Ebm Dm Dbsus2 Bbm Ab
  AA: "[~@4 [c5,e5]@10 [bb4,db5]@2 [gb4,bb4]@3 ~@3 [bb4,db5]@12 [bb4,db5]@10 [bb4,db5]@3 ~]/2", AB: "~@11 [bb4,eb5]",
  AC: "~@2 [bb4,eb5]@2 [bb4,eb5] [bb4,eb5]@2 [g4,bb4] [eb4,g4]@2 [g4,bb4] [bb4,eb5]", // Eb5 Gm Eb Gm Eb5
  AD: "[~@8 [bb4,eb5]@11 ~ [g4,bb4]@2 [bb4,eb5]@4 [eb5,g5]@3 ~@3 [g4,bb4]@2 [bb4,eb5]@4 [eb5,g5]@3 ~@3 [g4,bb4]@2 [bb4,eb5]@4 [eb5,g5]@3 ~@3 [g4,bb4]@2 [bb4,eb5]@4 [eb5,g5]@3 ~@4 eb5@3, ~@34 [g4,bb4] ~]/3", // Eb5 Gm Eb5 Eb Gm Eb5 Eb Gm …
  AE: "~@4 eb4@3 d4@2 eb4@4 d4@2 ~ eb4@4 ~ eb4@3, ~@10 d4 ~", AF: "~@7 bb4 c5 d5 eb5@4 ~@10", AG: "~@20 [f4,ab4]@3 ~",
  AH: "~@2 [f4,ab4]@5 [f4,ab4]@2 ~ [f4,ab4]@12 ~@2", AI: "~@19 [f4,ab4]@3 ~@2",
  AJ: "~ [f4,ab4]@5 ~ [f4,ab4]@2 [f4,ab4]@12 ~@3", AK: "~@19 [g4,bb4]@3 ~@2",
  AL: "~ [g4,bb4]@6 [g4,bb4]@2 [g4,bb4]@12 ~@3", AM: "~@19 [ab4,bb4]@3 ~@2",
  AN: "[~ [ab4,bb4]@6 [ab4,bb4]@2 [ab4,bb4]@11 ~ [g4,bb4]@10 [g4,bb4]@3 ~@9 [f4,ab4]@3 ~@2]/2", // Absus2 Gm Fm
  AO: "~ [f4,ab4]@6 [f4,ab4]@2 [f4,ab4]@12 ~@3", AP: "eb5@2 d5 db5@4 c5@2 bb4@4 a4@2 ab4@4 f4@2 g4@3",
  AQ: "~@3 gb4@4 ~@2 g4@4 ~@2 ab4@4 ~@2 bb4@3", AR: "~ a4@4 ~@2 bb4@4 ~@2 eb4@8 ~@3",
  AS: "~ c5@2 b4@4 ~@2 c5@4 ~@2 db5@4 ~@2 eb5@3", AT: "~ c5@2 ab4@4 eb4@12 ~ db5@4",
  AU: "~@3 eb5@4 ~ [db5,d5,eb5] ~@6 eb5@3 db5@2 ~@4, ~@4 e5@3 ~@5", AV: "ab4@2 ~ b4@3 c5@2 db5@4 d5@2 eb5@4 b4@2 ~@4",
  AW: "ab4 f4@2 ~ eb4@3 db4@2 ~ c4@2, ~@19 b3@2 ~@3", AX: "eb4 f4@2 ab4@4 ~@5",
  AY: "f5@4 ~@2 db5@2 ab5@5 ~ f5@5 ~ eb5@4", AZ: "eb5@3 ~@3 f5@2 eb5@4 db5@2 c5@5 ~ db5@4",
  BA: "~@2 db5@5 ~ g4@8 ~@2 eb4@2 c5@4", BB: "c5@4 ~@2 c5@6 ab4@2 f4@3 ~@7",
  BC: "~@2 f5@5 [eb5,f5] ab5@6 f5@4 eb5@2 ~@4, ~@8 g5 ~@15", BD: "eb5@6 f5@2 eb5@4 db5@2 c5@3 ~@3 db5@4",
  BE: "[g4@3 ~@3 g4@2 c5@4 eb4@3 ~@3 eb4@2 b4@6 ab4@4 f4@2 ~@4 ab4@8 ~@4]/2",
  BF: "[~@7 [db5,f5]@9 [db5,f5]@2 ~@4 [db5,f5]@2]/2", BG: "[~@3 [db5,f5] ~@3 [eb5,f5]@9 [eb5,f5]@2 ~@4 [eb5,f5]@2]/2",
  BH: "[~@3 [eb5,f5] ~@3 [db5,f5]@9 [db5,f5]@2 ~@4 [db5,f5]@2]/2", BI: "[~@3 [db5,f5] ~@3 [eb5,f5]@9 ~@8]/2",
  BJ: "[~@3 [db5,f5] ~@3 [eb5,f5]@15 ~@2]/2", // Db Ebsus2
})).s("gm_trumpet").gain(0.45).pan(0.6)

// other · trumpet
const trumpet_2 = note(`<
  ~@8 A ~@7 B C D E F G H I J K L@2 M K L M ~ N ~ O ~ P ~ Q ~@8 R@3 ~@2 S T U@2 ~@3 V@3 ~ W@3 ~@2 X@3 Y@2 Z@2 ~@8 B AA
  AB@3 ~@2 AC AD AE AD AF AG AH AI AJ@2 AF AD AF ~@28 AK@2 AL@4 AM@2 AK@2 AL@4 AN@2
>`.pickRestart({
  A: "~@4 f4@3 ~@5 f4@4 ~@8", B: "~@11 eb4", C: "f4 ~ f4 ~ f4 ~ f4 ~", D: "f4@2 e4 f4@6 e4@2 f4",
  E: "~@2 f4@4 f4@2 f4 eb4@2 f4", F: "f4@3 ~ eb4@2", G: "e4@3 ~@3 e4@3 ~@3 e4@3 ~@3 e4@4 e4@2",
  H: "~@2 eb4 e4@4 ~ eb4@4", I: "f4@4 f4@3 ~@3 f4@3 ~@3 eb4@2 eb4@4 f4@2", J: "f4@3 ~", K: "ab4 ~@5", L: "f4 ~@5",
  M: "eb4 ~@5", N: "~@4 bb3@7 c4@3 ~@4 c4@4 c4@2", O: "~@4 db4@8 eb4@3 ~@3 f4@4 eb4@2",
  P: "~@4 f4@8 g4@3 ~@3 g4@4 g4@2", Q: "~@3 ab4@8 bb4@3 ~@3 c5@4 bb4@3",
  R: "[~@15 c4@8 ab4@3 ~@3 ab4@3 ~@3 ab4@10 ab4@2 f4@4 f4@3 ~@3 ab4@2 f4@4 e4@2 eb4@4 ~@3]/3", S: "~@5 ab4@4 bb4@14 ~",
  T: "~@8 ab4@2 ~@4 ab4@3 ~@7", U: "[~ g4 gb4@2 g4 ab4@2 g4 ab4@2 a4 ab4@2 a4 bb4@2 a4 bb4@2 b4 bb4@2 b4 c5]/2",
  V: "[~@10 eb4@3 ~@3 eb4@3 ~@3 gb4@12 gb4@10 gb4@14 bb4@6 ab4@4 ab4@3 ~]/3",
  W: "[~@22 gb4@11 ~ gb4@10 gb4@14 bb4@6 ab4@4 ab4@3 ~]/3",
  X: "[~@2 ab4@3 ~@5 ab4@11 ~ bb4@6 ab4@4 f4@2 ~@4 f4@8 db4@4 db4@20 ~@2]/3",
  Y: "[~@4 bb4@15 ~ bb4@2 bb4@4 ab4@2 ~@4 gb4@2 ~@4 f4@2 ~@4 eb4@2 ~@2]/2",
  Z: "[~@4 gb4@10 e4@2 c4@3 ~@3 f4@12 f4@10 f4@3 ~]/2", AA: "~@2 eb4@2 eb4 eb4@2 bb3 g3@2 bb3 eb4",
  AB: "[~@8 eb4@11 ~ bb3@2 eb4@3 g4@3 ~@4 bb3@2 eb4@4 g4@3 ~@3 bb3@2 eb4@3 g4@3 ~@4 bb3@2 eb4@4 g4@3 ~@2 bb3@2 eb4@3]/3",
  AC: "~@7 bb4 c5 eb5@4 ~@11, ~@9 d5 ~@14", AD: "~@19 c4@3 ~@2", AE: "~ c4@6 c4@2 c4@12 ~@3",
  AF: "~ c4@5 ~ c4@2 c4@12 ~@3", AG: "~@19 db4@3 ~@2", AH: "~ db4@5 ~ db4@2 db4@12 ~@3", AI: "~@19 f4@3 ~@2",
  AJ: "[~ f4@5 ~ f4@2 f4@11 ~ db4@10 db4@3 ~@9 c4@3 ~@2]/2", AK: "[~@7 ab4@9 ab4@2 ~@4 ab4@2]/2",
  AL: "[~@3 ab4 ~@3 ab4@9 ab4@2 ~@4 ab4@2]/2", AM: "[~@3 ab4 ~@3 ab4@9 ~@8]/2", AN: "[~@3 ab4 ~@3 ab4@15 ~@2]/2",
})).s("gm_trumpet").gain(0.35).pan(0.6)

// chords · tenor sax
const tenor_sax = note(`<
  ~@12 A B C@2 ~@8 D E ~@14 F@5 G@4 ~ H@5 I@2 ~@3 J@3 ~ K@3 ~ L@3 M ~@2 N@2 O P Q R@2 S@4 ~@19 T@4 ~@9 U@4 V@4 ~@8 W@2
  X@2 W@2 Y Z W@2 X@2 AA ~@2
>`.pickRestart({
  A: "~@11 [bb3,f4]", B: "~@4 [ab3,eb4]@8 [g3,db4]@3 ~@3 [f3,c4]@3 ~@3",
  C: "[[eb3,bb3]@3 ~@3 [eb3,ab3]@3 ~@3 [db3,g3]@6 [eb3,ab3]@4 bb3@8 [f3,c4]@4 [g3,db4]@2 [f3,c4]@4 [eb3,bb3]@2 ~@4 [eb3,ab3]@2]/2", // Eb5 Ab5 Dbdim Ab5 F5 Gdim F5 Eb5 …
  D: "~@2 ab4@4 f4@3 ~@2 ab3", E: "[db4,f4] ~@7",
  F: "[~@5 [c3,eb4]@4 [db3,f4]@2 [eb3,g4]@4 [f3,ab4]@2 [g3,bb4]@4 [ab3,c5]@2 db5@3 ~@3 db5@3 ~@3 db5@3 ~@3 db5@3 ~@3 db5@4 [a3,c5]@2 db5@8 ~@2 d5@8 eb5@4 ab5@7 ~ eb5@4 ~@2 [ab3,c5]@4 db5@2 eb5@12 ~@4 eb4@2 bb4@4 c5@2 db5, ~@44 db5 ~@15]/5", // Cm Db Eb Fm Gm Ab Am Ab
  G: "[~@5 db5@4 c5@2 db5@3 ~@3 db5@4 c5@2 db5@4 c5@2 db5@8 ~@2 d5@7 ~ eb5@4 f5@7 ~ eb5@2 d5@2 db5@2 c5@4 db5@2 eb5@12 ~@13]/4",
  H: "[~@15 [db4,g4]@2 [eb4,ab4]@4 [f4,c5]@2 [g4,db5]@3 ~@3 [g4,db5]@3 ~@3 [db4,g4]@10 [g4,db5]@2 [f4,c5]@4 [f4,c5]@3 ~@3 [ab4,db5]@2 [f4,c5]@4 [eb4,bb4]@2 [eb4,ab4]@3 ~@3 db4@18 ~@4 [c4,f4]@25 ~@2]/5", // Dbdim Ab5 F5 Gdim Dbdim Gdim F5 Db5 …
  I: "[~ [c4,bb4] [b3,a4]@2 [c4,bb4] [db4,b4]@2 [c4,bb4] [db4,b4]@2 [d4,c5] [db4,b4]@2 [d4,c5] [eb4,db5]@2 [d4,c5] [eb4,db5]@2 [e4,d5] [eb4,db5]@2 [e4,d5] [f4,eb5]]/2", // C7 B7 C7 Db7 C7 Db7 D7 Db7 …
  J: "[~@10 [gb3,c4]@3 ~@3 [gb3,db4]@3 ~@3 [gb3,c4]@12 [gb3,c4]@10 [gb3,c4]@14 [ab3,db4]@6 [gb3,c4]@4 [f3,bb3]@2 ~@2]/3", // Gbdim Gb5 Gbdim Db5 Gbdim Bb5
  K: "[~@11 [gb3,c4]@6 [gb3,c4]@5 [gb3,c4]@7 [ab3,db4]@3 [gb3,c4]@2 [f3,bb3] ~]/3", // Gbdim Db5 Gbdim Bb5
  L: "[~@14 ab3@5 ab3 [bb3,c4] db4 f3@24 gb3@6 f3@4 [f3,eb4]@2 ~@4 [f3,db4]@8 ~@2, ~@11 eb4@17 ~@8]/3", // Bbsus2 F7 Db
  M: "~@5 [ab3,f4]@5 [gb3,eb4] ~", N: "[~@11 [f3,bb3]@6 [f3,bb3]@5 [f3,bb3] ~]/2",
  O: "~@5 [bb4,eb5]@5 [ab4,d5] [g4,c5]", P: "~@4 [eb4,bb4]@3 ~@3 [c4,g4]@10 [bb3,eb4]@2 [c4,f4]@2",
  Q: "~ [db4,g4] [c4,f4]@2 [ab3,eb4] [f3,c4]@5 [f3,bb3] [bb3,eb4]", // Dbdim F5 Ab5 F5 Bb5 Eb5
  R: "[~@4 [bb3,eb4]@3 ~@3 [bb3,eb4]@4 [b3,f4]@2 [c4,g4]@4 [d4,ab4]@2 [eb4,bb4]@10 [c4,g4]@5 ~@3 [bb4,eb5]@4 [ab4,d5]@2 [g4,c5]@2]/2", // Eb5 Bdim C5 Ddim Eb5 C5 Eb5 Abdim …
  S: "[~@4 [eb4,bb4]@3 ~@3 [c4,g4]@10 [bb3,eb4]@2 [c4,f4]@4 [db4,g4]@2 [c4,f4]@4 [ab3,eb4]@2 [f3,c4]@10 eb4@2 [ab3,d4]@6 [bb3,f4]@4 [f3,bb3]@8 [f3,c4]@4 [ab3,d4]@2 [bb3,eb4]@10 [bb3,eb4]@2 ~@14]/4", // Eb5 C5 Eb5 F5 Dbdim F5 Ab5 F5 …
  T: "[~@13 [c4,ab4]@2 ~ [eb4,c5]@2 ~ [g4,eb5]@2 [ab4,f5]@6 [f4,eb5]@6 [ab4,db5]@6 [f4,c5]@6 [db4,bb4]@6 [bb3,ab4]@6 [db4,g4]@6 [bb3,ab4]@6 [db4,bb4]@6 [eb4,c5]@4 [f4,db5]@2 [eb4,c5]@6 [db4,bb4]@4 [c4,ab4]@2 ~@3, ~@12 [bb3,g4]@2 ~ [db4,bb4]@2 ~ [f4,db5]@2 ~@76]/4", // Fm Cm Db F7 Db5 F5 Gb Bb7 …
  U: "[~@2 [bb3,f4]@18 [ab3,eb4]@24 ~ g3@23 [f3,c4]@24 ~@4, ~@11 db4@6 ~@7]/4", // Bb5 Ab5 F5
  V: "[~@2 [bb3,f4]@18 [ab3,eb4]@24 [g3,db4]@24 [f3,c4]@18 ~@4 e3 ~@5]/4", // Bb5 Ab5 Gdim F5
  W: "[[db4,bb4] [f4,db5]@2 [ab4,f5] [bb4,ab5]@5 [ab4,f5] [bb4,ab5]@3 [ab4,f5]@2 [bb4,ab5] ~@8]/2", // Gb Db Bb7 Db Bb7 Db Bb7
  X: "[[c4,ab4] [eb4,c5]@2 [f4,eb5] [c5,ab5]@5 [f4,eb5] [c5,ab5]@3 [f4,eb5]@2 [c5,ab5] ~@8]/2", // Fm Cm F7 Fm F7 Fm F7 Fm
  Y: "[c5,ab5]@2 [bb4,g5]@4 [ab4,f5]@2 [g4,eb5]@6 [ab4,f5]@3 ~@3 [eb4,b4]@4", Z: "[c4,ab4] [db4,bb4]@2 [c4,ab4] ~@8",
  AA: "[db4,bb4] [f4,db5]@2 ~@9", // Gb Db
})).s("gm_tenor_sax").gain(0.35).pan(0.4)

// chords · tenor sax · soft notes
const tenor_sax_soft = note("<~@52 A@2 ~@91 B@2 C>".pickRestart({
  A: "[~@23 ab4@18 ~@7]/2", B: "[~@3 [ab4,f5] [bb4,ab5]@5 [ab4,f5] [bb4,ab5]@3 [ab4,f5]@2 [bb4,ab5] ~@8]/2",
  C: "[c5,ab5]@2 [ab4,f5]@4 [f4,eb5]@2 [c5,ab5]@6 [ab4,f5]@4 [f4,eb5]@2 [c5,ab5] ~@3", // Fm Db F7 Fm Db F7 Fm
})).s("gm_tenor_sax").gain(0.1).pan(0.4)

// chords · alto sax
const alto_sax = note(`<
  A B C D E F G H I B C D J K L@2 ~@4 M ~@4 N O P Q R S T U V W X Y Z AA@2 AB@5 AC@4 AD@6 AE@2 ~@3 AF@3 AG@4 AH@4 AI
  AJ@2 AK@2 AL AM@2 AN@2 AO@4 ~ AP AQ AR AS AT AU AV@3 AW@2 AX AY AZ@4 BA@5 BB@2 BC BD@2 BE BF BG@2 BH@4 BI@4 BJ@4 BK BL
  BK ~ BM@2 BN@2 BM@2 BO BP BM@2 BN@2 BM@2 BQ
>`.pickRestart({
  A: "~@9 eb3 f3 g3", B: "ab3@3 ~@3 ab3@3 ~@3 ab3@4 g3@2 ab3@4 bb3@2", C: "c4@4 c4@3 ~@3 c4@6 b3@2 c4@4 db4@2",
  D: "eb4@3 ~@3 eb4@4 d4@2 eb4@4 d4@2 eb4@4 ab4@2", E: "eb4@6 ~@2 b3 c4@2 db4", F: "~@4 db4@3 ~@3 c4@2 bb3@6 db4@3 ~@3",
  G: "c4@3 ~@3 c4@4 bb3@2 ab3@4 c4@8", H: "bb3@4 f3@3 ~@3 g3@3 ~@3 ab3@8", I: "bb3@6 ~@3 eb3 f3 g3",
  J: "eb4@6 ~@2 g3 ab3@2 [ab3,db4]", K: "~@4 [f3,c4]@8 [eb3,bb3]@3 ~@3 [eb3,ab3]@3 ~@3",
  L: "[[db3,g3]@3 ~@3 [c3,f3]@3 ~@3 [bb2,eb3]@6 [c3,f3]@4 [db3,eb3]@8 [eb3,ab3]@4 [f3,bb3]@2 [eb3,ab3]@4 [db3,g3]@2 ~@4 [c3,f3]@2]/2", // Dbdim F5 Eb5 F5 Dbsus2 Ab5 Bb5 Ab5 …
  M: "~ ab4@2 f4@3", N: "~@6 [db4,f4]@3 ~@3 [f4,ab4]@8 ~@2 [db4,f4]@2",
  O: "[c4,eb4]@4 [c4,eb4]@3 ~@3 [db4,f4]@2 [c4,eb4]@4 [bb3,db4]@2 [ab3,c4]@3 ~@3", // Cm Db Cm Bbm Ab
  P: "[bb3,db4]@3 ~@3 [bb3,db4]@3 ~@3 [eb3,g3]@8 ~@2 [bb3,db4]@2", // Bbm Eb Bbm
  Q: "[ab3,c4]@4 [ab3,c4]@3 ~@3 [bb3,db4]@2 [ab3,c4]@4 [g3,bb3]@2 [f3,ab3]@3 ~@3", // Ab Bbm Ab Gm Fm
  R: "~@3 [db4,f4] [eb4,gb4] [e4,g4] [f4,ab4]@4 ~ [db4,f4]", // Db Ebm Em Fm Db
  S: "[c4,eb4]@3 ~@3 [c4,eb4]@4 [db4,f4]@2 [c4,eb4]@4 [bb3,db4]@2 [ab3,c4]@3 ~@3", // Cm Db Cm Bbm Ab
  T: "db4@3 ~@3 db4@3 ~@3 g3@4 eb3 ~ g3@4 bb3@2", U: "ab3@2 eb3 g3@2 ab3 ~@3 c4@2 c4", V: "c4",
  W: "~@3 ab3@2 g3 ab3@2 bb3 c4@2 db4, ~@2 ab3 ~@9, ~@5 bb3@2 ~@17", X: "eb4",
  Y: "~@5 d4 c4@4 b3@2 c4@4 d4@2 eb4@4 f4@2, ~@2 c4 ~@9", Z: "g4",
  AA: "[~@5 eb4@4 d4@2 eb4@4 f4@2 g4@4 ab4@2 bb4@24 ~, ~@3 eb4@2 ~@43, ~@2 f4 ~@21]/2",
  AB: "[~@5 eb3@4 f3@2 g3@4 ab3@2 bb3@4 c4@2 [bb3,db4]@3 ~@3 [bb3,db4]@3 ~@3 [bb3,db4]@3 ~@3 [bb3,db4]@3 ~@3 [bb3,db4]@4 c4@2 [bb3,db4]@8 ~@2 [b3,d4]@8 [c4,eb4]@4 [f4,ab4]@7 ~ [c4,eb4]@4 [bb3,db4]@2 c4@4 [bb3,db4]@2 [c4,eb4]@12 ~@4 eb3@2 [g3,bb3]@4 ab3@2 [bb3,db4]]/5", // Bbm Bm Cm Fm Cm Bbm Cm Gm …
  AC: "[~@5 [bb3,db4]@4 [a3,c4]@2 [bb3,db4]@3 ~@3 [bb3,db4]@4 [a3,c4]@2 [bb3,db4]@4 [a3,c4]@2 [bb3,db4]@8 ~@2 [b3,d4]@8 [c4,eb4]@4 [db4,f4]@7 ~ [c4,eb4]@2 [b3,d4]@2 [bb3,db4]@2 [ab3,c4]@4 [bb3,db4]@2 [c4,eb4]@12 ~@13]/4", // Bbm Am Bbm Am Bbm Am Bbm Bm …
  AD: "[~@3 db4@8 bb3@4 db4@2 bb3@3 ~@3 c4@4 eb4@8 ~@4 [bb3,e4]@2 [c4,f4]@4 [eb4,a4]@2 [f4,bb4]@3 ~@3 [f4,bb4]@3 ~@3 [bb3,eb4]@10 [f4,bb4]@2 [eb4,ab4]@4 [eb4,ab4]@3 ~@3 [f4,bb4]@2 [eb4,ab4]@4 [db4,g4]@2 [c4,f4]@3 ~@3 [f3,bb3]@18 ~@4 [eb3,ab3]@25 ~@2]/6", // Bbdim F5 Ebdim Bb5 Eb5 Bb5 Ab5 Bb5 …
  AE: "[~ [g3,eb4] [gb3,d4]@2 [g3,eb4] [ab3,e4]@2 [g3,eb4] [ab3,e4]@2 [a3,f4] [ab3,e4]@2 [a3,f4] [bb3,gb4]@2 [a3,f4] [bb3,gb4]@2 [b3,g4] [bb3,gb4]@2 [b3,g4] [c4,ab4]]/2", // Cm D Cm Dbm Cm Dbm Dm Dbm …
  AF: "[~@10 [ab2,eb4]@3 ~@3 [bb2,eb4]@3 ~@3 [eb3,eb4]@12 [eb3,eb4]@10 [eb3,eb4]@14 [f3,f4]@6 [eb3,eb4]@4 [ab2,db4]@2 ~@2]/3", // Ab5 Eb5 Eb F Eb Db5
  AG: "[~@20 ab3@2 db4@4 bb3@3 ~@3 a3@2 ~@4 ab3@8 [eb3,eb4]@12 [eb3,eb4]@10 [eb3,eb4]@14 [f3,f4]@6 [eb3,eb4]@4 [ab2,db4]@2 ~@2]/4", // Eb F Eb Db5
  AH: "[~@20 ab3@2 db4@4 bb3@3 ~@3 a3@2 ~@12 ab2@24 db3@10 [ab2,bb3]@2 ~@4 [ab2,bb3]@8 ~@2, ~@23 bb3@17 ~@8]/4", // Absus2
  AI: "~@5 [db3,bb3]@5 [db3,bb3] ~", AJ: "[~@11 eb3@2 f3 ~@2 gb3 ~@2 g3 ~@2 ab3 ~]/2",
  AK: "[~@2 ab3@9 [ab2,ab3]@6 [ab2,ab3]@5 [ab2,ab3] ~]/2", AL: "~@5 [g4,c5]@5 [f4,b4] [eb4,bb4]",
  AM: "[~@4 [c4,g4]@3 ~@3 [bb3,eb4]@10 [g3,c4]@2 [ab3,eb4]@4 [bb3,e4]@2 [ab3,eb4]@4 [f3,c4]@2 [eb3,ab3]@10 [d3,ab3]@2 [g3,c4]@2]/2", // C5 Eb5 C5 Ab5 Bbdim Ab5 F5 Ab5 …
  AN: "[~@4 [g3,c4]@3 ~@3 [g3,c4]@4 [ab3,d4]@2 [bb3,eb4]@4 [b3,f4]@2 [c4,g4]@10 [bb3,eb4]@5 ~@3 [g4,c5]@4 [f4,b4]@2 [eb4,bb4]@2]/2", // C5 Abdim Eb5 Bdim C5 Eb5 C5 Fdim …
  AO: "[~@4 [c4,g4]@3 ~@3 [bb3,eb4]@10 [g3,c4]@2 [ab3,eb4]@4 [bb3,e4]@2 [ab3,eb4]@4 [f3,c4]@2 [eb3,ab3]@10 [f3,c4]@2 [f3,bb3]@6 [ab3,d4]@4 [d3,ab3]@8 [eb3,ab3]@4 [f3,bb3]@2 [g3,c4]@10 [g3,c4]@2 ~@14]/4", // C5 Eb5 C5 Ab5 Bbdim Ab5 F5 Ab5 …
  AP: "~@11 eb4", AQ: "~@2 eb4@2 eb4 eb4@2 bb3 g3@2 bb3 eb4",
  AR: "~@4 eb4@4 eb4@2 eb4@4 ~ g3@4 bb3@2 eb4@3, ~@7 bb3 ~@4", AS: "~@3 eb4@4 d4@2 eb4@4 d4@2 eb4@4 d4@2 eb4@3",
  AT: "~@3 eb3@4 d3@2 eb3@4 d3@2 eb3@4 d3@2 eb3@3", AU: "~@3 eb4 ~@4",
  AV: "[~@15 eb3@3 eb3 e3 f3 ab3@10 g3@2 ~ ab3@3 bb3@2 ~@4 c4@12 b3@2 c4@4 db4@2 ~@4 eb4@2 ~@3, ~@21 g3 ~@50]/3",
  AW: "[~ ab4@2 g4@4 ab4@2 g4@6 ab4@4 eb4@14 ~@4 b3@2 c4@4 eb4@2 db4@3]/2",
  AX: "~ f3@2 gb3@4 g3@2 eb4@6 c4@4 ab3@2 ~@3", AY: "~ eb3@2 e3@4 f3@2 eb4@6 c4@4 bb3@2 ~@3",
  AZ: "[~ bb3@2 b3@4 c4@2 g4@4 bb4@2 gb4@4 bb4@2 f4@12 ~@6 eb3@3 eb3 e3 [f3,g3] ab3@10 g3@2 ab3@4 bb3@2 ~@4 c4@12 b3@2 c4@4 db4@2 ~@4 eb4@2 ~@3]/4", // Fsus2
  BA: "[~ ab4@2 g4@4 ab4@2 g4@6 ab4@4 eb4@14 ~@4 [f3,db4]@2 ~ [ab3,f4]@2 ~ [c4,ab4]@2 [db4,bb4]@6 [c4,ab4]@6 [bb3,f4]@6 [ab3,eb4]@6 [g3,f4]@6 [f3,db4]@6 [eb3,bb3]@6 [f3,db4]@6 [g3,f4]@6 [ab3,g4]@4 [bb3,ab4]@2 [ab3,g4]@6 [g3,e4]@4 [f3,eb4]@2 ~@3, ~@36 [eb3,c4]@2 ~ [g3,eb4]@2 ~ [bb3,g4]@2 ~@76]/5", // Db Fm Gb Fm Bb5 Ab5 G7 Db …
  BB: "[~ eb3@3 ~@3 f3@2 g3@4 ab3@2 bb3@4 c4@2 [bb3,db4]@8 ~@4 [bb3,db4]@10 [a3,c4]@2 [bb3,db4]@3]/2", // Bbm Am Bbm
  BC: "~ [a3,c4]@3 ~@3 [bb3,db4]@8 [b3,d4]@4 [c4,eb4]@2 ~@3", // Am Bbm Bm Cm
  BD: "[~ ab3@8 [c4,eb4]@4 [bb3,db4]@2 [ab3,c4]@4 [bb3,db4]@2 [c4,eb4]@24 ~@3]/2", // Cm Bbm Ab Bbm Cm
  BE: "[bb3,db4]@3 ~ [bb3,db4]@5 [a3,c4] [bb3,db4]@2", BF: "~ [a3,c4]@3 ~@2 [bb3,db4]@11 ~ [b3,d4]@2 [c4,eb4]@4",
  BG: "[ab3@8 [c4,eb4]@4 [bb3,db4]@2 ~ [ab3,c4]@4 ~ [c4,eb4]@24 ~@4, ~@19 [bb3,db4]@2 ~@27]/2", // Cm Bbm Ab Cm Bbm
  BH: "[~ [ab3,db4]@9 [f3,c4]@12 [f3,bb3]@12 [eb3,ab3]@12 ~@2]/4", // Db5 F5 Bb5 Ab5
  BI: "[~@2 [ab3,db4]@18 [f3,c4]@24 [eb3,bb3]@24 [eb3,ab3]@18 ~@3 eb3 ~ [f3,g3] ab3@4]/4", // Db5 F5 Eb5 Ab5 Fsus2
  BJ: "[ab3@3 ~@3 ab3@6 g3@2 ab3@4 bb3@2 c4@10 b3@2 c4@4 db4@3 ~@3 eb4@38 ~@6 eb3@2 f3@2 g3@2 ab3@4]/4", BK: "ab3 ~@11",
  BL: "~@7 eb3 f3 g3 ab3@2",
  BM: "[[bb3,f4] [db4,ab4]@2 [f4,bb4] [ab4,db5]@5 [f4,bb4] [ab4,db5]@3 [f4,bb4]@2 [ab4,db5] ~@8]/2", // Bb5 Db5 Bb5 Db5 Bb5 Db5 Bb5 Db5
// … 165 more lines

More by Miller