Strudelify

Finale Ultimo

Alan Menken

KeyG♭ majorTempo85 bpm
0:00/0:00
// Finale Ultimo — Alan Menken
// 85 bpm, 3/4, key Gb 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 (4/4 at bar 1, 6/8 at bar 32, 3/4 at bar 76, 4/4 at bar 109, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5851658; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 116 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(85/3)

// 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 · string ensemble 1 · "Women"
const string_ensemble_1 = note(`<
  A B C D@8 E@6 F@6 G@3 ~ H@6 ~ I J@8 K@6 L@3 M N O P Q R S@2 T@2 U V@7 W@7 ~ X@8 Y Z AA AB@7 AC@4 AD@6 AE AF@6 AG AH@2
>`.pickRestart({
  A: "~@7 bb3", B: "~ gb4@6 ab4@5 f4@20", C: "~ eb4@11 ~@4",
  D: "[~@4 gb4@5 ab4@6 bb4@5 ~@6 gb5@5 ab5@6 f5@22 eb5@22 ~@28 bb3@5 gb4@6 ab4@5 f4@11 eb4@33 f4@11 gb4@6 ab4@5 bb4@22 ~ bb5@16 b5@6 ab5@11 eb5@9, ~@20 bb4@17 ~@44 f4@44 ~@131]/8",
  E: "[~@2 bb4@16 ab4@6 ~@5 bb3@6 gb4@6 ab4@5 f4@6 eb4@5 eb4@6 f4@5 gb4@6 [eb4,ab4]@5 ab4@6 bb4@5 bb4@6 bb4@5 db5@6 [b4,eb5]@5 ~@11 eb5@11 ~ db6@16 eb6@6 b5@22 bb4@13, ~@24 f4@22 ~@44 db5@11 ~@11 [ab4,b4]@22 ~@58]/6", // Ab5 B Abm
  F: "[~@3 b4@6 f4@22 bb5@18 b5@6 f5@26 bb4@20 b4@7 bb5@20 b5@7 bb5@54 ~@3, ~@18 [ab4,f5]@9 ~@5]/6", // Db
  G: "[~@24 bb4@5 gb5@5 ~ ab5@5 f5@21 eb5@21 ~@14]/3",
  H: "[~@3 b4@5 bb4@5 ab4@5 ~ gb4@5 f4@5 eb4@5 ~ db4@5 ~@3 eb4@2 e4@3 gb4@3 ab4@2 bb4@3 b4@3 db5@2 eb5@5 ~ b4@5 e5@5 b5@5 ~ bb5@11 ab5@12 bb5@13 b5@14 ~ db6@48 ~@10]/6",
  I: "~@21 f5@5 b5@5 ~",
  J: "[a5@5 e4@48 e4@5 gb4@5 ab4@5 a4@16 d4@26 ~@6 db4@5 d4@5 ~ e4@5 gb4@16 b3@32 a3@5 b3@5 db4@5 ~ e4@58 ~@2, ~@5 db6@32 ~@219]/8",
  K: "[~@3 gb4@42 ~ e4@5 ab4@5 a4@5 ~ [ab4,b4]@5 [gb4,a4]@32 e4@26 b4@5 ~ [d4,a4]@31 [db4,e4]@30, ~@99 db4@32 ~@61]/6", // Abm Gbm D5 Dbm
  L: "[~@18 gb4@5 ab4@5 ~ a4@5 b4@11 db5@5 d5@3 b4@2 db5@3 d5@3 e5@2 gb5@3 [e4,g4,g5]@16 e5@5 e5@5 e5@4, ~ db4@16 b3@16 ~@15, ~@25 e4@8 ~@8 [e4,g4]@7]/3", // Em
  M: "~@18 [e4,g4]@5 [e4,a4]@5 [e4,b4]@4, ~@2 d5@21 ~@9", N: "~ [f4,c5]@16 f5@5 ~ f5@5 f5@4, ~@17 f4@15",
  O: "~@17 e4@5 f4@5 ~ [e4,g4]@4, ~ e5@21 ~@10", P: "~ [d4,a4]@16 f5@5 f5@5 ~ f5@4, ~@17 d4@15",
  Q: "~@11 c4@5 ~ c4@5 d4@5 e4@5, ~ g5@21 ~@10", R: "~@6 f5@5 g5@5 ~ [g4,e5]@5 [g4,d5]@5 [g4,c5]@5, ~ g4@16 ~@15",
  S: "[~ [g4,d5]@15 f4@2 g4@2 a4@2 ~ c5@2 d5@2 e5@2 f5@2 ~ a5@32, ~@22 b4@2 ~@7 g5@2 ~@31]/2", // G5
  T: "[f4@5 g4@5 ~ a4@5 b4@5 c5@5 ~ d5@5 f5@16 g4@5 [e4,c5]@5 [d4,b4]@5 ~, d4 g4@2 e5]/2", // C G
  U: "~@5 f5@3 e5@2 f5@3 g5@3 a5@2 f5@3 g5@3 a5@2 b5@3 c6@3, [c4,a4] [c4,g4]", // F C5
  V: "[d6@15 c6@16 f5@16 f5@3 d5@3 e5@2 f5@3 g5@3 a5@2 [g4,b4,b5]@16 [a4,c5,c6]@16 e4@3 f4@2 g4@3 a4@3 b4@2 c5@3 ~@3 e5@2 f5@3 ab5@3 a5@2 b5@3 [a4,e5,c6]@35 e6@7 d6@6 e6@7 c6@9 d6@9 e6@9 [a4,f5,f6]@15, [e4,b4]@31 [g4,b4]@26 ~@38 e5@16 ~@51 g4@38 ~@24, ~@95 c5@13 ~@3 [b4,d5]@16 c5@73 ~@24]/7", // G Am Dm E5 G Bm
  W: "[~@8 [c5,e5,e6]@22 [a4,d6]@45 ~ [a4,d5]@25 [g4,c5]@26 e4@30 ~ d4@30 c4@20 ~@16]/7", // C D5 C5
  X: "[~@2 g5@77 ~@5 c5@5 g4@5 bb4@11 ab4@5 ~@5 g4@5 ~ eb4@5 ab4@16 ~@5 g3@5 ~ bb3@5 b3@5 c4@5 ~ d4@5 eb4@5 g4@5 c5@5 ~ d5@5 eb5@5 f5@5 ~ g5@16 bb5@5 ab5@5 f5@5 g5@16 ab5@3]/8",
  Y: "~@3 g5@5 eb5@5 g5@11 ~@8", Z: "~@18 g4@5 ~ ab4@5 bb4@3", AA: "c5@2 db5@3 eb5@3 f5@2 g5@3 ab5@16 ~@3",
  AB: "[~@18 c4@5 d4@5 ~ eb4@2 g4@3 c5@5 eb5@5 f5@17 ~ f5@19 g5@24 d5@26 ~@5 c5@5 ~ g4@5 bb4@10 ab4@5 ~@6 g4@5 eb4@5 ~ ab4@10 eb4@5 ~ g4@5 g4@5 eb4@5 eb4@5 ~ f4@5 d4@3]/7",
  AC: "[~@8 g5@5 f5@5 ab5@5 ~ g5@5 eb5@5 [ab4,c5]@6 [ab4,c5]@5 [ab4,c5]@5 [g3,g4,bb4]@5 [bb3,g4,bb4]@5 ~ [d4,g4,bb4]@5 [eb4,g4,c5]@5 [g4,c5]@5 ~ [g4,bb4,c5]@5 [eb4,ab4]@3 ab4@2 c5@3 ab4@3 c5@2 eb5@3 c5@2 eb5@3 ab5@3 eb5@2 ab5@3 c6@3 ab5@2 c6@3 eb6@3 c6@2 eb6@3 ab6, ~@2 [ab4,c5]@32 ~@48 c5@5 ~@41]/4", // Ab Gm Eb Gm Cm C5 C7 Ab5 …
  AD: "[~@2 bb6@5 ab5@3 g5@2 f5@3 [d4,bb4,eb5]@3 ab5@2 g5@3 f5@3 eb5@2 d5@3 c5@2 bb4@5 ~ c5@2 f5@3 g5@3 ab5@2 bb5@3 ab5@3 g5@2 f5@3 eb5@3 d5@2 c5@5 ~ bb4@5 d5@5 ~@5 d5@5 ~ eb5@5 eb5@5 d5@5 ~ c5@5 d5@5 eb5@5 ~ f5@5 f5@5 g5@3 f5@3 g5@2 bb5@3 c6@2 bb5@3 ab5@3 g5@2 f5@3 eb5@3 d5@5 eb5@3 ab5@2 bb5@3 c6@3 d6@2 c6@3 bb5@3 ab5@2 g5@3 eb5@2, ~@7 [c4,c5]@8 ~@3 ab4@31 f4@16 d4@16 g4@16 eb4@16 ~@16 g4@16 ~@16 ab4@16 [bb4,d5]@15, ~@18 eb4@15 c4@16 bb4@22 ~@10 c5@27 ~@5 bb4@32 c5@32 ~@15]/6", // Ebmaj7 C Bb
  AE: "~ f5@5 eb5@5 d5@5 [ab4,c5,eb5]@16, ~ [g4,bb4]@16 ~@15", // Ab Gm
  AF: "[~ [c5,g5]@18 [bb4,f5]@20 [d5,bb5]@23 [c5,g5]@3 [a4,e5]@4 [e5,g5]@4 [a4,e5]@3 [a4,c5]@4 [a4,f5]@3 [c5,f5,g5]@4 [a4,f5]@4 [c5,g5]@3 [a4,e5]@4 [c5,g5]@4 [a4,e5]@3 [c5,f5,g5]@4 [a4,f5]@4 [a4,c5,g5]@3 [a4,f5]@4 [c5,g5]@3 [a4,e5]@4 [e5,g5]@4 [a4,e5]@3 [a4,c5]@4 [a4,f5]@4 [c5,f5,g5]@3 [a4,f5]@4 g5@3 [a4,f5]@4 c5@4 [a4,f5]@3 [f5,g5,c6]@14 ~@8 [c5,e5,e6]@7, ~@69 c5@7 g5@7 b4@7 ~@8 [b4,d5]@7 g4@7 ~ e5@7 ~@7 c5@7 g5@7 ~ b4@7 [c5,a5]@7 [e5,g5]@7 ~@29]/6", // C5 Bb5 Gm C5 A5 Em A5 Am …
  AG: "[a4,g5,g6]@7 ~ [b4,f5,f6]@7 [c5,a5,a6]@8 [e5,g5,g6]@9", AH: "[~ [f5,c6]@42 c4@2 c4@2 c4@4 ~@13]/2",
})).s("gm_string_ensemble_1").gain(0.25)

