Strudelify

joy to the world

from George F. Handel

KeyF majorTempo86 bpm
0:00/0:00
// joy to the world — from George F. Handel
// 86 bpm, 2/4, key F 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/4 at bar 1, 1/4 at bar 13, 2/4 at bar 14, 3/4 at bar 33, ...) are rendered on a constant 2/4 grid of one bar per cycle
// note: ch 5 "Bass" named as a bass, played on electric bass finger (its pizzicato strings patch is not one); ch 6 "Tubular Bells" named as a mallet, played on tubular bells (its tremolo strings patch is not one); ch 7 "Piccolo" named as a pipe, played on piccolo (its timpani patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/145294; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 144 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/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.

// chords · string ensemble 1 · "Boy Soprano"
const string_ensemble_1 = note(`<
  A@2 B C@5 ~ D@2 ~ E F@2 G@2 H I J K L M L M N O P ~ Q R S T@8 U ~@5 V@3 W@5 X Y ~ Z X Y ~@3 AA AB AC AD AE AF AG AH AI
  AJ AK AL AM AN AO AP AQ ~ AO AP AQ ~ AR@5 AS@2 ~@7 AT ~ AU AV@8 ~@3 AW@4 AX@7 AY AZ@5 BA@8 BB@6
>`.pickRestart({
  A: "[~@5 [f3,a3,c4]@14 ~ [f3,bb3,d4]@12]/2", B: "~ [e3,g3,c4]@7",
  C: "[[f3,a3,c4]@14 ~ [f3,a3,c4]@14 [f3,bb3,d4]@14 [e3,g3,c4]@14 ~ [f3,a3,c4]@14 ~@8]/5", // F Bb C F
  D: "[~@12 d4@2 ~ bb3@2 g3@2 ~@13, ~@7 c4 ~@8]/2", E: "~@7 a3@2 ~ c4@2 d4@2 c4@2, ~@9 bb3@2 ~@5",
  F: "[c4@2 ~ e4@2 ~@8 a3@6 bb3@2 c4@11, ~ d4 ~@14]/2", G: "[~ d4@4 c4@8 bb3@8 [f3,a3]@4 c3@2 ~@2 f2@3]/2",
  H: "~ c4@4 bb3@4 a3@4 g3@3", I: "~ bb3@4 c4@4 bb3@4 a3@3", J: "~ c4@4 f3@8 c4@2 ~",
  K: "~ a3@2 ~@2 c4@2 ~@2 a3@2 ~@2 f3@3", L: "~ c4@4 c4@4 e4@4 f4@3", M: "~ f4@4 f4@6 c4@2 c4@3",
  N: "~ f4@4 f4@4 f4@4 f4@3", O: "~ c4@2 e4@2 f4@11", P: "~ d4@2 c4@2 c4@4 c4@4 c4@3",
  Q: "~ [a3,c4]@2 [g3,bb3]@2 f3@4 c4@7", R: "~ f3@4 f3@6 g3@2 a3@3", S: "~ d4@4 c4@8 bb3@3",
  T: "[~@5 a3@24 [f3,a3,c4]@14 ~ [f3,bb3,d4]@14 [e3,g3,c4]@14 [f3,a3,c4]@14 ~ [f3,a3,c4]@14 [f3,bb3,d4]@14 [e3,g3,c4]@13]/8", // F Bb C F Bb C
  U: "~@2 [f3,a3,c4]@11 ~@3", V: "[~@4 d5@4 db5@3 b4 [d3,a4]@6 [g2,g4]@2 [gb3,gb4]@4, ~ d3@2 ~@3]/3",
  W: "[[e3,e4]@4 [gb3,d4]@6 [gb3,a4]@2 [g3,b4]@6 [g3,b4]@2 [a3,db5]@6 [a3,db5]@2 d3@4 a3 ~ gb3 ~ d3@2 d5@2, ~@7 d5@2 ~]/5", // E D Gbm G A
  X: "d5 db5 b4 a4, d3", Y: "a4@3 g4 gb4@4, d3@3 ~", Z: "~@3 d5", AA: "~@3 a3", AB: "a3!4", AC: "a2 ~ db3 ~ e3 ~ a3 g3",
  AD: "[gb3,a3] d4@2 [d3,b3]", AE: "a3@3 e4 gb4@2 e4@2", AF: "a3 [g3,a3]", AG: "[d3,gb3]",
  AH: "[d3,gb3]@8 [gb3,a3]@7 [g3,db4]", AI: "[a3,d4]@3 [g3,b3]", AJ: "[gb3,a3] [e3,g3]", AK: "[d3,gb3]@3 [a3,d4]",
  AL: "[b3,d4]@3 [b3,d4]", AM: "[a3,e4]@3 [a3,e4]", AN: "[gb3,d4]", AO: "~@2 d3 [a3,db4]",
  AP: "[g3,b3]@2 [gb3,a3]@2 [gb3,a3]@3 [e3,g3]", AQ: "[d3,gb3] ~",
  AR: "[~@4 d4@8 a3@6 a3 g3 gb3@2 [gb3,a3,d4]@4 [d3,b3]@2 a3@6 b3@2 a3@4]/5", AS: "[[g3,a3]@2 gb3@3 ~@3]/2",
  AT: "~@2 d4@2 ~ bb3@2 g3@2 ~@7, ~@2 c4 ~@5", AU: "~@13 a3@2 bb3",
  AV: "[c4@2 d4@2 c4@2 c4@2 ~ e4@2 f5@8 [a3,e5]@6 [bb3,d5]@2 [c4,c5]@12 [d4,bb4]@4 [c4,a4]@8 [bb3,g4]@8 [f3,a3]@4 c3@2 ~@2 f2@4 [c4,c5]@4 bb3@4 a3@4 g3@4 [bb3,d5]@4 c4@4 bb3@4 a3@4 [c4,e5]@4 ~@8 c3@2 ~@2 a2@2 ~@2 f2@4 ~, ~@8 d4@2 ~@49 f4@12 ~@4 d5@12 ~@4 e5@12 ~@4 [f3,f5]@16 ~@5]/8", // A5 Bb C Gm F Eb F C …
  AW: "[~@15 [f4,a4]@4 [f4,a4]@4 [f4,a4]@4 [f4,a4]@4 [c4,a4]@2 [e4,bb4]@2 [f4,c5]@12 [d4,bb4]@2 [c4,a4]@2 [c4,g4]@4 [c4,g4]@4 [c4,g4]@4 g4]/4", // F Edim F5 Gm F C5
  AX: "[~ a4@2 bb4@12 [a3,c4,a4]@2 [g3,bb3,g4]@2 [f3,f4]@4 [c4,f5]@8 [f3,d5]@4 c5@6 bb4@2 a4@4 [d4,bb4]@4 [c4,a4]@16 [bb3,g4]@16 [a3,f4]@16 [f3,a3,c4]@13, ~@35 f3@12 ~@65]/7", // Am Gm F F5 Dm Gm F Eb …
  AY: "~ [f3,bb3,d4]@7", // Bb
  AZ: "[[e3,g3,c4]@14 [f3,a3,c4]@14 ~ [f3,a3,c4]@14 [f3,bb3,d4]@14 [e3,g3,c4]@14 ~ [f3,a3,c4]@8]/5", // C F Bb C F
  BA: "[~@3 [f3,a3,c4,c5]@16 [f3,bb3,d4,d5]@16 [a3,d4,f4,f5]@16 [c4,e4,g4]@4 [c4,e4,g4]@3 [c4,e4,g4]!2 [g3,c4,e4] [c4,e4,g4] [g3,c4,e4] [c4,e4,g4], ~@51 g5@13]/8", // F Bb Dm C
  BB: "[~ [g3,c4,e4]@2 [f3,a3,c4,f4]@36 [f2,f3]@4 [f3,a3,c4,f4]@2 ~@3, ~ a5@14 ~]/6", // C F
})).s("gm_string_ensemble_1").gain(0.11)

