Strudelify

Someday My Prince Will Come

Patricia Paay

KeyB♭ majorTempo107 bpm
0:00/0:00
// Someday My Prince Will Come — Patricia Paay
// 107 bpm, 3/4, key Bb 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: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 14 "Unnamed Track" vibraphone (copy of ch 13 "Unnamed Track" voice oohs)
// note: Full arrangement: all 79 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(107/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 · tremolo strings · "Unnamed Track"
const tremolo_strings = note("<A@2 B@2 C@3 ~@15 D E F G ~@53>".pickRestart({
  A: "[~@15 [bb4,d5]@4 f4@4 [bb4,d5]@4 ~ f4@4 [bb4,d5]@4 f4@4 ~ [bb4,eb5]@4 gb4@3]/2", // Bb Eb5
  B: "[~ [bb4,eb5]@4 gb4@4 ~ [bb4,eb5]@4 gb4@4 [bb4,d5]@4 f4@4 ~ [bb4,d5]@4 f4@4 [bb4,d5]@4 ~ f4@4 [bb4,eb5]@4]/2", // Eb5 Bb Eb5
  C: "[gb4@4 [bb4,eb5]@4 ~ gb4@4 [bb4,eb5]@4 gb4@4 ~ [a4,c5]@4 f4@4 [a4,c5]@4 f4@4 ~ [a4,c5]@4 f4@4 [g4,bb4]@4 ~ e4@4 [g4,bb4]@4 e4@4 [g4,bb4]@4 ~ e4@3]/3", // Eb5 Am Gm
  D: "c6 a5 f5 a5 d5 f5", E: "bb5 g5 e5 g5 db5 e5", F: "g5 eb5 d5 eb5 bb4 d5", G: "b4 ab4 f4 g4 c4 eb4",
})).s("gm_tremolo_strings").gain(0.15).pan(0.8)

// chords · string ensemble 1 · "Unnamed Track"
const string_ensemble_1 = note(`<
  ~@7 A@3 B C D E ~@4 F G H I ~@4 J K L M@8 N O@5 ~@13 P@8 Q R S@8 ~ T@3 ~
>`.pickRestart({
  A: "[~@9 g4@11 ~ ab4@11 g4@38 ~@2]/3", B: "[c4,d4]", C: "f4@2 gb4, d4", D: "a4@2 g4, d4", E: "[f4,g4]",
  F: "[a4,bb4,d5]", G: "[bb4,db5,e5]", H: "[bb4,d5,eb5]", I: "[a4,eb5]", J: "[f3,d4,f4]", K: "[f4,bb4]@2 gb4, [gb3,c4]",
  L: "a4@2 g4, [f3,b3,e4]", // E
  M: "[~@4 [f3,b3,eb4]@10 [bb3,d4,eb4,g4]@12 eb5@8 b4@4 d5@8 c5@4 c5@4 d5@4 eb5@4 f5@4 e5@4 f5@4 ~@9 bb5@5 c5@4 b4@4, g4@28 ~@24 [b3,f4,ab4]@24 bb3@32 [a3,eb4]@16 [a3,f4,c5]@24 ~@8 [c5,gb5]@19 ~@17, ~@38 [e4,a4]@12 ~@24 c6@9 ~@13]/8", // Fm7b5 Ebmaj7 Fdim Adim F Cdim A5
  N: "c5 a5@2", O: "[g5@8 [a3,c4,f5]@25 [ab3,b3,f4]@25 [g3,c4]@25 a3@25 ~@12]/5",
  P: "[~@13 c5@9 d4@8 ~@6 c5 eb5 ~ [f4,d5]@8 [a4,f5]@9 [c5,eb5]@8 c5@9 eb4@9 bb4@8 [f4,d5]@9 [eb4,eb5]@8 [d4,f5]@9 eb4@8 f4@9 g4@8 b4@9 c5@9 d5@8 a4@9 eb4@8 [e4,c5]@8, ~@13 d5@23 ~@28 d5@26 ~@26 eb5@26 ~@25 d5@17 ~@8, ~@30 bb4@9 ~@102 ab4@26 ~@25]/8", // Dm Cm Dm Eb Dm C
  Q: "~ c5@8 d6@9 eb6@6", R: "~@3 f6@8 e6@9 f6@4",
  S: "[~@21 bb6@9 c6@8 b5@9 c6@9 [f5,a6]@17 [e5,g6]@8 f6@111, ~@4 c7@17 ~@171, ~@13 [c5,gb5]@17 [bb4,f5]@26 db5@26 ~@110]/8", // F Em Cdim Bb5
  T: "[~@3 g4@6 c5@6 f5@8 bb5@41 ~@8]/3",
})).s("gm_string_ensemble_1").gain(0.25).pan(0.8)