// chords · tremolo strings · "Men"
const tremolo_strings = note(`<
  ~@5 A@2 B@4 C@5 D@2 ~ E@4 ~@24 F@2 G H I J K L M N O@2 P@2 Q R S@5 T@6 ~ U@2 ~@16 V@4 W@4 X Y Z AA AB AC AD@2 AE AF@3
  AG AH@2
>`.pickRestart({
  A: "[bb2@6 gb3@5 ab3@6 f3@22 ~@25]/2",
  B: "[~@25 bb2@5 gb3@6 ab3@5 f3@6 eb3@5 eb3@6 f3@5 gb3@6 eb3@6 ab3@5 bb3@6 bb3@16 b3@6 ab3@20]/4",
  C: "[~@29 bb2@6 gb3@6 ab3@5 f3@6 eb3@5 eb3@6 f3@5 gb3@6 eb3@5 ab3@6 bb3@5 [bb3,db4]@17 [b3,eb4]@5 [ab3,b3]@22 ~@26]/5", // Bbm B Abm
  D: "[~@19 bb3@16 b3@6 f3@22 ~]/2", E: "[~@17 bb3@20 b3@7 [ab3,f4]@54 ~@30]/4", F: "[~@3 a3@31 b3@30]/2",
  G: "~ [a3,db4]@15", H: "~ [ab3,b3]@15", I: "~ [g3,c4]@8 [g3,c4]@7", J: "~@18 [g3,b3]@5 [g3,b3]@5 [g3,b3]@4",
  K: "~ [a3,c4]@16 [a3,c4]@15", L: "~@17 [g3,b3]@5 [g3,b3]@5 ~ [g3,b3]@4", M: "~ [f3,a3]@16 [f3,a3]@15",
  N: "~@11 [e3,g3]@5 ~ [e3,g3]@5 [g3,c4]@5 [c4,e4]@5", O: "[~ c4@32 c4@15 b3@11 ~@5, ~ f4@58 ~@5]/2",
  P: "[[f3,a3]@16 [f3,a3]@32 b3@5 c4@5 ~ [b3,d4]@5]/2", Q: "[a3,f4] [g3,e4]", R: "[f3,a3]",
  S: "[[b3,d4]@15 [a3,c4]@16 [f3,c4]@26 ~@6 [g3,b3]@16 [a3,c4]@16 [c4,e4]@16 [b3,d4]@16 [a3,c4]@33]/5", // Bm Am F5 G Am C Bm Am
  T: "[~@2 [c4,e4]@38 ~@9 [d4,f4]@23 [e4,g4]@22 [f4,a4]@45 ~ f4@25 e4@26 ~]/6", U: "[~@7 c4@5 ~@4]/2",
  V: "[~@3 c3@16 d3@16 bb3@16 b3@16 eb3@15 f3@11 g3@5 ab3@30, ~@35 eb3@32 ~@61]/4",
  W: "[~@2 c3@5 ~ d3@5 eb3@5 d3@5 eb3@5 ~ f3@5 eb3@5 g3@5 ~ bb3@5 c4@48 ~@5 [c3,c4]@8 [d3,d4]@3 [eb3,c4]@14]/4", // C D Cm
  X: "~ [c3,ab3]@16 [f3,d4]@15", Y: "~ [d3,bb3]@16 [g3,eb4]@15", Z: "~ [eb3,c4]@16 [bb3,f4]@15",
  AA: "~ [g3,d4]@16 [c4,g4]@15", AB: "~ [ab3,eb4]@16 [bb3,f4]@15", AC: "~ [g3,d4]@15 [ab3,eb4]@16",
  AD: "[~ c4@18 [bb3,f4]@20 d4@23 ~@2]/2", AE: "~@5 [c4,e4]@7 [a3,g4]@7 [b3,f4]@7 ~@6",
  AF: "[~@2 [b3,d4]@7 [g3,f4]@7 ~ [a3,e4]@7 ~@7 [c4,e4]@7 [a3,g4]@7 ~ [b3,f4]@7 [c4,a4]@7 [e4,g4]@7 [g4,a4]@14 ~@8 [c4,e4]@7]/3", // Bm G7 A5 C A7 Bdim F Em …
  AG: "[a3,g4]@7 ~ [b3,f4]@7 [c4,a4]@8 [e4,g4]@9", AH: "[~ [f4,a4]@43 ~@20]/2",
})).s("gm_tremolo_strings").gain(0.3)

