Strudelify

Unter dem Doppeladler

Wagner

KeyE♭ majorTempo110 bpm
0:00/0:00
// Unter dem Doppeladler — Wagner
// 110 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@2 A B C ~ A D E F G F H F I J K F L M H F N O P Q R S T U V W X Y Z AA T AB AC AD AE AF AG AH AI AJ AK AL AM AN AO
  AN AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC AH@2 BD BE BF BG AT BH ~ A BI BJ ~ A BK E BL BM BN BO F BP O BQ BL BR M H
  M BS BT P Y BU BV BW BX BY BZ CA CB Z CC T BX CD AD CE
>`.pickRestart({
  A: "~@8 eb2 ~ eb2!2 eb2@4", B: "db2 ~ db2!2 db2@3 ~ c2@4 g1@2 a1@2", C: "f1@3 ~ f1@3 ~@9",
  D: "d2@2 eb2@2 f1@2 g1@2 c2@3 ~ f1@4", E: "bb1 ~@3 f1 ~ bb1 ~", F: "f1@3 ~ bb1@3 ~ eb2@3 ~ bb1@3 ~",
  G: "eb2@3 ~ bb1@3 ~ f1@2 ~@2 bb1@2 ~@2", H: "eb2@4 ~@4 f1@3 ~ bb1@3 ~", I: "eb2@3 ~ eb1@3 ~ f1@3 ~ bb1@3 ~",
  J: "f1@3 ~ f1@4 bb1@2 ~@2 bb1 ~ bb1 ~", K: "bb1@2 ~@6 f1@3 ~ bb1@3 ~", L: "eb2@3 ~ bb1@3 ~ f1@3 ~ bb1@3 ~",
  M: "f1@3 ~ bb1@3 ~ eb2@3 ~ bb1@4", N: "eb2@3 ~ eb1@2 ~@2 f1@3 ~ bb1@2 ~@2", O: "f1@3 ~ f1@4 bb1 ~@3 bb1 ~ bb1 ~",
  P: "bb1 ~ bb1@2 c2@2 d2@2 eb2@4 bb1@4", Q: "g1@4 d2@2 eb2@2 c2@4 bb1@3 ~", R: "g1@5 ~ g1 ~ bb1@3 ~ ab1@3 ~",
  S: "f1@3 ~ bb1@3 ~ g1@7 ~", T: "eb2@5 ~ bb1@2 eb2@2 ~ eb2 bb1@2 ~ bb1", U: "g1@2 ~ g1 d2@2 eb2@2 c2@4 bb1@3 ~",
  V: "g1@5 ~ g1 ~ bb1@2 ~ bb1 ab1@2 ~ ab1", W: "f1@2 ~ f1 bb1@2 ~ bb1 eb2@2 ~@2 eb2 ~@3",
  X: "eb2 ~ bb1@2 c2@2 d2@2 eb2@4 bb1@4", Y: "g1@2 d2 eb2 c2@2 bb1@2", Z: "g1@2 ~ g1 bb1@2 ab1@2", AA: "f1 bb1 g1@2",
  AB: "g1@2 ~ g1 d2@2 eb2@2 c2@4 bb1@4", AC: "g1@5 ~ g1 ~ bb1@3 bb1 ab1@2 ~ ab1",
  AD: "f1@2 ~ f1 bb1@2 ~ bb1 eb2@2 ~@2 eb2@2 ~@2", AE: "eb2 ~ eb2!2 eb2@2 ~@2 ab1@2 ~@2 eb1@2 ~@2",
  AF: "ab1@2 ~@2 eb1@2 ~@2 ab1@2 ~@2 eb1@3 ~", AG: "ab1@2 ~@2 eb1@3 ~ ab1@3 ~ eb1@2 ~@2",
  AH: "ab1@3 ~ eb1@3 ~ ab1@3 ~ eb1@3 ~", AI: "ab1@3 ~ eb1@2 ~@2 bb1@3 ~ eb1@3 ~", AJ: "bb1@3 ~ eb1@3 ~ bb1@3 ~ eb1@3 ~",
  AK: "bb1@3 ~ eb1@2 ~@2 bb1@3 ~ eb1@2 ~@2", AL: "bb1@3 ~ eb1@2 ~@2 bb1@3 ~ eb1@3 ~",
  AM: "bb1@3 ~ eb1@3 ~ ab1@3 ~ eb1@2 ~@2", AN: "ab1@2 ~@2 eb1@3 ~ ab1@3 ~ eb1@3 ~",
  AO: "ab1@3 ~ eb1@3 ~ ab1@3 ~ eb1@2 ~@2", AP: "ab1@3 ~ ab1@2 ~@2 db2@3 ~ ab1@3 ~", AQ: "db2@3 ~@5 bb1@3 ~ bb1@3 ~",
  AR: "bb1@3 ~ bb1@3 ~ eb2@3 ~ eb2@3 ~", AS: "eb2@3 ~ eb2@3 ~ eb2@3 ~ eb2@3 ~",
  AT: "eb2@3 ~ eb2@2 ~@2 ab1@2 eb2@2 c2@2 eb2@2", AU: "ab1 ~@3 ab1 ~ eb1 ~", AV: "ab1 ~ eb1 ~ ab1 ~ eb1 ~",
  AW: "ab1@2 ~@2 eb1@2 ~@2 ab1@3 ~ eb1@3 ~", AX: "ab1@3 ~ eb1@2 ~@2 bb1@3 ~ eb1@2 ~@2",
  AY: "bb1@2 ~@2 eb1@3 ~ bb1@3 ~ eb1@3 ~", AZ: "bb1@3 ~ eb1@3 ~ bb1@3 ~ eb1@2 ~@2",
  BA: "bb1@2 ~@2 eb1@2 ~@2 bb1@3 ~ eb1@3 ~", BB: "bb1@3 ~ eb1@3 ~ ab1@3 ~ eb1@3 ~",
  BC: "ab1@3 ~ eb1@2 ~@2 ab1@3 ~ eb1@3 ~", BD: "ab1@3 ~ ab1@3 ~ db2@3 ~ ab1@3 ~", BE: "db2@3 ~@5 bb1@2 ~@2 bb1@2 ~@2",
  BF: "bb1@2 ~@2 bb1@3 ~ eb2@3 ~ eb2@3 ~", BG: "eb2@3 ~ eb2@2 ~@2 eb2@2 ~@2 eb2@3 ~", BH: "ab1 ~@3 ab1@2 ~@10",
  BI: "db2 ~ db2!2 db2@3 ~ c2@3 ~ g1@2 a1@2", BJ: "f1@3 ~ f1@2 ~@10", BK: "d2@2 eb2@2 f1@2 g1@2 eb2@3 ~ f1@3 ~",
  BL: "f1@2 ~@2 bb1@3 ~ eb2@3 ~ bb1@3 ~", BM: "eb2@3 ~ bb1@2 ~@2 f1@3 ~ bb1@2 ~@2",
  BN: "f1@3 ~ bb1@2 ~@2 eb2@3 ~ bb1@4", BO: "eb2@3 ~@5 f1@2 ~@2 bb1@3 ~", BP: "eb2@3 ~ eb1@3 ~ f1@3 ~ bb1@2 ~@2",
  BQ: "bb1@3 ~@5 f1@2 ~@2 bb1@3 ~", BR: "eb2@3 ~ bb1@2 ~@2 f1@3 ~ bb1@3 ~", BS: "eb2@3 ~ bb1@3 ~ f1@3 ~ bb1@2 ~@2",
  BT: "f1@3 ~ f1@3 ~ bb1@3 ~ bb1 ~ bb1 ~", BU: "g1@5 ~ g1@2 bb1@4 ab1@4", BV: "f1@4 bb1@4 g1@7 ~",
  BW: "eb2@6 bb1@2 eb2@2 ~ eb2 bb1@2 ~ bb1", BX: "g1@2 ~ g1 d2@2 eb2@2 c2@3 ~ bb1@4",
  BY: "g1@5 ~ g1@2 bb1@3 bb1 ab1@2 ~ ab1", BZ: "f1@2 ~ f1 bb1@2 ~ bb1 eb2 ~@3 eb2@2 ~@2",
  CA: "eb2 ~ bb1@2 c2@2 d2@2 eb2@3 ~ bb1@4", CB: "g1@3 ~ d2 ~ eb2 ~ c2@3 ~ bb1@3 ~", CC: "f1@3 ~ bb1@4 g1@6 ~@2",
  CD: "g1@4 ~@2 g1 ~ bb1@2 ~ bb1 ab1@2 ~ ab1", CE: "eb2 ~ eb2!3 ~@11",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · french horn · "FR.HORN"
const french_horn = note(`<
  ~@8 A B C D E D F G H B C D I J F K L M N O P M Q R S M T O P M Q R U V W@2 X@2 Y@2 Z AA AB AC AD AE AF AG AH AI AJ AK
  AL AM AN AO AP@2 AQ@2 AD AR AS AT AU AV ~@7 A B AW J I J F K AX J AW J I J AY K L M N O P M AZ R BA M N O P M Q R U
