Strudelify
Puttin'on the Ritz cover art

Puttin'on the Ritz

Taco

KeyA♭ majorTempo190 bpm
0:00/0:00
// Puttin'on the Ritz — Taco
// 190 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(190/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, A@4 for four bars: edit a riff to change every repeat.

// other · flute
const flute = note(`<
  A B ~@2 A C D ~@4 E F@2 G B H I J K L@2 G M N ~ O P ~@2 Q R S T U K L@2 V W ~@2 X Y ~@2 Z AA AB AC ~@2 AD AE AF AG AH
  AI AJ ~@3 AK AL AM AN AJ ~@3 AK AL AM AO AP AQ AR@2 AS AT AU AV AW AX AY AZ BA@2 BB AN ~@2 BB BC BD BE
>`.pickRestart({
  A: "f5 ~ ab5 ~ c6 ~ c6 ~", B: "b5 ~ ab5 ~@3 bb5@8 ~@2", C: "b5 ~ ab5 ~@3 bb5@4 ~@2 ab5@2 ~@2", D: "f5 ~@7",
  E: "~@4 c5@2 ~@2 e5@2 ~@2 g5 ~@3", F: "[bb5@20 ~@4 c6 ~ bb5 ~ ab5 ~ g5 ~]/2", G: "f5@5 ~ ab5 ~",
  H: "f5@2 ~@2 ab5@2 ~@2 c6@2 ~@2 c5 ~ f5@2", I: "~@2 ab5@2 c6@2 ~@2 c5 ~@3 f5@2 ~@2",
  J: "ab5@2 ~@2 c6 ~@3 c5 ~ f5@2 ~@2 ab5@2", K: "c6 ~@3 c5@2 ~@2 e5@2 ~@2 g5@2 ~@2",
  L: "[bb5@23 ~ c6 ~ bb5 ~ ab5 ~ g5 ~]/2", M: "bb5@7 ~ c6@8", N: "db6 ~@7", O: "~@6 bb5 ~", P: "db6@5 ~ bb5@8 ~@2",
  Q: "~@6 c6 ~", R: "db6@5 ~@2 c6@7 ~@2", S: "f5@2 ab5@2 c6 ~ c5 f5", T: "~ ab5 c6 ~ c5@2 f5@2",
  U: "ab5@4 c6@2 ~@2 c5@2 f5 ~@3 ab5@2", V: "f5@11 ~ c6@3 ~", W: "bb5@6 c6@5 ~@5", X: "c5@2 d5@2 f5 ~ f5 ~",
  Y: "f5 e5 ~ g5@5", Z: "eb5@2 f5@2 ab5 ~ ab5 ~", AA: "ab5@2 g5@2 ~@2 bb5@7 ~@3", AB: "c6@7 ~ g5@5 ~ a5 ~",
  AC: "g5@2 ~@2 f5@2 ~@2 e5 ~ d5@5 ~", AD: "a5@4 ~@2 a5 ~ e5@2 ~@2 e5@2 ~@2", AE: "a5@7 ~",
  AF: "b5@2 ~@2 b5 ~ b5@2 ~@2 a5@2 g5@2 ~@2", AG: "c6@7 ~", AH: "db6@2 ~@2 db6 ~ db6@2 ~@2 b5@2 a5@2 ~@2",
  AI: "d6@7 ~ eb6@7 ~", AJ: "d6@13 ~@3", AK: "~@2 c6@4 a5 ~", AL: "c6@3 ~", AM: "~@4 d6@7 ~ bb5@3 ~",
  AN: "db6@2 bb5@2 ~@2 c6@7 ~@3", AO: "c6@6 d6@7 ~@3", AP: "c6 ~ d6 ~ eb6 ~ f6 g6",
  AQ: "~@3 f6@2 ~@3 eb6@2 ~@2 d6@2 ~@2, ~ g6 ~@6", AR: "[c6@2 ~ c6@12 ~]/2",
  AS: "bb5@2 ~@2 c6@2 ~@2 d6@2 ~@2 eb6 ~ f6@2", AT: "~ f6 eb6 ~ d6 ~ c6 ~", AU: "bb5@4 ~@2 bb5@5 ~ d6@2 ~@2",
  AV: "eb6@5 ~ d6@8 ~@2", AW: "g5 ~@3 bb5 ~@3 d6 ~@3 d5 ~ g5 ~", AX: "~@2 bb5@2 d6 ~@3 d5 ~@3 g5@2 ~@2",
  AY: "bb5 ~@3 d6 ~@3 d5 ~ g5@2 ~@2 bb5@2", AZ: "d6 ~@3 d5 ~@3 gb5 ~@3 a5@2 ~@2",
  BA: "[c6@18 ~@6 d6 ~ c6 ~ bb5 a5@2 ~]/2", BB: "g5 ~ bb5 ~ d6 ~ bb5 ~", BC: "db6 bb5 ~ c6@2 ~ bb5 ~",
  BD: "g5@3 ~@5 d6 ~ c6 ~ bb5 ~ a5@2", BE: "g5 ~@7",
})).s("gm_flute").gain(0.22)