// other · pizzicato strings · "Violin"
const pizzicato_strings = note("<~@37 A@7 ~ B@4 ~@27 C@2 ~@38>".pickRestart({
  A: "[~@20 gb5@16 e5@16 a5@16 ~@16 b5@16 a5@16 e6@32 gb6@31 e6@16 ~@29]/7",
  B: "[~@19 a5@5 b5@5 db6@5 ~ ab5@16 e6@16 gb6@31 e6@30]/4", C: "[~@13 [g3,g4]@17 ~ [a3,a4]@17 [b3,b4]@16]/2",
})).s("gm_pizzicato_strings").gain(0.2)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  A B C D@8 E@3 F@7 G@2 H@3 I@5 ~@19 J K L M N O P Q R@2 S T U V W@4 X@8 ~@4 Y@4 Z@7 ~@2 AA@8 AB@2 AC AD AE AF AG@2 AH
  AI@3 AJ AK@2
>`.pickRestart({
  A: "~@7 bb3", B: "~ gb4@6 ab4@5 db4@20", C: "~ b3@11 ~@4",
  D: "[~@4 eb4@5 f4@6 gb4@22 ab4@22 gb4@22 eb4@44 db4@11 b3@33 eb4@11 bb3@6 db4@5 eb4@22 ~ eb4@42]/8",
  E: "[~@2 gb4@16 ab4@6 f4@22 ~@6 bb3@5 eb4@6 f4@5 eb4@6 f4@5 f4@6 gb4@5 gb4@6]/3",
  F: "[bb4@5 gb4@6 bb4@5 ab4@11 b4@11 ~ eb5@44 bb3@11 b3@11 eb4@11 f4@11 bb4@12 b4@12 bb4@13 ab4@13 f4@7 eb4@7 f4@6 ab4@7 bb4@20]/7",
  G: "[b4@7 bb4@54 ~@3]/2", H: "[~@3 bb3@5 eb4@5 f4@5 ~ gb4@21 ab4@21 ab3@21 ~@14]/3",
  I: "[~@13 b3@5 ~ gb4@5 ab4@5 f4@21 ~ eb4@21 ~@3 eb4@2 e4@3 gb4@3 ab4@2 bb4@3 b4@3 db5@2 eb5@5 ~ e4@5 b4@5 e5@5 ~ gb5@11 e5@12 gb5@13 ~@9]/5",
  J: "~ e4@15", K: "~@18 g4@5 g4@5 g4@4", L: "~@2 g4@21 ~@9", M: "~@17 a4@5 ~ a4@5 a4@4", N: "~ c5@21 ~@10",
  O: "~@17 a4@5 a4@5 ~ a4@4", P: "~ e5@21 ~@10", Q: "~@17 f4@5 f4@5 f4@5",
  R: "[~ f4@15 f4@2 g4@2 a4@2 ~ c5@2 d5@2 e5@2 f5@2 ~ a5@32, ~@22 b4@2 ~@7 g5@2 ~@31]/2",
  S: "f4@5 g4@5 ~ a4@5 g4@5 a4@5 ~ b4@5", T: "a4 g4", U: "~@5 f5@3 e5@2 f5@3 g5@3 a5@2 f5@3 g5@3 a5@2 b5@3 c6@3",
  V: "b5@15 a5@16 ~",
  W: "[~@5 d4@5 e4@5 f4@5 ~ g4@5 a4@5 b4@16 a4@16 g3@3 a3@2 b3@3 c4@3 d4@2 e4@3 f4@3 ab4@2 a4@3 b4@3 c5@2 d5@3 c5@6 b4@5 c5@6 e5@6 d5@6 e5@4]/4",
  X: "[~@2 c6@7 b5@6 c6@7 e5@9 g5@9 c6@9 d6@23 c6@22 f5@45 ~ d5@25 c5@26 c4@30 ~ b3@30 ~@4]/8",
  Y: "[~@20 eb4@5 c4@5 f4@11 d4@5 ~@5 c4@5 ~ g3@5 eb4@16 ~@5 g3@5 ~ bb3@5 b3@5 c4@5 ~ d4@5 eb4@5 g4@5 c5@5 ~ d5@2]/4",
  Z: "[~@3 eb5@5 f5@5 ~@6 c5@5 g4@5 ~ bb4@10 ab4@5 ~@6 g4@5 eb4@5 ab4@16 ~@6 g4@5 eb4@5 g4@11 f4@5 ~@5 g4@26 ~ c4@16 d4@16 ~@5 c4@5 d4@5 ~ eb4@2 g4@3 c5@5 eb5@5 ~@20]/7",
  AA: "[~@8 eb4@5 ~ c4@5 f4@10 bb3@5 ~@6 bb3@5 g3@5 ~ b3@10 b3@5 ~@6 bb3@5 g3@5 b3@11 b3@5 ~@6 eb5@5 d5@5 f5@5 ~ eb5@5 c5@5 ab4@16 g3@5 bb3@5 ~ d4@5 eb4@5 g4@5 ~ bb4@5 eb4@3 ab4@2 c5@3 ab4@3 c5@2 eb5@3 c5@2 eb5@3 ab5@3 eb5@2 ab5@3 c6@3 ab5@2 c6@3 eb6@3 c6@2 eb6@3 ab5@3 bb5@5 ab5@3 g5@2 f5@3 eb5@3 ab5@2 g5@3 f5@3 eb5@2 d5@3 c5]/8",
  AB: "[~ bb4@5 ~ c5@2 f5@3 g5@3 ab5@2 bb5@3 ab5@3 g5@2 f5@3 eb5@3 d5@2 c5@5 ~ bb4@5 d5@5 c5@5 d5@5 ~ eb5@4]/2",
  AC: "~ eb5@5 d5@5 ~ c5@5 d5@5 eb5@5 ~ f5@4", AD: "~ f5@5 g5@3 f5@3 g5@2 bb5@3 c6@2 bb5@3 ab5@3 g5@2 f5@3 eb5@2",
  AE: "~ d5@5 eb5@3 ab5@2 bb5@3 c6@3 d6@2 c6@3 bb5@3 ab5@2 g5@3 eb5@2", AF: "~ f5@5 eb5@5 d5@5 eb4@16",
  AG: "[~ c5@18 bb4@20 d5@23 ~@2]/2", AH: "~@5 [c5,e5]@7 [a4,g5]@7 [b4,f5]@7 ~@6",
  AI: "[~@2 [b4,d5]@7 [g4,f5]@7 ~ [a4,e5]@7 ~@7 [c5,e5]@7 [a4,g5]@7 ~ [b4,f5]@7 [c5,a5]@7 [e5,g5]@7 [f5,c6]@14 ~ [c5,g5]@3 [a4,e5]@4 [c5,g5]@4 [a4,e5]@3]/3", // Bm G7 A5 C A7 Bdim F Em …
  AJ: "[c5,g5]@4 [a4,f5]@4 [c5,g5]@3 [a4,f5]@4 [c5,g5]@4 [a4,f5]@4 [c5,g5]@5 [a4,f5]@4", // C5 Dm C5 Dm C5 Dm C5 Dm
  AK: "[~ [c5,g5]@42 c4@2 c4@2 c4@4 ~@13]/2", // C5
})).s("gm_string_ensemble_1").gain(0.25)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@30 A@3 B@2 ~@8 C@5 D E ~@28 F@3 ~@9 G@2 H@2 ~@22>".pickRestart({
  A: "[~@23 ab5@14 ~ e5@48 ~@10]/3", B: "[~@5 e4@5 a4@5 ~ b4@5 e5@32 ~@11]/2",
  C: "[~@19 d4@16 e4@32 ~@16 db4@16 db4@32 ~@15 gb4@14]/5", D: "~ e4@15", E: "~@9 d4@7", F: "[~@2 g4@77 ~@17]/3",
  G: "[~@12 c5@17 ~ bb4@19 d5@8 c5@7]/2", H: "[a4@9 b4@26 ~@29]/2",
})).s("gm_string_ensemble_1").gain(0.15)

// chords · piano
const piano = note(`<
  ~@31 A@4 B@8 C@7 D@2 E F G H I J K L M N O P@5 Q@8 R@2 S@3 ~@9 T@3 U@2 V W@2 X@8 Y Z@7 AA@2