// chords · string ensemble 2 · "Unnamed Track" · Ebmaj7 Fdim A Gm
const string_ensemble_2 = note(`<
  ~@14
  [~ [bb3,d4,eb4]@2]
  [~ [b3,f4,ab4]@2]
  [[bb3,e4,a4]]
  [~ [g5,bb5,d6] a3, eb4, bb3@2 ~]
  ~@61
>`).s("gm_string_ensemble_2").gain(0.2).pan(0.8)

// chords · string ensemble 1 · "Unnamed Track"
const string_ensemble_1_2 = note(`<
  ~@4 A@3 B@3 C D E F G H I J@3 K@2 L M N O P@2 Q R ~@4 S T@8 ~@6 U@4 V@3 W@8 X Y Z AA@7 AB@4 ~
>`.pickRestart({
  A: "[~@22 f3@4 d3@4 a3@4 d3@4 ~ c4@4 d3@4 e3@4 ~ db3@4 g3@4 db3@4 bb3@4 ~ db3@3]/3",
  B: "[~@9 bb3@11 ~ b3@11 bb3@11 a3@28 ~, ~ c3@31 f2@38 ~@2]/3", C: "[bb2,f3]", D: "[d3,gb3]", E: "[eb3,bb3]",
  F: "[d3,b3]", G: "[c3,g4]", H: "eb5@2 b4, g2", I: "d5@2 c5, c3",
  J: "[c5 ~ [gb5,b5,eb6] ~@3 a6@2 a6, f3@39 ~ f3@32, ~ [f5,c6,f6] [a5,e6]]/3", // B F5 A5
  K: "[f3@3 ~ d6 [eb3,eb6], g5@47 ~, [bb5,f6]@2 ~, ~@3 f3@2 ~]/2", L: "[d3,f6]", M: "c7@3 bb6 a6 g6, db3",
  N: "f6@3 eb6 d6 c6, c3", O: "[ab5,b5]@3 [gb5,a5] [f5,ab5] [eb5,g5], f2", P: "[[d5,f5] ~, bb2]/2",
  Q: "g2@20 f2 e2 eb2 d2", R: "db2", S: "~ d3@5",
  T: "[~ gb2@2 ~ e2@26 ~@10 [g3,c4,f4]@16 [e2,d4]@16 [a2,db4]@8 ~@8 [f4,c5]@17 db3@25 c3@25 b2@25 bb2@7 ~@5, g2@2 ~ f2@2 ~@27 eb2@24 g3@24 d3@25 ~@87]/8", // Csus4 E7 A F5
  U: "[~@13 c4@21 b3@21 bb3@35 a3@6]/4", V: "[~ g3@21 ab3@42 a3@8]/3",
  W: "[~@13 [bb1,f3]@26 bb3@17 gb3@8 a3@17 ~ g3@8 [d2,g3]@26 [c2,g3]@25 eb4@17 ~ b3@8 d4@17 c4@8, ~@39 d2@25 eb2@26 ~@51 g1@26 c2@25]/8", // Bb5 G5 C5
  X: "~ c4@8 ~@9 f2@4 eb2@2, ~ f2@17 ~@6, ~@3 g4@5", Y: "~@3 d2@17 d2@4, ~ f4@7",
  Z: "[g1,g2] [gb1,gb2] ~ [f1,f2] [e1,e2]@20", // G Gb F E
  AA: "[~@6 [eb3,bb3]@17 bb2@9 a2@25 [d2,f3]@26 ~ [db2,f3]@27 [gb1,f3]@29 [b1,a3]@28, ~@23 g3@34 ~@111]/7", // Eb5 Dm Db Gbmaj7 B7
  AB: "[~@11 d4@33 ~@4, ~@11 bb1@78 ~@7, ~@2 f3@9 ~]/4",
})).s("gm_string_ensemble_1").gain(0.2).pan(0.1)