// other · pizzicato strings · "Soprano"
const pizzicato_strings = note(`<
  ~@13 A@2 B@2 C D E@2 F G F G H I J K L M N@3 ~@28 O P Q R S T U V ~@32 W@8 ~@3 X@5 Y@6 ~@6 Z@8 AA@6
>`.pickRestart({
  A: "[~@5 f5@8 e5@6 d5@2 c5@11]/2", B: "[~ bb4@4 a4@8 g4@8 f4@11]/2", C: "~ c5@4 d5@11", D: "~ d5@4 e5@11",
  E: "[~ e5@4 f5@24 ~@3]/2", F: "~ f5@4 f5@4 e5@4 d5@3", G: "~ c5@4 c5@6 bb4@2 a4@3", H: "~ a4@4 a4@4 a4@4 a4@3",
  I: "~ a4@2 bb4@2 c5@11", J: "~ bb4@2 a4@2 g4@4 g4@4 g4@3", K: "~ g4@2 a4@2 bb4@11", L: "~ a4@2 g4@2 f4@4 f5@7",
  M: "~ d5@4 c5@6 bb4@2 a4@3", N: "[~ bb4@4 a4@8 g4@8 f4@24 ~@3]/3", O: "~ gb4 d5 a4", P: "gb5 d5 a5@2",
  Q: "e4@2 e4@2 e4@2 e4 gb4", R: "g4@6 gb4 e4", S: "d4 d5@2 b4", T: "a4@3 g4 gb4@2 g4@2", U: "gb4 e4", V: "d4",
  W: "[~@11 f5@8 e5@6 d5@2 c5@12 bb4@4 a4@8 g4@8 f4@12 c5@4 d5@12 d5@4 e5@12 e5@4 f5@16 ~@5]/8",
  X: "[~@15 a4@4 a4@4 a4@4 a4@4 a4@2 bb4@2 c5@12 bb4@2 a4@2 g4@4 g4@4 g4@4 g4@2 a4@2 bb4@12 a4]/5",
  Y: "[~ g4@2 f4@4 f5@8 d5@4 c5@6 bb4@2 a4@4 bb4@4 a4@16 g4@16 f4@16 ~@13]/6",
  Z: "[~@3 [a4,c5]@16 [bb4,d5]@16 [d5,f5]@16 [e5,g5]@13]/8", AA: "[~ [f5,a5]@14 ~]/6",
})).s("gm_pizzicato_strings").gain(0.15)