// other · oboe
const oboe = note(`<
  A B ~@2 C D E ~@4 F G@2 H I ~@3 J K@2 L M N ~ O P ~@2 Q R S T U@2 V W X Y ~@2 Z AA ~@2 AB AC AD AE ~@2 AF AG AH AI AJ
  AK AL ~@3 AM AN AO AP AL ~@3 AM AN AO AQ AR AS AT@2 AU AV AW AX AY AZ BA BB BC BD BE BF ~@2 BE BG BH BI
>`.pickRestart({
  A: "f4@2 ~@2 ab4@2 ~@2 c5 ~@3 c5@2 ~@2", B: "b4 ~ ab4 ~@3 bb4@7 ~@3", C: "f4 ~ ab4 ~ c5 ~ c5 ~",
  D: "b4 ~ ab4 ~@3 bb4@4 ~@2 ab4@2 ~@2", E: "f4 ~@7", F: "~@4 c5@2 ~@2 e5 ~@3 g5@2 ~@2",
  G: "[bb5@20 ~@4 c6@2 bb5@2 ab5@2 g5 ~]/2", H: "f5@11 ~ ab5@2 ~@2", I: "b5 ~ ab5@2 ~@2 bb5@9 ~",
  J: "~@2 c5 ~ e5 ~ g5 ~", K: "[bb5@20 ~@4 c6 ~ bb5 ~ ab5 ~ g5 ~]/2", L: "f5@4 ~@2 c5 ~", M: "bb4@8 c5@7 ~",
  N: "db5 ~@7", O: "~@6 bb4 ~", P: "db5@5 ~ bb4@8 ~@2", Q: "~@6 c5 ~", R: "db5@5 ~ c5@6 ~@4",
  S: "f5@2 ab5@2 c6 ~ c5 f5", T: "~ ab5 c6 ~ c5@2 f5@2",
  U: "[ab5@4 c6@2 ~@2 c5@2 ~ f5 ~@4 c6@2 ~@2 c5@2 ~@2 e5@2 ~@2 g5@2 ~@2, ~@15 ab5@2 ~@15]/2", V: "bb5",
  W: "~@8 c6 ~ bb5 ~ ab5 ~ g5 ~", X: "f5@9 ~@4 c6@3", Y: "bb5@5 ~ c6@8 ~@2", Z: "c5@2 d5@2 f5 ~ f5 ~",
  AA: "f5@2 e5@2 ~@2 g5@9 ~", AB: "eb5@2 f5@2 ab5 ~ ab5 ~", AC: "ab5 ~ g5@2 ~@2 bb5@5 ~@5", AD: "c6@6 ~@2 g5@5 ~@2 a5",
  AE: "g5 ~@3 f5@2 ~@2 e5 ~ d5@4 ~@2", AF: "a5@4 ~@2 a5 ~ e5@2 ~@2 e5 ~@3", AG: "a5@13 ~@3",
  AH: "b5@2 ~@2 b5 ~@2 b5@2 ~ a5 ~ g5@2 ~@2", AI: "c5@13 ~@3", AJ: "db5@2 ~@3 db5 ~ db5@2 ~ b4 ~ a4@2 ~@2",
  AK: "d5@7 ~@2 eb5@7", AL: "d5@15 ~", AM: "~@2 c5@3 ~ a4 ~", AN: "c5@3 ~@5", AO: "~@4 d5@7 ~ bb4@2 ~@2",
  AP: "db5 ~ bb4 ~@3 c5@7 ~@3", AQ: "c5@6 d5@7 ~@3", AR: "c5 ~ d5 ~ eb5 ~ f5 g5",
  AS: "~@2 g5 ~ f5@2 ~@2 eb5@2 ~@2 d5@2 ~@2", AT: "[c5@4 ~@2 c5@23 ~@3]/2", AU: "bb4 ~ c5 ~ d5 ~ eb5 f5",
  AV: "~ f5 eb5 ~ d5 ~ c5 ~", AW: "bb4@4 ~@2 bb4@4 ~@2 d5@3 ~", AX: "eb5@4 ~@2 d5@7 ~@3",
  AY: "g4@2 ~@2 bb4@2 ~@2 d5@2 ~@2 d4 ~ g4@2", AZ: "~@2 bb4 ~ d5@2 ~@2 d4@2 ~@2 g4@2 ~@2",
  BA: "bb4@2 ~@2 d5 ~@3 d4 ~ g4@2 ~@2 bb4 ~", BB: "d5@2 ~@2 d4@2 ~@2 gb4 ~@3 a4@2 ~@2", BC: "c5",
  BD: "~@8 d5 ~ c5 ~ bb4 ~ a4 ~", BE: "g4 ~ bb4 ~ d5 ~ bb4 ~", BF: "db5 ~ bb4 ~@3 c5@9 ~",
  BG: "db5 ~ bb4 ~@3 c5@5 ~ bb4@2 ~@2", BH: "g4 ~@3 d5 eb5 e5 gb5", BI: "g5 ~@7",
})).s("gm_oboe").gain(0.21)