// chords · string ensemble 1 · "Unnamed Track" · soft notes
const string_ensemble_1_soft = note("<A@2 B@2 C ~@74>".pickRestart({
  A: "[~@15 gb3@4 f3@4 gb3@4 ~ f3@4 gb3@4 f3@4 ~ gb3@4 f3@3]/2",
  B: "[~ gb3@4 f3@4 ~ gb3@4 f3@4 gb3@4 f3@4 ~ gb3@4 f3@4 gb3@4 ~ f3@4 gb3@4]/2", C: "f3@4 gb3@4 ~ f3@4 gb3@4 f3@4 ~@3",
})).s("gm_string_ensemble_1").gain(0.15).pan(0.1)

// other · flute · "Unnamed Track"
const flute = note("<~@33 A@4 B C@2 ~@5 D E ~@9 F@3 G H I J K L@5 M@3 N O@2 P@3 ~>".pickRestart({
  A: "[~@6 d6@4 eb6@4 f6@4 e6@4 f6@4 c7@9 bb6@5 c6@4 b5@4]/4", B: "c6 a6@2", C: "[g6@4 f6@17 ~@3]/2",
  D: "~@8 d6@2 ~@5 b5@2 ~@5 ab5@2", E: "g5 ~@11", F: "[~@22 f5@4 bb5@4 d6@4 ~@13 a5@4 ~ c6@4 gb6@4 ~@12]/3",
  G: "~ bb5@4 d6@4 ~ g6@4 ~@10", H: "~@3 b5@4 f6@4 g6@4 ~@9", I: "~@4 bb5@4 ~ eb6@4 g6@4 ~@7",
  J: "~@6 b5@4 f6@4 ~ ab6@4 ~@5", K: "~@2 bb5 e6 g6 ~",
  L: "[~ g5@4 a5@4 bb5@4 ~ c6@4 d6@4 eb6@4 ~ f6@8 e6@9 f6@8 c7@9 ~@8 bb6@9 c6@8 b5@9 c6@9 a6@16]/5",
  M: "[~ g6@8 f6@4 ~ c6@4 a5@4 f5@4 ~@14 f5@5 ab5@4 b5@5 eb6@4 db6@5 db6@5 ab5@4]/3", N: "~ f5@4 db5@5 ~@10 f6@4",
  O: "[~ eb6@5 ~ f6@27 ~@14]/2", P: "[~@9 c6@6 f6@49 ~@8]/3",
})).s("gm_flute").gain(0.2).pan(0.7)

// other · flute · "Unnamed Track" · soft notes
const flute_soft = note("<~@2 A@2 B@2 ~@73>".pickRestart({
  A: "[~@5 bb6@4 ~ ab6@4 gb6@4 f6@26 ~@4]/2", B: "[~@9 c6@4 d6@4 eb6@4 ~ f6@26]/2",
})).s("gm_flute").gain(0.1).pan(0.7)

// other · oboe · "Unnamed Track"
const oboe = note("<~@7 A@3 B C D E F G H I ~@27 J K ~@9 L@3 M@2 N O P Q@5 R@3 S T@2 U@3 ~>".pickRestart({
  A: "[~@9 f4@11 ~ e4@11 eb4@38 ~@2]/3", B: "f4", C: "bb4@2 gb4", D: "a4@2 g4", E: "g4@23 ~", F: "g4", G: "eb5@2 b4",
  H: "d5@2 c5", I: "c5@11 ~", J: "~@8 b5@2 ~@5 ab5@2 ~@5 f5@2", K: "eb5 ~@11",
  L: "[~@17 d5@4 ~ f5@4 bb5@4 ~@13 gb5@4 c6@4 ~ d6@4 ~@13 g5@3]/3", M: "[~ bb5@4 f6@4 ~@13 f5@4 ~ b5@4 d6@4 ~@13]/2",
  N: "eb5@4 g5@4 ~ d6@4 ~@11", O: "~ f5@2 ab5@2 b5@2 ~@5", P: "~@3 e5@4 ~ a5@4 bb5@4 ~@8",
  Q: "[~ f5@4 eb5@4 f5@4 ~ g5@4 a5@4 bb5@4 ~ c6@8 b5@9 c6@8 g6@17 f6@9 g5@8 gb5@9 g5@9 f6@16]/5",
  R: "[~ d6@8 c6@4 ~ a5@4 f5@4 c5@4 ~@14 db5@5 f5@4 ab5@5 b5@4 bb5@5 bb5@5 f5@4]/3", S: "~ db5@4 bb4@5 ~@10 db6@4",
  T: "[~ b5@5 ~ db6@27 ~@14]/2", U: "[~@3 g5@6 c6@55 ~@8]/3",
})).s("gm_oboe").gain(0.2)