// other · tremolo strings · "Alto"
const tremolo_strings = note(`<
  ~@13 A@2 B@2 C D E@2 F G F G H I J K L M N@3 ~@29 O P Q R S T U ~@32 V@8 ~@3 W@5 X@6 ~@6 Y@8 Z@6
>`.pickRestart({
  A: "[~@5 a4@8 c5@6 bb4@2 a4@11]/2", B: "[~ g4@4 f4@8 e4@8 c4@11]/2", C: "~ f4@4 f4@11", D: "~ f4@4 g4@11",
  E: "[~ g4@4 [a4,c5]@24 ~@3]/2", F: "~ a4@4 a4@4 c5@4 bb4@3", G: "~ a4@4 a4@6 g4@2 f4@3", H: "~ f4@4 f4@4 f4@4 f4@3",
  I: "~ f4@2 g4@2 a4@11", J: "~ g4@2 f4@2 e4@4 e4@4 e4@3", K: "~ e4@2 f4@2 g4@11", L: "~ f4@2 e4@2 c4@4 c5@7",
  M: "~ bb4@4 a4@6 g4@2 f4@3", N: "[~ g4@4 f4@8 e4@8 c4@24 ~@3]/3", O: "~@6 g4 gb4", P: "db4@2 db4@2 db4@2 db4 d4",
  Q: "e4@6 d4 db4", R: "a3 a4@2 g4", S: "gb4@3 e4 d4@2 e4@2", T: "d4 db4", U: "a3",
  V: "[~@11 a4@8 c5@6 bb4@2 a4@12 g4@4 f4@8 e4@8 c4@12 f4@4 f4@12 f4@4 g4@12 g4@4 [a4,c5]@16 ~@5]/8", // Am
  W: "[~@15 f4@4 f4@4 f4@4 f4@4 f4@2 g4@2 a4@12 g4@2 f4@2 e4@4 e4@4 e4@4 e4@2 f4@2 g4@12 f4]/5",
  X: "[~ e4@2 c4@4 c5@8 bb4@4 a4@6 g4@2 f4@4 g4@4 f4@16 e4@16 c4@16 ~@13]/6", Y: "[~@3 f4@16 f4@16 a4@16 c5@13]/8",
  Z: "[~ [a4,c5]@14 ~]/6", // Am
})).s("gm_tremolo_strings").gain(0.16)

