Strudelify

Sørgemarsj over Rikard Nordraak

and

KeyB♭ majorTempo36 bpm
0:00/0:00
// Sørgemarsj over Rikard Nordraak — and
// 36 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/3969296; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 75 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(36/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 · "E♭ Trumpet"
const trumpet = note(`<
  ~@8 A B C D E F ~@9 G H I J K ~ L ~ M ~@2 N ~@10 O@3 P@2 Q@2 ~@9 R@2 S@2 T U V W X ~ Y Z ~@2
>`.pickRestart({
  A: "f5@8 f5@8 f5@8 ~@4 bb5 ab5 ~ f5", B: "f5@2 gb5@2 db5@2 eb5@2 f5@5 ~@3",
  C: "~@3 c5 c5@2 ~ c5 c5@2 ~ c5 c5@2 ~@5 db5 db5@2 ~ db5 db5@2 ~ db5 db5@2 ~@2",
  D: "~@3 eb5 eb5@2 ~ eb5 eb5@2 ~ e5 e5@2 ~@2 bb5@12 ~@4", E: "~@16 gb4 e4 ~ c5 c5@4 b4@4 bb4@4", F: "bb4 f4",
  G: "~@5 bb4@2 ~", H: "~@16 f4@4 f4!2 ~ f4 f4@4 f4@4", I: "f4@8 f4@6 f4@2 f4@3 ~ e4@3 ~@9",
  J: "~@16 eb4@4 eb4!2 ~ eb4 eb4@4 eb4@4", K: "eb4@8 eb4@6 eb4@2 eb4@3 ~ d4@3 ~@9", L: "~@3 ab4 ~ ab4@2 ~",
  M: "~@3 a4 ~ a4@2 ~", N: "~@3 c5 bb4@2 g4 bb4!2 a4 g4 a4 ~@4, ~@8 c5 ~@23",
  O: "[~@14 f5@8 f5@8 f5@8 ~@4 bb5 ab5 ~ f5 f5@4 gb5@4 db5@4 eb5@4 f5@10 ~@9 c5 c5@2 ~ c5 c5@2 ~ c5 c5@2 ~@4]/3",
  P: "[~ db5 db5@2 ~ db5 db5@2 ~ db5 db5@2 ~@5 eb5 eb5@2 ~ eb5 eb5@2 ~ e5 e5@2 ~@2 bb5@12 ~@20 gb4 e4]/2",
  Q: "[~ c5 c5@4 b4@4 bb4@4 bb4@16 f4@16 ~@18]/2", R: "[~@2 bb4@8 ~@20 f4@4 f4!2 ~ f4 f4@4 f4@4 f4@8 f4@6 f4@2 f4@2]/2",
  S: "[~@2 e4@3 ~@25 eb4@4 eb4!2 ~ eb4 eb4@4 eb4@4 eb4@8 eb4@6 eb4@2 eb4@2]/2", T: "~@2 d4@3 ~@27", U: "~@13 ab4@2 ~",
  V: "~ ab4@4 ~@11", W: "~@13 a4@2 ~", X: "~ a4@4 ~@11", Y: "~@10 c5 bb4@2 g4 bb4!2, ~@22 c5 ~@9", Z: "a4 g4 a4 ~@13",
})).s("gm_trumpet").gain(0.3).pan(0)

// other · trumpet · "E♭ Trumpet" · soft notes
const trumpet_soft = note(`<
  ~@14 A B C D ~ E F ~ G H ~@4 I J K L ~@2 M N@3 ~@13 O P@4 Q R S T U ~@4 V W X Y ~@2 Z AA@3
>`.pickRestart({
  A: "bb3@3 ~@5", B: "~@2 g4 gb4", C: "f4 ~ f4 ~", D: "bb3@3 ~",
  E: "f5@6 ab5@2 g5@4 f5@2 g5@2 f5@3 eb5 g5@3 eb5 f5@6 e5@2, ~@8 bb5 ~@23", F: "eb5@2 f5 g5 eb5@2 c5@2 d5 ~ d5 ~ d5@4",
  G: "f5@6 ab5@2 g5@4 eb5@2 g5@2 f5@3 eb5 g5@3 eb5 f5@6 e5@2, ~@8 ab5 ~@23",
  H: "eb5@4 d5@2 a4@2 c5@3 bb4 bb4@4 bb4 ~@15", I: "~ g4 ~ g4 ~ g4 ~@2", J: "~ g4 ~@6", K: "~ ab4 ~ ab4 ~ ab4 ~@2",
  L: "~ ab4 ~@6", M: "c5@3 ~@9 g4@4, ~@24 a4 ~@7", N: "[bb4@4 c5@5 eb5@6 d5@8 c5@15 bb4@6 ~ bb4@33 ~@18]/3",
  O: "~@7 bb3@6 ~@3", P: "[~@15 g4@4 gb4@4 f4@4 ~@4 f4@4 ~@4 bb3@12 ~@13]/4",
  Q: "~@7 f5@3 ab5 g5@2 f5 g5 f5, ~@22 bb5 ~@9", R: "~ eb5 g5@3 eb5 f5@6 e5@2 eb5@4 f5@2 g5@2 eb5@4 c5@4 d5@2",
  S: "~ d5 ~ d5@4 ~@9", T: "~@7 f5@3 ab5 g5@2 eb5 g5 f5, ~@22 ab5 ~@9",
  U: "~ eb5 g5@3 eb5 f5@6 e5@2 eb5@4 d5@2 a4@2 c5@3 bb4 bb4@4 bb4 ~", V: "~@9 g4@2 ~@2 g4@2 ~",
  W: "~ g4@2 ~@6 g4@2 ~@5", X: "~@9 ab4@2 ~@2 ab4@2 ~", Y: "~ ab4@2 ~@6 ab4@2 ~@5", Z: "~@7 c5@3 ~@6",
  AA: "[~@6 g4@8 bb4@4 c5@5 eb5@6 d5@8 c5@15 bb4@6 bb4@33 ~@5, ~@6 a4 ~@89]/3",
})).s("gm_trumpet").gain(0.2).pan(0)

