Strudelify

Just One of Those Things

Cole Porter

KeyD majorTempo149 bpm
0:00/0:00
// Just One of Those Things — Cole Porter
// 149 bpm, 2/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 242 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(149/2)

// 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 · "Bass"
const bass = note(`<
  ~ A@3 B C D@2 E F G H I J K J L M N O@2 P Q R S T Q U V W X Y@2 Z AA AB AC AD AE AF AG AH@2 H AI J AJ AK AL AM N AM AN
  P AO R AP P Q AQ AR AS@2 AT AU Z AM AV AC AW Z AX@2 AY AZ BA BB AM BC BD BE AY AP AY BF BG BH BI BJ BK BL BM BN AB BO
  BP AA BQ@2 BR@2 BS@2 BT@2 F G H I J K J L M N O@2 P Q R S T Q U V W X Y@2 BU@2 BV BW BX BY@2 BZ CA@2 CB CC AP CD CE CF
  CG CH CG CI CJ CK CL CM R S P J CN@2 CO CP CQ CR@2 E AJ CS CT CU AJ CV CW CX BJ CG BJ CY CZ DA AJ DB AY CE V DC DD DE
  DF DG BG BH AV CQ DH@2 DI DJ@2 DK DL DM CA@2 CB CC AP CD CE CF CG CH CG CI BI DN DO@2 ~@11 DP@3 DQ DR DS@2 DT@6 ~
>`.pickRestart({
  A: "[b1@15 f#1@12 ~@2 d2@5 ~@3 d2@4 ~@4 d2 ~@2]/3", B: "e2@3 ~@2 e2@2 e2@4 ~@2 e2@3", C: "b1 ~ b1@2",
  D: "[f#1@12 ~@2 d2@4 ~@4 d2@3 ~@4 d2@2 ~]/2", E: "e2@15 ~", F: "b1@15 ~", G: "f#1@7 ~", H: "b1", I: "f#1@8 b1@7 ~",
  J: "f#2@15 ~", K: "c#2@15 ~", L: "c#2@7 ~ f#2@7 ~", M: "d2", N: "a1@7 ~", O: "[d2@14 ~ a1@8 ~ d2@7 ~]/2",
  P: "f#2@3 ~", Q: "f#2@7 ~", R: "g2@3 ~", S: "g2@7 ~", T: "f#2@11 ~@5", U: "f2@11 ~@5", V: "f2@7 ~", W: "e2@11 ~@5",
  X: "e2@13 ~@3", Y: "a2@13 ~@3", Z: "d2@3 ~", AA: "d2@13 ~@3", AB: "d#2@11 ~@5", AC: "d#2", AD: "e2@3 ~, d2 ~@15",
  AE: "e2", AF: "a1@8 ~@5 a1@3", AG: "e1@7 ~ a1@6 ~@2", AH: "[b1@15 f#1@15 ~@2]/2", AI: "f#1@7 ~ b1@7 ~", AJ: "c#2@7 ~",
  AK: "f#2@9 ~@4 f#2@3", AL: "c#2@4 f#2@3 ~", AM: "d2@15 ~", AN: "a1@7 ~ d2@7 ~", AO: "f#2@13 ~@3", AP: "g2@15 ~",
  AQ: "f2@3 ~", AR: "f2@15 ~", AS: "[e2@10 ~@5 e2@13 ~@4]/2", AT: "a2@11 ~@5", AU: "a2@15 ~", AV: "d#2@3 ~",
  AW: "d2@5 ~@3", AX: "[g2@10 ~@5 d2@7 ~@2 e2@7 ~]/2", AY: "c2@7 ~", AZ: "g2@10 ~@3 g2@3", BA: "c2@15 ~",
  BB: "g2@7 ~ c2@6 ~@2", BC: "a2", BD: "g2", BE: "d3@7 ~ g2@7 ~", BF: "g2@7 ~ c2@8", BG: "e2@3 ~", BH: "e2@7 ~",
  BI: "g#2@3 ~", BJ: "g#2@15 ~", BK: "~ a1@12 ~@3", BL: "e2@10 ~@3 e2@3", BM: "a1@15 ~", BN: "e2 a1", BO: "d#2@7 ~",
  BP: "d2@11 ~@5", BQ: "[c#2@11 ~@5]/2", BR: "[~@5 f#2@26 ~]/2", BS: "[b1@23 ~@9]/2", BT: "[~ e2@25 ~@6]/2",
  BU: "[d2@15 a2@12 ~@3 d2@2]/2", BV: "~@5 a1@3 ~@5 a1@3", BW: "g2@4 ~ g2@2 ~ g2@3 ~@2 b1@3", BX: "c2 ~ c2@2",
  BY: "[g1@12 ~@2 g2@4 ~@4 g2@3 ~@4 g2@2 ~]/2", BZ: "g1@15 ~", CA: "[c2@15 g1@15 ~@2]/2", CB: "c2", CC: "g1@7 ~ c2@7 ~",
  CD: "d2@7 ~", CE: "g2@9 ~@4 g2@3", CF: "d2@4 g2@3 ~", CG: "d#2@15 ~", CH: "a#1@7 ~", CI: "a#1@7 ~ d#2@7 ~",
  CJ: "a2@8 c3@7 ~", CK: "d#3@13 ~@3", CL: "g#2@8 a#2@7 ~", CM: "b2@7 ~@2 g#2@7", CN: "[f2@10 ~@5 f2@13 ~@4]/2",
  CO: "a#2@11 ~@5", CP: "a#2@15 ~", CQ: "d#2@13 ~@3", CR: "[a#2@13 a#1@18 ~]/2", CS: "~ g#2@9 ~@3 g#2@3",
  CT: "~@5 g#2@3 f#2@8", CU: "f2@8 d#2@7 ~", CV: "g#1@7 ~", CW: "c#2", CX: "g#1@8 c#2@7 ~", CY: "d#2@7 ~ g#2@7 ~",
  CZ: "c#2@13 ~@3", DA: "g#2@9 ~@4 g#2@2 ~", DB: "g#2@7 ~ c#2@6 ~@2", DC: "c3@7 ~ f2@7 ~", DD: "a#1",
  DE: "f2@9 ~@4 f2@3", DF: "a#1@15 ~", DG: "f2@4 a#1@3 ~", DH: "[d2@31 ~]/2", DI: "~@7 c2@8 ~",
  DJ: "[~@15 f2@13 ~@4]/2", DK: "f2", DL: "~@5 f2@8 ~@3", DM: "f2@4 ~@4 f2@5 ~@3", DN: "g#2@13 ~@3",
  DO: "[c#2@3 ~ c#2@11 ~]/2", DP: "[~@11 c2@15 g1@12 ~@2 d#2@5 ~@3]/3", DQ: "~ d#2@4 ~@4 d#2 ~ f2@3 ~@2",
  DR: "f2@2 ~ f2@4 ~@2 f2@3 c2@4", DS: "[~@2 c2@4 g1@6 ~ d#2@2 ~]/2",
  DT: "[~@2 d#2@3 ~@4 d#2@2 ~ f2@15 a#1@35 ~@22 d#1@12, ~@21 d#1@7 ~@4, ~@76 d#2@11 ~@9]/6",
})).s("gm_acoustic_bass").gain(0.37)