// chords · alto sax
const alto_sax = note(`<
  A B A C A D E@2 F@4 G H I C F@4 J@2 A K L ~ M N ~@2 O P Q R S T U@2 V W X Y Z AA AB AC AB AD AE@4 AF AG AH AI AJ AK
  AL@6 AM AN AL@6 AM AO AP AQ AR@2 AS AT AU AV AW@4 AX@2 AY AZ BA BB BC BD BE BF
>`.pickRestart({
  A: "[c5,f5]@15 ~", B: "[b4,eb5]@6 ~ bb4@8 ~, ~@3 e5@4 ~", C: "[b4,eb5]@5 ~ [bb4,e5]@9 ~",
  D: "[b4,eb5]@6 [bb4,e5]@5 ~ [bb4,db5]@4", E: "[ab4@2 ~@6 [b4,eb5]@6 [bb4,e5]@15 ~@3, c5 ~@31]/2",
  F: "[[c5,f5]@7 e5]/4", G: "~@4 [c5,e5]@7 ~ [bb4,db5]@2 ~@2", H: "[c5,e5]@3 ~", I: "~@4 [c5,f5]@7 ~ [ab4,c5]@2 ~@2",
  J: "[[c5,e5]@15 ~]/2", K: "[bb4,db5]@8 [c5,eb5]@7 ~", L: "[db5,f5] ~@7", M: "~@6 db5 ~, ~@12 bb4 ~@3",
  N: "[db5,f5]@5 ~@2 [bb4,db5]@6 ~@3", O: "~@6 [eb5,f5] ~", P: "[db5,f5]@5 ~ [c5,e5]@8 ~@2",
  Q: "[d5,f5]@4 [f5,ab5]@4 [ab5,c6]@2 ~@2 c5 ~@2 [d5,f5]", R: "~@2 [f5,ab5] ~ [ab5,c6]@2 ~@2 c5@4 [d5,f5]@4",
  S: "[f5,ab5]@4 [ab5,c6]@2 ~@2 c5 ~ [d5,f5]@2 ~@2 [f5,ab5]@2", T: "[ab5,c6] ~ c5 ~ e5 ~ [g4,g5] ~, ~@8 bb4 ~@7",
  U: "[[c5,e5]@10 ~@2 c6 bb5 ab5 g5, ~@12 e5@3 ~]/2", V: "f5@8 ~@4 [d5,f5] ~@3", W: "[d5,f5]@2 ~ [c5,e5]@3 ~@2",
  X: "c5@4 d5@4 f5 ~@3 f5@2 ~@2, a4@8 b4@7 ~", Y: "f5@2 e5@2 ~@2 g5@7 ~@3, bb4@15 ~",
  Z: "c5@2 d5@2 f5 ~ f5 ~, a4@7 ~ b4@7 ~", AA: "f5 ~ e5@2 ~@4 db5@8, bb4 ~, ~@3 g5@4 ~",
  AB: "eb5@2 f5@2 ab5 ~ ab5 ~, c5 d5", AC: "ab5 g5 ~ bb5@4 ~, db5@3 ~", AD: "ab5@2 g5 ~@3 bb5@6 ~@4, db5@11 ~@5",
  AE: "[c5@8 bb4@8 b4@15 ~, g4@31 ~]/2", AF: "[a4,c5]", AG: "~@4 [c5,d5]@7 ~ [c5,d5]@3 ~", AH: "[b4,d5]",
  AI: "~@4 [c5,e5]@8 [c5,e5]@3 ~", AJ: "[db5,e5]@15 ~", AK: "d5@8 eb5@7 ~, c5",
  AL: "[[bb4,g5]@25 ~ d5 ~ gb4 ~@3 c5@10 ~@6, ~@5 a4@2 ~]/6", AM: "~@2 [bb4,d5]@3 ~ [bb4,d5] ~",
  AN: "[db5,g5]@6 [c5,gb5]@7 ~@3", AO: "[c5,eb5]@6 [d5,f5]@7 ~@3",
  AP: "[c5,eb5] ~ [d5,f5] ~ [eb5,g5] ~ [f5,a5] [g5,bb5]", AQ: "~ [g5,bb5] [f5,a5] ~ [eb5,g5] ~ [d5,f5] ~",
  AR: "[[c5,eb5]@5 ~ [c5,eb5]@22 ~@4]/2", AS: "[bb4,d5] ~ [c5,eb5] ~ [d5,f5] ~ [eb5,g5] [f5,a5]",
  AT: "~@2 [f5,a5]@2 [eb5,g5]@3 ~ [d5,f5]@2 ~@2 [c5,eb5]@2 ~@2", AU: "[bb4,d5]@5 ~ [bb4,d5]@6 [d5,f5]@2 ~@2",
  AV: "[eb5,g5]@5 ~ [d5,gb5]@7 ~@3", AW: "[[d5,g5]@53 ~@3 [c5,d5]@5 ~@3]/4", AX: "[~ [d5,gb5]@17 ~@14]/2",
  AY: "[d5,g5]@7 ~", AZ: "[db5,f5]@4 ~@2 [c5,gb5]@7 ~@3", BA: "g4 ~ bb4 ~ d5 ~ bb4 ~", BB: "db5@2 bb4 ~@3 [a4,c5]@10",
  BC: "[d5,g5]", BD: "[db5,f5]@3 [c5,gb5]@2 ~ [c5,gb5] ~", BE: "[bb4,g5] ~@3 [d5,d6] [eb5,c6] [e5,bb5] [gb5,a5]",
  BF: "g5 ~@3 g4 ~@3",
})).s("gm_alto_sax").gain(0.31)