>`.pickRestart({
  A: "[~@6 db5@5 e5@5 a5@5 db5@5 ~ e5@5 a5@5 db5@5 ~ e5@5 a5@5 b4@5 ~ d5@5 f5@5 db5@5 e5@5 ~ a5@5 db5@5 e5@5 ~ a5@5 db5@5 e5@5 ~ a5@5 b4@5 d5@5 ~, ~@6 [a3,e4]@45 ~@2 d4@15 ~ [a3,e4]@45 ~@3 d4@11]/4", // A5
  B: "[f5@5 e4@5 a4@5 db5@5 ~ e5@5 db5@5 a4@5 ~ e4@5 ab4@5 db5@5 ~ e5@5 db5@5 ab4@5 d4@5 ~ gb4@5 a4@5 d5@5 ~ a4@5 gb4@5 db4@5 ~ e4@5 ab4@5 db5@5 ab4@5 ~ e4@5 b3@5 d4@5 ~ gb4@5 b4@5 gb4@5 ~ d4@5 a3@5 db4@5 e4@5 ~ a4@5 e4@5 db4@5 ~ a3@5 d4@5 e4@5 ~ a4@5 e4@5 d4@5 a3@5 ~ d4@5 e4@5 ab3@5 ~ d4@5 e4@2, ~@5 a3@30 ~@2 ab3@30 ~ gb3@30 ~@2 e3@30 ~@2 d3@30 ~@2 db3@30 ~@2 b2@30 ~ e3@15 ~ e2@13]/8",
  C: "[~@3 b3@5 ~ d4@5 gb4@5 b4@5 ~ gb4@5 d4@5 b3@5 e4@5 ~ ab4@5 b4@5 ab4@5 ~ e4@5 a3@5 db4@5 ~ gb4@5 a4@5 gb4@5 db4@5 ~ ab3@5 db4@5 e4@5 ~ ab4@5 e4@5 db4@5 ~ gb3@5 a3@5 d4@5 gb4@5 ~ d4@5 a3@5 e3@5 ~ a3@5 db4@5 e4@5 ~ db4@5 a3@5 gb3@5 a3@5 ~ d4@5 e4@5 d4@5 ~ a3@3, ~@3 b2@20 ~@2 a2@10 ab2@30 ~@2 gb2@30 ~@2 e2@30 ~@2 d3@30 ~ db3@30 ~@2 e3@30]/7",
  D: "[~@2 ab3@5 b3@5 ~ e4@5 [e2,e4]@5 [b2,ab4]@5 ~ [e3,b4]@5 ~@26 [g2,e5]@4, ~@2 [e2,e3]@15 ~ e3@11 ~@5 [c2,g5]@30, ~@39 [g2,e5]@21 ~@4, ~@44 [c3,c5]@11 [c3,c5]@9, ~@25 [e3,g4]@7]/2", // E E5 C E C5 C Em
  E: "~@7 [g2,e5], ~ [b1,g5]@15, ~@7 [g2,e5]@21 ~@4, ~@12 [b2,b4]@11 [b2,b4]@9, ~@9 [e3,g4]@7", // C Em C B Em
  F: "~@7 [f2,c5], ~ [a1,f5]@31, ~@7 [f2,c5]@21 ~@4, ~@12 [a2,a4]@11 [a2,a4]@9, ~@17 [c3,f4]@15", // F5 Dm F5 A F5
  G: "~@7 [b3,e5], ~ [g1,g5]@21 [g3,b4]@10, ~@7 e2@25, ~@7 e5@5 b4@5 [e3,g4]@15, ~@3 b2@5", // E5 G Em
  H: "~@7 [c3,f5], ~ [f2,a5]@31, ~@6 [c3,f5]@21 ~@5, ~@6 [f3,c5]@5 [f3,c5]@5, ~@17 [a3,a4]@15", // F5 F F5 A
  I: "~@27 [c3,e5]@5, ~ [e2,g5]@31, ~@6 [c3,e5]@21 ~@5, ~@11 [e3,c5]@11 [e3,c5]@10, ~@17 [g3,g4]@15", // C Em C G
  J: "~@27 [a2,a4]@5, ~ [d2,a5]@31, ~@6 a2@21 ~@5, ~@6 f5@11 [a3,f5]@15, ~@11 [f3,c5]@11 [f3,c5]@10", // A D5 Dm F5
  K: "~@27 [g2,g4]@5, ~ [c4,c5]@21 [d3,f4]@10, ~ g2@10 a3@21, ~@3 f3@13, ~@6 g4@5 f4@5 [b3,d4,b4]@16", // G C Dm Bm
  L: "~@27 f4@5, [d2,d4]@11 a4@5, ~@3 a2@13, ~@6 f4@5 a4@5 [a3,d5]@16, ~@11 f3@21", // D D5
  M: "~@27 g4@5, [b1,d4]@21 b4@11, ~@5 b2@27, ~@5 g4@6 b4@5 [b3,d5]@16, ~@11 g3@21", // Bm
  N: "~@26 [g3,c5]@5 ~, f5@21 [e4,g4]@11, c3@11 d5@21, ~@5 d4@27, ~@5 g4@6 g3@5 [c3,e5]@16", // C5 Em C
  O: "~@26 [f2,f4]@5 ~, f2@13 ~@3, a4 [f3,a4], ~@5 [c3,c4]@16 [c3,c4]@11, ~@10 [a3,g4]@21 ~", // F C A7
  P: "[[a2,d5]@5 [b3,d4]@5 ~@16 [e3,e4]@5 ~@27 a4@5 ~@27 [c3,f4]@5 ~@11 [a3,c5]@5 ~@11 [b3,b4]@5 ~@17 c6@6 c6@6 [c5,a5,c6]@4, ~@10 [e3,e4]@16 ~@5 f4@11 [f3,d4]@11 g4@10 b4@16 f4@5 [a3,c4]@11 ~@43 a3@6 [c5,a5]@6 [b4,g5]@10, ~@15 [a2,c5]@16 d2@32 f2@11 g4@21 c5@11 ~@5 b4@11 ~@5 c5@17 c4@16, ~@21 [a3,c4]@11 ~@5 a2@27 ~@4 g3@27 ~@5 [f3,g4]@11 ~@5 [f3,f4]@11 ~@6 e3@27, ~@37 a3@10 [a3,f4]@16 g4@5 c4@6 c3@5 [f2,a4,c5]@16 [g2,f4,e5]@16 [ab2,d5]@16 [a2,e4,a4]@33]/5", // D5 Bm E F5 Am B F E …
  Q: "[~@15 [c4,e5,c6,e6]@7 [g1,g2,g3,e5,g5,c6]@8 ~ [g1,g2,g3,f5,g5,d6]@8 ~ [g1,g2,g3,e5,g5,c6,e6]@8 ~ [d2,a2,f3,f5,a5,d6,f6]@22 ~ [e2,c3,g3,e5,g5,c6,e6]@22 f2@15 [f1,f2]@8 [f1,f2]@7 [f1,f2]@8 [f1,f2]@7 ~ [f4,d5]@25 [e4,c5]@25 ~ [c4,e4]@29 ~@2 [b3,d4]@29 ~ c4@4, ~@2 g2@20 ~@118 [g1,g2,g4]@49 ~@2 [g1,g2,a3]@57 ~@8, ~@2 [e5,c6,e6]@13 ~@241, ~@9 [e3,d5,b5,d6]@13 ~@72 [c3,a3,a4,d5,f5,a5]@43 ~@119]/8", // C G7 C Dm C F Dm C …
  R: "[~@2 [eb4,g4]@3 ~@2 [eb4,g4]@3 ~@3 g4@6 [eb4,g4]@3 ~@3 [eb4,g4]@3 ~@8 [eb4,g4]@3 ~@3 [eb4,g4]@3 ~@9 [eb4,g4]@3 ~@3 [eb4,g4]@3 ~, ~@13 g3@17 ~ [a3,a4]@17 [b3,b4]@16]/2", // Eb A B
  S: "[~@7 [eb4,g4]@3 ~@3 [eb4,g4]@3 ~@9 [eb4,g4]@3 ~@3 [eb4,g4]@3 ~@9 [eb4,g4]@3 ~@3 [eb4,g4]@3 ~@11 [eb4,g4]@4 ~@4 [eb4,g4]@4 ~@21, ~@2 c4@17 g3@17 a3@18 ~@2 b3@22 ~@18]/3", // Eb
  T: "[~@15 [f5,ab6]@14 ~@4 [d5,bb6]@16 ~@3 g6@21 [g1,g2,g3,b3]@23, ~@12 [f4,ab5]@17 ~ [d4,bb5]@19 [g4,g5]@24 ~@23, ~@13 [ab4,c6]@16 ~@2 [f4,d6]@19 ~ [d5,d6]@22 ~@23, ~@14 [c5,f6]@15 ~@3 [bb4,f6]@18 [c5,c6]@23 ~@23]/3", // Fm Gm G Fm Gm G Ab Dm …
  U: "[~@8 eb3@10 ~ bb5@3 f5@2 d5@3 bb4@2 f4@3 d4@3 ~@5 g3@10 ~ b5@2 ab5@3 eb5@3 b4@2 ab4@3, ~@3 c2@15 ~ d2@15 ~ eb2@15 ~@6 ab3@8, ~@6 g2@13 ~@3 bb2@13 ~@2 bb2@13 ~ b2@13, ~@24 f3@10 ~@19 eb3@11]/2",
  V: "eb4@3 ~@2 bb2@13 ~@3 b2@11, ~@3 bb1@15 g1@10 ~@4",
  W: "[~@2 [g3,c4]@3 [g3,c4]@3 [g3,c4,eb4]@2 [c4,eb4]@3 [c4,eb4,g4]@3 [eb4,g4]@2 [eb4,g4,c5]@3 [g4,c5]@3 [g4,c5,eb5]@2 [c5,eb5]@3 [c5,eb5,g5]@3 [c5,eb5,g5]@2 ~@6 [f4,c5]@5 [c4,ab4]@5 ~@5 [g4,d5]@5 ~ [d4,bb4]@3, ~@2 ab1@14 c4@2 g3@3 eb4@3 c4@11 ~@5 ab3@10 ~@5 bb3@9, ~@5 eb2@21 g4@3 eb4@5 ~@30, ~@8 c3@27 ~@2 c3@13 ~@3 d3@11, ~@10 g3@3 eb3@21 f2@15 ~ g2@14]/2", // C5 Cm Eb Cm C5 Cm F5 Fm …
  X: "[~@5 g2@2 eb3@3 g3@3 c4@5 eb4@5 [eb2,d4]@5 ~ [c3,eb4]@5 ab4@5 ~@3 [c4,eb4]@2 [c4,eb4,d5]@5 ~ c5@5 [eb2,d5]@5 [c3,eb5]@5 ~ bb5@2 ab5@3 eb5@3 c5@2 ab4@3 eb4@3 [ab3,c4]@2 eb3@3 [ab3,c4]@3 eb3@2 [g3,c4]@3 [eb3,c4]@2 [ab3,c4]@3 eb3@3 [ab3,c4]@2 eb3@3 [ab3,c4]@3 eb3@2 [bb3,d4]@3 f3@3 [bb3,d4]@2 f3@3 [a3,d4]@3 [f3,d4]@2 [bb3,d4]@3 f3@3 [bb3,d4]@2 f3@3 [bb3,d4]@3 f3@2 [c4,eb4]@3 g3@2 [c4,eb4]@3 g3@3 [c4,eb4]@2 g3@3 [c4,eb4]@3 g3@2 [c4,eb4]@3 g3@3 [c4,eb4]@2 g3@3 [bb3,d4]@3 f3@2 [bb3,d4]@3 f3@3 [bb3,d4]@2 f3@3 [bb3,d4]@3 f3@2 [bb3,d4]@3 f3@3 [bb3,d4]@2 f3@3 [c4,eb4]@2 g3@3 [c4,eb4]@3 g3@2 [bb3,eb4]@3 [g3,eb4]@3 [c4,eb4]@2 g3@3 [c4,eb4]@3 g3@2 [c4,eb4]@3 g3@3 [bb3,d4]@2 f3@3 [d4,f4]@3 bb3@2 [f4,bb4]@3 d4@2, ~@2 c2@15 ~ ab1@30 ~@2 ab1@25 ~ g1@5 ~ [f1,f2]@20 ~ [f1,f2]@5 [f1,f2]@5 [g1,g2]@20 ~@2 [g1,g2]@5 [g1,g2]@5 [ab1,ab2]@20 ~ [ab1,ab2]@5 ~ [ab1,ab2]@5 [g1,g2]@20 ~ [g1,g2]@5 ~ [g1,g2]@5 [ab1,ab2]@20 ~ [ab1,ab2]@5 [ab1,ab2]@5 ~ [g1,g2]@15, ~@2 [g4,eb5]@10 ~@6 [ab3,c4]@15 ~ eb3@15 ~@17 eb3@15 ~@175, ~@34 [c4,eb4]@8 ~@8 [c4,eb4,ab4]@15 ~@191, ~@39 bb4@5 ~@212]/8", // Ebmaj7 Cm Ebmaj7 Cm Ab C5 Cm Ab …
  Y: "~ [g1,g2,f4,bb4,d5,f5]@5 [g1,g2,eb4,g4,bb4,eb5]@5 [g1,g2,d4,g4,bb4,d5]@5 [f1,f2,eb4,bb4,c5]@16", // Gm7 Eb Gm Fsus4
  Z: "[~ [ab1,ab2,g4,c5,g5]@18 [bb1,bb2,f4,bb4,f5]@20 [g1,g2,bb4,d5,g5,bb5]@23 c5@7 e5@7 a4@7 [b4,f5]@7 ~@8 [b4,d5]@7 [g4,f5]@7 ~ [a4,e5]@7 ~@7 [c5,e5]@7 [a4,g5]@7 ~ [b4,f5]@7 [c5,a5]@7 [e5,g5]@7 ~@8 [g1,g2]@7 ~@7 [c5,e5]@7 [a4,g5]@7 ~ [b4,f5]@7 [c5,a5]@8 [e5,g5]@9, ~@62 [c1,c2,c6]@29 [c1,c2]@29 [c1,c2]@43 ~@15 [c1,c2]@46, ~@31 g5@7 g5@7 ~@67, ~@69 c5@22 ~@72 [g4,a4,c5,f5,g5,a5,c6]@14 ~@47]/7", // Abmaj7 Bb5 Gm Bdim Bm G7 A5 C …
  AA: "[~ [g4,a4,c5,f5,c6]@41 ~ [c1,c2,c3]@2 [c1,c2,c3]@2 [c1,c2,c3]@4 ~@13]/2", // F C
})).s("gm_piano").gain(0.2)

// other · string ensemble 1
const string_ensemble_1_3 = note(`<
  A@6 B C@3 D E@3 F G@3 H@2 I@3 J@4 K@5 ~@18 L M N O P Q R S T U V W X Y Z@3 AA AB@8 ~@2 AC@6 AD@3 AE@4 ~@2 AF@3 AG@4 AH
  AI AJ AK AL AM AN AO@8 AP
