Strudelify

Lullabye (Goodnight My Angel)

Joel

KeyB♭ majorTempo80 bpm
0:00/0:00
// Lullabye (Goodnight My Angel) — Joel
// 80 bpm, 4/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: metre changes (3/4 at bar 1, 7/4 at bar 2, 2/4 at bar 4, 7/4 at bar 4, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/3676306; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 83 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · trumpet · "B♭ Trumpet"
const trumpet = note("<~@15 A@3 B@3 C@2 D@2 ~@10 E F@2 G H I@2 J@3 K@3 L@4 M@6 N@3 O@2 P@7 ~ Q@4 R@8>".pickRestart({
  A: "[~@10 db5@5 db5@5 c5@5 ~ c5@5 bb4@5 bb4@5 ~ c5@5 c5@18 bb4@6 bb4@48 ~@25]/3",
  B: "[~@4 c5@5 ~ c5@5 c5@5 c5@5 ~ eb5@16 ab4@60 ~@6 c5@6 c5@6 c5@6 ~ c5@13 eb5@4]/3",
  C: "[~@2 ab4@13 ab4@6 ab4@6 ~ ab4@6 ab4@13 c5@6 f4@13 f4@6 f4@6 ~ eb4@6 f4@11]/2",
  D: "[~@2 ab4@13 f4@19 eb4@6 eb4@51 ~@5]/2", E: "~@10 db5@5 db5@6 c5@5 c5@5 bb4@5 bb4@6 c5@6",
  F: "[c5@3 bb4 bb4@8 ~@4]/2", G: "~ c5!3 c5@2 eb5@2", H: "ab4", I: "[~ eb4!3 eb4@2 g4 f4@5 eb4@4]/2",
  J: "[~@6 f4@7 f4@7 eb4@7 f4@13 ab4@14 f4@21 eb4@6 eb4@55 ~@8]/3",
  K: "[~@11 c5@3 c5@3 bb4@3 bb4@3 c5@3 c5@3 db5@3 db5@15 c5@3 c5@21 ~]/3",
  L: "[~@10 bb4@6 bb4@6 bb4@6 bb4@3 ab4@3 ab4@24 g4@6 g4@18 f4@6 f4@42 ~@12 c5@6 c5@6 bb4@6 bb4@6 c5@6 c5@20]/4",
  M: "[~ eb5@7 eb5@7 db5@6 db5@22 ~ c5@7 c5@7 bb4@7 ~ bb4@44 ~@7 bb4@7 c5@7 db5@7 eb5@36 c5@6 ab4@6 ab4@12 ab4@24 bb4@6 c5@6 bb4@27 ab4@14 ~@13]/6",
  N: "[~@23 c5@6 c5@6 bb4@6 bb4@6 c5@7 c5@7 f5@8 f5@44 ~@31]/3",
  O: "[~@5 c5@6 c5@6 bb4@6 bb4@6 c5@7 c5@7 f5@8 f5@44 ~]/2",
  P: "[~@23 ab5@66 ab5@6 ab5@6 ab5@6 ab5@18 gb5@6 gb5@18 f5@6 f5@24 ~@12 [eb5,f5]@36 [eb5,f5]@6 [eb5,f5]@6 ~@48 ab5@48 ~, ~@239 eb5@96 ~]/7", // Ebsus2
  Q: "[~@12 db5@27 ~ ab5@55 [ab5,bb5]@55 ~@42]/4", // Absus2
  R: "[~@40 c5@7 c5@6 bb4@7 bb4@7 c5@7 c5@7 eb5@7 eb5@7 db5@6 db5@7 gb5@8 gb5@8 e5@12 e5@12 eb5@192 ~@44]/8",
})).s("gm_trumpet").gain(0.26)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note("<~@15 A@3 B@3 C@2 D@2 ~@10 E F@2 ~@2 G@5 H@3 I@4 J@6 K@3 L@2 M@7 ~ N@4 O@8>".pickRestart({
  A: "[~@10 bb4@5 bb4@5 ab4@5 ~ ab4@5 g4@5 g4@5 ~ ab4@5 ab4@18 g4@6 g4@48 ~@25]/3",
  B: "[~@42 db4@18 db4@6 db4@24 ab4@12 ab4@18 ab4@6 ~ ab4@13 g4@4]/3",
  C: "[~@2 f4@13 f4@6 eb4@6 ~ db4@6 eb4@13 eb4@6 eb4@13 eb4@6 eb4@6 ~ c4@6 db4@11]/2",
  D: "[~@2 db4@13 db4@19 db4@6 db4@51 ~@5]/2", E: "~@10 bb4@5 bb4@6 c5@5 c5@5 db5@5 db5@6 eb5@6", F: "[eb5 eb5@2 ~]/2",
  G: "[c5@12 ab4@12 g4@12 bb4@6 ab4@12 ab4@6 g4@6 f4@6 eb4@12 g4@6 f4@12 ab4@7 ab4@7 ab4@7 ab4@13 g4@14 ab4@21 g4@6 g4@55 ~@8]/5",
  H: "[~@11 eb4@3 eb4@3 [db4,e4]@3 [db4,e4]@3 eb4@3 eb4@3 [db4,e4]@3 [db4,e4]@15 [c4,eb4]@3 [c4,eb4]@21 ~]/3", // Dbm Cm
  I: "[~@10 bb4@6 bb4@6 bb4@6 bb4@3 c5@3 c5@24 ab4@6 ab4@18 ab4@6 ab4@42 ~@12 eb4@6 eb4@6 eb4@6 eb4@6 eb4@6 eb4@20]/4",
  J: "[~ gb4@7 gb4@7 f4@6 f4@22 ~ eb4@7 eb4@7 d4@7 ~ d4@44 ~@7 bb4@7 bb4@7 bb4@7 ab4@36 eb5@6 eb5@6 d5@12 d5@24 db5@6 db5@6 db5@27 db5@14 ~@13]/6",
  K: "[~@23 ab4@6 ab4@6 ab4@6 ab4@6 ab4@7 ab4@7 eb5@8 eb5@44 ~@31]/3",
  L: "[~@5 eb4@6 eb4@6 ab4@6 ab4@6 ab4@7 ab4@7 [db5,eb5]@8 [db5,eb5]@44 ~]/2", // Dbsus2
  M: "[~@23 ab4@66 c5@6 c5@6 bb4@6 bb4@18 ab4@6 ab4@18 ab4@6 ab4@24 ~@12 [ab4,bb4,db5]@36 [ab4,bb4,db5]@6 [ab4,bb4,db5]@6 [ab4,c5]@96 ~]/7", // Bbm7 Ab
  N: "[~@12 bb4@27 ~ [db5,f5]@55 [db5,eb5]@55 ~@42]/4", // Db Dbsus2
  O: "[~@40 ab4@7 ab4@6 ab4@7 ab4@7 ab4@7 ab4@7 c5@7 c5@7 bb4@6 bb4@7 c5@8 c5@8 db5@12 db5@12 db5@32 bb4@32 c5@128 ~@44]/8",
})).s("gm_trumpet").gain(0.25)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft = note("<~@38 [~ eb4@2 eb4 ~ eb4@2 eb4, ab4 gb4] [~ eb4@2 eb4 ~ db4@2 db4, f4 e4] ~@43>")
  .s("gm_trumpet").gain(0.15)

