Strudelify

Perdido

Ellington

KeyB♭ majorTempo156 bpm
0:00/0:00
// Perdido — Ellington
// 156 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 179 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(156/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 · "Jazz Bass"
const bass = note(`<
  A B C D E F G H@2 I J K@2 L G M N O P Q R S T U@2 V@2 W X Y Z AA AB AC AD AE AF AG AH@2 AI AJ AK AL AM AN AO AP AQ AR
  AS AT AU AV AW AX AY AZ BA BB Q BC@5 BD BE BF BG BH BI BJ BK BD BL BM BN AZ BO BP BQ AR Q BR BS BT BD BU BN BV BI BM
  BW BD BX BY BN BH BZ CA CB CC CD CE CF CC CG CH CI CJ CK CL CM CN CO CP AV CQ CR@3 CB CS CT AJ BD CU AU CV CW CX CY Y
  CZ DA CA AJ DB CG CY AJ CZ DA DC CF DD DE DF CV DG DH Q DI CC DJ DC CF DK DL DM@2 DN@2 DO ~ A ~ DP ~ DQ ~ DR@4 DS@3
>`.pickRestart({
  A: "~@15 f2", B: "eb2@2 ~ db2 ~@11 c2", C: "eb2@2 ~ f2 ~@3 c2 eb2@2 ~ f2 ~@3 bb1", D: "d2@2 ~ f2 ~@11 bb1",
  E: "d2@2 ~ f2 ~@3 bb1 d2@2 ~ f2 ~@3 c2", F: "eb2@2 ~ f2 ~@11 c2", G: "eb2@2 ~ f2 ~ d3@2 ~ c3@6 ~ f2",
  H: "[g2@2 ~ bb2 ~@3 bb1@8 ab1@8 g1@8 c2]/2", I: "ab2@2 ~ g2 ~@3 f2 bb2@4 bb2@4, ~@8 a2 ~@3 a2 ~@3",
  J: "bb2 ab2 ~ f2 eb2@2 ~ db2@4 bb1@4 db2", K: "[d2@2 ~ f2 ~@3 a1@8 ab1@8 g1@8 ~]/2", L: "db2@2 ~ c2 ~@11 c2",
  M: "g2@2 ~ bb2 ~@3 eb2@5 bb2@4", N: "e2@4 b2@4 a1@2 ~ a1 e2@4", O: "d2@2 ~ d2 db2@4 d2@2 ~ d2@4 d1",
  P: "d2 a2 f2 gb2", Q: "g2@3 d2 a2@4 b2@3 d2 d3@3 d2", R: "c2@2 ~ c2 g2@4 g2@3 d2 d3@3 d2", S: "c2 g2 e2 d2",
  T: "c2 d2 eb2 e2", U: "[f2@3 ~ bb2@2 ~ a2@4 g2@4 f2@4 eb2@4 db2@4 b1@5]/2",
  V: "[e2@2 ~ f2 ~@11 g2@5 a1@4 bb1@4 c2@3 c1]/2", W: "d2@3 f1 f2@3 ~ d2@4 d2@3 f1", X: "d2@2 ~ ab2@5 eb3@4 g2@4",
  Y: "c2 c3 g2 eb2", Z: "f2@3 f2@2 c2@3 f1@4 f2@4", AA: "db2@4 bb1@3 bb0 bb1@4 f2@4", AB: "bb1@4 f2@4 bb2@4 f2@3 db2",
  AC: "c2@4 d2@3 d1 c2@4 db2@4", AD: "c2@3 g1 g2@3 g1 a1@2 ~ d2@4 d1", AE: "d2@3 d1 db2@4 d2@4 eb2@3 eb1",
  AF: "d2@2 ~ d2 f2@4 g2@3 g1 g2@4", AG: "~@7 eb2@5 f2 ~@3", AH: "[gb2 ~@6 ab2@4 ab2@4 a2@5 e2@4 bb1@3 bb0 bb1@4]/2",
  AI: "d2@2 ~ d2 gb2@4 g2@2 ~ g2 b1@4", AJ: "c2@2 ~ c1 d2@4 eb2@4 g2@3 c2", AK: "c2@3 g1 g2@3 g1 db2@2 ~ db2 a1@4",
  AL: "bb1@4 f2@4 bb2@4 f2@3 b1", AM: "bb1@4 gb2@4 g2@2 ~ g2 d3@4", AN: "c2@4 db2@4 c2@3 gb1 gb2@3 gb1",
  AO: "c2@3 c1 f2@3 f1 f2@2 ~ f2 a1@4", AP: "bb2 f2 c2 a1", AQ: "bb2 f2 eb2 bb2", AR: "d2@3 a1 e2@4 gb2@3 a1 a2@3 a1",
  AS: "d2@3 d1 db2@3 db1 d2@4 d2@4", AT: "g2@4 d2@3 d1 g2@4 d3@4", AU: "g2 a2 b2 d3", AV: "c2 c3 g2 e2",
  AW: "c2@3 c1 c2@4 c3@4 g2@4", AX: "f2@3 f1 f2@3 f1 f2@3 f1 f2@4", AY: "~@11 f2@4 f1", AZ: "f2@3 a1 eb2@3 ~ d2@4 c2@4",
  BA: "f2@3 gb1 db2@4 eb2@3 gb1 gb2@3 gb1", BB: "f2 c2 d2 f2",
  BC: "[f2@4 eb2@4 d2@4 db2@3 c2@5 c2@3 db2@5 db2@3 d2@5 d2@3 eb2@5 eb2@3 d2@5 ab1@3 g1@4 g2@3 ~ c2@4 c1 d2@4 eb2@4 g2@3 c2]/5",
  BD: "f2 c3 a2 f2", BE: "bb1@3 f1 c2@4 d2@3 f1 f2@3 f1", BF: "d2@3 d1 d2@4 g2@3 d2 d3@3 d2", BG: "c2 g2 eb2 c2",
  BH: "f2@3 c2 c3@3 ~ a2@4 f2@3 c2", BI: "bb1 bb2 f2 d2", BJ: "ab2@4 eb3@4 g2@3 d2 d3@3 d2",
  BK: "c2@4 g2@4 c3@4 g2@3 gb2", BL: "bb1@3 f1 f2@3 ~ d2@4 bb1@3 f1", BM: "d2@3 d1 d2@4 g2@2 ~ g2 d3@4",
  BN: "c2@3 c1 d2@4 eb2@4 g2@3 c2", BO: "bb2 bb1 d2 f2", BP: "bb1@4 bb1@4 a1@2 ~ a1 db2@4",
  BQ: "d2@4 a2@4 d3@4 a2@3 eb2", BR: "g2@3 d2 d3@3 ~ b2@4 g2@3 d2", BS: "c2 g2 e2 c2", BT: "c3 c2 e2 g2",
  BU: "b1@3 f1 db2@4 d2@3 f1 f2@3 f1", BV: "f2@2 ~ f1 eb2@4 d2@4 c2@3 b1", BW: "c2 d2 eb2 g2",
  BX: "bb1@3 bb0 c2@4 b1@4 b1@4", BY: "bb1@3 bb0 bb1@4 f2@4 g2@4", BZ: "c2 c3 f2 d2", CA: "g2 d3 b2 g2",
  CB: "c2@4 d2@4 eb2@4 g2@3 c2", CC: "f2 g2 a2 c3", CD: "d2 eb2 d2 bb1", CE: "g2@3 g1 g2@4 g2@2 ~ g2@5",
  CF: "c2@3 g1 g2@3 ~ eb2@4 c2@3 g1", CG: "d3 d2!2 f2", CH: "db2@4 ab2@4 g2@2 ~ gb2@5",
  CI: "gb2@4 db3@4 gb2@2 ~ f2@4 f1", CJ: "f2@2 ~ f2 e2@4 f2@2 ~ bb1@5", CK: "bb1 f2 d2 bb1",
  CL: "bb1@3 f1 f2@3 f1 bb1@2 ~ d2@5", CM: "d2 g2 eb2 d2", CN: "d2 d3 a2 gb2", CO: "g3@3 ~ g3@4 f3@3 ~ f3@4",
  CP: "e3@3 ~ e3@4 d3@3 ~ d3@4", CQ: "c2@3 c1 c2@4 c2@3 ~ c2@2 ~ f2",
  CR: "[~@7 f2 c3@3 db3@4 c3@4 ab2@4 f2@4 d2@4 db2@5 eb2@4 f2@4 ab2@4]/3", CS: "bb1@2 ~ bb1 f2@4 ab2@2 ~ ab2 eb3@4",
  CT: "g2@2 ~ g1 f2@4 e2@4 d2@3 db2", CU: "d2@4 a2@4 d3@4 a2@3 ab2", CV: "c3 c2 eb2 g2",
  CW: "eb2@3 c2 g2@4 a2@3 c2 c3@3 c2", CX: "d2 f2 d2!2", CY: "b1 db2 d2 f2", CZ: "a1@4 e2@4 a2@4 e2@3 a2",
  DA: "ab2@3 eb2 bb2@4 c3@3 eb2 eb3@3 eb2", DB: "eb2 g2 a2 c3", DC: "g2@3 b1 f2@3 ~ e2@4 d2@4", DD: "f2 a2 c3 c2",
  DE: "d2 a2 f2 d2", DF: "db2@4 ab2@4 db3@4 ab2@3 db2", DG: "a1 e2 db2 a1", DH: "ab2 eb3 c3 ab2", DI: "gb2 ab2 bb2 db3",
  DJ: "ab2 bb2 c3 eb3", DK: "ab2 f2 gb2 bb2", DL: "d2@3 a1 e2@4 f2@3 a1 a2@3 a1",
  DM: "[db2@4 ab2@4 e2@4 db2@2 ~ f1@17]/2", DN: "[~@3 f1@5 f1@6 ~ f1@17]/2", DO: "~@3 f1@5 f1@6 ~ c2", DP: "~@15 d2",
  DQ: "~@15 g1", DR: "[~@15 c2@29 ~@3 f1@5 a1@4 c2@4 eb2@4]/4", DS: "[f2@4 gb1@3 f1 ~@7 [bb1,f2]@33]/3",
})).s("gm_acoustic_bass").gain(0.24).pan(0.3)