// other · piano · "Keyboard"
const piano = note("<~@8 A@3 ~ B C D E F G ~ H ~ I J@3 K ~@62 L ~@104 M N ~@47>".pickRestart({
  A: "[~ a4@2, ~@13 b3@35, ~@7 d4@17, ~@5 f#4@11]/3", B: "~@13 g#4@3", C: "a4@4 ~ a#4@3 a4@4 ~@4",
  D: "a#4@4 ~ f#5 ~@8 g#4@2", E: "a4@4 ~ a#4@3 a4@2 ~@6", F: "~@4 a4@2 a#4@2 b4@2 c5@2 ~ c#5@2 ~",
  G: "d5@3 ~@2 b4@2 ~@2 c5@3 ~@4", H: "d6@3 ~@2 c6@2 ~ b5@4 ~@4, ~@3 c#6@4 ~@9", I: "~@8 b4@2 ~@3 c#5@3",
  J: "[f#5@3 ~@29 b4@4 ~ d5@3 b4@4 ~ g#4@3, ~@13 a#4@27 ~@8, ~@15 c#5@25 ~@8, ~@2 e5@3 ~]/3", K: "a4@5 d4@2 ~@9",
  L: "~@5 [g#3,b3,d4,e4]@5 ~@6", M: "c4 c#4 d4 d#4 e4 f4 f#4 g4 g#4 a4 a#4 b4 c5 c#5 d5 d#5",
  N: "e5 f5 f#5 g5 g#5 a5 a#5 b5 c6 c#6 d6 d#6 e6 f6 f#6 ~",
})).s("gm_piano").gain(0.48)

