Strudelify

My Shining Hour

Sinatra

KeyE♭ majorTempo88 bpm
0:00/0:00
// My Shining Hour — Sinatra
// 88 bpm, 4/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: metre changes (2/2 at bar 1, 4/4 at bar 19) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 71 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(88/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.

// chords · piano · "A.PIANO 1"
const piano = note("<~@18 A B C@3 D E ~@17 F G H I J K ~@23>".pickRestart({
  A: "[bb3,d4,g4]@13 ~@3", B: "bb3@8 [c4,eb4]@5 ~@3, g3@25 ~@7, d4@3 ~@5",
  C: "[[d4,eb4,g4,b4]@15 ~ [eb4,g4]@12 ~@4 g4@16 f4@8 ~@4 f4@4 [bb3,eb4,g4]@24 ~@8, a3@23 ~@9 [ab3,c4]@24 ~@40, ~@8 c5@23 ~@17, ~@16 d4@8 ~@8 d4@19 ~@5 d4@32 ~@8]/3", // G Eb Ab
  D: "[b3,f4,g4,bb4]@7 ~ [db4,e4,g4]@5 ~@3, eb4@11 ~@5 bb4@15 ~", // G7 Dbdim
  E: "[eb4,g4]@16 [c4,d4,g4]@13 ~@3, ab3@29 ~@3, c4@3 ~@5", F: "[g3,bb3,d4]@2 g3 c4",
  G: "[eb3,g3,bb3,d4]@16 [f3,ab3,b3,eb4]@15 ~", H: "[g3,bb3,c4,eb4]@2 g3 [bb3,eb4]",
  I: "[bb3,d4]@8 eb4@4 ~@4 [e3,ab3,bb3,eb4]@15 ~, g3 ~", J: "[ab3,c4,eb4]@4 ab3 ~ c4@2, [f3,g4]@5 ~@3",
  K: "[a3,eb4,ab4] [ab3,d4,g4]@2 ~", // Ab G
})).s("gm_piano").gain(0.27)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@18 A B C D E F G H I J K L M N O P Q R S T U J V W X Y Z AA AB AC ~@4 AD AE AF AG AH AI AJ AK AL ~@10
>`.pickRestart({
  A: "eb2@12 ~@4 eb2@5 ~@3 d2@8", B: "c2@13 ~@3 c2@10 ~ bb1@2 g1@2 ~", C: "f1@6 ~@2 f1@7 ~",
  D: "bb1@12 ~@4 bb1@4 ~@4 bb1@5 ~@3", E: "eb2@6 ~@2 eb2@3 ~ d2@4", F: "db2@11 ~@5 c2@9 ~@7",
  G: "bb1@12 ~@4 bb1@7 ~ bb2@5 f2@3", H: "bb1@16 b1@5 ~@3 b1@7 ~", I: "c2@12 ~@4 bb1@15 ~", J: "a1@13 ~@3 a1@16",
  K: "ab1@13 ~@3 ab1@4 ~@4 ab1@8", L: "g1@7 ~ g1@8", M: "gb1@13 ~@3 gb1@15 ~", N: "f1@13 ~@3 f1@12 ~@4",
  O: "bb1@7 ~ bb2@5 f2@3 bb2@5 ~@3 bb2@5 f2@3", P: "bb1@8 bb1@3 ~ bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@3 ~ bb1@3 ~",
  Q: "eb2", R: "c2 db2", S: "c2@3 ~ c2@4", T: "b1@14 ~@2 b1@15 ~", U: "bb1@13 ~@3 bb1@16", V: "ab1 gb1",
  W: "f1@15 ~ e1@15 ~", X: "eb2@13 ~@3 eb2@6 ~@2 d2@8", Y: "c2 b1", Z: "bb1 ab1", AA: "g1 gb1", AB: "f1@3 ~ f1@3 ~",
  AC: "b1 ~ bb1@6", AD: "~ eb2", AE: "bb1@3 ~ bb1@4 eb2@8", AF: "eb3@8 eb2@8 ab2@7 ~@6 ab2@2 ~",
  AG: "eb2@16 ab2@11 ~@5", AH: "ab2@5 eb2@8 eb1@3 ab1@13 ~@3", AI: "ab1@4 db2@3 ~", AJ: "db2 c2", AK: "gb1@15 ~ f1@16",
  AL: "e1@15 ~@17",
})).s("gm_acoustic_bass").gain(0.28)

// other · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note("<~@22 A B C D E F G H I J K ~@9 L M N@2 O ~@24>".pickRestart({
  A: "d4@4 g3@4 bb3@7 ~ [bb3,d4]@5 ~@3 bb3@8, ~@24 d4@5 ~@3", // Bb
  B: "eb4@4 b3@4 eb4@8 [bb3,db4]@5 ~@3 db4@8, ~@24 bb3@5 ~@3", C: "ab3@4 c4@4 eb4@8 d4@7 ~ d4@8",
  D: "~@4 c4@3 ~ d4@2 eb4@2 d4@2 g4@2", E: "eb4@4 d4@4 eb4@8 c4@7 ~ d4@6 ~@2", F: "eb4 d4 eb4@2 c4@3 ~",
  G: "db4@8 f3@8 c4@8 f3@4 db4@3 ~", H: "c4@4 f3@4 b3@7 ~", I: "b3@4 eb3@4 bb3@4 eb3@3 ~", J: "bb3 g3 a3@2",
  K: "f3@5 ~@3", L: "g3@4 bb3@3 ~ d4@3 ~@5 [bb3,d4]@7 ~ c4@6 ~@2", M: "[bb3,d4]@7 ~ [bb3,d4]@8 b3@4 eb4@4 [f4,ab4]@8",
  N: "[~@2 eb4 g4@9 ~@2 [bb3,e4,ab4]@2, bb3@3 ~@13, ~@4 c4@9 ~@51]/2", // Bbm7b5
  O: "~@8 c4@4 eb4@3 ~ eb4@16, g4 ~@3, ~ ab3@3 ~@4",
})).s("gm_acoustic_guitar_nylon").gain(0.27).pan(0.7)

// other · flute
const flute = note("<A B C D ~@7 E@4 ~@12 F G H I J K ~@23 L M N O@2 P Q R@2 S T U V@2 ~>".pickRestart({
  A: "~@24 bb4 ~@7", B: "~@21 c5 bb4 c5 ~@8", C: "~@9 bb4 c5 bb4 ~@18 c5 ~",
  D: "~@2 c5 bb4 c5 bb4 bb4@12 ~@14, ~@6 c5 ~@25",
  E: "[~@30 eb6@5 c6@5 ~ g6@11 eb6@5 ~ c6@5 g6@11 eb6@6 c6@6 ab6@27 ~@15]/4", F: "~@20 eb5@4 g5@4 c6@3 ~",
  G: "db6@2 f5@2 c6@2 f5 db6", H: "c6@2 f5@2 b5@3 ~", I: "b5@2 eb5@2 bb5@3 b5", J: "bb5 g5 a5@2", K: "bb5",
  L: "~@3 c5@2 f5@3 bb5@2 ~ g5@2 ab5@3 eb6@13 bb5@3", M: "ab5@8 g5@8 gb5@13 bb4@3",
  N: "ab4@2 b4@3 eb5@3 ab5@2 b5@3 eb6@3 g6@16", O: "[eb6@40 ~@8 [eb5,g5]@7 ~@9]/2", P: "g5 bb4 c5 ab5 bb5@2 bb4 d5",
  Q: "eb5@4 ab5@3 ~ ab5@4 eb6@5 d6@7 c6@8", R: "[eb6@8 f6@7 ~ f6@5 ~ d6@4 eb6@5 a6@9 ab6@8 g6@10 ~@6]/2",
  S: "g5 c5 ab5 g5", T: "f5@2 ~ eb5", U: "c5@8 g5@7 ~@9 eb5@8", V: "[c5 [g5,bb5]@7]/2",
})).s("gm_flute").gain(0.22).pan(0.7)

// other · flute · soft notes · Bbsus2
const flute_soft = note(`<
  [~@25 c5 bb4 c5 bb4 c5 bb4 [bb4,c5]]
  [c5 bb4 c5 bb4@9 ~@2 bb4 c5 bb4 c5 bb4 c5 bb4 ~@3 bb4 c5 bb4@6]
  [~@5 bb4 c5 bb4 c5 ~@2 c5 ~ bb4 c5 [bb4,c5] bb4@9 ~@2 bb4 c5 bb4 ~ bb4]
  [c5 bb4 ~@30]
  ~@56
  [~@8 d6@7 ~@9 eb5@2 ~@6, ~@24 g5 ~@7]
  ~@10