// other · tenor sax
const tenor_sax = note(`<
  A B A B A C D@2 E@4 F G H I J@4 K@2 L M N O P@2 Q R S T U V W X K@2 Y G Z AA Z AB AC AD AC G AE AF AE AG AE AH AG AI
  AA AJ AK@2 AL AM@3 AN AO AK@2 AL AM@3 AN AP ~@6 AQ AR AS@4 AT@2 AD AU AV AW AD AX AY AZ
>`.pickRestart({
  A: "ab3", B: "f3@3 g3@5", C: "f3@3 g3@3 ab3 ~", D: "[f3 ~@3 f3@3 g3@7 ~@2]/2", E: "[ab3@27 ~ g3@4]/4",
  F: "~@4 bb3@7 ~ g3@2 ~@2", G: "bb3@11 ~@5", H: "~@2 ab3@3 ~ ab3 ~", I: "f3@5 ~ g3@8 ~@2", J: "[ab3@7 g3]/4",
  K: "[bb3@15 ~]/2", L: "ab3@7 ~", M: "f3@3 ~", N: "bb3@2 ~@2 ab3 ~@3 bb3@2 ~@2 c4 ~@2 db4",
  O: "~@2 db4@2 c4@2 ~@2 bb3@2 ~@2 ab3 ~@3", P: "[g3@5 ~ g3@21 ~@5]/2", Q: "ab3@2 ~@2 g3@2 ~@2 ab3 ~@3 bb3@2 ~ c4",
  R: "~@3 c4 bb3@2 ~@2 ab3@2 ~@2 g3@2 ~@2", S: "ab3@2 ~ ab3@3 ~@2", T: "b3@5 ~ bb3@6 ~@4", U: "ab3@2 c4@2 d4 ~ c4 ab3",
  V: "~@2 c4@2 d4@2 ~@2 c4@2 ~@2 ab3 ~@3", W: "c4@2 d4 ~ c4 ab3 ~ c4", X: "d4 ~ c4 ~ bb3 ~ g3 ~", Y: "ab3@5 ~ ab3 ~",
  Z: "f3 d3", AA: "g3@7 ~", AB: "g3@8 bb3@7 ~", AC: "ab3 f3", AD: "bb3@15 ~", AE: "e3@15 ~", AF: "f3@7 ~", AG: "f3",
  AH: "~@4 gb3@7 ~ gb3@2 ~@2", AI: "~@4 bb3@7 ~ bb3@3 ~", AJ: "gb3@7 ~",
  AK: "[g3@2 ~@2 bb3@2 ~@2 d4@2 ~@2 d3 ~@2 g3@2 ~ bb3@2 d4@2 ~@2 d3 ~@3 g3@2 ~@2]/2", AL: "bb3 ~ d4 ~ d3 g3 ~ bb3",
  AM: "[d4@2 ~@2 d3 ~@3 gb3@28 ~@4 d4@2 c4@2 bb3@2 a3@2]/3", AN: "g3@11 ~ bb3 ~@3", AO: "bb3@5 ~ a3@7 ~@3",
  AP: "c4@6 b3@7 ~@3", AQ: "~@6 f3 ~", AR: "a3@5 ~ c4@9 ~", AS: "[bb3@54 ~@2 a3@5 ~@3]/4", AT: "[c4@9 ~@7]/2",
  AU: "g3@5 ~ a3@7 ~@3", AV: "g3 ~ bb3 ~ d4 ~ bb3 ~", AW: "g3!2 ~ gb3@5", AX: "g3@5 ~ a3@5 bb3@2 ~@3",
  AY: "g3 ~@3 d4 eb4 e4 gb4", AZ: "g4 ~@3 g3 ~@3",
})).s("gm_tenor_sax").gain(0.35)