// chords · french horn · "Horn"
const french_horn = note(`<
  ~@25 A@2 B@5 C D@4 E F@2 G ~@8 H@4 I@4 J@2 K@2 L@2 M@2 ~@8 N@4 ~ O@3 P@4 Q@2 ~@10 R@2 S ~@21 T@2 U@2 V@2 W X ~@8 Y Z@2
  AA AB AC AD AE AF@4 AG AH@2 AI AJ@2 ~@6 AK@2 AL@2 AM AN AO@2 AP@2 AQ@2 AR@2 AS@2 AT@4 AU@4 AV@2 AW@2 AX@2 AY@2 AZ@2 BA
  BB BC@4 ~@3 BD@7 ~@8 BE ~@22
>`.pickRestart({
  A: "[[f#3,a3]@31 ~]/2", B: "[[f3,a3]@30 ~ g3@30 ~@2 a3@15 ~@2, ~@31 e3@48 ~]/5", C: "f#3@4 ~ g3@3 f#3@4 e3@2 ~@2",
  D: "[~@8 [f#3,a3,c#4,f#4,a4]@4 e3@3 f#3@4 ~@2 g3@3 f#3@4 e3@3 ~ d#3@29 ~@3, ~@31 f#3@29 ~@4]/4", // F#m
  E: "[e3,g3]@12 ~ e3@3", // Em
  F: "[f#3@4 ~ g3@3 f#3@4 e3@2 ~@7 [c#4,f#4,a4]@7 ~@2 a3@2, ~@15 a3@8 ~@5 d4@2 ~@2, ~@16 f#3@13 [b3,c#4]@2 ~]/2", // F#m Bsus2
  G: "e3 d3 [b2,c#3] a2 ~@12", H: "a3/4", I: "[b3@30 ~ a#3@32 ~]/4", J: "[a3@15 ~]/2", K: "[g#3@29 ~@3]/2",
  L: "[g3@29 ~@3]/2", M: "[a3@13 ~@3]/2", N: "[b3@31 a3@32 ~]/4", O: "[~@15 [b3,b4]@32 ~]/3", P: "[d4@31 c4@32 ~]/4",
  Q: "b3/2", R: "[[g#3,b3,e4]@15 ~]/2", S: "~@5 [f#3,a3,c4,d#4]@5 ~@6",
  T: "[[a3,c#4]@23 ~ [c#4,g4]@4 ~ [g#3,g#4]@3, ~@23 g3@5 d4@4]/2", U: "[~ d#4@27 ~@4, [a3,b4]@29 ~@3]/2",
  V: "[[f#4,a4]@23 ~ f#4@4 ~ g4@3, ~@23 e4@4 ~ d#4@4]/2", W: "[d4,d5]@15 ~", X: "[d4,f#4]@15 ~", Y: "~@8 [g3,d4]@5 ~@3",
  Z: "[[g3,d4]@5 c4@2 ~@6 [g3,d4]@8 ~ c4@2 [g3,d4]@5 ~ c4@2]/2", AA: "[g3,d4]@5 ~ c4@3 ~@7, ~@5 f3@3 ~@8",
  AB: "[g#3,d#4]@3 ~@5 [g#3,d#4]@3 ~@5", AC: "[g3,d4]@11 ~@3 g#3@2, ~@13 d#4@3",
  AD: "~@5 [g#3,d#4]@3 ~@5 [g#3,d#4]@2 ~", AE: "[g3,d4]@7 ~", AF: "[[g3,a#3,d#4,g4]@57 ~@7]/4",
  AG: "[d#4,g4]@5 c4 f4@2 [d#4,g4]@4 ~ f4@2 ~", AH: "[[d4,f4]@6 ~@7 [d#4,f4]@5 ~@3 [d#4,f4]@3 ~@5 [d#4,f4]@2 ~]/2",
  AI: "[b3,d#4]@11 ~@5", AJ: "[[d3,f3,a#3,d4,f4]@31 ~]/2",
  AK: "[~@5 c4 g3 ~@6 [g3,f4]@2 ~ d#4@7 ~@6 [c#4,d#4,g4]@2 ~, ~@5 [a#3,d#4]@2 ~@6 a#3 ~ a#3@7 ~@10]/2", // G7 D#7 D#5
  AL: "[~@5 [c#4,d#4,g4] ~@2 [c#4,d#4,g4]@22 ~@2]/2", AM: "~@3 f#3 ~@4, ~@5 [a#3,c#4]@2 ~@9",
  AN: "[f#3,a#3,c#4]@4 ~@3 [c4,f4], ~@13 g#3@2 ~", AO: "[~@5 [g#3,c4] f4 ~ [g#3,c4,f4]@23 ~]/2",
  AP: "[~@13 [c4,d#5]@7 ~ d5@3 [a#3,c#5]@4 ~ [e3,g4]@3, ~@5 b3 ~@2]/2", AQ: "[~@5 [f3,g#4]@21 ~@6]/2",
  AR: "[~@13 [c#4,f5]@7 ~ [c4,e5]@3 [a#3,d#5]@3 ~@2 [f3,a4]@3]/2", AS: "[~@5 [f#3,a#4]@25 ~@2]/2",
  AT: "[[f3,a#3]@61 ~@3]/4", // A#5
  AU: "[~@8 a#4@2 c5@3 ~@3 a#4@5 a4@2 ~ a#4@5 ~@3 d5@4 ~ f5@19 ~@8, [f3,a#3]@29 ~@2 [f3,a3]@31 ~@2]/4", // A#5 F
  AV: "[~@14 f4@6 ~ [e4,a4]@3 [d#4,g#4]@4 ~ [c4,e4]@3, ~@13 a#4@7 ~@12]/2", AW: "[~@3 [d4,f4]@12 ~]/2",
  AX: "[[a#3,d4]@15 ~]/2", AY: "[c4@7 ~]/2", AZ: "c4/2", BA: "~@7 c4@6 a3 g3 f3", BB: "[d3,e3] c3 [a2,b2] ~@13",
  BC: "[a#3@43 ~@2 d#4@17 ~@2]/4",
  BD: "[~@10 f4@30 ~ d#5@25 ~@6 [a#2,a#3]@29 ~@11, ~@9 a#3@32 ~@31 g3@26 ~@14, ~@5 g#4@28 ~@23]/7", BE: "~@3 [c4,d#4]",
})).s("gm_french_horn").gain(0.3)

