Strudelify

The Nativity: A Christmas Celebration

Aaron Graf

KeyD♭ majorTempo90 bpm
0:00/0:00
// The Nativity: A Christmas Celebration — Aaron Graf
// 90 bpm, 4/4, key Db 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, 12/8 at bar 21, 6/8 at bar 38, 3/4 at bar 78, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5792720; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 174 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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.

// other · flute
const flute = note(`<
  ~@2 A@5 B C@3 D@3 E@2 ~@2 F@6 ~@4 G H@3 I J@4 ~@21 K@6 L@6 M@2 ~@54 N O P Q@4 ~@2 R S@2 T@8 ~@7 U V@3 W@2 X@2 Y@5 ~@8
>`.pickRestart({
  A: "[~@13 bb5@19 bb5@6 c6@19 c6@6 ~ db6@87 ~@14 db6@12 ~ c6@9 ~ bb5@2 ~ ab5@18 ~ gb5@3 ~@3 f5@12 ~ eb5@11]/5",
  B: "~@2 db5@12 ~@7 ab5@3 ~@3 bb5@18 ~ bb5@2",
  C: "[~@4 c6@18 ~ c6@3 ~@4 db6@36 ~@8 db6@6 ~ db6@6 c6@6 bb5@6 ~ ab5@6 ab5@10 gb5@3 f5@6 db6@6 db6@6 ~ c6@6]/3",
  D: "[bb5@6 ab5@6 ~ ab5@9 gb5@3 ~ f5@6 f5@6 f5@3 f5@3 ~ f5@6 f5@6 f5@3 gb5@3 ~ ab5@12 ~@7 gb5@3 f5@3 eb5@3 eb5@3 eb5@6 ~ eb5@6 eb5@3 f5@3 gb5@12 ~@8 f5@3 eb5@3 db5@4]/3",
  E: "[~@2 db6@12 ~ bb5@6 ab5@10 gb5@3 f5@6 gb5@6 ~ f5@12 eb5@12 ~ db5@24]/2",
  F: "[~@7 ab5@13 bb5@6 c6@6 ~ db6@78 ~@3 bb5@63 ~@3 bb5@63 ~@45]/6", G: "~@33 c5@8 d5@3 eb5@4",
  H: "[~ eb5@8 ~ d5@2 c5@5 ~ bb4@11 g4@5 ~ bb4@11 eb5@5 c5@8 ~ d5@2 eb5@5 ~ eb5@8 d5@3 c5@5 bb4@58 ~@2]/3",
  I: "~ bb4@5 ~ b4@8 bb4@3 ab4@5 ~ gb4@8 f4@3 eb4@5 f4@8",
  J: "[~@3 gb4@5 ~ eb4@16 f4@6 gb4@5 ab4@5 ~ bb4@11 bb4@5 ~ db5@126 ~@7]/4",
  K: "[~@36 c5@51 ~@3 b4@12 a4@6 b4@51 ~@3 b4@17 ~ d5@46 ~@2 a4@6 a4@11 ~ a4@6 c5@34 ~@2]/6",
  L: "[c5@28 ~@2 c5@6 e5@36 d5@29 ~ b4@6 c5@51 ~@3 a4@17 ~ g4@51 ~@3 g4@17 ~ a4@17 ~ g4@17 ~]/6", M: "[g4@17 ~@7]/2",
  N: "~@31 c5@6 f5@6 a5@5", O: "~ c6@6 d6@6 d6@3 c6@3 bb5@6 d6@3 ~@3 c6@6 c6@3 bb5@3 a5@5",
  P: "~ c6@3 ~@3 bb5@6 bb5@3 a5@3 g5@6 bb5@3 ~@3 a5@6 a5@3 g5@3 f5@5",
  Q: "[~ e5@6 d5@3 c5@3 d5@3 e5@3 f5@6 a5@6 bb5@3 a5@3 g5@3 a5@3 bb5@11 ~ a5@47 ~ a5@59 ~@30]/4",
  R: "~@19 eb5@9 ab5@9 ab5@11", S: "[~@3 g5@4 ab5@9 c6@9 c6@9 bb5@9 eb6@9 bb5@9 bb5@13 ~ ab5@4 g5@9 f5@8]/2",
  T: "[~ eb5@9 ~@9 eb6@9 eb6@9 eb6@52 ~@2 eb6@9 eb6@9 eb6@52 ~@2 f6@13 ~ f6@4 f6@9 eb6@9 db6@9 c6@9 db6@9 ~@9 bb5@9 c6@5 db6@5 eb6@20 ~@2 bb5@108]/8",
  U: "~@19 d6@20 ~@2 c6@7",
  V: "[~@4 b5@10 c6@20 ~@2 b5@20 ~@2 a5@10 b5@10 ~ g5@10 ~ a5@10 ~ gb5@16 e5@5 d5@10 ~ g5@10 ~]/3",
  W: "[g5@10 ~ gb5@10 ~ g5@10 a5@10 ~ g5@22 d5@10 ~ b5@10 b5@10]/2",
  X: "[~ a5@10 ~ b5@10 ~ c6@10 ~ b5@20 ~ a5@10 ~ b5@10 ~ c6@10 ~ b5@8]/2",
  Y: "[~@2 a5@10 ~ g5@10 ~ gb5@20 ~@2 g5@10 c6@10 ~ b5@41 ~@2 a5@41 ~@3 g5@84 ~@2]/5",
})).s("gm_flute").gain(0.3)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  ~@2 A@5 B C@3 D E@4 ~ F@4 ~@7 G H@2 I J@2 K@3 ~@14 L M N@2 O@2 P@6 Q@5 ~@68 R@2 S@5 T@4 ~@6 U@4 V@2 W@2 X@5 ~@8
>`.pickRestart({
  A: "[~@13 db5@19 db5@6 eb5@19 eb5@6 ~ f5@89 ~@12 db4@13 c4@10 bb3@2 ~ ab3@19 bb3@3 ~@3 ab3@13 gb3@11]/5",
  B: "~@2 f3@13 ~@6 ab3@3 ~@3 bb3@19 bb3@2", C: "[~@4 c4@19 c4@3 ~@4 db4@38 ~@13 db4@50 gb3@6 ~ ab3@6]/3",
  D: "bb3@6 c4@6 ~ db4@25 ~@10",
  E: "[~@9 ab3@6 ~ ab3@3 ab3@3 ab3@6 ab3@6 ~ ab3@6 ab3@51 ab3@25 db4@25 ~ ab3@12 gb3@13 f3@24]/4",
  F: "[~@4 ab3@13 bb3@6 c4@6 ~ db4@132 ~@30]/4", G: "~@33 ab4@8 bb4@3 c5@4",
  H: "[~ c5@8 ~ bb4@2 ab4@6 g4@11 bb4@6 g4@11 eb4@5 ab4@8 ~ bb4@2 c5@6 c5@8 bb4@3 ab4@5 g4@11 ~]/2",
  I: "f4@5 g4@11 f4@6 g4@11 f4@5 g4@10", J: "[~ e4@6 eb4@11 d4@6 db4@11 eb4@5 d4@17 eb4@16 d4@11 eb4@6 eb4@6]/2",
  K: "[f4@5 gb4@6 f4@11 gb4@5 f4@11 gb4@6 f4@11 gb4@5 f4@83 ~]/3", L: "~@2 e4@3 e4@2 e4", M: "g4@5 g4 a4@2",
  N: "[a4 f4@2 a4 c5@6 g4@6]/2", O: "[~@2 g4 gb4@2 e4 b4@3 g4@2 a4 b4@3 c5]/2",
  P: "[~ b4 e4@9 ~@3 c4@12 b3@12 a3@10]/6", Q: "[~@2 a3@12 c4@6 b3@6 c4@9 a3@3 ~@2]/5",
  R: "[~@43 eb4@9 eb4@9 eb4@13 ~ db4@4 c4@9 db4@8]/2",
  S: "[~ eb4@9 ~@9 eb5@9 eb5@9 eb5@54 eb5@9 eb5@9 eb5@54 ab4@13 ~ ab4@4 ab4@9 bb4@9 bb4@9 a4@9 bb4@9 ~@9 eb4@5]/5",
  T: "[~@4 f4@5 g4@5 ab4@22 ab4@51 g4@67 ~@38]/4",
  U: "[~@19 b4@22 c5@11 d5@10 c5@22 d5@22 d5@10 g4@11 b4@11 c5@11 a4@16 g4@5 gb4@11 b4@11]/4",
  V: "[b4@11 a4@11 b4@10 c5@11 b4@22 g4@11 g4@10 g4@10]/2", W: "[~ gb4@11 g4@11 a4@11 g4@21 gb4@11 d4@11 c4@11 d4@8]/2",
  X: "[~@2 a3@11 a3@11 a3@22 g3@21 g3@43 gb3@43 ~ g3@86]/5",
})).s("gm_clarinet").gain(0.3)

// other · clarinet · "B♭ Clarinet" · soft notes
const clarinet_soft = note("<~@20 A@2 B@6 C ~@38 D@3 E@2 ~@102>".pickRestart({
  A: "[~@18 g3@11 bb3@6 f3@11 bb3@5 g3@11 bb3@6 ab3@11 bb3@5 g3@8 ~ ab3@3]/2",
  B: "[bb3@5 ab3@11 g3@6 bb3@33 eb4@17 d4@16 eb4@17 f4@16 eb4@17 d4@17 eb4@16 f4@17 eb4@16 d4@17 eb4@17 f4@16 eb4@17 d4@17]/6",
  C: "eb4@11 ~@13", D: "[~@2 c4@3 b3 b3!2]/3", E: "[c4@3 ~]/2",
})).s("gm_clarinet").gain(0.2)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  A@7 B C@3 D@3 E@2 F@5 ~@7 G@3 H I@5 ~@21 J@6 K@3 L ~@46 M N O N P Q P R@2 M S T@2 ~@8 U V@2 W@3 X ~@2 Y@3 ~@6 Z@4 ~ AA
  AB@2 AC@5 ~@8
>`.pickRestart({
  A: "[~@7 db5@13 c5@9 bb4@3 ~ ab4@76 bb4@19 bb4@6 c5@19 c5@6 ~ db5@89 ~@12 bb4@13 ab4@10 gb4@2 ~ f4@19 eb4@3 ~@3 db4@13 c4@11]/7",
  B: "~@2 db4@13 ~@6 f4@3 ~@3 gb4@19 gb4@2",
  C: "[~@4 ab4@19 ab4@3 ~@4 f4@38 ~@6 ab4@6 ~ bb4@6 ab4@6 gb4@6 ~ f4@6 f4@10 eb4@3 db4@6 bb4@6 bb4@6 ~ ab4@6]/3",
  D: "[gb4@6 f4@6 ~ f4@9 eb4@3 ~ db4@6 db4@6 db4@3 db4@3 ~ db4@6 db4@6 db4@3 eb4@3 ~ f4@13 ~@6 eb4@3 db4@3 c4@3 c4@3 c4@6 ~ c4@6 c4@3 db4@3 eb4@13 ~@7 db4@3 c4@3 db4@4]/3",
  E: "[~@2 f4@13 gb4@6 f4@10 eb4@3 db4@6 eb4@6 ~ db4@12 c4@13 db4@24]/2", F: "[~@2 ab4@12 bb4@6 ~ c5@6 db5@183 ~@30]/5",
  G: "[~@33 ab4@33 g4@11 eb4@6 eb4@11 eb4@5 ab4@33 bb4@11 ~]/3", H: "bb4@5 bb4@11 bb4@6 bb4@11 bb4@5 bb4@10",
  I: "[~ db5@6 b4@11 b4@6 bb4@11 bb4@5 ab4@17 gb4@16 bb4@11 b4@6 bb4@11 gb4@6 ab4@11 bb4@5 ab4@11 bb4@6 ab4@11 bb4@5 ab4@83 ~]/5",
  J: "[~@6 a4@9 e4@2 e4 g4@9 g4@3 a4@8 f4 f4@2 f4 a4@6]/6", K: "[a4@5 a4 g4@11 g4 g4@6]/3", L: "a4@3 f4@3 ~@2",
  M: "~@7 f4@18 g4@6 a4@12 a4@5", N: "~ a4@6 bb4 ~@2 a4 ~@2 bb4@3 ~@3 a4@24 ~@5",
  O: "~@13 f4@6 f4@6 g4@6 a4@6 a4@6 a4@5", P: "~@13 g4@6 a4@6 bb4@6 c5@6 c5@6 c5@5",
  Q: "~ d5@6 c5 ~@2 bb4 ~@2 a4@3 ~@3 g4@24 ~@5",
  R: "[~ d5@6 eb5 ~@2 d5 ~@2 c5@3 ~@3 bb4@12 d5 ~@2 c5 ~@2 bb4@3 ~@3 a4@12 c5 ~@2 bb4 ~@2 a4@3 ~@3 g4@24 ~@5]/2",
  S: "~ a4@6 bb4 ~@2 a4 ~@2 bb4@3 ~@3 a4@18 ~@6 g4 ~@2 f4 ~", T: "[~ g4@3 ~@3 f4@48 ~@41]/2",
  U: "~@19 eb4@9 ab4@9 eb4@11", V: "[~@3 eb4@4 eb4@9 ab4@9 ab4@9 g4@9 ab4@9 eb4@9 eb4@13 ~ db4@4 c4@9 db4@8]/2",
  W: "[~ c4@9 ~@9 c5@9 c5@9 c5@9 ab4@9 bb4@9 ab4@9 ab4@9 g4@9 c5@9 c5@9 c5@9 ab4@9 bb4@9 ab4@8]/3",
  X: "~ ab4@9 g4@9 ~@29", Y: "[~@6 eb4@47 ~@19]/3",
  Z: "[~@19 d4@22 e4@5 gb4@5 ~ g4@10 e4@11 gb4@11 g4@22 d4@10 d4@11 e4@11 e4@11 d4@21 d4@11 ~@11]/4",
  AA: "~@14 d4@5 d4@5", AB: "[~ d4@11 d4@11 d4@11 d4@21 d4@11 g4@11 e4@5 gb4@5 ~ g4@8]/2",
  AC: "[~@2 d4@11 db4@11 d4@22 d4@10 e4@11 d4@43 c4@43 ~ b3@86]/5",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft = note("<~@20 A@2 B@2 ~@43 C@3 D@2 ~@102>".pickRestart({
  A: "[~@18 g4@11 bb4@6 f4@11 bb4@5 g4@11 bb4@6 ab4@11 bb4@5 g4@8 ~ ab4@3]/2", B: "[bb4@5 ab4@11 g4@6 bb4@33 ~@41]/2",
  C: "[~@2 e4@2 d4!2 d4!2]/3", D: "[e4@3 ~]/2",
})).s("gm_trumpet").gain(0.2)

// other · trombone
const trombone = note(`<
  ~ A@6 B C@4 D@4 E@8 ~@4 F@2 G H I@5 ~@21 J@8 K L@3 M@2 ~@42 N O P O Q R Q S@2 N T U@2 ~@8 V W@2 X@6 Y@3 ~@6 Z@4 ~@3 AA
  AB@5 ~@8
>`.pickRestart({
  A: "[~@10 db4@13 c4@9 bb3@3 ab3@25 ~ gb3@19 gb3@6 ab3@19 ab3@6 ~ ab3@89 ~@12 bb3@13 ab3@10 gb3@2 ~ f3@19 gb3@3 ~@3 f3@13 eb3@11]/6",
  B: "~@2 f3@13 ~@6 f3@3 ~@3 gb3@19 gb3@2", C: "[~@4 ab3@19 ab3@3 ~@4 f3@38 ~@13 db3@50 gb3@19 ab3@6 ~ bb3@25 ~@10]/4",
  D: "[~@9 db3@6 ~ db3@3 db3@3 db3@6 db3@6 ~ db3@6 eb3@51 db3@25 ab3@25 ~ f3@12 eb3@13 db3@24]/4",
  E: "[~@2 ab3@12 ab3@6 ~ ab3@6 ab3@183 eb3@66 eb3@66 ~@42]/8", F: "[~@11 eb3@11 bb3@10]/2", G: "~@3 eb3@33 eb3@11 ~",
  H: "eb3@5 eb3@11 eb3@6 eb3@11 eb3@5 eb3@10",
  I: "[~ g3@6 ab3@11 f3@6 gb3@11 gb3@5 bb3@17 gb3@16 f3@11 ab3@6 bb3@11 gb3@6 ab3@11 gb3@5 ab3@11 gb3@6 ab3@11 gb3@5 ab3@83 ~]/5",
  J: "[~@3 a3@6 g3@6 f3@6 e3@6 g3@5]/8", K: "~ e3@3", L: "[f3!2 g3@3 g3 a3 g3]/3", M: "[g3@3 ~]/2",
  N: "~@7 c3@18 d3@6 f3@12 f3@5", O: "~ f3@6 g3 ~@2 g3 ~@2 g3@3 ~@3 f3@24 ~@5", P: "~@13 c3@6 c3@6 d3@6 f3@6 f3@6 f3@5",
  Q: "~@13 e3@6 f3@6 g3@6 a3@6 a3@6 a3@5", R: "~ bb3@6 a3 ~@2 g3 ~@2 f3@3 ~@3 e3@24 ~@5",
  S: "[~ bb3@6 c4 ~@2 bb3 ~@2 a3@3 ~@3 g3@12 bb3 ~@2 a3 ~@2 g3@3 ~@3 f3@12 a3 ~@2 g3 ~@2 f3@3 ~@3 e3@24 ~@5]/2",
  T: "~ f3@6 g3 ~@2 g3 ~@2 g3@3 ~@3 f3@18 ~@6 c3 ~@2 c3 ~", U: "[~ c3@3 ~@3 c3@48 ~@41]/2",
  V: "~@19 eb3@9 ab3@9 ab3@11", W: "[~@3 g3@4 ab3@9 c4@9 c4@9 bb3@9 ab3@9 bb3@9 bb3@13 ~ ab3@4 g3@9 f3@8]/2",
  X: "[~ eb3@9 ~@9 [eb3,ab3]@72 [eb3,ab3]@72 ab3@27 bb3@9 bb3@9 c4@9 db4@18 bb3@9 f3@10 bb3@22 ~@12]/6", // Ab5
  Y: "[~@39 bb3@67 ~@38]/3", Z: "[~@19 b3@22 a3@11 g3@10 a3@22 g3@22 gb3@10 g3@11 e3@11 c3@11 d3@21 d3@11 ~@11]/4",
  AA: "~@18 g3@11 a3@11 g3@8", AB: "[~@2 gb3@11 e3@11 d3@11 c3@11 b2@10 c3@11 d3@43 d3@43 ~ d3@86]/5",
})).s("gm_trombone").gain(0.3)

// chords · piano
const piano = note(`<
  ~@2 A@5 B C@3 D E@4 ~ F@4 ~@2 G@5 H I J K L@5 M@3 N@3 O@3 P@3 Q@3 R@3 S@3 T@2 ~@13 U@3 ~@36 V@8 W@2 X@8 Y@3 ~@5 Z@6
  ~@8 AA@5 AB@2 AC@2 AD@5 AE ~@7
>`.pickRestart({
  A: "[~@13 [gb3,bb3,bb4,db5]@19 [gb3,bb3,bb4,db5]@6 [ab3,c4,c5,eb5]@19 [ab3,c4,c5,eb5]@6 ~ [ab3,db4,db5,f5]@25 [ab3,db4,db5,f5]@13 [ab3,db4,db5,f5]@12 [ab3,db4,db5,f5]@25 ~ [db3,ab3]@13 [ab2,db3]@12 [bb4,db5]@12 ~ [ab4,c5]@9 ~ [gb4,bb4]@3 [db2,db3,f4,ab4]@18 ~ [gb2,eb4,gb4]@6 [db2,db3,db4,f4]@12 ~ [gb2,c4,eb4]@11, ~@55 [db2,db3]@8 ~@17]/5", // Gb Ab Db Db5 Bbm Ab Gb Db …
  B: "~@2 db4@6 f4@6 [f4,ab4]@12 ~ [gb2,bb2,gb4,bb4]@21, ~ [db2,db3]@6 ~@17", // Fm Gb Db
  C: "[~@4 [ab2,c3,ab4,c5]@24 ~@2 db3@12 ab2@12 ~ db4@6 ~ f4@6 ab4@6 db5@6 ~ [bb4,db5]@6 [ab4,c5]@6 [gb4,bb4]@6 ~ [f4,ab4]@6 [f4,ab4]@12 ~@7 db5@6 [gb3,bb4,db5]@6 ~ [ab3,ab4,c5]@6, ~@30 [ab4,db5]@24 ~ [db2,db3]@24 ~@2 [db2,db3]@48 ~@15]/3", // Ab Bbm Ab Gb Fm Gb Ab Db5 …
  D: "[bb3,gb4,bb4]@6 [c4,f4,ab4]@6 ~ [bb3,db4]@24 ~@11, ~@13 [f4,ab4]@12 ~@23", // Ebm Fm Bbm Fm
  E: "[~@9 [db3,ab3]@6 ~ [db3,ab3]@12 [db3,ab3]@12 ~ eb4@6 c4@6 ~ eb4@6 eb4@3 f4@3 gb4@6 ~ eb4@6 gb4@6 ~ f4@3 eb4@3 [db3,db4]@18 ~ eb4@3 eb4@3 [ab3,db4,f4]@18 ~ [eb4,gb4]@3 ~ [eb4,gb4]@3 [f3,ab3,f4,ab4]@12 [eb3,gb3,eb4,gb4]@12 ~ [db3,f3,db4,f4]@24, ~@41 [eb3,ab3]@48 ~@22 db3@6 ~@19 ab3@4 ~@52]/4", // Db5 Db Ebm Fm Ebm Db Ab5
  F: "[~@4 ab3@13 bb3@6 c4@6 ~ db4@25 [db3,f3,ab3,ab4]@13 [db3,f3,ab3,bb4]@6 [db3,f3,ab3,c5]@6 ~ [db3,f3,ab3]@12 [db3,f3,ab3]@13 [db3,f3,ab3,ab5]@13 [db3,f3,ab3,bb5]@6 [db3,f3,ab3,c6]@7 [db3,f3,ab3]@14 ~ [db3,f3,ab3]@15 ~@30, ~@81 db5@25 ~@26 db6@30 ~@30]/4", // Db Bbm7 Dbmaj7 Db Bbm7 Dbmaj7 Db
  G: "[~@7 eb4@17 d4@16 eb4@17 f4@16 eb4@17 d4@17 eb4@16 f4@16 ~ eb4@16 d4@17 eb4@17 f4@16 eb4@17 d4@17, ~@7 [eb2,bb2]@32 ~ [eb2,bb2]@32 ~ [eb2,bb2]@32 ~@2 [eb2,bb2]@32 ~ [eb2,bb2]@32 ~ [eb2,bb2]@32 ~ [eb2,bb2]@32 ~@2]/5", // Eb5
  H: "[eb2,bb2]@32 ~ [ab2,eb3,ab3,eb4]@15, eb4@11 ~@13", // Eb5 Ab5
  I: "~ [ab2,eb3,ab3,eb4]@16 ~ [eb2,bb2,bb3,eb4]@16 ~ [eb2,bb2,bb3,eb4]@13", // Ab5 Eb5
  J: "~@3 [ab2,eb3,ab3,eb4]@16 ~ [ab2,eb3,ab3,eb4]@16 [eb3,eb4,g4]@11 ~", // Ab5 Eb
  K: "[bb2,d4,f4]@5 [eb3,eb4,g4]@11 [bb2,d4,f4]@5 ~ [eb3,eb4,g4]@11 [bb2,d4,f4]@5 [eb3,eb4,g4]@10", // Bb Eb Bb Eb Bb Eb
  L: "[~ g3@5 ~ ab3@11 f3@5 ~ gb3@11 gb3@5 f3@16 ~ gb3@16 [f3,bb3]@11 b3@5 ~ bb3@11 gb3@5 ~ [db3,ab3]@16 [db3,ab3]@16 ~ [db3,ab3]@16 ~@17 db4@5 ~ f4@5 ab4@5 ~ f4@5 ab4@5 ~ db5@5 ab4@5 ~ db5@5 f5@5 ~ db5@5 f5@5 ~ ab5@5 ~, ~@156 [db3,ab3]@79 ~@5]/5", // Bb5 Db5
  M: "[~@7 g4 c5 e5 c5 g4 ~ g4 c5 e5 c5 g4 ~ a4 c5 f5 c5 a4, ~@18 [g2,c3,g3]@17 ~ [g2,c3,g3]@17 ~ [a2,d3,a3]@17 ~]/3", // C5 D5
  N: "[~ c5 g5 c6 g5 [c3,c5] ~ g4 c5 e5 c5 g4 ~ g4 c5 e5 c5 g4 ~ a4 c5 f5 c5 a4, [g2,c3,g3]@14 ~@4 [g2,c3,g3]@17 ~ [g2,c3,g3]@17 ~ [a2,d3,a3]@17 ~]/3", // C C5 D5
  O: "[~ c5 g5 c6 g5 c5 ~ g4 c5 e5 c5 g4 ~ g4 c5 e5 c5 g4 ~ c4 e4 g4 e4 c4, [g2,c3,g3]@17 ~ [g2,c3,g3]@17 ~ [g2,c3,g3]@17 ~ [f2,c3,f3]@17 ~]/3", // C5 F5
  P: "[~ c4 e4 g4 e4 c4 ~ g4 c5 e5 c5 g4 ~ g4 b4 d5 b4 g4 ~ c4 e4 g4 e4 c4, [f2,c3,f3]@17 ~ [g2,c3,g3]@17 ~ [g2,c3,g3]@17 ~ [g2,c3,e3]@17 ~]/3", // F5 C5 C
  Q: "[g2@6 c3@6 e3@6 [g2,c3,e3,c4]@11 ~ [g2,c3,e3,d4]@6 [g2,c3,e3]@11 ~ [g2,c3,e3]@6 [a2,d3,f3]@11 ~ [a2,d3,f3]@6 [g2,c3,e3]@11 ~ [g2,c3,e3]@6 [g2,c3,e3]@17 ~@7 g4@6 c5@6 e5@6 c5@6 g4@6, ~@36 e4@17 ~ [d4,f4]@17 ~ [c4,e4]@34 ~@2 [g2,c3,g3]@34 ~@2]/3", // C Dm C Dm C C5
  R: "[~ g4 c5 e5 c5 g4 ~ a4 c5 f5 c5 a4 ~ c5 g5 c6 g5 c5 ~ g4 c5 e5 c5 g4, [g2,c3,g3]@17 ~ [a2,d3,a3]@17 ~ [g2,c3,g3]@17 ~ [g2,c3,g3]@17 ~]/3", // C5 D5 C5
  S: "[~@2 g4@2 c5@2 gb5@2 d5@2 a4@2 ~@2 b4@2 e5@2 g5@2 e5@2 c5@2 ~@2 e5 gb5 e5 gb5 e5@2 c5@2 b4@2 ~@2 g4@2 c5@2 e5@2 c5@2 g4@2, [g2,c3,g3]@17 ~ [gb2,b2,gb3]@17 ~ [g2,c3,g3]@34 ~@2 [gb2,b2,gb3]@34 ~@2 [g2,c3,g3]@34 ~@2]/3", // C5 B5 C5 B5 C5
  T: "[[g2,c3,g3,g4,c5,e5]@17 ~ [a4,c5,f5]@11 ~ [a4,c5,f5]@6 [a2,c3,e3,a4,c5,e5]@34 ~@26, ~@18 [a2,c3,f3]@17 ~@61]/2", // C F Am F
  U: "[c5@3 g5@32 ~ g5@3 d6@32 ~ e6@3 d6@3 c6@64 ~@2]/3",
  V: "[~@7 [c3,f3]@11 ~ [c3,f3] ~@2 [c3,f3] ~@2 [c3,f3]@3 ~@3 [c3,f3]@11 ~ [c3,f3]@11 ~ [c3,f3]@11 ~ [c3,f3] ~@2 [c3,f3] ~@2 [c3,f3]@3 ~@3 [c3,f3]@11 ~ [c3,f3]@11 ~ [c3,f3]@11 ~ [c3,f3] ~@2 [c3,f3] ~@2 [c3,f3]@3 ~@3 [c3,f3,c4,f4,a4]@11 ~ [c3,f3,c4,f4,a4]@11 ~ [d4,g4,bb4]@6 [d4,g4,bb4]@6 [c3,f3] ~@2 [c3,f3] ~@2 [c3,f3]@3 ~@3 [c3,f3]@11 ~ [c3,f3]@11 ~@7 [c4,f4]@6 [c3,f3] ~@2 [c3,f3] ~@2 [c3,f3]@3 ~@3 [c3,f3,c4,f4,a4]@11 ~ [c3,f3,c4,f4,a4]@11 ~ [d4,g4,bb4]@6 [d4,g4,bb4]@6 [c3,f3] ~@2 [c3,f3] ~@2 [c3,f3]@3 ~@3 [c3,f3]@11 ~ [c3,f3]@11 ~@43 [d4,f4]@6 [e4,g4]@6 [f4,a4]@6 [c3,e3]@11 ~ [c3,e3]@11 ~ d3@3 e3@2, ~@103 [c4,f4]@23 ~@25 [c3,f3]@11 ~ [c4,f4,a4]@23 ~@13 [c3,f3]@11 ~ [c4,f4]@11 ~@25 [c3,f3]@11 ~ [c4,f4,a4]@23 ~@13 [c3,e3]@11 ~ [c3,f3]@11 ~ [c3,f3]@11 ~ [c3,f3]@11 ~ [c3,f3]@11 ~@30, ~@301 [c4,g4]@11 ~ [c4,g4]@11 ~ [c4,g4]@11 ~@19 [e4,g4]@23 ~@6]/8", // F5 F Gm F5 F Gm F5 Dm …
  W: "[~ f3@3 ~@87 [a2,d3]@5, ~@7 [c3,e3]@11 ~ [c3,f3]@11 ~ [c3,f3]@11 ~ [c3,f3]@11 ~ [c3,f3]@11 ~ [bb2,e3]@11 ~ [bb2,e3]@11 ~@6, ~@13 [c4,g4]@11 ~ [c4,g4]@11 ~ [c4,g4]@11 ~ [c4,g4]@11 ~ [c4,g4]@11 ~ [bb3,g4]@11 ~ [bb3,g4]@11]/2", // D5 C F5 Bbdim C5 Eb
  X: "[~@43 [a2,d3]@6 [bb2,e3]@6 [c3,f3]@11 ~ [c3,f3] ~@2 [c3,f3] ~@2 [c3,f3]@3 ~@3 [c3,f3,c4,f4,a4]@11 ~ [c3,f3,c4,f4,a4]@11 ~ [d4,g4,bb4]@6 [d4,g4,bb4]@6 [c3,f3] ~@2 [c3,f3] ~@2 [c3,f3]@3 ~@3 [c3,f3]@11 ~ [c3,g3,e4,g4]@11 ~ [c3,f3,c4,f4,a4]@11 ~ [c3,f3] ~@2 [c3,f3] ~@2 [c3,f3]@3 ~@3 a3@6 c4@6 f4@6 a4@6 [c3,f3,c4,f4,a4]@11 ~ [c3,f3] ~@2 [c3,f3] ~@2 [c3,f3]@3 ~@3 a3@6 c4@6 f4@6 a4@6 bb4@6 bb4@3 a4@3 g4@6 bb4@6 a4@6 a4@3 g4@3 f4@6 a4@6 g4@6 g4@3 f4@3 e4@6 g4@6 f4@6 f4@3 e4@3 d4@6 c4@6 bb3@3 a3@3 bb3@3 c4@3 d4@6 [f2,bb2,f4]@6 g4@3 f4@3 e4@3 f4@3 g4@5, ~ [a3,f4]@11 ~ [a3,f4]@11 ~ [g3,e4]@11 ~ [g3,e4]@17 ~ [c4,f4]@23 ~@37 [c4,f4,a4]@23 ~@25 [c4,f4,a4]@11 ~@37 [c4,f4,a4]@11 ~@162, ~@7 [a2,d3]@11 ~ [g2,c3]@11 ~ [g2,c3]@11 ~@61 [c3,f3]@11 ~@61 [c3,f3]@11 ~ [c3,f3]@11 ~@25 [c3,f3]@11 ~ [c3,f3]@11 ~ [d3,g3]@11 ~ [d3,g3]@11 ~ [c3,f3]@11 ~ [c3,f3]@11 ~ [bb2,e3]@11 ~ [bb2,e3]@11 ~ [a2,d3]@11 ~ [a2,d3]@11 ~ [f2,bb2]@17 ~@7 [g2,c3]@17]/8", // D5 Bbdim F5 F Gm F5 C F …
  Y: "[~ [g2,c3,f4,bb4]@6 [a2,d3,e4,a4]@12 [a2,d3,e4,a4]@9 [e4,a4]@3 d3@6 a2@6 d3@6 a3@6 [a2,d3,e4,a4]@12 [a2,d3,e4,a4]@10 [e4,a4]@3 d3@8 a2@8 d3@10 a3@10 ~@28, ~@31 [e4,a4]@24 ~@25 [e4,a4]@35 ~@29]/3", // Gm7 Asus4 A5 Asus4 A5
  Z: "[~@19 [ab2,eb3]@9 [ab2,eb3]@9 ~@9 ab4@9 [bb4,db5]@9 [ab4,c5]@9 [ab4,c5]@9 [g4,bb4]@9 [ab2,eb3]@9 [ab2,eb3]@9 ~@9 ab4@9 [bb4,db5]@9 [ab4,c5]@9 [ab4,c5]@9 [g4,bb4]@9 ab2@9 [ab2,eb3]@9 ab2@9 [bb2,eb3]@9 [bb2,db3]@9 c3@9 bb2@4 ~ c3@4 db3@4 ~ f3@4 eb3@9 f3@9 ~ [eb3,bb3]@20 ~@14, ~@37 [ab2,eb3]@52 ~@20 [ab2,eb3]@52 ~@127]/6", // Ab5 Bbm Ab Gm Ab5 Bbm Ab Gm …
  AA: "[~@24 d3@5 gb3@5 ~ a3@5 d4@5 ~ gb4@5 a4@5 d5@5 ~ gb5@5 d5@5 ~ b4@5 gb4@5 d4@5 ~ a2@5 c3@5 ~ d3@5 g3@5 c5@5 ~ a4@5 e4@5 ~ c4@5 g2@5 b2@5 ~ d3@5 g3@5 ~ [gb3,d4,a4]@10 [g3,d4,b4]@10 ~ [b3,e4,g4]@10 ~ [c4,e4,a4]@10 ~ gb4@5 a4@5 ~ d5@5 e5@5 [d4,d5]@10 ~ g5@10 ~, ~@197 d4@20 ~@23]/5", // D G Em Am D
  AB: "[g5@10 ~ gb5@10 ~ g5@10 a5@10 ~ g5@10 ~ gb5@5 e5@5 ~ d5@10 ~ [b4,d5]@10 [d3,g3,b4,d5]@10, [d3,g3]@20 ~@2 [d3,g3]@20 ~ [d3,g3]@20 ~@2 [d3,g3]@20 ~@11]/2", // Bm G G5
  AC: "[~ [d3,gb3,a4,d5]@10 ~ [d3,g3,b4,d5]@10 ~ [d3,a3,c5,d5]@10 ~ [d3,g3,b4,d5]@20 ~ [d3,gb3,a4,d5]@10 ~ [g3,g4,b4]@10 ~ e4@5 gb4@5 ~ [g3,b3,g4]@8, ~@77 [a3,c4]@10 ~@9]/2", // D G D7 G D G Am
  AD: "[~@2 [gb3,a3,a4]@10 ~ [e3,g4]@10 ~ d3@10 ~ c3@10 ~ [b2,d4,g4]@10 [c3,c5]@10 ~ d5@5 ~ b4@5 g4@5 d4@5 ~ d3@5 g3@5 ~ b3@5 d4@5 c5@5 ~ a4@5 gb4@5 ~ c4@5 d3@5 gb3@5 ~ a3@5 d4@5 ~ [g3,b3,d4,d5,g5,b5]@43 [g3,b3,d4,d5,g5,b5]@43, ~@6 [d4,gb4]@5 ~@49]/5", // Gbm Em G C G D
  AE: "[g3,b3,d4,d5,g5,b5]@41 ~@7", // G
})).s("gm_piano").gain(0.25)

// bass · choir aahs · "Bass"
const bass = note(`<
  ~@5 A@2 B@5 C@4 ~@7 D E F@3 G@3 H I@2 J@3 ~@21 K@8 L M ~@28 N O@3 P ~@13 Q R S R T U T V@2 Q W X@2 ~@9 Y@2 Z@4 ~@2
  AA@4 AB@6 AC@3 ~@3 AD AE@5 AF@5 ~@3
>`.pickRestart({
  A: "[~@21 bb3@13 ab3@10 gb3@3 f3@19 gb3@6 f3@13 eb3@11]/2",
  B: "[~@2 f3@13 ~@6 f3@6 gb3@19 gb3@6 ab3@19 ab3@6 ~ f3@38 ~@13 db3@50 gb3@19 ab3@6 ~ bb3@25 ~@10]/5",
  C: "[~@9 db3@6 ~ db3@3 db3@3 db3@6 db3@6 ~ db3@6 eb3@51 db3@25 ab3@25 ~ f3@12 eb3@13 db3@24]/4",
  D: "~ bb3@6 bb3@8 ab3@3 g3@6 ab3@8 g3@3 f3@5 g3@8", E: "f3@3 eb3@6 f3@11 bb2@5 eb3@11 eb3@6 f3@6",
  F: "[g3@5 ab3@6 bb3@22 ~@5 bb3@6 bb3@8 ab3@3 g3@5 ab3@8 ~ g3@3 f3@5 g3@8 f3@3 eb3@6 f3@11 bb2@5 eb3@8 ~ f3@2 g3@6 ab3@8 g3@3 f3@6]/3",
  G: "[eb3@22 ~@5 eb3@6 eb3@33 ab3@11 bb3@6 g3@11 eb3@5 eb3@33 eb3@11 ~]/3",
  H: "bb2@5 eb3@11 bb2@6 eb3@11 bb2@5 eb3@10", I: "[~ g3@6 ab3@11 f3@6 gb3@11 gb3@5 bb2@17 b2@16 f3@11 ab3@6 gb3@6]/2",
  J: "[f3@5 eb3@6 db3@11 gb3@5 db3@11 gb3@6 db3@11 gb3@5 db3@83 ~]/3", K: "[~@3 a3@6 g3@6 f3@6 e3@6 g3@5]/8",
  L: "~ e3@3", M: "f3@3 f3@3 ~@2", N: "~@4 c3@14 ~ d3@21 d3@7 ~", O: "[e3@14 f3@86 e3@43 ~]/3", P: "d3@29 ~@19",
  Q: "~@7 c3@18 d3@6 f3@12 f3@5", R: "~ f3@6 g3@3 g3@3 g3@6 f3@24 ~@5", S: "~@13 c3@6 c3@6 d3@6 f3@6 f3@6 f3@5",
  T: "~@13 e3@6 f3@6 g3@6 a3@6 a3@6 a3@5", U: "~ bb3@6 a3@3 g3@3 f3@6 e3@24 ~@5",
  V: "[~ bb3@6 c4@3 bb3@3 a3@6 g3@12 bb3@3 a3@3 g3@6 f3@12 a3@3 g3@3 f3@6 e3@24 ~@5]/2",
  W: "~ f3@6 g3@3 g3@3 g3@6 f3@18 ~@6 c3@3 c3@2", X: "[~ c3@6 c3@48 ~@41]/2",
  Y: "[~@43 eb3@9 eb3@9 eb3@13 ~ db3@4 c3@9 db3@8]/2", Z: "[~ c3@9 ~@9 eb3@72 eb3@72 ~@29]/4",
  AA: "[~@39 bb3@67 g3@21 d3@11 d3@11 d3@21 gb3@22]/4",
  AB: "[g3@11 gb3@11 d3@10 c3@11 d3@22 d3@11 e3@10 e3@22 d3@11 a2@11 d3@10 e3@11 d3@11 e3@11 d3@38 d3@5 d3@43 b3@22 a3@7]/6",
  AC: "[~@4 g3@10 a3@22 g3@22 gb3@10 g3@11 e3@11 c3@11 d3@21 d3@11 ~@11]/3", AD: "~@18 g3@11 a3@11 g3@8",
  AE: "[~@2 gb3@11 e3@11 d3@11 c3@11 b2@10 c3@11 d3@43 d3@43 ~ d3@86]/5", AF: "[d3@86 e3@86 ~ e3@67]/5",
})).s("gm_synth_bass_1").gain(0.3)

// bass · choir aahs · "Bass" · soft notes
const bass_soft = note("<~@67 A@3 B@7 ~@11 C@3 D@4 E@2 ~@3 F@8 G@4 ~@59 H@3>".pickRestart({
  A: "[~@2 g3@3 g3 a3 g3]/3", B: "[g3@12 g3@37 ~@7]/7", C: "[~@14 g3@86 f3@43 ~]/3",
  D: "[d3@43 d3@72 c3@14 c3@43 f3@20]/4", E: "[~@2 e3@7 d3@14 ~ f3@14 c3@14 ~@44]/2",
  F: "[~@43 f3@86 e3@43 d3@29 ~@58 c3@43 [g2,b2]@82, ~@108 f2@43 ~@41]/8", G: "[~@2 [a2,c3]@79 ~@15]/4", H: "g3/3",
})).s("gm_synth_bass_1").gain(0.2)

stack(flute, clarinet, clarinet_soft, trumpet, trumpet_soft, trombone, piano, bass, bass_soft)