// other · baritone sax
const baritone_sax = note(`<
  A B A B A B C@2 D E@3 F@2 A G H@4 F@2 A I J K L M N L O P H@4 F@2 H F Q R Q S T U T V W X W X Y Z AA AB Y AC AD@4 AE@2
  AF AG AD@4 AE@2 AF AH AI AJ AK AL K AK AM AN AO AP AO AP AQ AR AO AS AO AS AO AS AT AU
>`.pickRestart({
  A: "f3 eb3", B: "db3@3 c3@3 e3 ~", C: "[f3 ~@3 db3@3 c3@2 ~ c3 ~ d3 ~ e3 ~]/2", D: "f2@3 ~@5 c3@2 ~@6",
  E: "f2 ~@3 c3 ~@3", F: "g2@3 ~@5 c3@3 ~@5", G: "db3@5 ~@2 c3@8 ~", H: "f2@3 ~@5 c3@3 ~@5", I: "f3@7 ~",
  J: "bb2@4 ~@5 f2@2 ~@5, c3 ~@15", K: "bb2@3 ~@5 bb2@3 ~@5", L: "eb2@3 ~@5 eb2@3 ~@5",
  M: "bb2@3 ~ eb2@2 ~@2 f2@2 ~@2 g2@2 ~@2", N: "ab2@2 ~@6 ab2@3 ~@5", O: "ab2@5 ~ ab2@7 ~@3", P: "g2@5 ~ c3@8 ~@2",
  Q: "f2 ab2", R: "g2@4 c3 ~ e2 ~", S: "g2@7 ~ eb2@2 ~@2 g2@2 ~@2", T: "ab2 b2", U: "bb2@4 eb2 ~ g2 ~",
  V: "bb2@4 eb3 ~ db3 ~", W: "c3 ~ db3 ~", X: "d3@3 ~@5 g2@3 ~@5", Y: "a2 ~ a2 ~", Z: "d2 ~ d2 ~", AA: "g2 ~ g2 ~",
  AB: "c3@4 ~@4 c3@4 bb2@3 ~", AC: "d3 ~ c3 ~ bb2 ~ a2 ~", AD: "g2@3 ~@5 d2@3 ~@5", AE: "a2@3 ~@5 d2@3 ~@5",
  AF: "g2 ~ f2 ~", AG: "eb2@6 d2@7 ~@3", AH: "eb3@6 d3@7 ~@3", AI: "c3@3 ~@5 g2@3 ~@5", AJ: "c3@3 ~@5 c3@3 ~@5",
  AK: "f2 ~ f2 ~", AL: "c3@3 ~@5 f2@4 ~@4", AM: "bb2 ~ bb2 ~", AN: "a2@5 ~ d2@7 ~@3", AO: "g2@7 ~ f2@7 ~", AP: "eb2 d2",
  AQ: "a2 ~ gb2 ~", AR: "d2 ~@7", AS: "eb2@6 d2@5 ~ gb2@2 ~@2", AT: "g2 ~@7", AU: "~@4 g2 ~@3",
})).s("gm_baritone_sax").gain(0.35)