// other · trumpet · "B♭ Trumpet"
const trumpet_3 = note("<~@15 A@3 B@3 C@2 D@2 ~@10 E F@2 G@2 H I J@3 K@3 L@4 M@6 N@3 O@2 ~ P@6 ~ Q@4 R@8>".pickRestart({
  A: "[~@10 f4@5 f4@5 eb4@5 ~ eb4@5 db4@5 db4@5 ~ eb4@5 eb4@24 eb4@48 ~@25]/3",
  B: "[~@4 ab4@5 ~ ab4@5 ab4@5 g4@5 ~ g4@16 f4@48 eb4@12 eb4@18 eb4@6 ~ eb4@13 eb4@4]/3",
  C: "[~@2 db4@13 db4@6 db4@6 ~ db4@6 c4@13 c4@6 bb3@13 ab3@6 ab3@6 ~ ab3@6 bb3@11]/2",
  D: "[~@2 bb3@13 ab3@19 ab3@6 g3@51 ~@5]/2", E: "~@10 bb4@5 bb4@6 ab4@5 ab4@5 g4@5 g4@6 ab4@6",
  F: "[ab4@3 g4 [eb4,g4]@8 ~@4]/2", G: "~ ab4 ~ ab4", H: "eb4 c4", I: "db4 c4",
  J: "[bb3@6 f4@7 f4@7 f4@7 eb4@13 eb4@14 db4@21 db4@6 db4@55 ~@8]/3",
  K: "[~@11 ab4@3 ab4@3 ab4@3 ab4@3 ab4@3 ab4@3 ab4@3 ab4@15 ab4@3 ab4@21 ~]/3",
  L: "[~@10 eb4@6 eb4@6 eb4@6 eb4@3 f4@3 f4@24 c4@6 [db4,eb4]@18 [db4,eb4]@6 [db4,eb4]@42 ~@12 eb4@6 eb4@6 db4@6 db4@6 eb4@6 eb4@20]/4", // Dbsus2
  M: "[~ eb4@7 eb4@7 db4@6 db4@22 ~ c4@7 c4@7 bb3@7 ~ bb3@44 ~@7 f4@7 f4@7 f4@7 eb4@36 ab4@6 ab4@6 bb4@12 bb4@24 bb4@6 bb4@6 ab4@27 bb4@14 ~@13]/6",
  N: "[~@23 eb4@6 eb4@6 e4@6 e4@6 eb4@7 eb4@7 db4@8 db4@44 ~@31]/3", O: "[~@5 ab3@6 ab3@6 ~@26 ab4@8 ab4@44 ~]/2",
  P: "[~@41 gb4@6 gb4@6 f4@6 f4@18 eb4@6 eb4@18 d4@6 d4@24 ~@12 [bb3,db4,f4]@36 [c4,db4,f4]@6 [db4,f4]@6 [c4,eb4]@96 ~]/6", // Bbm Dbmaj7 Db Cm
  Q: "[~@12 f4@27 ~ ab4@55 [ab4,bb4]@55 ~@42]/4", // Absus2
  R: "[~@40 eb4@7 eb4@6 e4@7 e4@7 eb4@7 eb4@7 gb4@7 gb4@7 e4@6 e4@7 ab4@8 ab4@8 [ab4,bb4]@12 [ab4,bb4]@12 ab4@192 ~@44, ~@37 bb4@16 ~@43]/8", // Absus2
})).s("gm_trumpet").gain(0.25)