>`.pickRestart({
  A: "~@10 [bb3,d4,ab4] ~@3 [bb3,d4,ab4] ~", B: "~@2 [bb3,d4,ab4] ~@3 [bb3,d4,ab4] ~@3 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~",
  C: "~@2 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~@3 [f4,ab4,bb4] ~@3 [f4,ab4,bb4] ~", // Eb Bb7
  D: "~@2 [f4,ab4,bb4] ~@3 [f4,ab4,bb4] ~@3 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~", // Bb7 Eb
  E: "[eb4,g4,bb4]@4 ~@6 [f4,ab4,bb4] ~@3 [f4,ab4,bb4] ~", // Eb Bb7
  F: "~@2 [eb4,g4,bb4] ~@3 [eb4,g4,c5] ~@3 [d4,f4,bb4] ~ [d4,f4,bb4]@3 ~", // Eb Cm Bb
  G: "~@2 [f4,a4,c5] ~ [f4,a4,c5]@3 ~ [d4,f4,bb4] ~ bb4!3 ~ bb4 ~", H: "bb4@3 ~@7 [bb3,d4,ab4] ~@3 [bb3,d4,ab4] ~",
  I: "[eb4,g4,bb4]@4 ~@6 [d4,ab4,bb4] ~@3 [d4,ab4,bb4] ~", // Eb Bb7
  J: "~@2 [d4,ab4,bb4] ~@3 [d4,ab4,bb4] ~@3 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~", // Bb7 Eb
  K: "~@2 [f4,a4,c5] ~ [f4,a4,c5]@2 ~@2 [d4,f4,bb4] ~ bb4!3 ~ bb4 ~", L: "bb4 ~@9 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~",
  M: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Eb
  N: "~@2 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~@3 [ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~", // Eb Bb7
  O: "~@2 [ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~@3 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~", // Bb7 Eb
  P: "~@2 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Eb
  Q: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~", // Eb Bb7
  R: "~@2 [ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~ [g4,bb4,eb5] ~ bb4!2 [g4,bb4,eb5] ~ bb4!2", // Bb7 Eb
  S: "[g4,eb5] ~@9 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Cm Eb
  T: "~@2 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~@3 [f4,ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~", // Eb Bb7
  U: "[g4,bb4,eb5] ~ [g4,bb4,eb5]!3 ~@11", V: "~@4 [c5,eb5]@3 ~ [c5,f5]@4 ab4@2 f5@2, ~@12 c5 ~ c5 ~",
  W: "[[c5,eb5]@4 c5@2 ab4@2 [c4,eb4]@10 ~@2 ab4@2 c5 ~ [ab3,c4,f4]@3 ~ [ab3,c4,eb4]@3 ~]/2", // Cm Fm Ab
  X: "[[c4,eb4,ab4]@3 eb5 [ab4,c5,f5]@3 ~ [db4,eb4,g4]@11 ~ eb5@4 [db5,f5]@4 db5@2 f5@2]/2", // Ab Fm Eb7 Db
  Y: "[[g4,db5,eb5]@3 ~ [bb4,db5]@2 [eb4,g4] ~ [g3,db4,eb4]@10 ~@2 g4@2 bb4@2 f4@4 eb4@3 ~]/2", // Eb7 Bbm Eb Eb7
  Z: "[eb4,g4]@3 ~ [g4,eb5]@3 ~ [eb4,ab4,c5]@8", AA: "~@4 [c5,eb5]@4 [c5,f5]@3 ~ ab4@2 [c5,f5]@2, ~@12 c5 ~@3",
  AB: "[c5,eb5]@4 c5@2 ab4 ~ [c4,eb4]@8", AC: "~@2 ab4 c5 f4@2 eb4@2", AD: "ab4@3 ~ [eb5,gb5]@4 [db5,f5]@8, ~ ab5@3",
  AE: "~@10 [bb4,d5,ab5] ~@3 [bb4,d5,ab5] ~", AF: "~@2 [bb4,d5,f5] ~@3 [bb4,d5,f5] ~@3 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~",
  AG: "~@2 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~@3 [g4,bb4,db5,eb5] ~@3 [g4,bb4,eb5] ~", // Ab Eb7 Eb
  AH: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~", // Eb Ab
  AI: "[ab4,c5,eb5] ~@3 [c5,eb5]@4 [c5,f5]@3 ~ [ab4,c5]@2 [c5,f5]@2", AJ: "[c5,eb5]@2 c5 ab4 [c4,eb4]@4",
  AK: "~@4 ab4@2 c5@2 [ab3,c4,f4]@4 [ab3,c4,eb4]@3 ~", AL: "[c4,eb4,ab4]@3 ~ [ab4,c5,f5]@3 ~ [db4,eb4,g4]@8",
  AM: "~@2 eb5@2 [db5,f5]@2 db5 f5", AN: "[g4,db5,eb5]@3 ~ [bb4,db5]@2 [eb4,g4] ~ [g3,db4,eb4]@8",
  AO: "~@4 g4@2 bb4@2 f4@4 eb4@3 ~",
  AP: "[[eb4,g4]@2 ~@2 [g4,eb5]@3 ~ [eb4,ab4,c5]@10 ~@2 [c5,eb5]@3 ~ [c5,f5]@3 ~ [ab4,c5] ~ [c5,f5] ~]/2", // Eb Cm Ab Cm F5 Ab F5
  AQ: "[[c5,eb5]@3 ~ c5@2 ab4 ~ [c4,eb4]@10 ~@2 ab4@2 c5@2 f4@4 eb4@4]/2", AR: "~@10 [ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~",
  AS: "~@2 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~", // Bb Ab
  AT: "~@2 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~", // Ab Eb
  AU: "~@2 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~ [eb4,ab4,c5] ~@3 eb5 db5 c5 bb4", AV: "ab4 ~ ab4!3 ~@11",
  AW: "~@2 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~@3 [d4,ab4,bb4] ~@3 [d4,ab4,bb4] ~", // Eb Bb7
  AX: "bb4 ~@9 [d4,ab4,bb4] ~@3 [d4,ab4,bb4] ~", // Bb7
  AY: "~@2 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~@3 [d4,f4,bb4] ~ [d4,f4,bb4]@3 ~", // Eb Bb
  AZ: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [f4,ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~", // Eb Bb7
  BA: "[g4,bb4,eb5] ~@9 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Eb
})).s("gm_french_horn").gain(0.5).pan(0.3)

// chords · trumpet
const trumpet = note(`<
  A B C D E F G H I J@2 K L M@2 N O P Q R@2 P S T U V W X Y V Z AA AB V W X Y V Z AA AC AD@3 AE AF@3 AG AH@3 AI AJ AK AL
  AM AN AH@2 AO AF@3 AG AH@3 AI AJ AK AP AQ AR F AS D E F AT AU AV P AW AX@2 AY@2 T AZ P BA BB@2 AY@2 BC BD V W X Y V Z
  AA AB V W X Y V Z AA BE