// chords · trumpet
const trumpet = note(`<
  A B ~@2 A C D ~ E F G H I@2 J K E F G H L@2 M N O ~ P Q ~@2 R S ~@6 T U ~@4 V W V W X Y X Z AA AB AC AD AE AF AG ~@3
  AH AI AJ AK AG ~@3 AH AI AJ AL ~@2 AM AN ~@2 AO AP AQ AR AS AT@3 AU AV ~@2 AU AW AX AY
>`.pickRestart({
  A: "f4 ~ ab4 ~ c5 ~ c5 ~", B: "b4@2 ab4@2 ~@2 bb4@7 ~@3", C: "b4 ~ ab4 ~@3 bb4@5 ~ ab4@2 ~@2", D: "f4 ~@7",
  E: "f4 ~@3 ab4@2 ~@2 c5@2 ~@2 c4 ~ f4 ~", F: "~@2 ab4 ~ c5 ~@3 c4 ~@3 f4 ~@3", G: "ab4 ~@3 c5 ~@3 c4 ~ f4 ~@3 ab4 ~",
  H: "c5 ~@3 c4 ~@3 e4 ~@3 g4 ~@3", I: "[bb4@11 ~ c5 bb4 ab4 g4]/2", J: "f4@6 [f4,ab4] ~",
  K: "b4@2 [f4,ab4] ~@3 [e4,g4,bb4]@7 ~@3, f4 ~@15", L: "[[e4,g4,bb4]@11 ~ c5 bb4 ab4 g4, ~@24 e4@7 ~]/2",
  M: "f4@6 ab4 ~", N: "[f4,bb4]@4 [eb4,a4,c5]@3 ~", O: "[f4,bb4,db5] ~@7", P: "~@6 [f4,g4,bb4] ~",
  Q: "[g4,bb4,db5]@5 ~ [f4,g4,bb4]@7 ~@3", R: "~@12 [f4,ab4,c5]@3 ~", S: "[f4,g4,db5]@5 ~ [e4,g4,c5]@8 ~@2",
  T: "~@4 [f4,ab4]@6 ~@2 [f4,ab4,c5]@3 ~", U: "[f4,g4,bb4]@5 ~ [e4,bb4,c5]@8 ~@2", V: "eb4@4 f4@4 ab4@3 ~ ab4@3 ~",
  W: "ab4@2 g4@2 ~@2 bb4@7 ~@3", X: "[e4,g4,c5]@6 ~@2 g4@5 ~ a4 ~", Y: "g4@3 ~ f4@2 ~@2 e4 ~ d4@4 ~@2",
  Z: "g4@2 ~@2 f4@3 ~ e4 ~ d4@4 ~@2", AA: "a4@5 ~ a4 ~ e4@2 ~@2 e4@2 ~@2", AB: "a4@13 ~@3",
  AC: "[d4,f4,b4]@2 ~@2 [d4,f4,b4] ~ [d4,b4] ~@3 [d4,f4,a4] ~ [d4,f4,g4]@2 ~@2, ~@3 f4 ~@4", AD: "[e4,g4,c5]@7 ~",
  AE: "[e4,g4,db5]@2 ~@2 [e4,g4,db5] ~@2 g4@2 ~ [e4,g4,b4] ~ [e4,g4,a4]@2 ~@2, ~@3 [e4,db5] ~@4", // Dbdim Em A7 Dbm
  AF: "[gb4,a4]@8 [gb4,c5,eb5]@7 ~, d5@3 ~@5", AG: "[g4,bb4,d5]@15 ~", AH: "~@2 [gb4,a4,c5]@3 ~ [d4,gb4,a4] ~",
  AI: "[gb4,a4,c5]@3 ~", AJ: "~@4 [g4,bb4,d5]@7 ~ [d4,g4,bb4]@2 ~@2",
  AK: "[g4,bb4,db5]@2 [g4,bb4]@2 ~@2 [gb4,a4,c5]@9 ~", AL: "[eb4,g4,c5]@6 [d4,f4,d5]@9 ~", AM: "~@6 g4 ~",
  AN: "[f4,a4]@5 ~ [eb4,a4,c5]@9 ~", AO: "~@6 [f4,bb4,d5] ~", AP: "[g4,a4,eb5]@5 ~@2 gb4@8 ~, ~@3 [c5,d5]@4 ~",
  AQ: "g4@2 ~@2 bb4@2 ~@2 d5 ~@3 d4@2 g4@2", AR: "~@2 bb4 ~ d5@2 ~@2 d4 ~@3 g4 ~@3",
  AS: "bb4@2 ~@2 d5 ~@3 d4 ~ g4 ~@3 bb4 ~",
  AT: "[d5 ~@3 d4@2 ~@10 c5@18 ~@6 d5@2 c5 ~ bb4@2 a4 ~, ~@4 gb4@13 ~@7, ~@6 a4@11 ~@7]/3",
  AU: "g4 ~ bb4 ~ [g4,bb4,d5] ~ [g4,bb4] ~", AV: "[g4,bb4] ~ [g4,bb4]@2 ~@2 [gb4,a4,c5]@9 ~, db5 ~@7",
  AW: "[g4,bb4,db5] ~ [g4,bb4]@2 ~@2 [gb4,a4,c5]@5 ~ [gb4,bb4]@2 ~@2", AX: "g4 ~@7", AY: "~@4 g3 ~@3",
})).s("gm_trumpet").gain(0.72)