>`.pickRestart({
  A: "[~@6 bb2@5 eb3@6 f3@5 gb3@22 ~@6 gb2@5 b2@6 db3@5 eb3@22 eb3@44 ~ b2@44 ~@5 bb2@6 eb3@4]/6",
  B: "~ f3@6 gb3@22 ~@3", C: "[~@3 gb2@5 b2@6 db3@5 eb3@22 ~@6 bb2@5 gb3@6 ab3@5 bb3@22 ~@11]/3",
  D: "~ eb3@5 f3@6 gb3@20", E: "[~@2 bb3@11 gb3@11 f3@22 ~@6 bb2@5 gb3@11 ~@6 bb2@5 gb3@11 ~@6]/3",
  F: "eb3@5 bb3@11 b3@6 bb3@5 b3@5", G: "[~ eb4@6 gb4@44 bb3@11 b3@11 eb4@11 f4@11 ~]/3",
  H: "[~@5 ab3@12 gb3@6 f3@6 ~ eb3@6 db3@6 ~ b2@6 bb2@14 ~]/2", I: "[~@12 f3@7 gb3@7 ab3@13 bb3@54 ~@3]/3",
  J: "[~@3 gb2@5 b2@5 db3@5 ~ eb3@21 ~@5 f2@5 ~ bb2@5 c3@5 db3@21 ~@6 eb3@5 ab3@5 ~ bb3@5 b3@21 ~@3]/4",
  K: "[~@8 bb3@5 b3@5 ~ db4@21 ~@5 e2@5 ~ b2@5 gb3@5 ab3@5 ~ e3@5 b3@5 b3@5 ~ db4@51 ~@26]/5", L: "~ e3@8 e3@7",
  M: "~@7 g2@5 c3@5 ~ e3@14", N: "~@7 g2@5 b2@5 ~ e3@14", O: "~@7 f2@5 a2@5 c3@15", P: "~@7 e2@5 b2@5 e3@15",
  Q: "~@6 c3@5 ~ f3@5 a3@15", R: "~@6 c3@5 e3@5 ~ g3@15", S: "~@6 a2@5 c3@5 ~ f3@15",
  T: "~ g3@5 f3@5 a3@5 b3@5 ~ d3@5 g2@5", U: "~@6 a2@5 f3@5 a3@16", V: "f3@5 g3@5 ~ a3@5 g3@16", W: "f3 e3",
  X: "a3@5 g3@5 f3@5 ~ e3@5 d3@5 c3@5 ~", Y: "~@5 b3@5 e3@5 ~@6 a3@5 e3@5 ~",
  Z: "[~@5 a2@5 f3@5 a3@16 b3@16 c4@16 e4@16 d4@16 ~]/3", AA: "~@5 e3@5 a3@6 c4@16",
  AB: "[~@9 e3@6 c3@7 g2@9 g2@9 g2@9 [a2,f3]@23 [c3,g3]@22 [f2,a3]@45 ~ g2@51 g2@60 ~@5]/8", // Dm C5 F
  AC: "[~@2 c3@17 g2@17 a2@19 ~ b2@22 eb3@16 f3@16 g3@16 ab3@16 eb3@5 g3@5 ~ bb3@5 b3@11 b3@5 ~@5 g3@11 ~@2]/6",
  AD: "[~@3 g3@5 c4@5 ~ c3@16 d3@15 eb3@16 b2@5 ~ eb3@5 b2@5 bb2@11 ~@8]/3",
  AE: "[~@2 ab3@11 eb3@16 g3@16 f3@16 g3@16 g2@11 ~@5 eb3@2 g3@3 eb3@5 g3@5 ~@20]/4",
  AF: "[~@3 eb3@11 c3@2 eb3@3 f3@16 g3@10 eb3@3 g3@3 ab3@16 g3@10 bb3@3 g3@2 b3@14]/3",
  AG: "[~@8 g3@5 f3@5 ab3@2 g3@2 f3@2 ~ d3@2 c3@2 bb2@2 ~ g2@2 f2@5 ~ c3@5 f3@5 d3@5 eb3@5 ~ f3@5 eb3@5 g3@5 ~ bb3@5 eb3@5 d3@5 ~ eb3@5 ab3@5 bb3@5 d4@5 ~ c4@5 d4@5 eb4@4, ~@24 eb3@2 ~@5 ab2@2 ~@95]/4",
  AH: "~@2 eb4@8 eb4@2 eb4@5 ~ c4@10 g3@4", AI: "~ ab3@5 ~ c4@5 eb4@5 f4@11 a3@4",
  AJ: "~ bb3@5 ~ bb3@5 d4@5 c4@5 d4@5 ~ eb4@4", AK: "~ c4@8 c4@3 c4@5 d4@15", AL: "~@27 bb2@5",
  AM: "~ c3@5 eb3@5 g3@5 ~ bb3@10 g3@5", AN: "~ f3@5 eb3@5 d3@5 f3@16",
  AO: "[~ ab3@18 bb3@20 g3@23 c3@29 c3@29 c3@44 ~@7 g2@7 c3@47 ~@31]/8", AP: "~@11 c3@2 c3@2 c3@4 ~@13",
})).s("gm_string_ensemble_1").gain(0.25)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft_2 = note("<~@31 A@2 B@2 C@8 D@6 E ~@40 F@4 ~@22>".pickRestart({
  A: "[~@3 e4@24 ~@5]/2", B: "[~@5 a3@48 ~@11]/2", C: "[~@5 a3@32 ab3@31 gb3@32 e3@32 d3@32 db3@32 b2@31 e2@29]/8",
  D: "[~@3 b2@21 ~ a2@10 ab2@32 gb2@32 e2@32 d3@31 db3@30]/6", E: "~ e3@15",
  F: "[~@12 f4@17 ~ d4@19 d4@24 g3@26 ~@29]/4",
})).s("gm_string_ensemble_1").gain(0.15)

// other · string ensemble 1
const string_ensemble_1_4 = note(`<
  ~@16 A@3 B@3 C@6 D@4 ~@15 E@2 F@2 G H I J K L M N O P Q R S@8 T@5 ~@2 U@3 ~@19 V@6 W X@8 Y