// other · clarinet · "Unnamed Track"
const clarinet = note("<~@29 A@2 B C D ~ E@3 F@2 G@3 ~@2 H I ~@9 J@3 K@2 L M@2 N@5 O@3 P Q@5 ~>".pickRestart({
  A: "[~@2 [eb4,g4]@5 c4 eb4 g4 ~@2]/2", B: "~ b3 d4 ab4 ~@2", C: "~ bb3 e4 a4 ~@2", D: "~ eb4 g4 c5 ~@2",
  E: "[~@12 [d4,gb4]@19 ~@9 [c4,f4]@16 g4@12 g4@4, ~@7 d4@2]/3", F: "[f4@4 e4@4 [c4,f4]@25 ~@15, db4 ~@5]/2",
  G: "[~@18 f4@17 ~@9 eb4@17 ~@11]/3", H: "~@8 ab5@2 ~@5 f5@2 ~@5 d5@2", I: "c5 ~@11",
  J: "[~@13 bb4@4 d5@4 ~ f5@4 ~@13 d5@4 gb5@4 c6@4 ~@13 eb5@4 ~ g5@3]/3",
  K: "[~ bb5@4 ~@13 d5@4 f5@4 ~ b5@4 ~@13 c5@4]/2", L: "eb5@4 bb5@4 ~@13 b4@3",
  M: "[~@2 f5@4 ab5@4 ~@13 bb4@4 e5@4 ~ a5@4 ~@12]/2",
  N: "[~ eb5@4 bb4@4 c5@4 ~ d5@4 eb5@4 f5@4 ~ g5@8 gb5@9 g5@8 d6@17 c6@9 d5@8 db5@9 d5@9 c6@16]/5",
  O: "[~ a5@8 a5@4 ~ f5@4 c5@4 a4@4 ~@14 ab4@5 c5@4 eb5@5 ab5@4 f5@5 f5@5 db5@4]/3", P: "~ bb4@4 gb4@5 ~@10 ab5@4",
  Q: "[~ gb5@5 ~ ab5@27 ~@12 d5@5 g5@61 ~@8]/5",
})).s("gm_clarinet").gain(0.2).pan(0.3)

// chords · french horn · "Unnamed Track"
const french_horn = note("<A@2 B@5 C@3 ~@4 D E F ~@5 G H I J@7 K@8 L@8 ~@8 M@3 N@2 O@2 P Q@8 R@6 ~>".pickRestart({
  A: "[~@15 d4@17 f3@9 gb3@7]/2", B: "[~ f4@13 eb4@4 d4@17 f3@9 gb3@8 f4@13 eb4@4 ~ d4@17 f4@8 a4@17 g4@8]/5",
  C: "[~ f4@31 d4@11 c4@28 ~]/3", D: "~ [bb3,d4,eb4]@2", E: "~ [b3,f4,ab4]@2", F: "[bb3,e4]@2 ~", G: "~ [c4,f4]@2",
  H: "~ [bb3,e4]@2", I: "~ [bb3,eb4]@2", J: "[~@4 a3@2 [c4,d4]@6 ~@14 [f3,b3]@5 d4@6 b3@5, [bb3,eb4]]/7",
  K: "[~@12 e4@8 [e4,a4]@8 g4@24 c4@24 ~@8 [d3,ab3]@19 ~@9 [g3,c4,f4]@16 b3@12 e4@4 f4@4 g4@4 ~@8 [c4,f4]@17 ~@8 [b3,f4]@7, ~ g3@6 eb4@41, ~ bb3@15]/8", // A5 Ddim Csus4 F5 Bdim
  L: "[~@11 a3@6 ~@31, ~@3 [bb3,eb4]@29]/8", M: "[~@22 [c4,d4,f4]@17 ~@8 [c4,d4,gb4]@17 ~@8]/3",
  N: "[~ [c4,g4]@17 ~@9 [b3,f4,g4]@17 ~@4, ~ bb3@47]/2", O: "[~@4 g4@17 ~@9 [b3,f4,ab4]@17 ~, ~ [bb3,eb4]@11]/2",
  P: "~ [bb3,e4,a4]@2", // A
  Q: "[~ [a3,g4]@26 ~@8 [c4,f4]@17 ~@9 [ab3,d4,gb4]@17 ~@30 a3@4 b3@4 db4@4 ~ [db4,d4]@4 ~@4 c4@18 d4@4 c4@4 ~ b3@18 ~@4 b3@5 ~@9, ~ eb4@173 eb4@18, ~@13 bb3@19, ~@78 g4@34 f4@9 e4@8 f4@26 ~@37, ~@125 db4@67]/8", // A7 F5 Abm7b5 Dmaj7
  R: "[~@10 eb4@19 ~@6 d4@33 ~@4, ~@8 f3@9 ~]/6",
})).s("gm_french_horn").gain(0.2).pan(0.8)