// other · string ensemble 1 · "Tenor"
const string_ensemble_1_2 = note(`<
  A B C D E@2 F G@3 H I@4 J@2 K L M@2 N@4 O P@2 Q@2 R S@3 T@2 U@3 V W X Y@3 Z AA@7 AB AC AD ~@2 AC AD ~ AE AF AG AH AI
  AJ AK AL AM AN AO AP AQ AR AS AT AU@3 ~ AV@3 ~@3 AW@3 AX@4 AY AZ BA@2 BB BC@3 BD@8 BE@7 BF@7 BG BH@2 BI ~ BJ BK@8 BL@6
>`.pickRestart({
  A: "~@13 [f1,f2]@3", B: "~@4 [f1,f2]@7 ~@5", C: "~@9 [c2,c3]@4 ~@3", D: "[c2,c3]@7 ~ [f1,f2]@7 ~",
  E: "[~@6 [f1,f2]@4 ~@3 [f1,f2]@7 ~@12]/2", F: "~@3 [c2,c3]@4 ~@3 [c2,c3]@4 ~@2",
  G: "[~ [f1,f2]@4 ~@3 [f1,f2]@14 ~@8 [f1,f2]@14 ~@4]/3", H: "~@3 [f1,f2]@13",
  I: "[~@9 [f1,f2]@14 f2@7 f1@4 f1@3 [f1,f2,f3]@8 [f1,f2]@2 ~@4 [f1,f2,d4]@2 [f1,f2,f4]@11, ~@45 c4@6 ~@13]/4", // F Dm F
  J: "[~ [bb0,bb1,d4]@4 f4@8 e4@8 f2@2 ~@2 c2@2 ~@2 f1@2 ~, ~@5 [c1,c2]@16 c4@11]/2", // Bb C
  K: "~ [a1,a2,c4]@4 bb3@4 a3@4 g3@3, ~@5 [bb1,bb2]@11", L: "~ [bb1,bb2,bb3]@4 c4@4 bb3@4 a3@3, ~@5 [c2,c3]@11",
  M: "[~ [c2,c3,c4]@4 [f1,f2]@8 [c2,c3]@2 ~@2 [a1,a2]@2 ~@2 [c2,c3]@2 ~@2 [a1,a2]@2 ~@2 [f1,f2]@3, ~@5 f4@24 ~@3]/2", // C F C A C A F
  N: "[~ c4@4 c4@4 e4@4 f4@4 f4@4 f4@6 c4@2 c4@4 c4@4 c4@4 e4@4 f4@4 f4@4 f4@6 c4@2 c4@3, ~@5 [f1,f2]@16 [f1,f2]@16 [f1,f2]@16 [f1,f2]@11]/4", // F
  O: "~ f4@4 f4@4 f4@4 f4@3", P: "[~ c4@2 e4@2 ~@12 d4@2 c4@2 c4@4 c4@4 c4@3, ~@5 f4@12 ~@15, ~@13 [f1,f2]@8 ~@11]/2",
  Q: "[~ e4@2 f4@2 ~@12 c4@2 bb3@2 [f1,f2,a3]@4 [f2,a4]@7, ~@5 g4@12 ~@15, ~@13 [c2,c3]@8 ~@11]/2", // F C
  R: "~ [f1,f2,f4]@4 f4@6 e4@2 c4@3, ~@5 [f1,f2]@11", // F
  S: "[~ [bb1,d4]@4 [c1,c2,c5]@8 [c1,c2,bb4]@8 [f1,f2,a4]@24 ~@3]/3", T: "[~@4 [f1,f2]@4 ~@4 [f1,f2]@7 ~@13]/2",
  U: "[~ [c2,c3]@4 ~@3 [c2,c3]@7 [f1,f2]@7 ~@8 [f1,f2]@4 ~@3 [f1,f2]@7 ~@4]/3", V: "~@5 [c2,c3]@2 ~",
  W: "~@2 [c2,c3]@4 ~@3 [f1,f2]@4 ~@3", X: "[d1,d2]@7 ~", Y: "[~@5 [d1,d2]@7 ~ [d1,d2]@7 ~@7 [d1,d2]@14 ~@7]/3",
  Z: "[d1,d2]!2", AA: "[[a0,a1]@2 d2@4 d2@3 g1 a1@4 d2@3 gb1 g1@3 g1 a1@3 a1 d1@2]/7", AB: "a1 ~ gb1 ~ d1@2 ~@2",
  AC: "d1", AD: "d1@3 ~", AE: "~@3 gb3", AF: "gb3@2 gb3@2 gb3@2 gb3 g3", AG: "a3@6 e4 d4, ~@3 [d1,d2]",
  AH: "a3!3 [a1,a3], a1@3 ~", AI: "a1 ~ db2 ~ e2 ~ a3 g3, db4@3 a2", AJ: "[d1,gb3] [d2,gb4]@2 [d1,g4]",
  AK: "a3@3 e4 gb4@2 [g1,e4]@2, [d1,d2]@3 ~", AL: "[a1,a4] [a1,g4]", AM: "[d2,gb4]", AN: "[d1,d2]@8 [d1,d2]@7 [e1,e2]",
  AO: "[gb1,gb2]@3 [g1,g2]", AP: "[a1,a2] [a0,a1]", AQ: "[d1,d2]@3 [gb1,gb2]", AR: "[g1,g2]@3 [g1,g2]",
  AS: "[a1,a2]@3 [a1,a2]", AT: "[d1,d2]@4 [a1,a2] ~ [gb1,gb2] ~", AU: "[[d1,d2] ~ [d1,d2]@8 ~@2]/3",
  AV: "[~ [d1,d2]@4 ~]/3", AW: "[~@2 [d1,d2] [d2,d3]@2 [d1,d2] [d1,d2]@3 g1 a1@2]/3",
  AX: "[a1@8 [d1,d2]@12 ~@4 [d1,d2]@14 ~@8 [d1,d2]@7 [d1,d2]@7 ~@4]/4", AY: "~@3 [d1,d2]@13", AZ: "~@9 [d1,d2]@7",
  BA: "[[d1,d2]@7 [a0,a1]@7 [f1,f2]@14 ~@4]/2", BB: "~ [f1,f2]@3", BC: "[~@9 [f1,f2]@14 ~@8 [f1,f2]@14 f2@3]/3",
  BD: "[~@4 f1@4 f1@3 f3@8 c4@6 d4@2 [f1,f2,f4]@12 [bb0,bb1,d4]@4 f4@8 e4@8 f2@2 ~@2 c2@2 ~@2 f1@2 ~@2 [a1,a2,c4]@4 bb3@4 a3@4 g3@4 [bb1,bb2,bb3]@4 c4@4 bb3@4 a3@4 [c2,c3,c4]@4 f2@8 c2@2 ~@2 a1@2 ~@2 f1@4 f4, ~@11 [f1,f2]@12 ~@20 [c1,c2]@16 c4@12 ~@4 [bb1,bb2]@12 ~@4 [c2,c3]@12 ~@4 f4@16 ~@5]/8", // F Bb Am Bb C F C Bb …
  BE: "[~@3 f4@4 e4@4 d4@4 c4@4 c4@6 bb3@2 a3@4 f4@4 f4@4 e4@4 d4@4 c4@4 c4@6 bb3@2 a3@4 f4@4 f4@4 f4@4 f4@4 c4@2 e4@2 ~@12 d4@2 c4@2 c4@4 c4@4 c4@4 e4, ~@3 f1@32 f1@28 ~@20 f4@12 ~@17, ~@91 [f1,f2]@8 ~@13]/7", // F
  BF: "[~ f4@2 ~@12 c4@2 bb3@2 [f1,f2,a3]@4 [f2,a4]@8 [f1,f2,f4]@4 f4@6 c4@2 c4@4 [bb1,d4]@4 [c1,c2,c4]@16 [c1,c2,bb3]@16 [f1,f2,a3]@16 ~@7 [f1,f2]@4 ~@2, ~@3 g4@12 ~@97, ~@11 [c2,c3]@8 ~@16 [f1,f2]@12 ~@65]/7", // F Bb C C7 F C F
  BG: "~@2 [f1,f2]@7 ~@7", BH: "[~@7 [c2,c3]@4 ~@3 [c2,c3]@7 [f1,f2]@7 ~@4]/2", BI: "~@4 [f1,f2]@4 ~@3 [f1,f2]@5",
  BJ: "[c2,c3]@4 ~@4 [c2,c3]@4 ~@3 [f1,f2]", // C F
  BK: "[~@3 [a1,a2,c4]@16 [bb1,bb2,d4]@16 [d2,d3,f4]@16 [e2,e3]@4 [c1,c2]@9, ~@51 g4@13]/8", // Am Bb Dm E C
  BL: "[~@14 f2 [g1,g2] [a1,a2] [bb1,bb2] [c2,c3] [d2,d3] [e2,e3] [f2,f3] [f2,f3]@4 [e2,e3]@8 [d2,d3]@4 [c2,c3]@8 [bb1,bb2]@8 [a1,a2]@8 [g1,g2]@8 f2@12 ~@4 [f1,f2]@4 ~@6, ~ c5@14 ~, ~@7 f1@34 ~@7]/6", // G A Bb C D E F E …
})).s("gm_string_ensemble_1").gain(0.33)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@13 A@2 B@2 C D E@2 ~@8 F G H@3 ~@27 I J K L M N O P Q ~@32 R@8 S@4 ~@3 T@7 ~@6 U@8 V@6
>`.pickRestart({
  A: "[~@5 f3@8 a3@6 bb3@2 c4@11]/2", B: "[~ bb3@4 c4@8 bb3@8 a3@11]/2", C: "~ a3@4 bb3@4 a3@4 g3@3",
  D: "~ bb3@4 c4@4 bb3@4 a3@3", E: "[~ c4@4 f3@24 ~@3]/2", F: "~ a3@2 g3@2 f3@4 c4@7", G: "~ f3@4 f3@6 g3@2 a3@3",
  H: "[~ bb3@4 c4@8 bb3@8 a3@24 ~@3]/3", I: "~@3 d3", J: "d3@2 d3@2 d3@2 d3 e3", K: "gb3@3 d3", L: "a3!4",
  M: "a3@6 a3 g3", N: "d3 d4@2 d3", O: "d3@3 b3", P: "a3 g3", Q: "d4",
  R: "[~@11 f3@8 a3@6 bb3@2 c4@12 bb3@4 c4@8 bb3@8 a3@12 a3@4 bb3@4 a3@4 g3@4 bb3@4 c4@4 bb3@4 a3@4 c4@4 f3@16 ~@4 a3]/8",
  S: "[~@3 a3@4 c4@4 bb3@4 a3@4 a3@6 g3@2 f3@4 a3@4 a3@4 c4@4 bb3@4 a3@4 a3@6 g3@2 f3@4 ~]/4",
  T: "[~@15 c3@4 f3@4 c4@8 f3@4 f3@12 bb3@4 c4@16 bb3@16 a3@16 ~@13]/7", U: "[~@3 a3@16 bb3@16 d4@16 e4@13]/8",
  V: "[~ f4@14 ~]/6",
})).s("gm_electric_bass_finger").gain(0.34)

// other · tubular bells
const tubular_bells = note("<A@2 B C D E F G ~@26 H I J@4 K ~@82 L M N O H P Q@2 ~@13>".pickRestart({
  A: "[~@13 c5@7 ~@7 g4@5]/2", B: "~@9 a4@7", C: "~@8 c5@7 ~", D: "~@6 c5@7 ~@3", E: "~@4 g4@7 ~@5", F: "~@3 a4@7 ~@6",
  G: "~ c5@7 ~@8", H: "~@4 c5@7 ~@5", I: "~@3 g4@7 ~@6", J: "[~ a4@7 ~@7 c5@7 ~@8 c5@7 ~@7 g4@7 ~@7 a4@6]/4",
  K: "~@9 c5@4 ~@3", L: "~@5 c5@3", M: "~@9 g4@7", N: "~@7 a4@7 ~@2", O: "~@5 c5@7 ~@4", P: "~@2 g4@7 ~@7",
  Q: "[a4@7 ~@8 c5@4 ~@13]/2",
})).s("gm_tubular_bells").gain(0.38)

// other · piccolo
const piccolo = note(`<
  ~@7 A@2 B@3 C D ~@18 E F@2 ~@6 G@2 H ~@35 I J K ~ L M K ~@5 N@2 O@2 ~ P@3 Q R S T ~@39 U V