// chords · trumpet · "B♭ Cornet"
const trumpet_2 = note(`<
  ~@6 A B C D E F G H I J K ~ L M N O M ~ P Q R S ~ T ~ U V W X Y@3 ~@5 Z@5 AA@2 AB@5 AC AD AE AF AD AG AH@5 AI AJ AK
  AL@6
>`.pickRestart({
  A: "[f3,f4]@8 ~@3 c4 db4@2 eb4@2 [d4,f4]@4 [eb4,bb4]@3 c5 [gb4,db5]@4 [bb4,eb5]@4, ~ bb3 ~@2", // F Dm Eb5 Gb5 Eb5
  B: "[bb4,f5]@4 [c5,db5] bb4@2 f5 [bb4,f5]@4 [c5,db5] bb4@2 f5 [bb4,f5]@7 c5 db5@4 c5@3 bb4, ~@5 c5 ~@7 c5 ~@10 f5@8", // Bb5 Dbmaj7 Bb5 Dbmaj7 Bb5
  C: "[f4,db5]@8 [f4,db5]@8 [f4,db5]@8 ~@4 [bb4,db5]!2 ~ [bb4,db5]", // Db Bbm
  D: "[bb4,db5]@2 [bb4,db5]@2 [gb4,bb4]@2 [bb4,c5]@2 [a4,c5]@5 ~@3", // Bbm Gb Bbsus2 Am
  E: "~@3 [c4,eb4] [c4,eb4]@2 ~ [c4,eb4] [c4,eb4]@2 ~ [c4,eb4] [c4,eb4]@2 ~@5 [db4,f4] [db4,f4]@2 ~ [db4,f4] [db4,f4]@2 ~ [db4,f4] [db4,f4]@2 ~@2", // Cm Db
  F: "~@3 [eb4,gb4] [eb4,gb4]@2 ~ [eb4,gb4] [eb4,gb4]@2 ~ [e4,g4] [e4,g4]@2 ~@2 [bb4,e5]@12 ~@4", // Ebm Em Bbdim
  G: "~@5 [e4,gb4] [eb4,gb4]!2", H: "[db4,f4] [c4,eb4] bb3 a3, ~ c4", I: "bb3@3 ~ [bb3,eb4]@2 [bb3,db4]@2",
  J: "[bb3,db4] ~ [bb3,eb4] [bb3,db4]", K: "[bb3,db4] ~ [bb3,db4] ~",
  L: "f4@6 c5@2 a4@4 f4@2 a4@2 [f4,bb4]@3 a4 [eb4,f4]@3 a4 [f4,bb4]@6 d5@2, ~ eb4 ~@2, ~@8 bb4 ~@23", // Bb5 Ebsus2 Bb5
  M: "[ab4,c5]@4 [bb4,c5]@4 [ab4,c5] ~ [bb4,c5] ~ [ab4,c5]@2 ~@2", N: "ab4@3 ~@5",
  O: "f4@6 bb4@2 a4@4 f4@2 a4@2 [f4,bb4]@3 a4 [eb4,f4]@3 a4 [f4,bb4]@6 d5@2, ~ eb4 ~@2, ~@8 bb4 ~@23", // Bb5 Ebsus2 Bb5
  P: "~@16 [d4,f4]@4 [d4,f4]!2 ~ [d4,f4] [d4,f4]@4 [d4,f4]@4", // Dm
  Q: "[db4,f4]@4 [c4,f4]@3 [db4,f4] [c4,f4]@2 [c4,e4]@2 ~@4", // Db F5 Db F5 C
  R: "~@16 [c4,eb4]@4 [c4,eb4]!2 ~ [c4,eb4] [c4,eb4]@4 [c4,eb4]@4", // Cm
  S: "[b3,eb4]@4 [bb3,eb4]@3 [b3,eb4] [bb3,eb4]@2 [bb3,d4]@2 ~@4", T: "~ [bb3,eb4] ~ [c4,eb4] ~ [db4,e4]@2 ~",
  U: "~ [b3,e4] ~ [db4,e4] ~ [d4,f4]@2 ~", V: "c5@3 c5 c5@2 bb4@2 a4@3 a4 a4@2 g4@2",
  W: "a4@4 f4@4 d4 e4 ~ f4 e4@2 d4@2 c4@8 d4@8", X: "f4 e4 [d4,g4]@2 d4 c4 [bb3,eb4]@2, a4 ~ f4 ~",
  Y: "[d4@4 [c4,g4]@5 g4@3 a4@3 [f4,bb4]@8 bb4@9 ~ a4@5 bb4@6 ~ [f4,bb4]@33 ~@18, ~@9 eb4@6 ~@8 f4@21 ~@52]/3", // C5 Bb5
  Z: "[~@14 [f3,f4]@8 ~@3 c4 db4@2 eb4@2 [d4,f4]@4 [eb4,bb4]@3 c5 [gb4,db5]@4 [bb4,eb5]@4 [bb4,f5]@4 [c5,db5] bb4@2 f5 [bb4,f5]@4 [c5,db5] bb4@2 f5 [bb4,f5]@7 c5 db5@4 c5@3 bb4 [f4,db5]@8 [f4,db5]@8 [f4,db5]@8 ~@4 [bb4,db5]!2 ~ [bb4,db5] [bb4,db5]@4 [bb4,db5]@4 [gb4,bb4]@4 [bb4,c5]@4 [a4,c5]@10 ~@9 [c4,eb4] [c4,eb4]@2 ~ [c4,eb4] [c4,eb4]@2 ~ [c4,eb4] [c4,eb4]@2 ~@4, ~@11 bb3@4 ~@20 f5@4 ~@41]/5", // F Dm Eb5 Gb5 Eb5 Bb5 Dbmaj7 Bb5 …
  AA: "[~ [db4,f4] [db4,f4]@2 ~ [db4,f4] [db4,f4]@2 ~ [db4,f4] [db4,f4]@2 ~@5 [eb4,gb4] [eb4,gb4]@2 ~ [eb4,gb4] [eb4,gb4]@2 ~ [e4,g4] [e4,g4]@2 ~@2 [bb4,e5]@12 ~@22]/2", // Db Ebm Em Bbdim
  AB: "[~ [e4,gb4]@2 [eb4,gb4]@2 [eb4,gb4]@2 [db4,f4]@4 [c4,eb4]@4 bb3@4 a3@4 bb3@6 ~@2 [bb3,eb4]@4 [bb3,db4]@4 [bb3,db4]@4 ~@4 [bb3,eb4]@4 [bb3,db4]@4 [bb3,db4]@4 ~@4 [bb3,db4]@4 ~@13, ~@15 c4@8 ~@57]/5", // Esus2 Ebm Db Cm Eb5 Bbm Eb5 Bbm
  AC: "~@7 f4@3 c5 a4@2 f4 a4 [f4,bb4], ~@11 eb4@4 ~, ~@22 bb4 ~@9", // Bb5
  AD: "~ a4 [eb4,f4]@3 a4 [f4,bb4]@6 d5@2 [ab4,c5]@8 [bb4,c5]@8 [ab4,c5]@2", // Ebsus2 Bb5 Ab Bbsus2 Ab
  AE: "~ [bb4,c5] ~ [ab4,c5]@2 ~@2 ab4@6 ~@3", AF: "~@7 f4@3 bb4 a4@2 f4 a4 [f4,bb4], ~@11 eb4@4 ~, ~@22 bb4 ~@9",
  AG: "~ [bb4,c5] ~ [ab4,c5]@2 ~@11", // Bbsus2 Ab
  AH: "[~@30 [d4,f4]@4 [d4,f4]!2 ~ [d4,f4] [d4,f4]@4 [d4,f4]@4 [db4,f4]@8 [c4,f4]@6 [db4,f4]@2 [c4,f4]@4 [c4,e4]@4 ~@24 [c4,eb4]@4 [c4,eb4]!2 ~ [c4,eb4] [c4,eb4]@4 [c4,eb4]@4 [b3,eb4]@8 [bb3,eb4]@6 [b3,eb4]@2 [bb3,eb4]@4 [bb3,d4]@4 ~@26]/5", // Dm Db F5 Db F5 C Cm B …
  AI: "~@9 [bb3,eb4]@2 ~@2 [c4,eb4]@2 ~", AJ: "~ [db4,e4]@4 ~@11", AK: "~@9 [b3,e4]@2 ~@2 [db4,e4]@2 ~",
  AL: "[~@2 [d4,f4]@8 ~@4 c5@6 c5@2 c5@4 bb4@4 a4@6 a4@2 a4@4 g4@4 a4@4 f4@4 d4 e4 ~ f4 e4@2 d4@2 c4@8 d4@8 f4@4 e4@4 [d4,g4]@8 d4@4 c4@4 [bb3,eb4]@8 d4@4 [c4,g4]@5 g4@3 a4@3 [f4,bb4]@8 bb4@9 a4@5 ~ bb4@6 [f4,bb4]@33 ~@5, ~@78 a4@8 ~@8 f4@8 ~@17 eb4@6 ~@8 f4@21 ~@38]/6", // Dm G5 Eb5 C5 Bb5
})).s("gm_trumpet").gain(0.2).pan(0.3)