// chords · trombone · "Unnamed Track"
const trombone = note("<~@42 A B@2 ~ C D E F G H I J K L ~@23>".pickRestart({
  A: "~@19 [d3,f3]@2 ~@3", B: "[~@14 [c3,gb3]@2 ~@7 [c3,gb3]@7 [bb2,g3]@2 ~@5 [bb2,g3]@5 [bb2,g3]@2 ~@4]/2",
  C: "~@4 [d3,eb3,g3] ~@7", D: "~@2 [d3,f3,b3]@2 ~@8 [d3,f3,b3]@7 [eb3,gb3,bb3]@2 ~@3",
  E: "~ [eb3,gb3,bb3]@2 [eb3,gb3,bb3] ~@6 [eb3,a3,d4] ~", // Ebm D
  F: "~@3 [eb3,a3,d4]@2 ~@5 [eb3,a3,d4]@2 ~ [d3,g3,c4]@2 ~@5 [d3,g3,c4]@2 ~@2", G: "~@7 [gb3,b3] ~@4",
  H: "[f3,b3]@7 [g3,d4]@2 ~@5 [g3,d4]@2 ~@8", I: "~@9 [eb3,bb3]@2 ~@7 [eb3,a3]@6",
  J: "~ [d3,a3,c4]@2 ~@5 [d3,a3,c4]@2 ~@14", K: "~@3 [f3,b3,eb4]@2 ~@7 [f3,b3,eb4]@7 [f3,bb3,db4]@2 ~@3",
  L: "~@2 [f3,bb3,db4]@4 ~ [f3,bb3,db4]@2 ~@7 [a3,db4,gb4]@4 ~ [a3,db4,gb4]@2 ~", // Bbm Gbm
})).s("gm_trombone").gain(0.3).pan(1)

// bass · acoustic bass · "Unnamed Track"
const bass = note("<~@42 A B C D E@2 F G H I J@3 K@2 ~@22>".pickRestart({
  A: "~@3 bb1 ~@2", B: "f2@2 ~@5 bb1@2 d2@5 ~@7 a2@2 ~", C: "~@2 d2 eb2 ~@5 bb2 ~@2",
  D: "~ bb1@2 g1@5 ~@2 a1@5 ~@2 b1@5 ~@2", E: "[c2@2 ~@10 g2@2 ~@5 c2@2 ~ g1@5 ~@6 f2@2 ~@5 g1@2 ~ c2@2 ~@3]/2",
  F: "~@6 c3@2 ~@5 bb2@2 ~ a2@5 ~@3", G: "~@3 eb3@2 ~@5 eb2@2 ~ d2@2 ~@9", H: "c3@2 ~@5 d2@2 ~ db2@5 ~@6 b2@2 ~",
  I: "~@4 db2@2 ~ c2@2 ~@9 g3@2 ~@4",
  J: "[~@2 bb2@2 f2@5 ~@7 c3@2 ~@5 f2@2 d2@2 ~@10 c3@2 ~@5 d2@2 db2@6 ~ ab2@6 ~ db2@6 ~ gb1@2 ~@3]/3",
  K: "[~@7 db2@2 ~@5 gb2@2 b1@2 ~@3 b1@14 ~@13]/2",
})).s("gm_acoustic_bass").gain(0.3)