>`.pickRestart({
  A: "[~@8 f6@4 f6 f6@2 a6@4 bb6@3 c7@10]/2",
  B: "[~ d7@4 c7@2 ~ a6@2 g6@2 bb6@2 ~ g6@2 e6@2 f6@4 f6 f6@2 a6@4 bb6@3 c7@11 d7@4, ~@7 bb6@2 ~@5 a6@2 ~@32]/3",
  C: "c7@2 ~ a6@2 g6@2 f2!9, ~ bb6 ~@6", D: "f2!5 f2@4 ~@7", E: "~@13 e5 f5 g5",
  F: "[a5 bb5 c6 d6 e6 f6 e6 d6 c6 bb5 a5 g5 f5 f5@7 ~@12]/2",
  G: "[d6@4 d6 d6@2 gb6@4 g6@3 a6@11 b6@4 ~ g6@2, ~@29 a6@2 ~]/2", H: "gb6@2 g6@2 a6@2 ~ gb6@2 e6@2 ~@5, ~@3 g6 ~@4",
  I: "~@4 a5 b5 db6 d6 d6@4 db6@4", J: "b5@2 a5@2 a5@3 g5", K: "gb5 ~", L: "~@4 a5 b5 db6 d6 d6@2 e6@2 d6@2 db6@2",
  M: "b5 db6 b5 a5 a5@3 g5", N: "[d5 e5 gb5 g5 a5 b5 db6 d6 d6@4 d6 d6@2 gb6@4 g6@3 a6@10]/2",
  O: "[~ b6@4 ~ g6@2 gb6@2 g6@2 a6@2 ~ gb6@2 e6@2 ~@13, ~@5 a6@2 ~@7 g6@2 ~@16]/2",
  P: "[~@14 f6@4 f6 f6@2 a6@4 bb6@3 c7@11 d7@4 ~ bb6@2 a6@2, ~@43 c7@2 ~@3]/3",
  Q: "g6@2 bb6@2 ~ g6@2 e6@2 f6@4 f6 f6@2, ~@2 a6 ~@5", R: "a6@4 bb6@3 c7@9",
  S: "~@2 d7@4 ~ bb6@2 a6@2 g6@2 f2!3, ~@3 c7 ~@4", T: "f2!11 f2@4 ~", U: "~@6 f2!10", V: "f2!6 [f2,f3]@4 ~@6",
})).s("gm_piccolo").gain(0.64)

// chords · flute
const flute = note(`<
  ~@7 A@2 B@3 C D ~@11 E F G H ~@3 I J@2 ~@6 K@2 L ~@30 M N O P ~ Q R S ~ T U S ~@5 V@2 W@3 X@3 Y Z AA@2 ~@10 AB@5 ~@26