// other · french horn · "Horn in F"
const french_horn = note("<~@6 A@8 B@4 C@3 D@2 E@2 ~@10 F G@2 ~@2 H@5 I@3 J@4 K@6 ~@5 L@7 ~ M@4 ~@3 N@5>".pickRestart({
  A: "[~@4 c4@5 ~ c4@5 bb3@5 bb3@5 ~ c4@5 c4@5 db4@5 ~ db4@26 c4@5 ~ c4@37 ~@11 bb3@5 bb3@5 bb3@5 ~ bb3@5 ab3@5 ab3@16 g3@5 ~ g3@16 f3@5 f3@32 ~@16 c4@5 c4@5 ~ bb3@5 bb3@5 c4@5 ~ c4@5 db4@5 db4@27 c4@5 c4@37 ~@11 bb3@5 ~ bb3@5 bb3@3 bb3@8 ab3@2 ab3@4]/8",
  B: "[~@4 g3@5 ~ g3@16 f3@5 f3@21 ~@6 db4@5 db4@5 c4@5 ~ c4@5 bb3@5 bb3@5 ~ c4@5 c4@18 bb3@6 bb3@48 ~@25]/4",
  C: "[~@42 eb4@18 db4@6 db4@24 c4@12 c4@18 c4@6 ~ eb4@13 c4@4]/3",
  D: "[~@2 db4@13 db4@6 c4@6 ~ bb3@6 c4@13 c4@6 bb3@13 bb3@6 bb3@6 ~ bb3@6 bb3@11]/2",
  E: "[~@2 bb3@13 bb3@19 bb3@6 bb3@51 ~@5]/2", F: "~@10 db4@5 db4@6 c4@5 c4@5 bb3@5 bb3@6 c4@6",
  G: "[c4@3 bb3 bb3@8 ~@4]/2",
  H: "[~@6 c5@6 c5@6 c5@6 c5@12 eb5@6 ab4@12 ab4@6 ab4@6 ab4@6 ab4@12 c5@6 f4@12 bb3@7 bb3@7 bb3@7 bb3@13 bb3@14 bb3@21 bb3@6 bb3@55 ~@8]/5",
  I: "[~@11 ab4@3 ab4@3 ab4@3 ab4@3 ab4@3 ab4@3 ab4@3 ab4@15 ab4@3 ab4@21 ~]/3",
  J: "[~@10 bb4@6 bb4@6 bb4@6 bb4@3 c5@3 c5@24 ab4@6 ab4@18 ab4@6 ab4@42 ~@12 ab4@6 ab4@6 ab4@6 ab4@6 ab4@6 ab4@20]/4",
  K: "[~ ab4@7 ab4@7 ab4@6 ab4@22 ~ gb4@7 gb4@7 f4@7 ~ f4@44 ~@7 [bb3,bb4]@7 [c4,bb4]@7 [db4,bb4]@7 [eb4,ab4]@36 eb4@6 eb4@6 d4@12 d4@24 db4@6 db4@6 db4@27 db4@14 ~@13]/6", // Bb C7 Gb Ab5
  L: "[~@41 c5@6 c5@6 bb4@6 bb4@6 c5@6 c5@18 eb5@6 eb5@6 db5@6 db5@18 c5@6 c5@18 bb4@6 bb4@48 ~@6 bb4@18 c5@6 db5@6 eb5@96 ~]/7",
  M: "[~@12 bb4@27 ~ db5@55 bb4@55 ~@42]/4", N: "[~ bb4@16 ab4@32 ~@11]/5",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Horn in F"
const french_horn_2 = note(`<
  ~@6 A@8 B@4 C@3 D@2 E@2 ~@10 F G@2 ~@4 H@3 I@3 J@4 K@6 ~@5 L@7 ~ M@4 ~@3 N@5
>`.pickRestart({
  A: "[~@4 c4@5 ~ c4@5 bb3@5 bb3@5 ~ c4@5 c4@5 db4@5 ~ db4@26 c4@5 ~ c4@37 ~@11 bb3@5 bb3@5 bb3@5 ~ bb3@5 ab3@5 ab3@16 g3@5 ~ g3@16 f3@5 f3@32 ~@16 c4@5 c4@5 ~ bb3@5 bb3@5 c4@5 ~ c4@5 db4@5 db4@27 c4@5 c4@37 ~@11 bb3@5 ~ bb3@5 bb3@3 bb3@8 ab3@2 ab3@4]/8",
  B: "[~@4 g3@5 ~ g3@16 f3@5 f3@21 ~@6 bb3@5 bb3@5 ab3@5 ~ ab3@5 g3@5 g3@5 ~ ab3@5 ab3@18 g3@6 g3@48 ~@25]/4",
  C: "[~@42 db4@18 db4@6 db4@24 c4@12 c4@18 c4@6 ~ c4@13 c4@4]/3",
  D: "[~@2 ab3@13 bb3@6 bb3@6 ~ bb3@6 ab3@13 ab3@6 f3@13 bb3@6 bb3@6 ~ bb3@6 bb3@11]/2",
  E: "[~@2 bb3@13 ab3@19 g3@6 g3@51 ~@5]/2", F: "~@10 db4@5 db4@6 c4@5 c4@5 bb3@5 bb3@6 c4@6",
  G: "[c4@3 bb3 bb3@8 ~@4]/2", H: "[~@6 bb3@7 bb3@7 bb3@7 bb3@13 bb3@14 ab3@21 g3@6 g3@55 ~@8]/3",
  I: "[~@11 eb4@3 eb4@3 [db4,e4]@3 [db4,e4]@3 eb4@3 eb4@3 [db4,e4]@3 [db4,e4]@15 [c4,eb4]@3 [c4,eb4]@21 ~]/3", // Dbm Cm
  J: "[~@10 eb4@6 eb4@6 eb4@6 eb4@3 f4@3 f4@24 ab4@6 g4@18 f4@6 f4@42 ~@12 eb4@6 eb4@6 [db4,eb4]@6 [db4,eb4]@6 eb4@6 eb4@20]/4", // Dbsus2
  K: "[~ gb4@7 gb4@7 f4@6 f4@22 ~ eb4@7 eb4@7 d4@7 ~ d4@44 ~@7 bb3@7 [bb3,c4]@7 [bb3,db4]@7 [c4,eb4]@36 eb4@6 eb4@6 d4@12 d4@24 db4@6 db4@6 db4@27 db4@14 ~@13]/6", // Bbsus2 Bbm Cm
  L: "[~@41 c5@6 c5@6 bb4@6 bb4@6 c5@6 c5@18 eb5@6 eb5@6 db5@6 db5@18 c5@6 c5@18 bb4@6 bb4@48 ~@6 bb4@18 c5@6 db5@6 [ab4,eb5]@96 ~]/7", // Ab5
  M: "[~@12 f4@27 ~ ab4@55 ab4@55 ~@42]/4", N: "[~ eb4@48 ~@11]/5",
})).s("gm_french_horn").gain(0.3)

// other · trombone · "Tenor Trombone"
const trombone = note(`<
  ~ A@5 B@8 C@4 D@3 E@2 F@2 G H@2 I@2 J K@2 L@2 M N@2 ~@7 O@3 P@4 ~@2 Q@4 ~@6 R@6 ~ S@4 ~@3 T@5
>`.pickRestart({
  A: "[~@3 c4@5 c4@5 bb3@5 ~ bb3@5 c4@6 c4@6 ~ ab3@8 ab3@53 ~@22 c4@5 c4@5 bb3@5 ~ bb3@5 c4@6 c4@6 ~ ab3@8 ab3@56 ~@22]/5",
  B: "[~@4 eb3@5 ~ eb3@5 [db3,e3]@5 [db3,e3]@5 ~ eb3@5 eb3@5 [db3,e3]@5 ~ [db3,e3]@26 [c3,eb3]@5 ~ [c3,eb3]@37 ~@11 db4@5 db4@5 db4@5 ~ db4@5 c4@5 c4@16 c4@5 ~ c4@16 ab3@5 ab3@32 ~@16 eb3@5 eb3@5 ~ [db3,e3]@5 [db3,e3]@5 eb3@5 ~ eb3@5 [db3,e3]@5 [db3,e3]@27 [c3,eb3]@5 [c3,eb3]@37 ~@11 g3@5 ~ g3@5 ab3@3 ab3@8 c4@2 c4@4]/8", // Dbm Cm Dbm Cm
  C: "[~@4 g3@5 ~ g3@16 [f3,ab3]@5 [f3,ab3]@21 ~@6 bb3@5 bb3@5 ab3@5 ~ ab3@5 g3@5 g3@5 ~ ab3@5 ab3@18 g3@6 g3@48 ~@25]/4", // Fm
  D: "[~@4 eb4@5 ~ eb4@5 c4@5 db4@5 ~ eb4@16 eb4@48 eb4@12 eb4@18 eb4@6 ~ eb4@13 eb4@4]/3",
  E: "[~@2 db4@13 f4@6 eb4@6 ~ db4@6 eb4@13 eb4@6 db4@13 bb3@6 bb3@6 ~ bb3@6 db4@11]/2",
  F: "[~@2 db4@13 db4@19 db4@6 bb3@51 ~@5]/2", G: "~@22 c4@5 ~ c4@5 bb3@5 bb3@5 ~ c4@4",
  H: "[~ c4@5 db4@5 ~ db4@26 c4@5 ~ c4@37 ~@11 bb3@4]/2",
  I: "[~ bb3@5 bb3@11 bb3@3 ab3@2 ab3@16 g3@5 ~ g3@16 f3@5 f3@31]/2", J: "~@17 c4@5 c4@5 ~ bb3@5 bb3@5 c4@5 ~ c4@4",
  K: "[~ db4@5 db4@27 c4@5 c4@37 ~@11 bb3@5 bb3@5]/2", L: "[bb3@5 bb3@5 ab3@4 ab3@18 g3@6 g3@18 f3@6 f3@34]/2",
  M: "~@10 f3@5 f3@6 f3@5 f3@5 g3@5 g3@6 ab3@6", N: "[ab3@3 g3 g3@8 ~@4]/2",
  O: "[~@11 eb3@3 eb3@3 [db3,e3]@3 [db3,e3]@3 eb3@3 eb3@3 [db3,e3]@3 [db3,e3]@15 [c3,eb3]@3 [c3,eb3]@21 ~]/3", // Dbm Cm
  P: "[~@10 eb4@6 eb4@6 eb4@6 eb4@3 f4@3 f4@24 c4@6 [db4,eb4]@18 [db4,eb4]@6 [db4,eb4]@42 ~@12 eb4@6 eb4@6 eb4@6 eb4@6 eb4@6 eb4@20]/4", // Dbsus2
  Q: "[~@21 bb3@7 bb3@7 bb3@7 ab3@36 ab3@6 ab3@6 bb3@12 bb3@24 bb3@6 bb3@6 ab3@27 bb3@14 ~@13]/4",
  R: "[~@41 c4@6 c4@6 bb3@6 bb3@18 ab3@6 ab3@18 ab3@6 ab3@24 ~@12 bb3@36 bb3@6 bb3@6 ab3@96 ~]/6",
  S: "[~@12 bb3@27 ~ ab3@55 [ab3,bb3]@55 ~@42]/4", T: "[~ db4@8 bb3@8 c4@32 ~@11, ~ ab3@48 ~@11]/5",
})).s("gm_trombone").gain(0.2)

// chords · tuba · "Euphonium"
const tuba = note(`<
  ~ A@5 B@8 C@4 D@3 E@2 F@2 G H@2 I@2 J K@2 L@3 M@2 ~@7 N@3 O@4 ~@2 P@2 Q@7 R@7 S@8 T@5
>`.pickRestart({
  A: "[~@3 eb3@5 eb3@5 [db3,f3]@5 ~ [db3,f3]@5 eb3@6 eb3@6 ~ [db3,eb3]@8 [db3,eb3]@53 ~@22 eb3@5 eb3@5 [db3,f3]@5 ~ [db3,f3]@5 eb3@6 eb3@6 ~ [db3,eb3]@8 [db3,eb3]@56 ~@22]/5", // Db Dbsus2 Db Dbsus2
  B: "[~@4 eb3@5 ~ eb3@5 [db3,e3]@5 [db3,e3]@5 ~ eb3@5 eb3@5 [db3,e3]@5 ~ [db3,e3]@26 [c3,eb3]@5 ~ [c3,eb3]@37 ~@11 [g3,db4]@5 [g3,db4]@5 [g3,db4]@5 ~ [g3,db4]@5 [f3,c4]@5 [f3,c4]@16 [eb3,c4]@5 ~ [eb3,c4]@16 [db3,ab3]@5 [db3,ab3]@32 ~@16 eb3@5 eb3@5 ~ [db3,e3]@5 [db3,e3]@5 eb3@5 ~ eb3@5 [db3,e3]@5 [db3,e3]@27 [c3,eb3]@5 [c3,eb3]@37 ~@11 g3@5 ~ g3@5 ab3@3 ab3@8 c4@2 c4@4]/8", // Dbm Cm Gdim F5 Cm Db5 Dbm Cm
  C: "[~@4 g3@5 ~ g3@16 [f3,ab3]@5 [f3,ab3]@21 ~@6 bb3@5 bb3@5 ab3@5 ~ ab3@5 g3@5 g3@5 ~ ab3@5 ab3@18 g3@6 g3@48 ~@25]/4", // Fm
  D: "[~@4 ab3@5 ~ ab3@5 ab3@5 g3@5 ~ g3@16 f3@48 eb3@12 eb3@18 eb3@6 ~ eb3@13 eb3@4]/3",
  E: "[~@2 db3@13 f3@6 eb3@6 ~ db3@6 eb3@13 eb3@6 db3@13 eb3@6 eb3@6 ~ c3@6 db3@11]/2",
  F: "[~@2 db3@13 db3@19 db3@6 db3@51 ~@5]/2", G: "~@22 [ab3,c4]@5 ~ [ab3,c4]@5 [ab3,bb3]@5 [ab3,bb3]@5 ~ [ab3,c4]@4",
  H: "[~ [ab3,c4]@5 [ab3,db4]@5 ~ [ab3,db4]@26 [ab3,c4]@5 ~ [ab3,c4]@37 ~@11 [bb3,db4]@4]/2", // Ab Db5 Ab Bbm
  I: "[~ [bb3,db4]@5 [bb3,db4]@11 [bb3,db4]@3 [ab3,c4]@2 [ab3,c4]@16 [g3,c4]@5 ~ [g3,c4]@16 [f3,ab3]@5 [f3,ab3]@31]/2", // Bbm Ab C5 Fm
  J: "~@17 [ab3,c4]@5 [ab3,c4]@5 ~ [ab3,bb3]@5 [ab3,bb3]@5 [ab3,c4]@5 ~ [ab3,c4]@4", // Ab Absus2 Ab
  K: "[~ [ab3,db4]@5 [ab3,db4]@27 [ab3,c4]@5 [ab3,c4]@37 ~@11 g3@5 g3@5]/2", // Db5 Ab
  L: "[ab3@5 ab3@5 c4@4 c4@18 g3@6 g3@18 [f3,ab3]@6 [f3,ab3]@24 [f3,bb3]@6 ~ [g3,c4]@6 [ab3,db4]@18 ab3@5 ab3@5 g3@5 g3@6 ab3@6]/3", // Fm Bb5 C5 Db5
  M: "[ab3@3 g3 g3@8 ~@4]/2",
  N: "[~@11 eb3@3 eb3@3 [db3,e3]@3 [db3,e3]@3 eb3@3 eb3@3 [db3,e3]@3 [db3,e3]@15 [c3,eb3]@3 [c3,eb3]@21 ~]/3", // Dbm Cm
  O: "[~@10 eb3@6 eb3@6 eb3@6 eb3@3 f3@3 f3@24 c3@6 eb3@18 eb3@6 eb3@42 ~@12 eb3@6 eb3@6 db3@6 db3@6 eb3@6 eb3@20]/4",
  P: "[~@21 [db3,f3]@7 [db3,eb3]@7 db3@7 c3@36 c4@6 ab3@6 ab3@6]/2", // Db Dbsus2
  Q: "[~@6 ab3@24 bb3@6 c4@6 bb3@27 ab3@14 ab3@126 ~@24 ab3@102 ~]/7",
  R: "[~@23 ab3@66 gb3@6 gb3@6 f3@6 f3@18 eb3@6 eb3@18 d3@6 d3@24 ~@12 [db3,f3]@36 [db3,eb3]@6 db3@6 c3@96 ~]/7", // Db Dbsus2
  S: "[~@47 c4@6 ab3@7 db3@27 ~@14 bb3@7 c4@34 ~ [db3,eb3,bb3]@55 ~@27 ab3@27 ab3@69 gb3@7 gb3@7 e3@6 e3@7 gb3@8 gb3@8 bb3@12 bb3@8, ~@60 ab3@41 ~@283, ~@88 db3@55 ~@241]/8", // Eb7
  T: "[~ bb3@16 c4@32 ~@11, ~ eb3@48 ~@11]/5",
})).s("gm_tuba").gain(0.2)

// bass · tuba
const bass = note("<A@3 B@8 C@7 D@3 E@2 F@3 G@4 H I@2 J@3 K@2 ~@6 L@8 ~@2 M@4 ~@5 N@2 ~ O@4 ~ P@4 Q@8>".pickRestart({
  A: "[~@24 eb2@5 ab2@103 ~@9 eb2@3]/3",
  B: "[~@2 ab2@103 ~@17 ab2@32 ab2@5 ab2@5 ab2@5 ~ ab2@5 ab2@5 ab2@5 ~ ab2@21 ab2@11 ab2@21 c3@11 eb3@26 eb3@5 ~ eb3@5 f3@5 f3@16 c3@5 ~ db3@16 db3@5 db3@32 ~@16 ab2]/8",
  C: "[~@4 ab2@5 ~ ab2@5 ab2@5 ab2@5 ~ ab2@5 ab2@5 ab2@21 ~ ab2@10 ab2@21 ~ c3@10 eb3@21 ~ eb3@5 eb3@3 eb3@8 f3@2 f3@8 c3@5 ~ bb2@16 bb2@5 bb2@21 db3@16 c3@5 ~ c3@5 bb2@5 c3@5 ~ db3@5 eb3@24 eb3@48 ~@25]/7",
  D: "[~@4 eb3@5 ~ eb3@5 c3@5 db3@5 ~ eb3@16 f3@18 db3@6 db3@24 c3@12 c3@18 eb3@6 ~ eb3@13 c3@4]/3",
  E: "[~@2 db3@13 db3@6 c3@6 ~ bb2@6 c3@13 c3@6 bb2@13 bb2@6 bb2@6 ~ ab2@6 bb2@11]/2",
  F: "[~@2 db3@13 bb2@19 bb2@6 bb2@38 ~@14 ab2@32 ab2@5 ab2@5 ab2@5 ~ ab2@4]/3",
  G: "[~ ab2@5 ab2@5 ~ ab2@21 ab2@11 ab2@21 c3@11 eb3@26 eb3@11 eb3@3 f3@2 f3@16 c3@5 ~ db3@16 db3@5 db3@31]/4",
  H: "~@17 ab2@5 ab2@5 ~ ab2@5 ab2@5 ab2@5 ~ ab2@4", I: "[~ ab2@5 ab2@21 ~ ab2@10 ab2@21 ~ c3@10 eb3@21 eb3@5]/2",
  J: "[eb3@5 eb3@5 f3@4 f3@18 c3@6 bb2@18 bb2@6 bb2@24 bb2@6 ~ c3@6 db3@18 c3@5 c3@5 bb2@5 c3@6 db3@6]/3",
  K: "[eb3@2 ~ eb2@3 ~@2, ~ eb3@2 ~]/2",
  L: "[~@40 ab2@36 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@24 ab2@12 ab2@24 c3@12 eb3@24 eb3@6 eb3@6 eb3@3 db3@3 db3@24 c3@6 c3@18 db3@6 db3@42 ~@12 ab2@30 ab2@20]/8",
  M: "[~@21 db3@7 c3@7 bb2@7 ab2@36 ab2@6 ab2@6 bb2@12 bb2@24 eb3@6 eb3@6 eb3@27 eb3@14 ~@13]/4",
  N: "[~@23 ab2@66 ~@7]/2", O: "[~@47 db3@36 c3@6 bb2@6 ~@48 ab1@48 ~, ~@95 ab2@96 ~]/4",
  P: "[~@12 bb2@27 ~ bb2@55 bb2@55 ~@42]/4", Q: "[~@40 ab2@301 ~@43]/8",
})).s("gm_tuba").gain(0.25)

stack(trumpet, trumpet_2, trumpet_soft, trumpet_3, french_horn, french_horn_2, trombone, tuba, bass)