>`.pickRestart({
  A: "~@8 [bb3,bb4] ~ [bb3,bb4]!2 [bb3,bb4]@3 ~", // Bb
  B: "[bb3,bb4] ~ [bb3,bb4]!2 [bb3,bb4]@3 ~ [g4,bb4,eb5] ~ [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~", // Bb Eb
  C: "[f4,bb4,d5] ~ [bb3,bb4]!2 [bb3,bb4]@2 ~@2 [gb4,bb4,gb5] ~ [gb4,bb4,gb5]!2 [gb4,bb4,gb5]@3 ~", // Bb Gb
  D: "[f4,bb4,f5] ~ [f4,bb4,f5]!2 [f4,bb4,f5]@3 ~ c4 d4 e4 f4 g4 ~ a4 ~", // Bb5
  E: "f4 ~@3 f5 ~@3 [bb3,bb4] ~ [bb3,bb4]!2 [bb3,bb4]@3 ~", // Bb
  F: "[bb3,bb4] ~ [bb3,bb4]!2 [bb3,bb4]@4 [g4,bb4,eb5] ~ [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~", // Bb Eb
  G: "[f4,bb4,d5] ~ [bb3,bb4]!2 [bb3,bb4]@3 ~ [g4,bb4,g5] ~ [g4,bb4,g5]!2 [g4,bb4,g5]@2 ~@2", // Bb Gm
  H: "[f3,f4]@2 [g3,g4]@2 [a3,a4]@2 [bb3,bb4]@2 [c4,c5] ~@3 f4@2 ~@2, ~@12 f3 ~@3", // F G A Bb C
  I: "[bb3,d4,bb4] ~@3 [c5,eb5] ~@2 [c5,eb5] [bb4,d5]@2 ~ [a4,db5] [bb4,d5]@3 [a4,db5]", // Bb Cm Bb A Bb A
  J: "[[bb4,d5]@3 [a4,db5] [bb4,d5]@3 [ab4,c5] [g4,bb4]@3 [gb4,a4] [g4,bb4]@6 ~@2 bb4 c5 ~ g4 ab4 bb4 ~ d5 bb5@3 ~]/2", // Bb A Bb Ab Gm Gbm Gm
  K: "bb5 d5 ~ ab5 g5 d5 ~ f5 eb5 g4 ~ c5 bb4@4",
  L: "~@4 [c5,eb5] ~@2 [c5,eb5] [bb4,d5]@3 [a4,db5] [bb4,d5]@3 [a4,db5]", // Cm Bb A Bb A
  M: "[[bb4,d5]@3 [a4,db5] [bb4,d5]@3 [ab4,c5] [g4,bb4]@3 [gb4,a4] [g4,bb4]@6 ~@2 bb4 c5 ~ g4 f4 bb4 ~ d5 f5@3 ~]/2", // Bb A Bb Ab Gm Gbm Gm
  N: "f4 a4 ~ c5 [a4,f5]@3 ~ [bb3,bb4] ~ [bb3,bb4]!3 ~ [bb3,bb4] ~", // Dm Bb
  O: "bb4@2 ~@2 [c5,eb5] ~@2 [c5,eb5] [bb4,d5]@2 ~ [a4,db5] [bb4,d5]@3 [a4,db5], bb3 ~@15", // Cm Bb A Bb A
  P: "[bb4,d5]@3 [a4,db5] [bb4,d5]@3 [ab4,c5] [g4,bb4]@3 [gb4,a4] [g4,bb4]@4", // Bb A Bb Ab Gm Gbm Gm
  Q: "~@4 bb4 c5 ~ g4 ab4 bb4 ~ d5 [d5,bb5]@4", // Gm
  R: "[bb5 ~ d5 ab5 g5 d5 ~ f5 eb5 g4 c5 ~ [g4,bb4]@6 ~@2 [c5,eb5]@2 ~ [c5,eb5] [bb4,d5]@2 ~ [a4,db5] [bb4,d5]@3 [a4,db5]]/2", // Gm Cm Bb A Bb A
  S: "~@4 bb4 c5 ~ g4 f4 bb4 ~ d5 f5@3 ~", T: "f4 a4 ~ c5 f5@4 [bb3,bb4] ~ [bb3,bb4]!3 ~ [bb3,bb4] ~",
  U: "[bb3,bb4]@2 ~@8 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Bb Eb
  V: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Eb
  W: "~@2 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~@3 [f4,ab4,bb4,d5] ~@3 [f4,ab4,bb4,d5] ~", // Eb Bb7
  X: "~@2 [f4,ab4,bb4,d5] ~@3 [f4,ab4,bb4,d5] ~@3 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~", // Bb7 Eb
  Y: "~@2 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Eb
  Z: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [f4,ab4,bb4,d5] ~@3 [f4,ab4,bb4,d5] ~", // Eb Bb7
  AA: "~@2 [f4,ab4,bb4,d5] ~@3 [f4,ab4,bb4,d5] ~ [g4,bb4,eb5] ~ bb4!2 [g4,bb4,eb5] ~ bb4!2", // Bb7 Eb
  AB: "[g4,bb4,eb5] ~@9 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Eb
  AC: "[g4,bb4,eb5] ~ [g4,bb4,eb5]!3 ~@5 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~", // Eb Ab
  AD: "~@2 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~", // Ab
  AE: "~@2 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@3 [db4,eb4,g4] ~@3 [db4,eb4,g4] ~", // Ab Eb7
  AF: "~@2 [db4,eb4,g4] ~@3 [db4,eb4,g4] ~@3 [db4,eb4,g4] ~@3 [db4,eb4,g4] ~", // Eb7
  AG: "~@2 [db4,eb4,g4] ~@3 [db4,eb4,g4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~", // Eb7 Ab
  AH: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~", // Ab
  AI: "~@2 [c4,eb4,gb4,ab4] ~@3 [c4,eb4,gb4,ab4] ~@3 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~", // Ab7 Db
  AJ: "[db4,f4,ab4] ~ [ab4,ab5] ~ [ab4,ab5] ~ [ab4,ab5] ~ [ab4,d5,f5,ab5]@3 ~ [ab4,d5,f5,ab5]@3 ~", // Db Ab Ddim
  AK: "[g4,d5,g5]@3 ~ [f4,d5,f5]@3 ~ [ab4,c5,f5]@8", AL: "~@2 eb5@2 c5@2 ab4@2 eb4@4 [f4,db5]@3 ~",
  AM: "[eb4,c5]@3 ~ [db4,bb4]@3 ~ [c4,ab4]@8", AN: "~@10 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~",
  AO: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [db4,eb4,g4] ~@3 [db4,eb4,g4] ~", // Ab Eb7
  AP: "~@2 eb5@2 c5@2 ab4@2 eb4@2 ~@2 [f4,db5]@3 ~", AQ: "[eb4,c5]@3 ~ [db4,bb4]@3 ~ [c4,ab4]@4 eb5 db5 c5 bb4",
  AR: "[eb4,ab4] ~ [c4,ab4]!3 ~@3 [bb3,bb4] ~ [bb3,bb4]!2 [bb3,bb4]@3 ~", // Ab5 Fm Bb
  AS: "[f4,bb4,d5] ~ [bb3,bb4]!2 [bb3,bb4]@2 ~ bb4 [gb4,bb4,gb5] ~ [gb4,bb4,gb5]!2 [gb4,bb4,gb5]@3 ~", // Bb Gb
  AT: "[f4,bb4,d5] ~ [bb3,bb4]!2 [bb3,bb4]@2 ~@2 [g4,bb4,g5] ~ [g4,bb4,g5]!2 [g4,bb4,g5]@2 ~@2", // Bb Gm
  AU: "[f3,f4]@2 g3@2 a3@2 [bb3,bb4]@2 [c4,c5] ~@3 [f3,f4] ~@3, ~@2 g4 ~ a4 ~@11", // F Bb C F
  AV: "[bb3,bb4] ~@3 [c5,eb5] ~@2 [c5,eb5] [bb4,d5]@3 [a4,db5] [bb4,d5]@3 [a4,db5]", // Bb Cm Bb A Bb A
  AW: "~@4 bb4 c5 ~ g4 ab4 bb4 ~@2 bb5@3 ~, ~@11 d5@5",
  AX: "[bb5 d5 ~ ab5 g5 d5 ~ f5 eb5 g4 ~ c5 [g4,bb4]@6 ~@2 [c5,eb5]@2 ~ [c5,eb5] [bb4,d5]@3 [a4,db5] [bb4,d5]@3 [a4,db5]]/2", // Gm Cm Bb A Bb A
  AY: "[[bb4,d5]@3 [a4,db5] [bb4,d5]@3 [ab4,c5] [g4,bb4]@3 [gb4,a4] [g4,bb4]@6 ~@2 bb4 c5 ~ g4 f4 bb4 ~ d5 f5@4]/2", // Bb A Bb Ab Gm Gbm Gm
  AZ: "[bb3,bb4] ~@3 [c5,eb5]@2 ~ [c5,eb5] [bb4,d5]@3 [a4,db5] [bb4,d5]@3 [a4,db5]", // Bb Cm Bb A Bb A
  BA: "~@4 bb4 c5 ~ g4 ab4 bb4 ~ d5 bb5@3 ~",
  BB: "[bb5 d5 ~ ab5 g5 d5 ~ f5 eb5 g4 c5 ~ [g4,bb4]@6 ~@2 [c5,eb5]@2 ~ [c5,eb5] [bb4,d5]@2 ~ [a4,db5] [bb4,d5]@3 [a4,db5]]/2", // Gm Cm Bb A Bb A
  BC: "~ a4 ~ c5 f5@3 ~ [bb3,bb4] ~ [bb3,bb4]!3 ~ [bb3,bb4] ~, f4 ~@7", // Bb
  BD: "[bb3,bb4] ~@9 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", BE: "[g4,bb4,eb5] ~ [g4,bb4,eb5]!3 ~@11",
})).s("gm_trumpet").gain(0.5).pan(0.7)

// bass · tuba
const bass_2 = note(`<
  ~@2 A B C ~ A D E ~@15 F G H I J K L M N O P Q R S T M U ~@28 V W X Y Z ~ A AA C ~ AB AC AD ~@15 AE O AF AG R AH L AI
  N G AF I AJ AH AK M AL