>`.pickRestart({
  A: "[~@8 [f4,a4,f5]@4 [f4,a4,f5] [f4,a4,f5]@2 [a4,c5,a5]@4 [bb4,d5,bb5]@3 [a4,f5,c6]@10]/2", // F Am Bb F
  B: "[~ [bb4,f5,bb5]@4 f5@2 ~ c5@2 bb4@2 d5@2 ~ bb4@2 g4@2 [f4,a4,f5]@4 [f4,a4,f5] [f4,a4,f5]@2 [a4,c5,a5]@4 [bb4,d5,bb5]@3 [a4,f5,c6]@11 [bb4,f5,bb5]@4, ~@7 d5@2 ~@5 c5@2 ~@32]/3", // Bb5 F Am Bb F Bb5
  C: "e5@2 ~ c5@2 bb4@2 f4@2 ~ a4@2 bb4@2 c5@2, ~@2 d5@2 ~@5 g4@2 ~@5", D: "c5@2 ~ e5@2 ~@11, ~ d5 ~@6",
  E: "~ [f4,a4]@4 [f4,a4]@4 [f4,a4]@4 [f4,a4]@3", F: "~ [f4,a4]@2 [g4,bb4]@2 [a4,c5]@11",
  G: "~ [g4,bb4]@2 [f4,a4]@2 [e4,g4]@4 [e4,g4]@4 [e4,g4]@3", H: "~ [e4,g4]@2 [f4,a4]@2 [g4,bb4]@11", I: "~@13 e4 f4 g4",
  J: "[a4 bb4 c5 d5 e5 f5 e5 d5 c5 bb4 a4 g4 f4 f4@7 ~@12]/2",
  K: "[[d4,gb4,d5]@4 [d4,gb4,d5] [d4,gb4,d5]@2 [gb4,d5,gb5]@4 [g4,e5,g5]@3 [gb4,d5,a5]@11 [g4,d5,g5]@4 ~ [e5,g5]@2, ~@29 [gb5,a5]@2 ~]/2", // D C D G5 Em Gbm
  L: "[d5,gb5]@2 [e5,g5]@2 [gb5,a5]@2 ~ [d5,gb5]@2 ~@7, ~@3 [e5,g5] ~@4", M: "~@2 d5 g5 b5@2 ~@2",
  N: "~@2 e5 a5 db6@2 ~@2", O: "~@3 a4 d5 gb5 a5 d6", P: "gb5 ~@3", Q: "~@4 a4 b4 db5 d5 [gb4,d5]@4 [a4,db5]@4",
  R: "[g4,b4]@2 [gb4,a4]@2 [gb4,a4]@3 [e4,g4]", S: "[d4,gb4] ~",
  T: "~@4 a4 b4 db5 d5 [b4,d5]@2 [db5,e5]@2 [b4,d5]@2 [a4,db5]@2", // Bm Dbm Bm A
  U: "[g4,b4] [a4,db5] [g4,b4] [gb4,a4] [gb4,a4]@3 [e4,g4]", // G A G Gbm Em
  V: "[d4 e4 gb4 g4 a4 b4 db5 d5 [d4,gb4,d5]@4 [d4,gb4,d5] [d4,gb4,d5]@2 [gb4,d5,gb5]@4 [g4,e5,g5]@3 [gb4,d5,a5]@10]/2", // D C D
  W: "[~ [g4,d5,g5]@4 ~ [e5,g5]@2 [d5,gb5]@2 [e5,g5]@2 [gb5,a5]@2 ~ [d5,gb5]@2 [g4,e5]@2 [d4,gb4,d5]@4 [d4,gb4,d5] [d4,gb4,d5]@2 [gb4,d5,gb5]@4 [g4,e5,g5]@3 [gb4,d5,a5]@11 [g4,d5,b5]@4, ~@5 [gb5,a5]@2 ~@7 [e5,g5]@2 ~@32]/3", // G5 Em D Em Gbm D C D …
  X: "[~ [e5,g5]@2 [d5,gb5]@2 [e5,g5]@2 [gb5,a5]@2 ~ [d5,gb5]@2 [g4,e5]@2 [f4,a4,f5]@4 [f4,a4,f5] [f4,a4,f5]@2 [a4,c5,a5]@4 [bb4,d5,bb5]@3 [a4,f5,c6]@11 [bb4,f5,bb5]@4 ~ d5@2 c5@2, [gb5,a5]@2 ~@7 [e5,g5]@2 ~@32 f5@2 ~@3]/3", // Em D Em Gbm D C F Am …
  Y: "bb4@2 d5@2 ~ bb4@2 g4@2 [f4,a4,f5]@4 [f4,a4,f5] [f4,a4,f5]@2, ~@2 c5 ~@5", // F
  Z: "[a4,c5,a5]@4 [bb4,d5,bb5]@3 [a4,f5,c6]@9", // Am Bb F
  AA: "[~@2 [bb4,f5,bb5]@4 ~ d5@2 c5@2 bb4@2 f4@2 ~ a4@2 bb4@2 c5@2 c5@2 ~ e5@2 ~@5, ~@6 e5@2 ~@7 g4@2 ~@7 d5@2 ~@6]/2", // Bb5
  AB: "[~@15 [f4,a4]@4 [f4,a4]@4 [f4,a4]@4 [f4,a4]@4 [f4,a4]@2 [g4,bb4]@2 [a4,c5]@12 [g4,bb4]@2 [f4,a4]@2 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@2 [f4,a4]@2 [g4,bb4]@12 ~]/5", // F Gm Am Gm F Em F Gm
})).s("gm_flute").gain(0.4)

// chords · flute · soft notes
const flute_soft = note("<~@43 A B@2 C ~@3 D E F G ~ H I J ~ H K J ~@82>".pickRestart({
  A: "~@9 [g4,e5]@2 [d4,gb4,d5]@4 [d4,gb4,d5]", // C D
  B: "[[d4,gb4,d5]@2 [gb4,d5,gb5]@4 [g4,e5,g5]@3 [gb4,d5,a5]@11 [g4,d5,g5]@4 [gb5,a5]@2 [e5,g5]@2 [d5,gb5]@2 [e5,g5]@2]/2", // D C D G5 Gbm Em D Em
  C: "[db5,a5] [g4,e5] ~@2", D: "~@6 d5 g5", E: "b5@2 ~@4 e5 a5", F: "db6@2 ~@5 a4", G: "d5 gb5 a5 d6 gb6@2 ~@2",
  H: "~@3 d6", I: "[b5,d6] [a5,db6] [g5,b5] [gb5,a5]", J: "[gb5,a5]@3 [e5,g5] [d4,gb4]@4",
  K: "[b5,d6] [db6,e6] [b5,d6] [a5,db6] [g5,b5] [a5,db6] [g5,b5] [gb5,a5]", // Bm Dbm Bm A G A G Gbm
})).s("gm_flute").gain(0.2)

// other · trumpet · "C Trumpet"
const trumpet = note(`<
  ~@12 A B@2 C@2 ~@15 D E@2 ~@34 F G H I J K L M N ~ O P Q ~ R S Q ~ T@2 U V W ~@9 X@6 ~@10 Y@7 ~@6 Z@8 AA@6