// chords · french horn · "Horn" · soft notes
const french_horn_soft = note(`<
  ~@39 A@2 ~@8 B@5 C@5 D@4 E@2 ~@8 F@6 ~@2 G@4 H@4 ~@32 I@2 ~@14 J K L ~@5 M@4 N ~@12 O ~@18 P Q ~@12 R ~@12 S@2 ~@32
>`.pickRestart({
  A: "[~@10 g#4 e4@2 ~@2 f#3@12 ~@5, ~@15 g#3 ~@16]/2", B: "[c4@61 ~@2 f#3@17]/5", C: "[~@15 e3@63 ~@2]/5",
  D: "[e3@15 ~]/2", E: "[e3@13 ~@3]/2", F: "[b4@31 a4@31 ~ [c4,c5]@32 ~]/6", G: "[d5@31 c5@32 ~]/4",
  H: "[b4@31 ~ g#3@30 ~@2, ~@31 g#4@28 ~@5]/4", I: "[~ e3@25 ~@6]/2", J: "~@5 [f3,c4]@2 ~@6 f3@3, ~@12 c4@3 ~",
  K: "~@5 f3@2 ~@9", L: "~@3 f3 ~@3 f3", M: "[d#3@57 ~@7]/4", N: "~@6 c4 ~", O: "g3@7 ~@9", P: "~@7 a4",
  Q: "~@13 a4@2 ~", R: "~@6 b3 ~", S: "[~@7 f3@25]/2",
})).s("gm_french_horn").gain(0.15)