// chords · trombone
const trombone = note(`<
  A B C D A E F@2 ~@4 G H I J K L M N O@2 P Q R S T@2 U V W X ~@4 Y Z AA AB AC AD AC AE AF AG AF AH AI AJ AI AK AL AM AJ
  AN AO AP AQ AR AS AT@3 AU AV AQ AR AS AT@3 AU AW ~@2 AX AY ~@2 AZ BA BB BC BB BC BD BE BB BF BG BH BI BJ BK BL
>`.pickRestart({
  A: "f3@6 ~@2 eb3@5 ~@3", B: "db3@5 ~ c3@5 ~@5", C: "f3 ~ ab3 ~ c4 ~ c4 ~", D: "b3 ab3 ~ bb3@4 ~",
  E: "db3@5 ~ c3@5 ~ e3@2 ~@2", F: "[f3@2 ~@6 db3@4 ~@2 c3@5 ~ c3@2 ~@2 d3@2 ~@2 e3@2 ~@2]/2",
  G: "~@4 [g3,bb3,c4]@7 ~ [e3,g3,bb3]@2 ~@2", H: "[g3,bb3,c4]@3 ~", I: "~@4 [f3,ab3,c4]@7 ~ [f3,ab3,c4]@2 ~@2",
  J: "[f3,ab3,b3]@5 ~ [g3,bb3,c4]@9 ~", K: "~@4 c4@8 ~ f3@2 ~", L: "ab3", M: "~@5 ab3@7 f3@2 ~@2", N: "c4@11 ~@5",
  O: "[~@4 e3 ~@3 g3 ~@3 [e3,g3,bb3]@12 ~@4 [g3,bb3,c4]@3 ~]/2", P: "[f3,ab3,c4]@7 ~", Q: "db4@8 eb4@7 ~",
  R: "bb3 ~ [ab3,c4] ~ [bb3,db4] ~ [c4,eb4] [db4,f4]", // Ab Bbm Cm Db
  S: "~@2 [db4,f4] ~ [c4,eb4]@2 ~@2 db4@2 ~@2 [ab3,c4]@2 ~@2, ~@8 bb3 ~@7", // Db Cm Ab
  T: "[[g3,bb3]@2 ~ bb3@12 ~, ~@6 g3@21 ~@5]/2", U: "ab3 ~ [g3,bb3] ~ [ab3,c4] ~ db4 [c4,eb4], ~@12 bb3 ~@3",
  V: "~@2 [c4,eb4] ~ [bb3,db4]@2 ~@2 [ab3,c4]@2 ~@2 [g3,bb3]@2 ~@2", W: "ab3@5 ~ ab3@7 ~@3",
  X: "[f3,g3,b3]@5 ~ [e3,bb3,c4]@7 ~@3", Y: "~@2 g3@4 [e3,g3,bb3] ~", Z: "[g3,bb3,c4]@7 ~",
  AA: "~@4 [f3,ab3,d4]@7 ~ [f3,ab3,c4]@2 ~@2", AB: "[f3,g3,bb3]@5 ~ [e3,bb3,c4]@8 ~@2", AC: "[f3,a3] [d3,b3]",
  AD: "[g3,bb3]@15 ~", AE: "[g3,bb3] [bb3,db4]", AF: "[ab3,c4] [f3,d4]", AG: "[bb3,db4]@15 ~",
  AH: "bb3@7 ~ g3@3 ~ f3@2 ~@2, db4@15 ~", AI: "c4@7 ~ bb3@8, [e3,g3]", AJ: "[f3,g3,b3]@15 ~",
  AK: "[f3,g3]@15 ~, b3@13 ~@3", AL: "[e3,a3,c4]@15 ~", AM: "~@4 [gb3,a3,c4]@7 ~ [gb3,a3,c4]@2 ~@2",
  AN: "~@4 [g3,bb3,c4]@7 ~ [g3,bb3,c4]@2 ~@2", AO: "[g3,a3]@7 ~, db4", AP: "[gb3,a3,c4]@15 ~",
  AQ: "g3 ~ bb3 ~ d4 ~ d3 g3", AR: "~@2 bb3@2 d4@2 ~@2 d3 ~@3 g3@2 ~@2", AS: "bb3@2 ~@2 d4@2 ~@2 d3 ~ g3@2 ~@2 bb3 ~",
  AT: "[d4@2 ~@2 d3@2 ~@10 c4@20 ~@4 d4 ~ c4 ~ bb3 ~ a3 ~, ~@2 gb3@7 ~@3, ~ a3@2 ~]/3", AU: "g3@11 ~ [f3,g3,bb3]@2 ~@2",
  AV: "[g3,bb3,db4]@5 ~ [gb3,a3,c4]@8 ~@2", AW: "[eb3,g3,c4]@3 [f3,g3,d4]@4 ~", AX: "~@6 g3 ~",
  AY: "[f3,a3]@5 ~@2 a3@8 ~, ~@3 [eb3,c4]@4 ~", AZ: "~@6 [f3,bb3,d4] ~",
  BA: "[g3,a3,eb4]@5 ~ [gb3,c4]@7 ~@3, ~@6 d4@9 ~", BB: "g3@5 ~@3 f3@5 ~@3", BC: "eb3@5 ~@3 d3@5 ~@3",
  BD: "~@2 d3 ~ gb3 ~ a3 ~", BE: "[gb3,a3,c4] ~@7", BF: "eb3@5 ~ d3@6 gb3@2 ~@2", BG: "g3 ~ bb3 ~ d4 ~ bb3 ~",
  BH: "[g3,db4] ~ [g3,bb3]@2 ~@2 [gb3,a3,c4]@8 ~@2", BI: "~@4 [g3,bb3,d4]@7 ~ [g3,bb3,d4]@2 ~@2",
  BJ: "[g3,bb3,db4]@5 ~ [gb3,a3,c4]@5 ~ [gb3,c4,eb4]@2 ~@2", BK: "[g3,bb3] ~@7, d4 ~@15", BL: "~@4 g2 ~@3",
})).s("gm_trombone").gain(0.46)