>`.pickRestart({
  A: "~@7 f4@2 ~ a4@2 bb4@2 c5@2, ~@9 g4@2 ~@5", B: "[c5@2 ~ e5@2 f5@8 e5@6 d5@2 c5@11, ~ d5 ~@14]/2",
  C: "[~ bb4@4 a4@8 g4@8 f4@11]/2", D: "~@13 e4 f4 g4", E: "[a4 bb4 c5 d5 e5 f5 e5 d5 c5 bb4 a4 g4 f4 f4@7 ~@12]/2",
  F: "~@8 d4 e4 gb4 g4 a4 b4 db5 d5", G: "d5@8 gb5@7 g5", H: "a5@3 g5", I: "gb5 e5", J: "d5@3 ~",
  K: "~@2 d4 g4 b4@2 ~@2", L: "~@2 e4 a4 db5@2 ~@2", M: "~@3 gb4 a4 d5 gb5 a5", N: "gb5 ~@3",
  O: "~@4 a4 b4 db5 d5 d5@4 db5@4", P: "b4@2 a4@2 a4@3 g4", Q: "gb4 ~", R: "~@4 a4 b4 db5 d5 d5@2 e5@2 d5@2 db5@2",
  S: "b4 db5 b4 a4 a4@3 g4", T: "[~@2 a4 g4 d4@2 d5@4 b4@2 a4@3 g4]/2", U: "gb4 g4 gb4@2", V: "e4 d4",
  W: "d4 e4 gb4 g4 a4 b4 db5 d5 d5@7 ~",
  X: "[~@13 f4@2 ~ a4@2 bb4@2 c5@2 c5@2 ~ e5@2 f5@8 e5@6 d5@2 c5@12 bb4@4 a4@8 g4@8 f4@12 ~@9, ~@15 g4@2 ~@7 d5@2 ~@70]/6",
  Y: "[~@15 a4@2 g4@2 f4@4 f5@8 d5@4 c5@6 bb4@2 a4@4 bb4@4 a4@16 g4@16 f4@16 ~@13]/7",
  Z: "[~@3 f4@2 f4!2 a4@2 bb4@2 c5@8 f4@4 bb4@4 d5@4 bb4@4 d5@4 a4@4 d5@4 f5@4 g4@4 g4@3 g4!2 e4 g4 e4 g4]/8",
  AA: "[~ e4@2 [f4,a4]@38 ~@2 [f4,a4]@2 ~@3]/6", // F
// … 97 more lines