// chords · tenor sax · "Sax 1"
const tenor_sax = note(`<
  ~@2 A@3 ~ B@3 ~@24 C D@5 ~@2 E F G H@2 I J K@7 L M N@2 ~@11 O@3 ~@57 P@3 ~ Q@3 R S@2 T U V W X Y@4 Z AA@2 AB AC@2 ~@14
  AD@2 AE@2 AF@2 AG@2 ~@65
>`.pickRestart({
  A: "[~@13 g4@33 ~@2]/3", B: "[~@4 g4@9 ~@3]/3", C: "~@13 e3@3",
  D: "[~@5 g3@3 f#3@5 ~@2 a3@31 ~ b3@14 ~@4 f#3@4 ~@3 f#3@5 ~@3, ~@61 e3@15 ~@4]/5", E: "~@13 b3@3",
  F: "a#3@4 ~ g#3@2 ~ a#3@4 ~ b3@3", G: "a#3@4 g#3@3 ~ a#3@5 g#3@3",
  H: "[a#3@3 ~ b3 a#3 g#3 ~ a#3@4 b3@10 ~@7 c#4@2 ~]/2", I: "b3@4 ~ a#3@2 ~ b3@4 ~ c#4@3",
  J: "b3@4 ~ a#3@2 ~ b3@4 ~ a#3@2 ~", K: "[b3@4 c#4 ~ b3 ~ b3@5 c#4@8 ~@2 b3 a#3@5 a3@50 g#3@33, ~@11 c4 ~@44]/7",
  L: "~@4 [g3,c4]@4 [a3,d4]@4 [b3,e4]@3 ~", M: "[c4,f#4]@3 ~ e4@4 [a3,d4]@4 ~@2 a3 g3, ~@3 b3@5 ~@5 d4@2 ~, ~@7 c4",
  N: "[[f#3,a3]@7 ~]/2", O: "[~@14 g3@31 ~@3, ~@13 d3@30 ~@5]/3", P: "[~@13 a4@35]/3", Q: "[~@4 g#4@9 ~@3]/3",
  R: "~@8 [d#3,d4]@5 ~@3", S: "[[d#3,d4]@5 c4@2 ~@6 [d#3,d4]@8 ~ c4@2 [d#3,d4]@5 ~ c4@2]/2",
  T: "~ d4@4 ~ c4@3 ~@7, d#3@5 d3@3 ~@8", U: "[f3,d#4]@3 ~@5 [f3,d#4]@4 ~@4", V: "[f3,d4]@11 ~@3 f3@2, ~@13 d#4@3",
  W: "~@5 [f3,d#4]@3 ~@6 f3@2, ~@13 d#4@2 ~", X: "[f3,d4]@7 ~", Y: "[[g3,a#3,c#4,g4]@57 ~@7]/4",
  Z: "[g3,d4]@5 ~@3 [g3,c4]@4 ~@4", AA: "[[f3,c4]@6 ~@7 [f3,c4]@5 ~@4 f3@4 ~@3 [f3,c4]@2 ~, ~@21 c4@3 ~@8]/2",
  AB: "~ b3@5 ~@10, d#3@5 ~@11", AC: "[[d3,f3,a#3,d4,f4]@31 ~]/2", AD: "[~@13 d#4@7 ~ d4@3 c#4@4 ~ g3@3]/2",
  AE: "[~@5 g#3@23 ~@4]/2", AF: "[~@13 f4@6 ~@2 e4@3 d#4@3 ~@2 a3@3]/2", AG: "[~@5 a#3@25 ~@2]/2",
})).s("gm_tenor_sax").gain(0.48).pan(0.3)

// chords · tenor sax · "Sax 1" · soft notes
const tenor_sax_soft = note("<~@34 A B@2 C D ~@9 E ~@7 F ~@11 G@3 ~@66 H I J ~@5 K@4 ~@93>".pickRestart({
  A: "~ f#3@5 ~@7 e3@2 ~", B: "[d#3@31 ~]/2", C: "e3@13 ~@3", D: "~@5 g3@3 ~@6 e3 ~", E: "~@7 a#3 ~@8",
  F: "~@11 c4 ~ g3 ~@2", G: "[~@15 [a2,d3]@25 ~@8]/3", H: "~@6 d3@2 ~@5 c4@3, ~@5 c4@2 ~@5 d3@3 ~", I: "~@5 d3@2 ~@9",
  J: "~@3 d3 ~@3 d3", K: "[d#3@57 ~@7]/4",
})).s("gm_tenor_sax").gain(0.24).pan(0.3)