// chords · trumpet · "B♭ Cornet" · soft notes
const trumpet_soft_2 = note("<A B C D E F ~@11 G ~@2 H ~@7 I ~ J ~@6 K@7 ~@10 L@2 ~ M N ~@6 O P Q R ~@6>".pickRestart({
  A: "[db4,f4]@8 [db4,f4]@8 [db4,f4]@8 ~@4 f4 gb4 ~ bb4", // Db
  B: "[db4,f4]@4 ~@3 [c4,ab4] [db4,f4]@4 ~@3 [c4,ab4] [db4,f4]@8 ~@8", // Db Fm Db Fm Db
  C: "[f4,ab4]@8 [f4,ab4]@8 [f4,ab4]@8 ~@4 ab4 bb4 ~ db5", // Fm
  D: "[f4,ab4]@4 ~@3 [eb4,c5] [f4,ab4]@4 ~@3 [eb4,c5] [f4,ab4]@8 ~@8", // Fm Cm Fm Cm Fm
  E: "[a4,c5]@8 [a4,db5] [a4,c5] ~ [a4,db5] [a4,c5]@4 [a4,db5]@4 [a4,c5]@8 ~@4", // Am A Am A Am A Am
  F: "[db4,e4]@8 [db4,gb4] [db4,e4] ~ [db4,gb4] [db4,e4]@4 [db4,gb4]@4 [db4,e4]@8 ~@4", G: "[f3,bb3]@3 ~",
  H: "~@8 gb4 ~ gb4 ~ gb4@4", I: "~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~@2", J: "~ [b3,e4] ~ [b3,e4] ~ [b3,e4] ~@2",
  K: "[~@14 [db4,f4]@8 [db4,f4]@8 [db4,f4]@8 ~@4 f4 gb4 ~ bb4 [db4,f4]@4 ~@3 [c4,ab4] [db4,f4]@4 ~@3 [c4,ab4] [db4,f4]@8 ~@8 [f4,ab4]@8 [f4,ab4]@8 [f4,ab4]@8 ~@4 ab4 bb4 ~ db5 [f4,ab4]@4 ~@3 [eb4,c5] [f4,ab4]@4 ~@3 [eb4,c5] [f4,ab4]@8 ~@8 [a4,c5]@8 [a4,db5] [a4,c5] ~ [a4,db5] [a4,c5]@4 [a4,db5]@4 [a4,c5]@8 ~@4 [db4,e4]@8 [db4,gb4] [db4,e4] ~ [db4,gb4] [db4,e4]@4 [db4,gb4]@4 [db4,e4]@8 ~@22]/7", // Db Fm Db Fm Db Fm Cm Fm …
  L: "[~@7 [f3,bb3]@12 ~@13]/2", M: "~@15 gb4", N: "~ gb4 ~ gb4@4 ~@9", O: "~@9 [bb3,eb4]@2 ~@2 [bb3,eb4]@2 ~",
  P: "~ [bb3,eb4]@2 ~@13", Q: "~@9 [b3,e4]@2 ~@2 [b3,e4]@2 ~", R: "~ [b3,e4]@2 ~@13",
})).s("gm_trumpet").gain(0.15).pan(0.3)