// chords · orchestral harp · "Unnamed Track"
const orchestral_harp = note("<A@2 B@2 C@2 D E@5 ~@6 F@4 ~@4 G H I J@2 ~@38 K L M N O P@5>".pickRestart({
  A: "[~@29 d6@12 ~@7, ~@23 f4@5 bb5@13 ~@7, ~@3 bb4@2 ~, ~@26 d5@15 ~@7, ~@27 f5@14 ~@7]/2",
  B: "[~@8 d6@3 ~, ~ f4@4 f5@3 bb5 eb6@19 bb4 d5 f5 bb5@13 ~@4, ~ gb4@21 ~@2, ~@3 bb4@3 gb5@21 f4@17 ~@4, ~ eb5@10 ~]/2",
  C: "[~@33 c6@14 ~, ~@4 f4@5 f5 gb5 bb5 eb6@18 d4 a4 f5@15 ~, ~ gb4@7, ~@7 bb4@41, ~ eb5@5]/2",
  D: "~@11 g5@13, ~ db4@2, ~@3 bb4@5, ~@5 e5@7",
  E: "[~@7 c5@6 ~@2, ~@9 c4@6 g5@25 a3@13 a4@48 ~@19, ~@11 f4@21 f2@11 c4@48 ~@29, ~@12 bb4@23 eb3@11 eb4@48 ~@26, ~@14 d5@23 g3@13 g4@48 ~@22]/5",
  F: "[~@47 e6@48 ~, ~@16 d3@5 f4@4 bb3@16 bb4@4 bb5@48 ~@3, ~@17 f3@5 c5@4 db4 e4 g4 bb4 db5 e5 db4@10 db5@4 db6@48 ~@2, ~@18 a3@5 f5@10 e4@10 e5@48 ~@5, ~@19 bb3 c4@4 g3@10 g4 bb4 db5 e5 g5 bb5 g4@4 g5@48 ~@4]/4",
  G: "f3", H: "gb3", I: "g3", J: "[db2@7 ~@5]/2", K: "~@9 d3 a3 c4 ~ f4 a4 c5 d5 f5 a5 c6 ~@4",
  L: "~@12 db3 ab3 db4 f4 ab4 b4 ~ eb5 ab5 db6 ~@2", M: "~@15 gb2 db3 bb3 ~ db4 f4 ab4 bb4 db5",
  N: "~ f5 ab5 bb5 ~@16 b2 a3 ~ eb4", O: "ab4 db5 ~ f5 f6 ~@19",
  P: "[~@17 bb6@16 ~@7, ~@11 bb2@22 c5@17 f6@48 ~@22, ~@16 f3@23 f5@48 ~@33, ~@22 d4@25 bb5@48 ~@25, ~@9 g4@7 d6@16 ~@8]/5",
})).s("gm_orchestral_harp").gain(0.2)

// other · glockenspiel · "Unnamed Track"
const glockenspiel = note("<~@17 A B C B A B D E ~@8 F@4 G H@2 ~@24 I@5 J@2 ~@4 K@2 ~@2>".pickRestart({
  A: "~ d7 eb7", B: "f7", C: "a7@2 a7", D: "c8@3 bb7 a7 g7", E: "f7 ~",
  F: "[~@6 d7@4 eb7@4 f7@4 e7@4 f7@4 c8@9 bb7@5 c7@4 b6@4]/4", G: "c7 a7@2", H: "[g7@8 f7@25 ~@15]/2",
  I: "[~@9 d7@9 eb7@9 f7@8 e7@9 f7@8 c8@17 bb7@9 c7@8 b6@9 c7@9 a7@16]/5", J: "[~ g7@8 f7@26 ~@13]/2",
  K: "[~@3 g6@6 c7@6 f7@8 bb7@8 ~@17]/2",
})).s("gm_glockenspiel").gain(0.25)