>`.pickRestart({
  A: "~@8 eb2 ~ eb2!2 eb2@4", B: "db2 ~ db2!2 db2@3 ~ c2@3 ~ g2@2 a2@2", C: "f2 ~@3 f1@2 ~@10",
  D: "d2@2 eb2@2 f2@2 g2 ~ eb2@2 ~@2 f2@2 ~@2", E: "bb1 ~@7", F: "~ bb1 c2 d2 eb2@2 bb1@2",
  G: "g2@4 d2 ~ eb2 ~ c3@4 bb2@4", H: "g2@4 ~@2 g2 ~ bb2@3 ~ ab2@3 ~", I: "f2@3 ~ bb2@4 g2@8",
  J: "eb2@4 ~@2 bb1@2 eb2@2 ~ eb2 bb1@2 ~ bb1", K: "g2@2 ~ g2 d2@2 eb2@2 c3@4 bb2@3 ~",
  L: "g2@4 ~@2 g2@2 bb2@2 ~ bb2 ab2@2 ~ ab2", M: "f2@2 ~ f2 bb2@2 ~ bb2 eb2 ~@3 eb2 ~@3",
  N: "eb2 ~ bb1@2 c2@2 d2@2 eb2@4 bb1@3 ~", O: "g2@4 d2 ~ eb2 ~ c3@4 bb2@3 ~", P: "g2@4 ~@2 g2@2 bb2@3 ~ ab2@4",
  Q: "f2 bb2 g2@2", R: "eb2@5 ~ bb1@2 eb2@2 ~ eb2 bb1@2 ~ bb1", S: "g2@2 ~ g2 d2 ~ eb2 ~ c3@3 ~ bb2@4",
  T: "g2@5 ~ g2 ~ bb2@2 ~ bb2 ab2@2 ~ ab2", U: "eb2 ~ eb2 ~ eb2 ~@11", V: "~@4 bb1 ~ bb1 ~",
  W: "bb1@2 ~@2 bb1@2 ~@2 eb2@2 ~@2 eb2 ~@3", X: "eb2 ~@3 eb2 ~@3 eb2 ~@3 eb2 ~@3",
  Y: "eb2 ~@3 eb2 ~@3 ab2 ~@3 eb2 ~@3", Z: "ab2 ~@3 ab1 ~@11", AA: "db2 ~ db2!2 db2@4 c2@3 ~ g2@2 a2@2",
  AB: "~@8 eb2 ~ eb2!2 eb2@3 ~", AC: "d2 eb2 f2 g2 eb2 ~ f2 ~", AD: "bb1 ~@15", AE: "~@2 bb1@2 c2 ~ d2 ~ eb2@3 ~ bb1@4",
  AF: "g2@4 ~@2 g2@2 bb2@3 ~ ab2@3 ~", AG: "f2@3 ~ bb2@3 ~ g2@7 ~", AH: "g2@2 ~ g2 d2 ~ eb2 ~ c3@4 bb2@4",
  AI: "f2@2 ~ f2 bb2@2 ~ bb2 eb2@2 ~@2 eb2 ~@3", AJ: "eb2@5 ~ bb1@2 eb2@2 ~ eb2 bb1 ~@2 bb1",
  AK: "g2@5 ~ g2@2 bb2@2 ~ bb2 ab2@2 ~ ab2", AL: "eb2 ~ eb2 ~ eb2@2 ~@10",
})).s("gm_tuba").gain(0.46).pan(0.3)

// other · glockenspiel · "GLOCKENSPL"
const glockenspiel = note(`<
  ~@16 A B C D A B E F G ~@7 H I J K L M N O P ~@12 Q R S T ~@12 Q R S U V ~@15 A B W D A B X F G ~@7 H I J K L M N O Y