// other · trumpet · "E♭ Trumpet"
const trumpet_3 = note(`<
  ~@7 A B C D E F G ~@10 H I J K ~ L ~ M ~@2 N ~@9 O@6 P ~@10 Q@2 R@2 S T U V W ~ X Y ~@2
>`.pickRestart({
  A: "f4 gb4 g4 ab4", B: "bb4@8 bb4@8 bb4@8 ~@4 bb4 ab4 ~ f4", C: "f4@4 gb4@4 db4@4 eb4@4 f4@10 ~@5 c4",
  D: "bb3@8 a3@4 ~@3 db4 c4@8 bb3@4 ~@3 eb4",
  E: "db4@4 c4@2 ~@2 eb4@4 db4@2 ~@2 bb4@4 bb4!2 ~ bb4 db5!2 ~ db5 gb4!2 ~ gb4", F: "~@16 gb4 e4 ~ c5 c5@4 b4@4 bb4@4",
  G: "bb3 ~", H: "~@16 d4@4 d4!2 ~ d4 d4@4 d4@4", I: "db4@8 c4@6 db4@2 c4@3 ~ c4@3 ~@9",
  J: "~@16 c4@4 c4!2 ~ c4 c4@4 c4@4", K: "b3@8 bb3@6 b3@2 bb3@3 ~ bb3@3 ~@9", L: "~@3 c5 ~ db5@2 ~",
  M: "~@3 db5 ~ d5@2 ~", N: "~@4 bb4@2 g4 bb4!2 a4 g4 ~@5",
  O: "[~@14 f4@8 gb4@8 g4@8 ab4@8 bb4@8 bb4@8 bb4@8 ~@4 bb4 ab4 ~ f4 f4@4 gb4@4 db4@4 eb4@4 f4@10 ~@5 c4 bb3@8 a3@4 ~@3 db4 c4@8 bb3@4 ~@3 eb4 db4@4 c4@2 ~@2 eb4@4 db4@2 ~@2 bb4@4 bb4!2 ~ bb4 db5!2 ~ db5 gb4!2 ~ gb4 ~@16 gb4 e4]/6",
  P: "~ c5 c5@4 b4@4 bb4@4 bb3@16 ~@2", Q: "[~@30 d4@4 d4!2 ~ d4 d4@4 d4@4 db4@8 c4@6 db4@2 c4@2]/2",
  R: "[~@2 c4@3 ~@25 c4@4 c4!2 ~ c4 c4@4 c4@4 b3@8 bb3@6 b3@2 bb3@2]/2", S: "~@2 bb3@3 ~@27", T: "~@13 c5@2 ~",
  U: "~ db5@4 ~@11", V: "~@13 db5@2 ~", W: "~ d5@4 ~@11", X: "~@11 bb4@2 g4 bb4!2", Y: "a4 g4 ~@14",
})).s("gm_trumpet").gain(0.45).pan(0.1)