// bass · pizzicato strings · "Unnamed Track"
const bass_2 = note("<A@7 B@3 ~@4 C D C E F ~@2 G H I J K ~@4 L@6 M@2 N@5 ~@13 O@8 P@2 Q R S@8 ~@3>".pickRestart({
  A: "[~@15 f1@26 f2@25 f1@26 f2@26 d2@25 db2@25]/7", B: "[~ c2@31 f2@40]/3", C: "c2", D: "g1", E: "f2", F: "~@2 f2",
  G: "f2@2 eb2", H: "d2@23 ~", I: "db2@23 ~", J: "c2@23 ~", K: "f1@23 ~", L: "[~ c2@6 g1@6 c2@6 f2@4 eb2@2 d2@6 ~@5]/6",
  M: "[~ eb2@3 e2@2]/2", N: "[a2@8 d2@25 db2@25 c2@25 b1@25 ~@12]/5",
  O: "[~@13 bb1@26 d2@25 eb2@26 d2@26 c2@25 g1@26 c2@25]/8", P: "[~@22 eb2@4 ~ d2@21, ~ f2@26 ~@21]/2", Q: "~ e1@5",
  R: "~ eb2@3", S: "[~@8 a2@25 d2@26 ~ db2@27 gb1@29 b1@39 bb1@36 ~]/8",
})).s("gm_pizzicato_strings").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@42 A B C D E F G H I J K L M N O ~@22>".pickRestart({
  A: "~ x", B: "x ~@6 x ~ x ~@11 x ~@2", C: "~@2 x!2 ~@5 x ~@2", D: "~ x ~ x ~@11 x ~@6 x ~",
  E: "x ~@11 x ~@6 x ~@2 x ~", F: "~@9 x ~@6 x ~@2 x ~@4", G: "~@6 x ~@6 x ~@2 x ~@7", H: "~@3 x ~@6 x ~@2 x ~@10",
  I: "x ~@6 x ~@2 x ~@10 x ~@2", J: "~@4 x ~@2 x ~@10 x ~@5", K: "~@2 x ~ x ~@11 x ~@6 x", L: "~ x ~@11 x ~@6 x ~ x ~",
  M: "~@10 x ~@6 x ~ x ~@4", N: "~@7 x ~@6 x ~ x ~@7", O: "~@4 x ~@6 x ~@12",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct("<~@42 A B C D E F G H I J K E L M N ~@22>".pickRestart({
  A: "~@19 x ~@4", B: "~@14 x ~@8 x", C: "~@13 x ~@10", D: "~@8 x ~@6 x ~@4 x ~ x ~", E: "~ x ~", F: "~ x ~@4 x ~@5",
  G: "~ x ~@8 x ~", H: "~@3 x ~@6 x ~", I: "~@7 x ~@4", J: "x ~@6 x ~@4", K: "~@3 x ~@2 x ~", L: "~ x ~@2 x ~@3",
  M: "~@2 x ~@18 x ~@2", N: "~ x ~@2",
})).gain(0.2)

// drums · hihat
const hihat = s("hh").struct("<~@42 A B C D E F G H I J K L M N O ~@22>".pickRestart({
  A: "~@5 x ~@2", B: "x ~@6 x ~@4 x ~@3 x ~@4 x ~@2", C: "~@4 x ~ x ~@9 x ~@6 x", D: "~@3 x ~@4 x ~@4 x ~@6 x ~@3",
  E: "x ~@9 x ~@6 x ~@4 x ~", F: "~@2 x ~@4 x ~@6 x ~@4 x ~@4", G: "~@4 x ~@6 x ~@4 x ~@3 x ~@3",
  H: "~ x ~@6 x ~@4 x ~@8 x ~", I: "~@5 x ~@4 x ~@3 x ~@4 x ~@4", J: "~@2 x ~@4 x ~@8 x ~@6 x",
  K: "~@4 x ~@4 x ~@3 x ~@6 x ~@3", L: "~ x ~@8 x ~@6 x ~@4 x ~", M: "~@3 x ~@3 x ~@6 x ~@4 x ~@4",
  N: "~@4 x ~@6 x ~@4 x ~@4 x ~@2", O: "~ x ~@6 x ~@15",
})).gain(0.2)
// … 14 more lines