>`).s("gm_flute").gain(0.11).pan(0.7)

// other · french horn · "FR.HORN"
const french_horn = note(`<
  ~@11 A@7 ~@6 B C D E F G H I ~@2 J K L M N O P Q ~@7 R@5 S@3 T@2 U@2 V@2 W X ~@3 Y@3
>`.pickRestart({
  A: "[~@30 eb4@5 c4@6 g4@5 c5@27 ~ eb4@6 c4@6 ab4@27 ~ bb4@5 gb4@5 ~ ab4@5 bb4@5 ~ bb4@11 b4@11 g4@18 ~@6 g4@16 f4@26]/7",
  B: "~ [eb4,g4] [d4,f4]@2", C: "[c4,eb4]@8 [b3,g4]@7 ~", D: "eb4 d4 eb4@2 c4@4, g4@31 ~",
  E: "~ [eb4,g4]@6 ~ [eb4,g4]@7 ~ [eb4,g4]@7 ~ [eb4,g4]@8", // Eb
  F: "[db4,f4]@8 [db4,f4]@7 ~ [c4,f4]@7 ~@2 c4@6 ~, ~@24 f4@7 ~", // Db F5
  G: "[c4,f4]@7 ~@2 c4@7 [b3,f4]@7 ~@2 b3@7, ~@8 f4@5 ~@11 f4@8", // F5 Bdim
  H: "eb4@8 ~ [gb3,eb4]@7 ~ [gb3,eb4]@6 ~@2 [gb3,eb4]@7, gb3@5 ~@27", I: "[c4,g4]@7 ~ [c4,g4]@8 ~ [c4,g4]@7 [c4,f4]@8",
  J: "~ f4@31", K: "g4@14 ~@2 g4@5 g4@4 ~@2 g4@5", L: "g4@7 ~ g4@2 ab4@2 bb4@2 g4@2", M: "bb4@4 eb4@19 ~ bb4@8",
  N: "ab4@4 g4 ab4 bb4 g4", O: "bb4@3 bb3", P: "eb4@7 ~ eb4@6 ~@2 eb4@6 ~@2 eb4@6 ~@2", Q: "eb4@16 ~ bb4@15",
  R: "[~@16 bb4@31 ~ db5@29 ~@3 e5@32 ~@8 bb4@15 c5@8 bb4@17]/5",
  S: "[c5@15 ~ eb4@23 ~ eb4@6 ~@2 eb4@8 bb4@24 eb4@14 ~@2]/3", T: "[eb4@14 ~@2 eb4@7 bb4@24 ~ eb4@13 ~@3]/2",
  U: "[eb4@13 ~@3 eb4@8 bb4@22 ~@18]/2", V: "[eb4@8 f4@7 g4@16 ab4@16 ~ g4@14 ~@2]/2", W: "g4@7 ~ ab4@8 bb4@16",
  X: "c5 eb4", Y: "[~@16 [g3,bb3,f4]@51 ~@29]/3",
})).s("gm_french_horn").gain(0.27).pan(0.7)

// chords · trumpet
const trumpet = note("<~@11 A@7 ~@16 B C D E@2 F G H ~@8 I@3 ~@8 J K L M@2 ~@5>".pickRestart({
  A: "[~@30 eb4@5 c4@6 ~@5 g3@23 [bb3,g4]@16 ~ [bb3,eb4]@27 ~ [eb4,gb4]@20 ~@2 [b3,eb4]@18 ~@4 c4@23 ~ [ab3,d4]@41 ~, ~@41 g4@27 ~@90 eb4@17 ~@49]/7", // Eb Eb5 Ebm B Abdim
  B: "db4", C: "eb4@15 ~ eb4@5 ~ eb4@4 ~ eb4@4 ~", D: "eb4@7 ~",
  E: "[[b3,eb4]@13 ~@3 b3@15 ~ bb3@32, ~@16 eb4@41 ~@7]/2", F: "[db4,eb4]@3 db4", G: "c4@7 ~ c4@8 bb3@6 ~@2 bb3@8",
  H: "a3@2 eb4 d4", I: "[~@16 [e4,ab4]@32 [d4,gb4]@33 ~@15]/3", J: "bb3 c4 d4@2", K: "eb4 d4",
  L: "c4@15 ~ d4@10 ~ eb4@5", M: "[e4 eb4@2 ~]/2",
})).s("gm_trumpet").gain(0.38).pan(0.6)

// other · trombone
const trombone = note("<~@11 A@7 ~@7 B@2 C D E F G H I J K L M@2 N O P ~@19 Q R S T@2 ~@2 U@2 ~>".pickRestart({
  A: "[~@30 eb4@5 ~@6 bb2@5 [a2,db4]@23 ab2@17 [gb2,e4]@28 eb4@22 b3@18 ~@4 ab3@21 ~@3 ab3@7 bb3@9 c4@10 d4@16, ~@35 c4@11 ~@23 eb4@14 ~@141]/7", // A Gb7
  B: "[~@8 eb4@23 ~]/2", C: "eb4@4 d4@4 eb4@7 ~ eb4@6 ~@2 eb4@7 ~", D: "db4@3 ~ db4@4 c4@3 ~ c4@3 ~",
  E: "c4@6 ~@2 c4@8 d4@7 ~@2 d4@7", F: "~ b3@5 ~@2 b3@8 bb3@6 ~@2 bb3@5 ~@3", G: "bb3@7 ~ a3@6 ~@2 a3@6 ~@2 a3@8",
  H: "~@8 [c4,e4]@15 [d4,f4]@7 ~@2", I: "[d4,f4]@8 [eb4,g4]@7 ~ [eb4,g4]@8 [f4,ab4]@7 ~", J: "ab3",
  K: "bb3@14 ~@2 bb3@5 ~ bb3@4 ~ bb3@4 ~", L: "bb3@31 ~", M: "[b3@15 ~ g3@8 ab3@23 ~ g3@4 ab3@4 bb3@3 ~ c4@4]/2",
  N: "g3@15 ~", O: "g3@6 ~@2 g3@8 gb3@6 ~@2 gb3@7 ~", P: "f3 ab3", Q: "g3 f3 eb3@2", R: "f3@16 d4@7 ~ c4@8",
  S: "eb4@8 f4@6 ~@2 f4@5 d4@5 ~ eb4@5", T: "[a4 ab4 g4@4 ~@2]/2", U: "[~ [eb3,bb3,d4]@3]/2",
})).s("gm_trombone").gain(0.33).pan(0.6)

// other · vibraphone
const vibraphone = note("<~ A@2 B ~@5 C D ~@9 E F G ~@48>".pickRestart({
  A: "[~@26 bb5@21 ~@17]/2", B: "~@3 bb5@6 ~@7", C: "~@15 b4@6 f5@6 ~@5, ~@5 f4@4 ~@7", D: "~ eb4@6 eb5@6 ~ eb6@9 ~@9",
  E: "b4 c5", F: "d5@2 f5 g5", G: "bb4@9 ~@7",
})).s("gm_vibraphone").gain(0.27).pan(0.9)

// other · orchestral harp · "HARP"
const orchestral_harp = note("<~ A ~ B ~@5 C D ~@36 E F ~@22>".pickRestart({
  A: "~@26 bb5 ~@5, ~@25 bb4@2 ~@5", B: "~@6 [bb4,bb5] ~@25", C: "~@10 f4@5 b4@5 ~ f5@3 ~@8",
  D: "~ eb4@6 eb5@6 ~ eb6@6 ~@12", E: "~@16 bb3@3 d4@2 f4@3 ab4@3 bb4@2 d5@3",
  F: "[eb3,c4]@3 ~@2 c4 eb4 ~@5 bb5 ~@19, ~@4 bb3@2 ~ g4@2 c5@2 g5@2 ~@19, ~@4 bb4 eb5 ~@10", // Cm
})).s("gm_orchestral_harp").gain(0.27).pan(0)

// other · violin
const violin = note("<~@6 A B@5 ~ C@2 D@3 ~@6 E@3 ~@21 F G H I ~@19>".pickRestart({
  A: "~@7 bb5", B: "[~ g5@12 bb5@5 c6@6 ab5@5 bb5@6 g5@5 f5@6 g5@22 c6@11 b5@12 bb5@12 c6@14 eb5@15 g5@21 ~@7]/5",
  C: "[~@27 gb5@2 ab5@2 bb5@2 b5@2 ~ eb6@2 e6@2 f6@2 gb6@2 g6@2 ab6@2 a6@2 bb6@14, ~@35 db6@2 ~@27]/2",
  D: "[~@2 eb6@3 f6@3 gb6@11 b5@6 db6@5 eb6@17 ~ eb5@6 ab4@7 bb4@9 c5@26]/3",
  E: "[~@8 eb5@8 c5@8 bb5@16 ab5@8 g5@8 g6@33 ~@7]/3", F: "~@3 eb5", G: "c5@2 g5@3 ~ eb5@2", H: "c5@8 bb5@11 ~@5 ab5@8",
  I: "e5@8 db6@11 ~@13",
})).s("gm_violin").gain(0.14)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A B@2 C ~@2 D E@5 ~ F@2 G@3 H I J K@2 L M@3 N ~@3 O P@2 Q R S T U V W X ~ Y Z@2 AA ~ AB AC AD AE AF@2 AG AH AI AJ AK
  AL ~ AM AN@3 AO AP ~@4
>`.pickRestart({
  A: "~@24 bb4@4 ~@2 bb4 ~", B: "[~@9 bb4@4 ~ bb4@4 ~@2 bb4@2 ~@9 bb4@4 ~@2 bb4@5 ~ bb4@2 ~@8 bb4@3 ~@3 bb4@4 ~]/2",
  C: "~ bb4@2 ~@9 bb4@4 ~@16", D: "~@7 bb5",
  E: "[~ g5@11 bb5@6 c6@6 ab5@5 bb5@6 g5@5 f5@6 g5@22 c6@12 b5@11 bb5@12 ~ c6@13 eb5@15 g5@21 ~@7]/5",
  F: "[~@27 gb5@2 ab5@2 bb5@2 b5@2 ~ eb6@2 e6@2 f6@2 gb6@2 g6@2 ab6@2 a6@2 bb6@14, ~@35 db6@2 ~@27]/2",
  G: "[~@2 eb6@3 f6@3 gb6@11 b5@5 ~ db6@5 eb6@17 ~ eb5@6 ab4@7 bb4@9 c5@26]/3", H: "~@2 bb3 c4", I: "d4 g4@2 bb4",
  J: "b4@16 c5@15 ~", K: "[d5@16 f5@8 g5@5 c5 ~@2 bb4@23 ~ ab4@8, ~@31 b4@2 ~@31]/2", L: "g4@8 bb4@8 db5@13 ~@3",
  M: "[~@8 eb5@8 c5@8 bb5@16 ab5@8 g5@8 g6@25 ~@3 eb4@4 g4@4 c5@4]/3", N: "d5@8 c5@23 ~",
  O: "~@8 c5@2 ~ eb5@2 g5@2 ~ a5@8 f5@8",
  P: "[bb5@8 bb4@39 ~ [bb3,bb4]@2 [d4,d5]@2 [g4,g5]@3 [ab4,ab5]@2 [bb4,bb5] [c5,c6]@2 ~@2 [eb5,eb6]@2, ~@30 [db5,db6] ~, ~@61 [d5,d6]@2 ~]/2", // Bb D G Ab Bb C Eb Db …
  Q: "[f5,f6]@16 [db5,db6]@4 [eb5,eb6]@4 [f5,f6]@3 ~ [bb4,bb5]@4", // F Db Eb F Bb
  R: "[c5,c6]@8 [eb4,eb5]@4 [f4,f5]@4 [g4,g5]@5 [c5,c6]@5 ~ [eb5,eb6]@5", // C Eb F G C Eb
  S: "[bb4,bb5]@15 ~ [g4,g5]@4 [ab4,ab5]@4 [bb4,bb5]@4 [g4,g5]@4", T: "[bb4,bb5] [eb4,eb5]@5 [bb4,bb5]@2",
  U: "[ab4,ab5]@4 [g4,g5] [ab4,ab5] [bb4,bb5] [g4,g5]", V: "[bb4,bb5] [eb4,eb5]@5 [eb5,eb6]@2",
  W: "bb5@4 gb5 ab5 bb5 gb6", X: "eb6 c6 g5 eb5 bb4@4", Y: "~ [eb3,eb4]",
  Z: "[[g3,g4]@23 [ab3,ab4]@8 ~ bb4@16 [c4,c5]@16, ~@31 bb3@16 ~@17]/2", AA: "[eb4,eb5]@31 ~", AB: "~@3 [eb4,eb5]",
  AC: "[c4,c5]@2 [g4,g5]@3 ~ [eb4,eb5]@2", AD: "[c4,c5]@8 [bb4,bb5]@13 ~@3 [ab4,ab5]@8",
  AE: "[e4,e5]@8 [db5,db6]@11 ~@5 [b3,b4]@8", // E Db B
  AF: "[[e4,e5]@5 [b4,b5]@5 ~@4 e5@2 [eb5,eb6]@31 ~ eb5@16, ~@13 e6@3 ~@48]/2", AG: "eb6@12 c6@3 ~ bb5@16",
  AH: "ab5@2 g5 f5", AI: "~@2 c5@3 f5@3 bb5@2 g5@2 ~ ab5@3 eb6@12 bb5@4", AJ: "ab5@8 g5@7 ~ gb5@12 ~ bb4@3",
  AK: "ab4@2 b4@3 eb5@3 ab5@3 b5@2 eb6@2 ~ bb6@15 ~", AL: "b6 c7", AM: "g4@4 bb3@4 c4@4 ab4@4 bb4@7 bb3@4 ~ d4@4",
  AN: "[eb4@4 ab4@3 ~ ab4@4 eb5@5 d5@7 c5@7 eb5@8 f5@8 ~ f5@6 d5@5 eb5@4 a5@9 ab5@8 g5@16]/3",
  AO: "g4@8 c4@7 ~ ab4@8 g4@8", AP: "f4 ~",
})).s("gm_string_ensemble_1").gain(0.25)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note(`<
  A B@2 C D@2 E@6 ~ F@5 G H@5 I@4 J@6 K L@5 M@2 N@5 ~@2 O@5 P@6 Q@4 R@3 ~@4
>`.pickRestart({
  A: "~@24 [g3,d4,g4]@5 ~ [g3,d4,g4]@2", // G5
  B: "[~@9 [g3,d4,g4]@5 [ab3,eb4,ab4]@5 ~ [ab3,eb4,ab4]@2 ~@9 [ab3,eb4,ab4]@6 [g3,g4]@5 [g3,g4]@2 ~@10 [g3,d4,g4]@5 [ab3,eb4,ab4]@4 ~, ~@37 d4@8 ~@19]/2", // G5 Ab5 G G5 Ab5
  C: "~ [ab3,eb4]@2 ~@9 [ab3,eb4,ab4]@6 [eb3,g3,d4,g4,bb4]@5 [g3,d4,g4] ~@8, ~ ab4 ~@21 [eb3,bb4]@2 ~@7", // Ab5 Ebmaj7 G5 Eb5
  D: "[~@2 [eb3,g3,d4,g4,bb4]@4 ~@2 [eb3,g3,d4,g4,bb4]@5 [d4,g4,bb4] ~@11 [eb3,g3,d4,g4,bb4]@5 [f3,ab3,eb4,ab4,bb4]@5 ~ [f3,ab3,eb4,bb4]@2 ~@9 [f3,ab3,eb4,ab4,bb4]@4 ~@2 [f3,ab3,eb4,ab4,bb4]@5 [eb4,ab4,bb4] ~@5, ~@13 [eb3,g3]@2 ~@21 ab4 ~@21 [f3,ab3]@2 ~@4]/2", // Ebmaj7 Gm Ebmaj7 Fm7 Ebsus4 Eb Fm
  E: "[~@5 [f3,ab3,eb4,ab4,bb4]@4 ~@2 [eb3,g3,d4,g4,bb4]@5 ~ [eb3,g3,d4,g4,bb4] ~@10 [eb3,g3,d4]@5 [db4,e4]@23 [c4,f4,ab4]@11 b3@11 c4@11 [db4,e4]@11 [a3,c4,c5]@10 ~@2 [ab3,d4,b4]@11 [g3,bb3,bb4]@12 [gb3,a4]@13 [eb4,f4,ab4]@14 ~@2 [ab3,d4,g4]@21 ~@7, ~@28 [g4,bb4]@28 eb4@33 ~@11 f4@22 ~ eb4@25 f3@16 ~@28, ~@67 g4@34 ~@91, ~@78 bb3@23 ~@34 c4@49 ~@8]/6", // Fm7 Ebmaj7 Dbm Fm Dbm Am Abdim Gm …
  F: "[~@27 [bb3,e4,ab4]@22 ~ gb4@22 [b3,eb4]@20 ~@2 [c4,eb4]@24 [ab3,d4]@42, ~@50 eb4@17 ~@93]/5", G: "~@2 bb3 c4",
  H: "[[bb3,d4]@16 c4@16 [a3,d4]@28 ~@20 c4@16 [g3,bb3]@31 b3@15 ~ [e4,g4]@17, ~@16 eb4@48 d4@63 [db4,bb4]@33, ~@2 g4@3 f4@4 ~, ~@32 ab3@15 ~@33]/5", // Bb D5 Gm Em Gb
  I: "[eb4 d4 f4 b3 [bb3,d4]@4, ab3@47 ~@81, c4@41 ~@7 g4@76 ~@4, g4@32 eb4@91 ~@5]/4", // Bb
  J: "[db4@16 ~@88 a3@24 ~@8 [c4,e4]@16 [d4,f4]@15 ~ [eb4,g4]@16 [f4,ab4]@7 ~, f4@63 ~ gb3@32 c4@32 ~@64, ab3@32 d4@32 eb4@65 ~@63, ~@16 c4@33 b3@31 bb3@24 ~@88]/6", // C Dm Eb Fm
  K: "~ [ab3,f4]@3", L: "[bb3@2 ~@2 a3, g4@87 ab4@24 g4@49, ~@32 eb4@45 ~@3, ~@64 b3@32 bb3@31 db4@33]/5",
  M: "[[g3,c4]@16 [gb3,b3]@16 [g3,a3]@15 ~@9 d4@4 ~@4, eb4@7 ~, bb3@32 ~@15 ab3@13 ~@4, ~@3 bb4]/2", // C5 B5 Gsus2
  N: "[~@32 d4@15 ~ b3@15 ~@33 d4@7 ~@25 [c4,g4]@28 ~@4, bb3@47 ~ eb4@48 g3@15 ~ ab3@44 ~@4, ~@2 bb3@2 ~, ~@26 eb4@13 ~]/5", // C5
  O: "[~ [c4,f4,bb4]@2 [bb3,e4,ab4]@2 [ab3,db4,d4,gb4]@2 ab3@2 g3, ~ eb4@4 ~@2 [db4,f4]@3]/5", // Fsus4 Bbm7b5 Dbsus4 Db
  P: "[~@32 f3@16 g3@8 bb3@23 ~ gb3@16 ab3@15 ~ gb4@16 f4@15 ~ [c4,g4]@16 [a3,gb4]@16 [ab3,g4]@16, ~@4 eb4@31 ~ eb4@12, ~@16 c4@63 ~ b3@63 ~@49, ~@7 bb4@2 ~@3]/6", // C5 D Abmaj7
  Q: "[~@8 d4@5 ~@3 [d4,eb4,g4]@8 [d4,eb4,g4]@2 ~@14 [c4,f4]@8 [d4,g4]@16 [b3,f4,ab4]@16 [bb3,d4]@16 [ab3,c4]@15 ~ [g3,bb3,d4,f4]@16, bb4@13 ~@3 bb3@49 ~@15 g4@32 ~@16, ~@3 eb4@4 ~]/4", // Ebmaj7 F5 G5 Fdim Bb Ab Gm7
  R: "[[gb3,a3,e4] [f3,eb4]@2 ~ g4 ~, c4@5 ~, ~ ab3@4 ~, ~@3 d4@2 ~]/3", // Gbm7 F7
})).s("gm_string_ensemble_1").gain(0.25)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1_3 = note(`<
  A@4 B@3 C@5 ~ D@5 ~@9 E F G H I J@2 ~@15 K@5 L M N O P Q R S T U V@2 W@4 ~
>`.pickRestart({
  A: "[~@24 eb3@22 f3@22 ~ eb3@22 f3@22 ~ eb2@14, ~@24 [eb2,bb2]@89 ~@15]/4", // Eb5
  B: "[~@2 bb2@6 eb2@17 bb2@5 eb2@16 ~ bb2@6 eb2@16 bb2@6 eb2@21]/3",
  C: "[~ e2@11 a2@11 ~ ab2@11 b2@11 bb2@5 d3@6 c3@6 bb2@5 a2@11 ab2@12 g2@12 gb2@13 f2@16 bb2@21 ~@7]/5",
  D: "[~@27 gb2@22 ~ b2@22 ab2@22 f2@24 bb1@42]/5", E: "~@5 eb3 g3 c4", F: "db4@8 f3@8 c4@7 ~ f3@4 db4@4",
  G: "c4@4 f3@4 b3@7 ~", H: "b3@2 eb3@2 bb3@2 eb3 b3", I: "bb3 g3 a3@2", J: "bb3/2",
  K: "[~@16 eb3@32 gb3@31 ~ [e2,e3]@31 ~ [eb4,eb5]@31 ~ eb4@16]/5", L: "eb5@12 c5@3 ~ bb4@16", M: "ab4@2 g4 f4",
  N: "~@2 c4@3 f4@3 bb4@2 g4@2 ~ ab4@3 eb5@12 bb4@4", O: "ab4@8 g4@7 ~ gb4@12 ~ bb3@3",
  P: "ab3@2 b3@3 eb4@3 ab4@3 b4@2 eb5@2 ~ bb5@15 ~", Q: "b5 c6", R: "~ eb2", S: "eb3@8 d3@8 c3@15 ~", T: "b2 bb2",
  U: "ab2 g2", V: "[gb2@16 f2@31 ~@17]/2",
  W: "[~@16 [g3,bb3,d4,g4,bb4]@8 [g3,bb3,d4,g4,bb4]@3 ~@13 [g3,bb3,d4,g4,bb4]@7 ~ [ab3,c4,eb4,g4,bb4]@8 [ab3,c4,eb4]@23 [g3,bb3,d4]@49, bb2 eb2@7, ~@11 eb3@111 ~@6, ~@7 [g4,bb4]@9]/4", // Gm Abmaj7 Ab Gm
})).s("gm_string_ensemble_1").gain(0.22)
// … 51 more lines

More by Sinatra