// other · trumpet · "E♭ Trumpet" · soft notes
const trumpet_soft_3 = note(`<
  A ~ B ~@3 C ~@7 D E ~@12 F G H I J ~ K L@4 M@2 ~@2 N@2 ~@6 O@2 ~@12 P Q R S T ~ U V@3
>`.pickRestart({
  A: "bb3!3 ~", B: "db4!3 ~", C: "~@4 bb3 g4 gb4!2", D: "~@2 g4 gb4", E: "f4 ~@3", F: "~ bb4 ~ bb4 ~ bb4 ~@2",
  G: "~ bb4 ~@6", H: "~ b4 ~ b4 ~ b4 ~@2", I: "~ b4 ~@5 db5", J: "c5 ~@7",
  K: "c5@6 c5@2 c5 ~@13 a4@2 g4@8, ~@24 a4 ~@7",
  L: "[bb4@4 c5@5 eb5@6 d5@8 c5@15 bb4@6 ~ bb4@33 bb3@8 bb3@8 bb3@8 ~@26]/4", M: "[~@7 db4@4 db4@4 db4@4 ~@13]/2",
  N: "[~@15 bb3@2 g4@2 gb4@2 gb4@2 ~@9]/2", O: "[~@15 g4@4 gb4@4 f4@4 ~@5]/2", P: "~@9 bb4@2 ~@2 bb4@2 ~",
  Q: "~ bb4@2 ~@6 bb4@2 ~@5", R: "~@9 b4@2 ~@2 b4@2 ~", S: "~ b4@2 ~@6 b4@2 ~@5", T: "~@5 db5@2 c5@2 ~@7",
  U: "~@14 c5@6 c5@2 c5 ~@9", V: "[~@4 a4@2 g4@8 bb4@4 c5@5 eb5@6 d5@8 c5@15 bb4@6 bb4@33 ~@5, ~@6 a4 ~@89]/3",
})).s("gm_trumpet").gain(0.2).pan(0.1)