>`.pickRestart({
  A: "~@4 eb6 ~@2 eb6 d6 ~@2 db6 d6 ~@2 db6", B: "d6 ~@2 db6 d6 ~@2 c6 bb5 ~@2 a5 bb5 ~@3",
  C: "~@4 bb5 c6 ~ g5 ab5 bb5 ~ d6 bb6 ~@3", D: "bb6 d6 ~ ab6 g6 d6 ~ f6 eb6 g5 ~ c6 bb5 ~@3",
  E: "~@4 bb5 c6 ~ g5 f5 bb5 ~ d6 f6 ~@3", F: "f5 a5 ~ c6 f6 ~@3 bb5 ~ bb5!3 ~ bb5 ~", G: "bb5 ~@15",
  H: "~@2 bb4 ~ c5 ~ d5 ~ eb5 ~@3 bb4 ~@3", I: "g5 ~@3 d5 ~ eb5 ~ c6 ~@3 bb5 ~@3", J: "g5 ~@5 g5 ~ bb5 ~@3 ab5 ~@3",
  K: "f5 ~@3 bb5 ~@3 g5 ~@7", L: "eb5 ~@5 bb4 ~ eb5 ~@2 eb5 bb4 ~@2 bb4", M: "g5 ~@2 g5 d5 ~ eb5 ~ c6 ~@3 bb5 ~@3",
  N: "g5 ~@5 g5 ~ bb5 ~@2 bb5 ab5 ~@2 ab5", O: "f5 ~@2 f5 bb5 ~@2 bb5 eb5 ~@3 eb5 ~@3", P: "eb5 ~@15",
  Q: "~@2 [ab5,ab6] ~ [ab5,ab6] ~ [ab5,ab6] ~ [ab5,ab6] ~@3 [ab5,ab6] ~@3", R: "[g5,g6] ~@3 [f5,f6] ~@3 [f5,f6] ~@7",
  S: "~@2 eb6 ~ c6 ~ ab5 ~ eb5 ~@3 db6 ~@3", T: "c6 ~@3 bb5 ~@3 ab5 ~@7", U: "c6 ~@3 bb5 ~@3 ab5 ~@3 eb6 db6 c6 bb5",
  V: "ab5 ~@15", W: "~@4 bb5 c6 g5 ~ ab5 bb5 ~ d6 bb6 ~@3", X: "~@4 bb5 c6 g5 ~ f5 bb5 ~ d6 f6 ~@3",
  Y: "eb5 ~ eb5!3 ~@11",
})).s("gm_glockenspiel").gain(0.36).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C ~ A D@2 E@7 D E@7 D E@7 D E@20 D E@3 D E@11 D E@3 F ~ A B C ~ A D@2 E@7 D E@3 D E@3 D E@7 D E@7 C
>`.pickRestart({
  A: "~ x", B: "x ~@3 x ~ x!2", C: "x!2 ~@2", D: "x ~ x!2", E: "x!4", F: "x!3 ~",
})).gain(0.71)

// … 28 more lines