// chords · piano
const piano = note(`<
  A B@6 C@2 D ~ E@2 F G H I J K L M N O@3 P@2 Q R S T@2 ~ U V W X Y Z@2 AA AB AC AD@2 AE AF AG AH AI AJ AK@2 AL AM AN AO
  AP@2 AQ AR AS@6 AT AU@2 AV AW AX AY@2 AZ BA BB BC BD@2 BE@3 BF BG BH BI@2 AB BJ BK@2 BL BM@2 BN AB BO BP@3 BQ@2 BR@2
  BS BT BU@2 BV BW BX BY BZ CA CB CC CD ~@2 CE CF CG BF AB CH@2 CI CJ CK CL CM CN@2 CO@3 CP CQ CR BB CS CT CU CV CW CX@4
  CY@2 CZ DA DB@3 DC DD DE@5 ~@7 DF@7
>`.pickRestart({
  A: "~@15 [f2,c3]", B: "[[eb2,bb2]@2 ~ [db2,ab2] ~@3 [eb4,e4,f4]@81 ~@8]/6",
  C: "[~@7 [bb2,g3,c4,d4,f4]@8 [ab2,f3,bb3,db4,gb4]@8 [g2,f3,a3,d4,gb4]@8 c3]/2", // Gm7 Gbmaj7 D
  D: "[ab2,db3,gb3]@2 ~ [g2,c3,f3] ~@12", E: "[~@7 [a2,g3,db4,f4]@8 [ab2,gb3,c4,f4]@8 [g2,f3,b3,d4]@8 ~]/2",
  F: "[db3,gb3,b3]@2 ~ [c3,f3,bb3] ~@11 c3", G: "eb3@2 ~ f3 ~ d4@2 ~ c4@6 ~ f3", H: "g3@2 ~ bb3 ~@3 [eb3,c4,f4]@8 ~",
  I: "[e2,g3,b3,d4] ~@6 [a2,db3,f3,g3]@7 ~ ab2", J: "[e4,a4] ~@8 [c4,e4,g4,a4] ~@3 [c4,e4,gb4,a4] ~@2",
  K: "[gb3,a3,c4,gb4]@9 ~@3 [d3,c4,gb4,a4] ~@3", L: "~@3 [f3,c4,d4,a4] ~@4 [f3,c4,d4,a4] ~@6 e3",
  M: "[c2,e3,g3,a3]@6 ~ b2 ~ [b3,d4,f4,a4] ~@2 g2@2 ~@2", N: "~@3 [e3,bb3,d4,g4] ~@4 [e3,bb3,d4,g4] ~@6 eb3",
  O: "[[e3,bb3,d4,g4] ~@3 [e3,bb3,d4,g4]@8 ~@3 c4@2 ~@3 bb2@2 ~ a2@4 g2@4 f2@4 eb2@4 db2@4 b1@5, ~@15 g4 ~@32]/3", // Em7b5
  P: "[e2@2 ~ f2 ~@11 [g2,eb3,g3,bb3]@5 [a2,ab3,c4,eb4] ~@6 [f3,bb3,db4,ab4] ~@4]/2", Q: "~@3 [bb3,d4,f4,bb4,d5]@12 ~",
  R: "[d3,bb3,d4] ~@4 [db4,eb4,gb4,bb4] ~@2 ab2@2 ~@3 [b3,d4,f4,g4] ~@2", // Gm Ebm7 G7
  S: "~@3 [c3,g3,c4,g4] eb4@2 ~ g3 [bb3,eb4]@2 ~@5 eb3", T: "[[f2,bb3,c4,eb4] ~@14 db4@2 ~@15, ~@15 g4 ~@16]/2",
  U: "[eb3,bb3,c4,g4] ~@3 [d2,f3,a3,c4]@3 ~@4 [c3,g3,c4,g4] ~@4", V: "~@11 [c4,f4]@2 ~@3",
  W: "[d2,d3,f3,g3]@4 [db3,bb3,db4,e4] ~@8 [g3,bb3,d4,f4] ~@2", X: "[d3,g3,c4,d4] ~@10 g2 [d4,f4]@2 ~@2",
  Y: "~@7 [eb2,f3,ab3,db4]@5 [f2,g3,bb3,eb4] ~@3", // Db Eb
  Z: "[[gb2,db3,eb3,bb3] ~@6 [ab2,gb3,db4]@4 [ab2,gb3,db4]@4 [a2,g3,db4]@4 [db3,g3,bb3,eb4] ~@7 [bb2,f3,c4,f4] db4@2 ~ f3]/2", // Ebm7 Dbsus4 A7 Eb7 Bbsus2
  AA: "~@3 [gb3,c4,d4,bb4] ~@3 [g2,f3,ab3,b3]@7 ~@2", AB: "~ [bb3,c4,eb4,g4] ~@2 c3@2 ~@2 g4@2 eb4@2 ~@4, ~@8 eb4 ~@7",
  AC: "~@3 [bb3,eb4,g4,bb4,c5]@5 [e3,bb3,db4,g4] ~@7", // Cm7 Edim
  AD: "[~@3 [g3,d4,f4,g4,c5]@12 [bb1,d3,f3,g3]@7 ~ a2 [g2,b3,eb4,f4] ~@7]/2", // Gsus4 Gm7 Gaug
  AE: "~@3 [eb3,bb3,c4,g4] ~@7 [bb3,eb4,gb4,bb4,c5]@4 ~", // Cm7 Cm7b5
  AF: "~@3 [bb3,e4,ab4,bb4,d5] ~@3 [eb3,a3,c4,g4] ~@3 [eb3,bb3,c4,g4] ~@4", // Bb7 Am7b5 Cm7
  AG: "~@3 [a3,d4,f4,a4,c5]@5 [eb3,bb3,c4,g4] ~@7", AH: "~@3 bb2 d4@2 ~@2 [eb2,g3,bb3,db4] ~@7",
  AI: "[gb3,c4,gb4]@6 ~@2 f4 gb4@6 ~, a4@2 ~@6 [d3,c4,a4]@5 ~@3", // Gbdim D7
  AJ: "~ [g3,bb3,db4,f4] ~ [f3,b3,eb4,ab4]@2 ~@4 [c4,d4,gb4,a4] ~@2 d3@2 ~@2", // Gm7b5 Fm7b5 D7
  AK: "[~@3 d4@2 ~@6 [g2,g3,d4,g4] e4@2 ~@2 [f3,g3]@9 ~@3 [g2,b3,f4,g4] ~@3, ~@3 a4 ~@11 [b3,f4]@10 ~@7]/2", // G5 Fsus2 G7 Bdim
  AL: "[c2,e3,g3,bb3]@6 ~ b2 [c3,g3,e4,g4]@5 ~@3", AM: "[c2,g3,bb3,db4] ~@3 [db4,ab4] ~@6 [e3,bb3,d4,g4] ~@4",
  AN: "~@3 [eb3,a3,c4,g4]@2 ~@3 [eb3,a3,b3,gb4] ~@4 [a3,b3,eb4,gb4] ~@2", AO: "~@12 [f2,bb3,c4,eb4] ~@3",
  AP: "[~@3 [bb3,eb4,g4,bb4,c5]@12 ~ [b3,eb4]@2 ~@6 [f3,eb4,b4] ~@3 [eb3,b3,eb4,gb4] ~@3, ~@15 [gb4,eb5]@2 ~@7 gb3@3 ~@5]/2", // Cm7 B Fm7b5 B Ebm
  AQ: "~@3 [bb3,d4,f4,bb4,d5]@13", AR: "~@3 [f3,b3,d4,ab4] ~@4 [f3,b3,d4,ab4] ~@6 e3",
  AS: "[[f2,bb3,c4,eb4] ~@11 db3@3 c3@5 c3@3 db3@5 db3@3 d3@5 d3@3 eb3@5 eb3@3 d3@5 ab2@3 g2@4 g3@3 ~ [bb3,e4,g4] ~@3 [bb3,eb4,g4,bb4,c5]@12 eb3@12 c2 ~@4, ~@15 [f3,bb3,eb4]@8 [gb3,b3,e4]@8 [g3,c4,f4]@8 [ab3,db4,gb4]@8 [g3,c4,f4]@8 [f3,b3,eb4]@7 ~ c3@4 ~@12 [a3,c4]@15 ~@2]/6", // Fsus4 Edim Cm7 Ebsus2 Esus2 Csus4 Dbsus4 Csus4 …
  AT: "~@3 [bb2,f3,d4,f4] db4@2 ~ f3 [bb3,d4]@2 ~@6", // Bb
  AU: "[~@3 [f3,c4,d4,a4] ~@7 g2 [d4,f4]@2 ~ [c2,eb3,g3,bb3]@7 ~ b2 [c3,g3,eb4,g4]@5 ~@3]/2", // Dm7 Dm Cm7 Cm
  AV: "[eb3,a3,eb4]@6 ~@2 d4 eb4@6 ~, f4@2 ~@6 [f2,a3,f4]@5 ~@3", AW: "[bb1,d3,f3,bb3]@6 ~ a2 [bb2,f3,d4,f4]@5 ~@3",
  AX: "[ab2,c4,eb4,gb4] ~@7 [g2,b3,d4,f4] ~@7", // Ab7 G7
  AY: "[~ [bb3,c4,eb4,g4] ~@2 c3@2 ~@2 g4@2 eb4@2 ~@4 [eb3,f3]@9 ~@3 [f2,a3,eb4,f4] ~@3, ~@8 eb4 ~@6 [a3,eb4]@10 ~@7]/2", // Cm7 Ebsus2 F7 Adim
  AZ: "~ [bb3,d4,f4] ~@2 bb2@2 ~@2 f4@2 d4@2 ~@4, ~@8 db4 ~@7", BA: "~@3 [d3,a3,d4,a4] f4@2 ~ d4@2 ~@7, ~@7 ab4 ~@8",
  BB: "[c3,bb3,eb4,g4]@15 ~", BC: "~@3 [a3,eb4,gb4,a4,c5]@13",
  BD: "[[bb2,f3,d4,f4]@15 [d3,bb3,d4,f4]@2 ~@10 a2 [bb3,db4]@2 ~@2]/2", // Bb Bbm
  BE: "[[gb3,c4,e4,a4] ~@11 [c4,gb4,a4,e5]@3 [gb3,c4,gb4]@7 ~@2 f4 gb4@5 ~ [f3,b3,f4]@7 ~@2 e4 f4@6 ~, ~@12 b3 ~@2 a4@2 ~@7 [d3,c4,a4]@5 ~@2 g4@2 ~@7 [g2,b3,g4]@5 ~@3]/3", // Gbm7b5 Gbdim Fdim D7 G
  BF: "[f3,b3,d4,g4] ~@3 [f3,b3,d4,g4]@4 ~@8", BG: "~@3 [c3,g3,d4,g4] eb4@2 ~ g3 [bb3,f4]@2 ~@5 eb3",
  BH: "~@3 [bb3,e4,g4,bb4,d5]@13", // Em7b5
  BI: "[[eb3,a3,c4,f4] ~@11 [a3,eb4,f4,c5]@3 d3@12 f2 ~@4, ~@12 g3 ~@2 [ab3,b3]@15 ~@2]/2", // F7 Abm
  BJ: "eb3@11 c2 ~@4, [a3,c4]@7 ~", // Am
  BK: "[~ [bb3,d4,f4] ~@2 bb2@2 ~@2 f4@2 d4@2 ~@3 d4@2 ~@7 [g2,b3,d4,f4] ~@7, ~@8 db4 ~@6 a4 ~@16]/2", // Bb G7
  BL: "~@3 c3 [c4,eb4]@2 ~@2 [bb3,g4]@2 ~ g2 [bb3,eb4]@2 ~@2", // Cm Eb Eb5
  BM: "[eb3@11 c2 ~@3 bb3@2 ~@10 [bb3,eb4,gb4,bb4,db5]@5, [a3,c4]@14 ~ f4 ~@16]/2", // Ebm7 Am
  BN: "~@4 [bb2,g3,c4,d4] ~@6 [g2,f3,g3,b3]@5", BO: "[f2,eb3,f3,bb3] ~@7 [f2,bb3]@2 ~@6, ~@8 [eb4,g4] ~@7",
  BP: "[~@3 [d3,bb3,d4,f4] ~@4 [d3,bb3,d4,f4] ~@7 [b3,f4]@2 ~@6 [gb3,f4,b4] ~@3 [f3,b3,eb4,g4] ~@2 [eb3,bb3,eb4]@7 ~@2 eb4 eb4@6 ~, ~@15 [g4,eb5]@2 ~@7 [g3,eb4]@3 ~@4 g4@2 ~@7 [c3,bb3,g4]@5 ~@3]/3", // Bb Bdim B Ebaug Eb5 Cm C7
  BQ: "[[f2,eb3,f3,bb3] ~@7 [f2,bb3]@2 ~@5 e4@2 ~@6 [f3,c4,e4,a4]@2 ~@6 [db3,ab3,bb3,f4], ~@8 [eb4,g4] ~@6 a4 ~@16]/2", // Ebsus2 Bb5 Fmaj7 Bbm7 Eb
  BR: "[[f3,b3,eb4,g4] ~@15 [c3,bb3]@14 ~@2, ~@15 [eb4,g4]@15 ~@2]/2", // Ebaug C7 Eb
  BS: "[a3,eb4,f4,db5]@2 ~@6 [e3,eb4,a4] ~@3 [eb3,a3,db4,f4] ~@3, ~@8 [f3,db4]@3 ~@5", // Aaug A Dbaug Db
  BT: "~ [a3,bb3,d4,f4] ~@2 d3@2 ~@2 f4@2 d4@2 ~@4, ~@8 db4 ~@7", // Bbmaj7
  BU: "[~ [c4,db4,f4,ab4] ~@2 db3@2 ~ [f3,b3,eb4,g4]@2 ~@6 [f3,bb3,db4,ab4]@2 ~@12 [a3,c4,eb4,ab4] ~@2]/2", // Dbmaj7 Ebaug Bbm7 Ab
  BV: "[f2,a3,c4,eb4] ~@7 [c4,ab4] ~@6 [d3,g3,c4,f4]", BW: "[c4,f4] ~@10 f2 [f3,g3,d4]@2 ~@2",
  BX: "~@3 bb2 [c4,d4]@2 ~@2 [d3,g3,c4,f4] ~@6 [a3,eb4,g4,a4,c5]", BY: "[d2,eb3,g3,a3]@6 ~ b2 [d3,g3,eb4,g4]@5 ~@3",
  BZ: "[gb3,bb3,c4,gb4]@9 ~@3 [d3,c4,gb4,bb4] ~@3", CA: "~@3 g2 [eb4,f4]@2 ~@2 [b3,a4]@2 ~ d2 [b3,f4]@2 ~@2",
  CB: "[b3,f4,a4]@13 ~@3, g2@15 ~", CC: "~@3 [f3,bb3,d4,g4] ~@4 [f3,bb3,d4,g4] ~@6 eb3",
  CD: "~ [bb3,db4,e4,gb4] ~@2 c3@2 ~@3 [bb3,db4,e4,gb4] ~@2 [c3,c4]@2 ~ [f3,f4]", CE: "~@3 [c4,f4,ab4,c5,eb5]@13",
  CF: "[eb3,g3,bb3,eb4]@9 ~@3 [c3,bb3,eb4,g4] ~@3", CG: "[bb3,f4] ~@7 [ab2,c4,eb4,g4] ~@7",
  CH: "[[a3,c4]@14 ~ [f3,c4,d4,a4]@2 ~@11 [c4,f4,a4,d5]@3 ~, eb3@11 ~@17 b3 ~@3]/2", // Am Dm7
  CI: "[b3,f4,g4,d5]@2 ~@6 [gb3,f4,b4] ~@3 [f3,b3,d4,g4] ~@3, ~@8 [g3,d4]@3 ~@5", CJ: "~@3 [bb3,eb4,g4,bb4,c5]@13",
  CK: "[eb3,a3,c4,gb4] ~@3 [eb3,a3,c4,gb4]@4 ~@8", CL: "~@3 [d3,f3,c4,f4] db4@2 ~ f3 [g3,d4]@2 ~@6",
  CM: "~@3 [d3,ab3,b3,f4] ~@4 [d3,ab3,b3,f4] ~@7", // Ddim
  CN: "[~@3 [eb3,bb3,c4,g4] ~@4 [eb3,bb3,c4,g4] ~@6 [db3,g3,db4]@7 ~@2 c4 db4@6 ~, ~@15 e4@2 ~@7 [a2,g3,e4]@5 ~@3]/2", // Cm7 Dbdim A7
  CO: "[[eb4,bb4] ~@10 eb2 [bb3,c4,gb4]@2 ~@2 [f3,ab3]@9 ~@3 [g2,b3,f4,ab4] ~@2 c4@2 ~@10 g2 [g3,bb3,eb4]@2 ~@2, ~@15 [b3,f4]@10 ~@6 g4 ~@16]/3", // Eb5 Cm7b5 Fm Fdim Eb Bdim
  CP: "[eb2,eb3,f3,a3] ~@7 [eb2,a3]@2 ~@6, ~@8 [eb4,gb4] ~@7", CQ: "~@3 [d3,g3,c4,f4] ~@4 [d3,g3,c4,f4] ~@6 db3",
  CR: "[d3,ab3,b3,f4] ~@3 [d3,ab3,b3,f4]@4 ~@8", CS: "db3@11 e2 ~@4, [g3,b3]@7 ~",
  CT: "~@3 [gb3,c4,eb4,bb4] ~@4 [gb3,c4,eb4,bb4] ~@7", CU: "[g2,b3,f4,ab4]@15 ~",
  CV: "[eb3,bb3,eb4]@6 ~@2 eb4 eb4@6 ~, g4@2 ~@6 [c3,bb3,g4]@5 ~@3", // Eb5 C7
  CW: "[bb3,eb4,g4,c5]@2 ~@6 [e3,eb4,bb4] ~@3 [eb3,bb3,c4,g4] ~@3, ~@8 [f3,c4]@3 ~@5", // Cm7 Eb Cm7 F5
  CX: "[~@3 [d3,a3,d4,a4] f4@2 ~ a3 [c4,f4]@2 ~@6 [f3,b3,eb4] ~@3 [f3,b3,eb4,ab4]@4 ~@8 [c3,bb3]@14 ~@2 [db3,g3,bb3] ~@3 [db3,g3,bb3,e4]@4 ~@8, ~@15 ab4@2 ~@14 [eb4,g4]@15 ~ e4@2 ~@15]/4", // D5 F5 Fm7b5 C7 Gdim Dbdim Eb
  CY: "[~@3 [c4,gb4,bb4,c5,eb5]@12 ~ [g2,b3]@14 ~@2, ~@15 [f4,g4]@15 ~@2]/2", // Cm7b5 G Fsus2
  CZ: "~@3 [gb2,gb3,db4,ab4] eb4@2 ~ gb3 [bb3,f4]@2 ~@5 eb3", DA: "[eb3,a3,c4,g4] ~@3 [eb3,a3,c4,g4]@4 ~@8",
  DB: "[~@3 [ab2,bb3,eb4,bb4] f4@2 ~ bb3 [c4,gb4]@2 ~@6 [f3,g3]@9 ~@3 [g2,b3,f4,g4] ~@2 c4@2 ~@10 g2 [g3,bb3,eb4]@2 ~@2, ~@15 [b3,f4]@10 ~@6 g4 ~@16]/3", // Absus2 Cdim Fsus2 G7 Eb Bdim
  DC: "[db3,eb3,gb3,db4]@9 ~@3 [ab2,gb3,db4,eb4] ~@3", DD: "[d3,c4,f4,a4]@15 ~",
  DE: "[~@3 [b3,e4,ab4,b4,eb5]@10 ~@6 [bb3,eb4,g4]@5 [c4,f4,bb4]@6 ~@5 [f1,f2]@5 [f1,f2]@6 ~@5 [c4,f4,bb4]@5 [d4,g4,c5]@6 ~@5 [f1,f2]@5 [f1,f2]@6 ~ [c2,c3,f4,bb4,eb5], ~@15 [f2,f3]@16 [db4,g4,c5]@15 ~ [f1,f2]@16 [f4,bb4,eb5]@15 ~@2]/5", // Emaj7 Eb Fsus4 F Fsus4 Csus2 F Cm7 …
  DF: "[~@35 eb4@5 c4@6 ~ [f2,eb3,a3,d4,f4]@23 ~@9 [bb1,f2,d3,e3,bb3,e4]@33, ~@15 [c2,c3]@32 ~@65, ~@23 f3@23 ~@66, ~@14 bb3@9 ~@33]/7", // Dm Bb C
})).s("gm_piano").gain(0.17).pan(0.3)