// chords · french horn · "E♭ Alto Horn"
const french_horn = note(`<
  A B C D E F G H I J K L M N O P Q R S T U S T V W X Y Z AA AB AC AD AE AF AG AH@7 AI AJ@3 AK@4 AL@6 AM AN AO AM AP
  AQ@4 AR@7 AS@3
>`.pickRestart({
  A: "[bb2,f3]@8 [bb2,f3]@8 [bb2,f3]@8 ~@4 f3 gb3 ~ bb3", // Bb5
  B: "[f3,bb3]@4 ~@3 [eb3,bb3] [f3,bb3]@4 ~@3 [eb3,bb3] [f3,bb3]@8 ~@8", // Bb5 Eb5 Bb5 Eb5 Bb5
  C: "[db3,ab3]@8 [db3,ab3]@8 [db3,ab3]@8 ~@4 ab3 bb3 ~ db4", // Db5
  D: "[ab3,db4]@4 ~@3 [gb3,db4] [ab3,db4]@4 ~@3 [gb3,db4] [ab3,db4]@8 ~@8", // Db5 Gb5 Db5 Gb5 Db5
  E: "~@4 [gb3,gb4]!2 ~ [gb3,gb4] [gb3,gb4]@4 [gb3,gb4]@4 ~@4 [gb3,gb4]@3 [gb3,gb4] [gb3,gb4]@4 [gb3,gb4]@4", // Gb
  F: "~@4 [bb2,bb3]!2 ~ [bb2,bb3] [bb2,bb3]@4 [bb2,bb3]@4 ~@4 [bb2,bb3]@3 [bb2,bb3] [bb2,bb3]@4 [bb2,bb3]@4", // Bb
  G: "[bb2,bb3]@8 [gb3,bb3]@8 [f3,ab3]@4 [eb3,bb3]@3 c4 [gb3,db4]@4 [bb3,eb4]@4", // Bb Gb Fm Eb5 Gb5 Eb5
  H: "[db4,f4] [c4,eb4] [db4,f4] [eb4,gb4]", // Db Cm Db Ebm
  I: "~@4 [bb3,db4]@4 ~@4 [bb3,db4]@4 ~@4 [bb3,db4]@3 [bb3,db4] [bb3,db4]@4 [db4,gb4] [db4,f4] ~ db4", // Bbm Gb5 Db
  J: "db4@4 [db4,eb4]@4 bb3@4 [bb3,c4]@4 [a3,c4]@10 ~@2 f3@3 c4", K: "bb3@8 a3@4 f3@3 db4 c4@8 bb3@4 f3@3 eb4",
  L: "db4@4 c4@2 ~ f3 eb4@4 db4@2 ~ f3 [db4,gb4]@12 gb4!2 ~ gb4", // Gb5
  M: "a3@4 gb4@3 a3 gb4 ~ [gb3,e4]@2 [gb3,eb4]@2 [gb3,eb4]@2", N: "[f3,g3] [eb3,gb3] f3@2",
  O: "bb2@3 ~ [eb3,g3]@2 [db3,gb3]@2", P: "[db3,f3] ~ [eb3,g3] [db3,gb3]", Q: "[db3,f3] ~ [db3,f3] ~",
  R: "[bb2,db3]@3 ~", S: "[bb3,d4]@4 [bb3,c4]@4 [bb3,c4] ~ [bb3,c4] ~ [bb3,d4]@2 ~@2",
  T: "[c4,f4]@4 [c4,eb4]@4 [c4,f4] ~ [c4,eb4] ~ [c4,f4]@2 ~@2", U: "[c4,eb4]@6 ~@2 [a3,d4] ~ [a3,d4] ~ [a3,d4]@4",
  V: "[eb4,g4]@8 [eb4,a4]@8 [eb4,g4] ~@3 [d4,f4]@8 ~@4", W: "d4@6 g4@2 f4@4 d4@2 f4@2 c4@4 bb3!2 ~ bb3 f3@4 g3@4",
  X: "ab3@4 ab3@3 ab3 ab3@2 g3@2 ~@4", Y: "c4@6 f4@2 eb4@4 c4@2 eb4@2 bb3@4 ab3!2 ~ ab3 eb3@4 f3@4",
  Z: "gb3@4 gb3@3 gb3 gb3@2 f3@2 ~@4",
  AA: "~@4 eb3@4 bb3@4 ~@2 bb3@2 ~@4 eb3@4 ~@4 bb3 b3 ~ eb4, bb3@2 ~ eb3 bb3@2 ~@2",
  AB: "~ eb3 ~ eb3 ~ e3@2 c4, bb3@2 c4@2 db4@3 ~",
  AC: "~@4 e3@4 b3@4 ~@2 b3@2 ~@4 e3@4 ~@4 b3 c4 ~ e4, b3@2 ~ e3 b3@2 ~@2",
  AD: "~ e3 ~ e3 ~ f3@2 db4, b3@2 db4@2 d4@3 ~", AE: "[f4,a4]@3 [e4,a4] [d4,g4]@4 [d4,f4]@3 [c4,f4] [bb3,e4]@4",
  AF: "[a3,e4] [a3,d4] [g3,bb3]@2 ab3 g3 [d3,gb3]@2, ~@2 eb3 ~", // A5 D5 Gm D
  AG: "[f3,c5]@3 c5 bb4@2 g4 bb4!2 a4 g4 a4 [eb3,g4]@4, ~ g3 d3 ~, ~@8 c5 ~@15 a4 ~@7", // F5 Eb
  AH: "[~@4 c4@5 [a3,eb4]@6 [f3,d4]@8 ~@5 d4@5 ~@5 bb3@6 ~ eb4@15 d4@18 [bb2,f3]@8 [bb2,f3]@8 [bb2,f3]@8 ~@4 f3 gb3 ~ bb3 [f3,bb3]@4 ~@3 [eb3,bb3] [f3,bb3]@4 ~@3 [eb3,bb3] [f3,bb3]@8 ~@8 [db3,ab3]@8 [db3,ab3]@8 [db3,ab3]@8 ~@4 ab3 bb3 ~ db4 [ab3,db4]@4 ~@3 [gb3,db4] [ab3,db4]@4 ~@3 [gb3,db4] [ab3,db4]@8 ~@12 [gb3,gb4]!2 ~ [gb3,gb4] [gb3,gb4]@4 [gb3,gb4]@4 ~@2, bb3@9 ~@14 c4@15 ~@7 bb3@33 ~@146, ~@33 f4@12 ~@179]/7", // Adim Dm Bb5 Eb5 Bb5 Eb5 Bb5 Db5 …
  AI: "~@2 [gb3,gb4]@3 [gb3,gb4] [gb3,gb4]@4 [gb3,gb4]@4 ~@4 [bb2,bb3]!2 ~ [bb2,bb3] [bb2,bb3]@4 [bb2,bb3]@4 ~@2", // Gb Bb
  AJ: "[~@2 [bb2,bb3]@3 [bb2,bb3] [bb2,bb3]@4 [bb2,bb3]@4 [bb2,bb3]@8 [gb3,bb3]@8 [f3,ab3]@4 [eb3,bb3]@3 c4 [gb3,db4]@4 [bb3,eb4]@4 [db4,f4]@8 [c4,eb4]@8 [db4,f4]@8 [eb4,gb4]@8 ~@4 [bb3,db4]@4 ~@4 [bb3,db4]@4 ~@2]/3", // Bb Gb Fm Eb5 Gb5 Eb5 Db Cm …
  AK: "[~@2 [bb3,db4]@3 [bb3,db4] [bb3,db4]@4 [db4,gb4] [db4,f4] ~ db4 db4@4 [db4,eb4]@4 bb3@4 [bb3,c4]@4 [a3,c4]@10 ~@2 f3@3 c4 bb3@8 a3@4 f3@3 db4 c4@8 bb3@4 f3@3 eb4 db4@4 c4@2 ~ f3 eb4@4 db4@2 ~ f3 [db4,gb4]@12 gb4!2 ~ gb4 a3@8 gb4@6 a3@2 gb4@2]/4", // Bbm Gb5 Db Dbsus2 Bbsus2 Am Gb5
  AL: "[~ [gb3,e4]@2 [gb3,eb4]@2 [gb3,eb4]@2 [f3,g3]@4 [eb3,gb3]@4 f3@8 bb2@6 ~@2 [eb3,g3]@4 [db3,gb3]@4 [db3,f3]@4 ~@4 [eb3,g3]@4 [db3,gb3]@4 [db3,f3]@4 ~@4 [db3,f3]@4 ~@4 [bb2,db3]@12 ~@4 [bb3,d4]@4 [bb3,c4]@4 [bb3,c4]]/6", // Gb7 Ebm Fsus2 Ebm Eb Gb5 Db Eb …
  AM: "~ [bb3,c4] ~ [bb3,d4]@2 ~@2 [c4,f4]@4 [c4,eb4]@4 [c4,f4]", // Bbsus2 Bb F5 Cm F5
  AN: "~ [c4,eb4] ~ [c4,f4]@2 ~@2 [c4,eb4]@6 ~@2 [a3,d4]", AO: "~ [a3,d4] ~ [a3,d4]@4 [bb3,d4]@4 [bb3,c4]@4 [bb3,c4]",
  AP: "~@2 [c4,eb4]@2 ~@2 [c4,f4]@4 ~@4 [eb4,g4]@8 [eb4,a4]@8 [eb4,g4] ~", // Cm F5 Eb Ebdim Eb
  AQ: "[~@2 [d4,f4]@8 ~@4 d4@6 g4@2 f4@4 d4@2 f4@2 c4@4 bb3!2 ~ bb3 f3@4 g3@4 ab3@8 ab3@6 ab3@2 ab3@4 g3@4 ~@8 c4@6 f4@2 eb4@4 c4@2 eb4@2 bb3@4 ab3!2 ~ ab3 eb3@4 f3@4 gb3@8 gb3@6 gb3@2 gb3@2]/4", // Dm
  AR: "[~@2 f3@4 ~@12 eb3@4 bb3@4 ~@2 bb3@2 ~@4 eb3@4 ~@4 bb3 b3 ~ eb4 ~@4 eb3@4 ~@4 eb3@4 ~@4 e3@8 c4@4 ~@4 e3@4 b3@4 ~@2 b3@2 ~@4 e3@4 ~@4 b3 c4 ~ e4 ~@4 e3@4 ~@4 e3@4 ~@4 f3@8 db4@4 [f4,a4]@6 [e4,a4]@2 [d4,g4]@8 [d4,f4]@6 [c4,f4]@2 [bb3,e4]@8 [a3,e4]@4 [a3,d4]@4 [g3,bb3]@8 ab3@4 g3@4 [d3,gb3]@8 [f3,c5]@6 c5@2 bb4@4 g4@2 bb4@2 [d3,bb4]@2, ~@7 bb3@4 ~@2 eb3@2 bb3@4 ~@4 bb3@4 c4@4 db4@6 ~@2 b3@4 ~@2 e3@2 b3@4 ~@4 b3@4 db4@4 d4@6 ~@26 eb3@4 ~@8 g3@4 ~, ~@214 c5 ~@9]/7", // F A5 G5 Dm F5 Bbdim A5 D5 …
  AS: "[a4@2 g4@2 a4@2 [eb3,g4]@8 ~@4 c4@5 [a3,eb4]@6 [f3,d4]@8 ~@4 d4@5 ~@6 bb3@6 eb4@15 ~ d4@18 ~@4, ~@6 a4 ~@7 bb3@9 ~@14 c4@15 ~@6 bb3@33 ~@5, ~@23 f4@6 ~@19]/3", // Eb Adim Dm
})).s("gm_french_horn").gain(0.13).pan(0.4)