// bass · tuba
const bass = note(`<
  A B A C A C D@2 E@3 F G@2 H I J@2 F@2 G@2 A K L M N O P Q R S F@4 G@2 F G T U T V W X W Y Z AA Z AA AB AC AD AE AB AF
  AG@4 AH@2 AI AJ AG@4 AH@2 AI AJ AK AL AM AN M AM M AO AP AQ AP AQ AR AS AI AT AI AT AI AT AU AV
>`.pickRestart({
  A: "f2@7 ~ eb2@6 ~@2", B: "db2@5 ~@2 d2 ~@4 e2@3 ~, ~@6 c2@5 ~@5", C: "db2@6 c2@5 ~ e2@2 ~@2",
  D: "[f2@2 ~@6 db2@5 ~ c2@15 ~@3]/2", E: "f2 ~@3 c2 ~@3", F: "f2 ~ c2 ~", G: "g2 ~ c2 ~", H: "f2@7 ~ eb2@7 ~",
  I: "db2@3 c2@3 ~@2", J: "f2@3 ~@5 c2@3 ~@5", K: "db2@7 ~ c2@8", L: "bb1@3 ~@5 f2@3 ~@5", M: "bb2 ~ bb2 ~",
  N: "eb2 ~ eb2 ~", O: "ab2@3 ~@2 eb2@2 ~ f2@2 ~@2 g2@2 ~@2", P: "ab2@3 ~@5 ab2@3 ~@5", Q: "eb2 ~@3 eb2 ~@3",
  R: "ab2@4 ~@2 ab2@7 ~@3", S: "g2@3 c2@3 ~@2", T: "f2 ab2", U: "g2@4 c2 ~ e2 ~", V: "g2@4 eb2 ~ g2 ~", W: "ab2 b2",
  X: "bb2@8 eb2@2 ~@2 g2@3 ~", Y: "bb2@4 eb2 ~ db2 ~", Z: "c2 ~ db2 ~", AA: "d2@5 ~@3 g2@4 ~@4",
  AB: "a2@3 ~@5 a2@3 ~@5", AC: "d2 ~ d2 ~", AD: "g2 ~ g2 ~", AE: "c3 ~ c3 bb2", AF: "d2 ~ c3 ~ bb2 ~ a2 ~",
  AG: "g2@3 ~@5 d2@3 ~@5", AH: "a2@4 ~@4 d2@3 ~@5", AI: "g2 ~ f2 ~", AJ: "eb2@3 d2@3 ~@2", AK: "c2@3 ~@5 g2@3 ~@5",
  AL: "c3@3 ~@5 c3@4 ~@4", AM: "f2@3 ~@5 f2@4 ~@4", AN: "c3 ~ f2 ~", AO: "a2@6 d2@7 ~@3", AP: "g2 f2", AQ: "eb2 d2",
  AR: "a2@3 ~@5 gb2@3 ~@5", AS: "d2 ~@7", AT: "eb2@2 ~ d2@2 ~ gb2 ~", AU: "g2 ~@7", AV: "~@4 g2 ~@3",
})).s("gm_tuba").gain(0.44)

// … 55 more lines