>`.pickRestart({
  A: "[~@19 f2@50 ~@27]/3", B: "[~@17 bb2@54 ~@25]/3", C: "[~@29 b1@43 bb1@43 ab1@42 gb1@27 gb1@5 gb1@3]/6",
  D: "[~@3 gb1@5 e2@43 e2@51 ~@26]/4", E: "[~@3 d2@31 db2@30]/2", F: "~ e2@15", G: "~ c2@15", H: "~ b1@15",
  I: "~ a1@31", J: "~ g1@31", K: "~ f2@31", L: "~ e2@31", M: "~ d2@31", N: "~ g2@31", O: "d2", P: "b1", Q: "c2!2",
  R: "f2", S: "[a2@15 a2@16 d2@32 f2@16 f2@16 g2@16 ab2@16 a2@35 g2@20 g1@9 g1@9 g1@9 d2@23 e2@23 ~]/8",
  T: "[~@13 f1@8 f1@7 f1@8 f1@8 g1@51 g2@60 ~@5]/5", U: "[~@2 c2@17 g1@17 a1@19 ~ b1@23 ~@17]/3",
  V: "[~@12 g1@5 ~ f1@21 f1@5 f1@5 g1@21 ~ g1@5 g1@5 ab1@21 ab1@5 ~ ab1@5 g1@21 g1@5 ~ g1@5 ab1@21 ab1@5 ab1@5 ~ g1@15]/6",
  W: "~ g1@5 g1@5 g1@5 f1@16", X: "[~ ab1@18 bb1@20 g1@23 c2@29 c2@29 c2@44 ~@7 g1@7 c2@47 ~@31]/8",
  Y: "~@11 c2@2 c2@2 c2@4 ~@13",
})).s("gm_string_ensemble_1").gain(0.25)

// bass · pizzicato strings
const bass = note("<A@4 B@7 C@5 ~@23 D@5 ~@32 E@2 ~@2 F@8 G@3 ~@2 H@3 I@2 J K L ~@15>".pickRestart({
  A: "[eb2@11 b1@11 eb2@10]/4", B: "[~@5 b1@44 eb2@44 b1@44 eb2@44 ~ ab2@42]/7",
  C: "[~ bb2@8 b2@3 bb2@11 eb2@11 db2@11 ab2@22 ~@13]/5", D: "[~@4 d3@32 db3@32 b2@31 e2@32 ~@29]/5",
  E: "[~@13 g3@17 ~ a3@17 b3@16]/2",
// … 10 more lines

More by Alan Menken