// bass · tuba
const bass = note(`<
  A ~ B ~ C@2 D E F G H I J K L M N O P@2 Q P ~ R ~ S ~ T U V W X ~@2 Y Z@2 AA@2 AB@2 AC@4 AD@5 AE@6 AF AG AH AI AJ AK
  AL AM AN AO AP AQ AR AS ~ AT@2 AU@2
>`.pickRestart({
  A: "bb1!3 ~", B: "db2!3 ~", C: "f2@7 ~", D: "db2@2 gb2@2 f2 eb2 bb2 c3", E: "f3 f2@2 f2@2 f2@2 f2",
  F: "bb1@8 bb1@8 bb1@8 ~@4 gb3 f3 ~ db3", G: "db3@4 eb3@4 bb2@4 c3@4 f2@10 ~@2 f2@3 c3",
  H: "bb2@8 a2@4 f2@3 db3 c3@8 bb2@4 f2@3 eb3", I: "db3@4 c3@2 ~ f2 eb3@4 db3@2 ~ f2 f3@12 gb2!2 ~ gb2",
  J: "a2@4 gb3@3 a2@2 ~ e3@2 b2@2 bb2@2", K: "g2 gb2 f2@2", L: "bb1@12 ~@4 eb2@4 ~@2 f2 ~ gb2@2 ~@4 ab2 ~",
  M: "bb2@8 ~@8 eb2@4 ~@2 f2 ~ gb2@2 ~@4 ab2 ~", N: "bb2 ~ bb2 ~", O: "bb1@3 ~", P: "bb2@4 bb2@4 bb2 ~ bb2 ~ bb2@2 ~@2",
  Q: "ab2@6 ~@2 d3 ~ d3 ~ d3@4", R: "c3@8 f3@8 f3 ~@3 bb2@8 ~@4", S: "db3@8 ab2@6 bb2@2 c3@3 ~ c2@3 ~@9",
  T: "b2@8 gb2@6 ab2@2 bb2@3 ~ bb1@3 ~@9", U: "~ eb2 ~ eb2 ~ eb2 ~@2", V: "~ eb2 ~ ab2 ~ db2@2 ~",
  W: "~ e2 ~ e2 ~ e2 ~@2", X: "~ e2 ~ a2 ~ d2@2 ~", Y: "f2 g2 d2 eb2",
  Z: "[g2@4 eb2@5 c2@6 d2@4 eb2@4 f2@21 ~ bb2@4 a2@5 ab2@5 ~ g2@4]/2", AA: "[~ gb2@6 f2@6 ~ bb1@8 bb1@8 bb1@8 ~@26]/2",
  AB: "[~@7 db2@4 db2@4 db2@4 ~@13]/2",
  AC: "[~@7 f2@14 ~@2 f2@14 ~@2 db2@4 gb2@4 f2@2 eb2@2 bb2@2 c3@2 f3@2 f2@4 f2@3]/4",
  AD: "[~@2 f2@8 f2@4 bb1@8 bb1@8 bb1@8 ~@4 gb3 f3 ~ db3 db3@4 eb3@4 bb2@4 c3@4 f2@10 ~@2 f2@3 c3 bb2@8 a2@4 f2@3 db3 c3@8 bb2@4 f2@3 eb3 db3@4 c3@2 ~ f2 eb3@4 db3@2 ~ f2 f3@12 gb2!2 ~ gb2 a2@8 gb3@6 a2@4]/5",
  AE: "[~@2 e3@4 b2@4 bb2@4 g2@8 gb2@8 f2@16 bb1@12 ~@4 eb2@4 ~@2 f2 ~ gb2@2 ~@4 ab2 ~ bb2@8 ~@8 eb2@4 ~@2 f2 ~ gb2@2 ~@4 ab2 ~ bb2@8 ~@8 bb2@8 ~@8 bb1@24 ~@8 bb2@8 bb2@8 bb2@2]/6",
  AF: "~ bb2 ~ bb2@2 ~@2 bb2@4 bb2@4 bb2", AG: "~ bb2 ~ bb2@2 ~@2 ab2@6 ~@2 d3", AH: "~ d3 ~ d3@4 bb2@4 bb2@4 bb2",
  AI: "~ bb2 ~ bb2@2 ~@11", AJ: "~@14 c3@8 f3@8 f3 ~", AK: "~ bb2@4 ~@11", AL: "~@7 db3@4 ab2@3 bb2 c3",
  AM: "~@2 c2@3 ~@27", AN: "~@7 b2@4 gb2@3 ab2 bb2", AO: "~@2 bb1@3 ~@13 eb2@4 ~@4 eb2@4 ~@2",
  AP: "~ eb2@2 ~@6 eb2@2 ~@2 ab2@2 ~", AQ: "~ db2@4 ~@4 e2@2 ~@2 e2@2 ~", AR: "~ e2@2 ~@6 e2@2 ~@2 a2@2 ~",
  AS: "~ d2@4 ~@11", AT: "[~@14 f2@8 g2@8 d2@8 eb2@8 g2@4 eb2@5 c2@6 d2@3]/2",
  AU: "[~ eb2@4 f2@21 bb2@5 a2@5 ab2@5 ~ g2@5 gb2@6 f2@6 ~@5]/2",
})).s("gm_tuba").gain(0.2).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B C A D E ~@11 F ~ F ~ G ~ G ~@13 H I J H ~ K ~@11 J L J L M L M L ~@5
>`.pickRestart({
  A: "x!3 ~", B: "~ x!4 ~@3", C: "x!2", D: "~@5 x!3", E: "x", F: "x ~@3 x!2 ~@2", G: "~@3 x ~ x ~@2",
  H: "~@7 x ~@3 x ~@3 x", I: "~@9 x ~ x ~ x ~ x", J: "~@7 x ~@7 x", K: "~ x ~ x ~ x ~ x ~@8", L: "~ x ~@14",
  M: "~@13 x ~@2",
})).gain(0.45)

// drums · kick · soft notes
// … 37 more lines