// chords · alto sax · "Sax 2"
const alto_sax = note(`<
  ~ A B C@3 D E@2 ~@32 F G@4 H I J@7 K L M@2 ~@11 N@3 ~@16 O ~ P ~@5 Q@2 R ~ S T U V ~ W X Y Z AA AB ~ AC AD@2 AE ~@4
  AF@2 AG@2 AH@2 AI AJ AK AL AM@3 AN AO@2 ~@24 AP@2 AQ@2 AR AS AT@2 AU@2 AV@2 AW@2 AX@2 AY@4 AZ@4 BA@2 BB@2 ~@8 BC@2
  BD@2 ~@16 BE@4 BF@5 ~@2 BG BH@2 BI BJ BK@2 BL@2 ~@5
>`.pickRestart({
  A: "[c#4,f#4,a#4]@3 ~@5 [c#4,f#4,a#4]@3 ~@5", B: "[b3,f#4,g#4]@11 ~@2 [d4,b4]@3, ~@6 g4 ~",
  C: "[~@5 [d4,g4,b4]@3 ~@5 [d4,b4]@2 ~ [c#4,g4]@3 ~@2 [c#4,b4]@2 ~ [c#4,b4]@3 ~@2 [c#4,g4,b4]@2 ~ a#4@3 ~@5 [c#4,f#4,a#4]@3 ~@5, ~@13 g4 ~ b4@3 ~@3 g4 ~ g4@3 ~@5 [c#4,f#4]@4 ~@13]/3", // G C#dim C#7 C#m7b5 F# F#5
  D: "[b3,f#4,g#4]@6 ~ [d4,b4], ~@13 g4@2 ~", // G#m7 G
  E: "[~@6 [d4,b4]@3 ~@4 [d4,b4]@2 ~ [g4,a#4]@11 ~@5, ~@5 g4@2 ~@6 g4 ~ c#4@14 ~@3]/2", F: "~@13 d4@2 ~",
  G: "[c#4@4 b3@2 ~ c#4@5 d4@2 ~ c#4@5 b3@2 ~@2 c#4@4 ~ b3@2 c#4@4 ~ d4 c#4 b3 ~ c#4@5 d4@7 ~@9 e4@2 ~]/4",
  H: "d4@4 c#4@2 ~ d4@4 ~ e4@3 ~", I: "d4@5 c#4@2 ~ d4@5 c#4@2 ~",
  J: "[d4@4 e4 d4 c#4 ~ d4@5 e4@9 ~ d4@2 c#4@3 c4@51 b3@33, ~@11 d#4 ~@44]/7", K: "~@4 [g3,c4]@4 [a3,d4]@4 [b3,e4]@3 ~",
  L: "[c4,f#4]@3 ~ e4@4 [a3,d4]@4 ~@2 a3 g3, ~@3 b3@5 ~@5 d4@2 ~, ~@7 c4", M: "[[f#3,a3]@7 ~]/2",
  N: "[~@13 [d3,g3]@31 ~@4]/3", O: "~@5 [b3,c#4,f#4]@3 ~@8", P: "[b3,c#4,f#4]@3 ~@5 [b3,c#4,f#4]@3 ~@5",
  Q: "[[g#3,b3,e4]@15 ~]/2", R: "~@5 [f#3,a3,c4,d#4]@5 ~@6", S: "~@13 c#4@2 ~", T: "d4@5 e4@3 f#4@3 ~@2 g4@3",
  U: "~@5 a4@5 [f#4,g#4] e4 d4 c#4 [a3,b3] g#3", V: "[e3,f#3] ~ d3 c#3 ~@12", W: "c#4@5 b3@3 a#3@3 ~@2 c#4@3",
  X: "b3@3 ~@2 f#3@3 ~@5 f#3@3", Y: "~@5 f#3@4 ~@7", Z: "~@13 c#3@3", AA: "f#3@4 ~ e3@3 d3@4 ~@4",
  AB: "c#3@4 ~@9 c#3@3", AC: "~@13 e3@3", AD: "[d3@5 e3@2 ~ f#3@5 ~@3 b3@2 ~@3 e4@4 d4@4 c4@3, ~@13 a3@5 ~@14]/2",
  AE: "a3@4 ~@4 f#3@5 ~@3", AF: "[[a3,c#4]@23 ~ [c#4,g4]@4 ~ [g#3,g#4]@3, ~@23 g3@5 d4@4]/2",
  AG: "[~ d#4@27 ~@4, [a3,b4]@29 ~@3]/2", AH: "[[f#4,a4]@23 ~ [e4,f#4]@4 ~ g4@3, ~@7 d#4]/2", AI: "[d4,d5]@15 ~",
  AJ: "[d4,f#4]@15 ~", AK: "[c#4,f#4,a4]@3 ~@5 [c#4,f#4,a4]@3 ~@5", AL: "[b3,f#4,a4]@11 ~@3 a3@2",
  AM: "[~@5 a3@3 ~@5 a3 ~ a3@4 ~@2 a3@2 a3@4 ~@2 [g3,b3,d4]@2 ~ d4@3 ~@5 [g3,b3,d4]@3 ~@5, ~@31 [g3,b3]@4 ~@13]/3", // G
  AN: "[g3,a3,c4]@6 ~ [g#3,d#4], ~@13 b3@2 ~", // Am7 G#5
  AO: "[~@6 [g#3,d#4]@3 ~@4 [g#3,d#4]@2 ~ [b3,d#4]@11 ~@5, ~@5 b3@2 ~@6 b3 ~ g#3@14 ~@3]/2", // G#5 B
  AP: "[~@5 [a#3,d#4]@2 ~@6 [g3,f4]@2 ~ d#4@7 ~@6 [c#4,g4]@2 ~, ~@5 [g3,c4] ~@7 a#3 ~ a#3@7 ~@6 d#4@2 ~@2]/2", // D#5 G7 C#dim C5
  AQ: "[~@5 [d#4,g4] ~@2 [c#4,d#4,g4]@22 ~@2]/2", AR: "~@5 [f#3,a#3,c#4]@2 ~@9",
  AS: "[f#3,a#3,c#4]@4 ~@3 f4, ~@13 [g#3,c4]@2 ~", AT: "[~@5 [g#3,c4] f4 ~ [g#3,c4,f4]@23 ~]/2",
  AU: "[~@13 c4@7 b3@4 a#3@4 ~ e3@3]/2", AV: "[~@5 f3@20 ~@7]/2", AW: "[~@13 c#4@7 ~ c4@3 a#3@2 ~@3 f3@3]/2",
  AX: "[~@5 f#3@23 ~@4]/2", AY: "[[f3,a#3]@61 ~@3]/4",
  AZ: "[~@8 a#4@2 c5@2 ~@4 a#4@5 ~ a4@2 a#4@5 ~@3 d5@4 ~ f5@19 ~@8, [f3,a#3]@29 ~@2 [f3,a3]@31 ~@2]/4", // A#5 F
  BA: "[~@14 f4@6 ~ [e4,a4]@3 ~ g#4@4 [c4,e4]@3, ~@13 a#4@7 ~@4 d#4@3 ~@5]/2", BB: "[~@3 [d4,f4]@12 ~]/2",
  BC: "[~@8 [g4,g5]@4 ~@4 g5@5 ~@3 [d#4,g4]@5 f4@2 ~, ~@7 d#4@4 ~@4 [d#4,g4]@5 ~@3 g5@5 ~@4]/2", // G D#
  BD: "[[d#4,g4]@5 [f4,a#4]@3 ~@5 [f4,a#4]@15 ~@4, ~@13 a#5@11 ~@8]/2", // D# A#5
  BE: "[~@17 c4@9 ~@8 [g#3,c4]@25 ~@5, ~ f3@33 ~@30, ~ d4@25 ~@38]/4", BF: "[~@13 f4@8 e4@8 f4@8 ~ d#5@27 ~@15]/5",
  BG: "~@11 [d4,g4,b4]@3 ~@2", BH: "[~@3 [d4,b4]@3 ~@5 [c4,g4,a4]@12 ~@2 d#4@3 ~@4, ~@2 g4@3 ~@19 [g#4,c5]@3 ~@5]/2",
  BI: "~ [d#4,c5]@3 ~@5 g#4 ~ [d4,g#4,c5]@4 ~, g#4@3 ~@5 [d#4,c5]@3 ~@5", // Cm Dm7b5 Cm
  BJ: "g#4 d4@2 ~ c5@3 ~ [d4,g#4,c5]@2 ~ [d4,g4,b4]@4 ~, c5@2 ~ [d4,g#4]@3 ~@10", // Dm7b5 G Ddim
  BK: "[~@4 [d4,b4]@3 ~@5 [c4,g4,a4]@12 ~@2 [d#4,c5]@3 ~@3, ~@3 g4@3 ~@19 g#4@3 ~@4]/2", // G Am7 Cm
  BL: "[~@2 [d#4,c5]@3 ~@4 [d#4,c5]@2 ~ [g#4,b4]@11 ~@9, ~ g#4@2 ~@6 g#4 ~ d4@14 ~@7]/2", // Cm G#m
})).s("gm_alto_sax").gain(0.48).pan(0.6)