// other · alto sax
const alto_sax = note(`<
  A B ~@3 C ~ D@2 E ~ F@2 G ~ H@2 ~@8 I@2 J K L M N O@2 P@2 Q R S@3 ~@2 T U V@5 W X@2 Y Z AA@5 AB AC ~@4 AD ~@2 AE@3 AF
  C AG AH AI@4 AJ@8 ~@14 AK@3 ~ AL@2 ~ AM@4 ~ AN@3 ~@2 AO@3 ~@44 AP ~ AQ ~ AR ~ AS AT@6
>`.pickRestart({
  A: "~@15 bb3", B: "c4@2 ~ eb4 ~@12", C: "~@7 eb4 ~@8", D: "[~@7 d4@8 db4@8 d4@8 c4]/2", E: "f4@2 ~ g4 ~@12",
  F: "[~@7 db4@8 c4@8 b3@8 c4]/2", G: "b3@2 ~ bb3 ~@12", H: "[~@7 f4@8 d4@8 eb4 f4@8, ~@24 e4 ~@7]/2",
  I: "[e4@2 ~ f4 ~@11 c4@13 c4@4, ~@28 b3 ~@3]/2", J: "bb4@2 ~ g4 ~@12", K: "~@7 gb4@2 ~@2 gb4 g4@3 g4",
  L: "g4@2 ~ eb5 ~@12", M: "~@5 a4@3 g4@6 ~@2", N: "g4@2 ~ bb4 ~@12", O: "[~@15 eb4@4 eb4 f4@3 f4 eb4@3 eb4 c4 ~@3]/2",
  P: "[eb4 ~@6 eb4@8 f4@4 f4 g4@3 g4 f4@3 f4 d4 ~@3]/2", Q: "f4 ~@6 a4@4 ~@5", R: "~@12 eb4 ~@3",
  S: "[c4 ~@6 db4@4 db4@4 db4@8 c4 ~@7 f4@8 e4 ~@8]/3", T: "~@3 c4 d4@3 c5@4 db5 c5@3 bb4",
  U: "c5@3 bb4 a4@3 g4 f4 [f4,gb4] ~ eb4 db4@3 b3", // Gbmaj7
  V: "[bb3 ~@6 c5 bb4@3 eb4@4 ab4@4 g4@4 bb3@4 f4@4 d4@4 bb3@4 g3@4 c4@4 c4@4 d4@4 a4@4 f4@4 a4@13 ~@3 a4]/5",
  W: "c5@3 b4 bb4@3 eb4 a4@3 bb4 a4@3 bb4", X: "[a4@3 g4 ab4@3 e4@17 ~@2 a3 b3 db4 d4 e4 f4]/2",
  Y: "g4@10 ~ g4@2 ab4@3", Z: "bb4@3 a4 ab4@3 eb4 a4@3 bb4 a4@3 gb4",
  AA: "[f4@3 e4 f4@3 b4@12 gb4 bb4@3 f4 ab4 gb4 ~ eb4 e4@3 eb4@33 c4@16]/5", AB: "b3@3 ~", AC: "eb4@2 ~ f4 ~@12",
  AD: "bb3@2 ~ b3 ~@12", AE: "[~@15 g4@12 f4 eb4@3 d4@17]/3", AF: "~@3 f4@2 ~@3 eb4@8", AG: "~@7 b3 ~@8",
  AH: "~@7 c4 ~@8", AI: "[~@7 b3 ~@3 ab4 g4@3 f4@49]/4", AJ: "[~@11 bb4 a4@3 d4@113]/8",
  AK: "[~@15 f4@12 g4 ab4@3 f4@8 db4 eb4@2 ~ f4 ~@4]/3", AL: "[~@15 c4@16 ~]/2", AM: "[~@15 eb4@13 db4 eb4 ~ d4@33]/4",
  AN: "[~@5 db4@11]/3", AO: "[~@8 g4@3 ab4@4 g4@4 eb4@4 c4@4 e4@4 c4@16 eb4]/3", AP: "~@15 g4", AQ: "~@15 f4",
  AR: "~@15 b3", AS: "~@15 eb4", AT: "[~@7 f4@24 g4@24 ~@4 ab3 a3@3 bb3@33]/6",
})).s("gm_alto_sax").gain(0.43).pan(0.7)

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

// other · tenor sax
// … 405 more lines

More by Ellington