// chords · alto sax · "Sax 2" · soft notes
const alto_sax_soft = note("<~@56 A ~@11 B@3 ~@50 C@2 ~@39 D E ~@17 F G ~@14 H I J ~@17 K L@3 ~@21>".pickRestart({
  A: "~@11 c4 g3 ~@3", B: "[~@15 [a2,d3]@25 ~@8]/3", C: "[~ e3@25 ~@6]/2", D: "g3@7 ~@9", E: "~@5 c#4 ~@10",
  F: "~@14 a4 ~", G: "~@13 a4@2 ~", H: "~@7 f5, ~@14 d4 ~", I: "~@5 [d4,f4,f5]@3 ~@5 [d4,f5]@3", J: "g5@4 ~ a#5@3 ~@8",
  K: "~ a#3", L: "[~@3 g#4@4 ~, ~@5 d4@16 ~@3]/3",
})).s("gm_alto_sax").gain(0.24).pan(0.6)

// chords · trombone
const trombone = note(`<
  ~@49 A@4 B@4 C@2 D@2 E@2 F@2 ~@8 G@4 ~ H@3 I@4 J@2 ~@2 K ~ L ~ M N@2 ~@3 O P Q R S T ~@25 U V W ~@4 X@3 Y Z AA AB AC
  AD@4 AE AF AG AH AI@2 AJ@2 AK@2 AL AM AN ~@7 AO@2 AP@2 AQ@2 AR@2 ~@8 AS@4 AT@2 AU@4 AV AW ~@2 AX@2 X@3 AY Z AA AB AC
  AD@4 AE AZ BA@2 BB@4 BC@4 ~ BD@2 ~@14
>`.pickRestart({
  A: "a3/4", B: "[b3@30 ~ a#3@32 ~]/4", C: "[a3@15 ~]/2", D: "[g#3@29 ~@3]/2", E: "[g3@29 ~@3]/2", F: "[a3@13 ~@3]/2",
  G: "[b3@31 a3@32 ~]/4", H: "[~@15 [b3,b4]@32 ~]/3", I: "[d4@31 c4@32 ~]/4", J: "[b3@31 ~]/2",
  K: "~@5 [b3,c#4,f#4]@3 ~@8", L: "[b3,c#4,f#4]@3 ~@5 [c#4,f#4]@3 ~@5, ~@7 b3@2 ~@7", M: "~@5 [c#4,f#4]@3 ~@8",
  N: "[~@13 f#4@2 ~ c#4@3 ~@5 [c#4,f4]@3 ~@5, ~@13 c#4 ~ f4@3 ~@14]/2", // C#
  O: "~@6 d#4@4 [c#4,d4]@2 ~ a3 g#3 [e3,f#3], ~@6 b3 ~", P: "d3 c#3 [a2,b2] g#2 f#2 ~@11", Q: "~@13 c#4@2 ~",
  R: "d4@5 e4@3 f#4@3 ~@2 g4@3", S: "~@5 a4@5 [f#4,g#4] e4 d4 [b3,c#4] a3 g#3", T: "[e3,f#3] d3 ~ c#3 ~@12",
  U: "~@13 f#3@2 ~", V: "~@5 f#3@2 ~@6 f#3@2 ~", W: "f3@4 ~ f3@2 ~ f3@3 ~@5",
  X: "[~@8 [b3,d4]@4 ~@4 d4@5 c4@2 ~@6 [b3,d4]@8 ~ [f3,c4]@2 [b3,d4]@5 ~ c4@2, ~@15 b3@5 ~@28]/3", // Bm F5 Bm
  Y: "[b3,d4]@4 ~ c4@10 ~, ~@5 f3@2 ~@9", Z: "[b3,d#4]@3 ~@5 [b3,d#4]@2 ~@6", AA: "[b3,d4]@11 ~@3 [b3,d#4]@2",
  AB: "~@6 [b3,d#4]@2 ~@5 [b3,d#4]@2 ~", AC: "[b3,d4]@15 ~", AD: "[[d#4,g4]@7 ~]/4", AE: "[g3,c4]@4 ~@4 [g3,c4]@5 ~@3",
  AF: "[g3,c4]@8 ~@5 [f3,g#3]@3", AG: "~@5 [f3,g#3]@4 ~@4 [f3,g#3]@3", AH: "[f#3,b3]@11 ~@5",
  AI: "[~@21 a#3@2 ~@9, [f4,a#4]@31 ~, ~@10 d4 ~@5]/2", AJ: "~@5 [a#3,c#4]@2 ~@9", AK: "~@5 [a#3,c4]@2 ~@9",
  AL: "~@5 [a#3,d4]@2 ~@9", AM: "~@5 [a#3,d4]@3 ~@8", AN: "~@5 d#4@3 ~@8", AO: "[~@13 d#4@7 ~ d4@3 c#4@4 ~ g3@3]/2",
  AP: "[~@5 g#3@23 ~@4]/2", AQ: "[~@13 f4@6 ~@2 e4@3 d#4@3 ~@2 a3@3]/2", AR: "[~@5 a#3@24 ~@3]/2",
  AS: "[[f3,a#3]@57 ~@7]/4", AT: "[[a#3,d4]@25 ~@7]/2", AU: "[[f#3,c4]@28 ~@3 [d3,f3,a3,c4]@28 ~@5]/4",
  AV: "~@5 [a#3,c5]@6 [g#3,a4] g4 f4 [d4,e4] c4", AW: "[a#2,b3] [f#2,g#2,a3] g3 ~ c#2 ~@11",
  AX: "[~@5 a#3@2 ~@6 [b3,d#4]@18 ~]/2", AY: "[b3,d4]@5 c4@10 ~, ~@5 f3@2 ~@9", AZ: "[g3,c4]@5 ~@11",
  BA: "[[f3,b3]@5 ~@3 f3@24, ~@7 b3@20 ~@5]/2", BB: "[~ d4@8 a#3@9 c4@8 d4@8 g#3@27 ~@3, ~ f3@33 g#4@24 ~@6]/4",
  BC: "[~@5 f4@31 ~@2 d#5@26, ~ g#4@15, ~@4 a#3@33 ~@27]/4", BD: "[a#4@2 ~@3 g4@9 ~@2]/2",
// … 122 more lines

More by Cole Porter