Strudelify
Unter dem Doppeladler cover art

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, A@4 for four bars: 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 E F K F H F L M N O P Q R S T U V O P Q R S T W X Y@3 Z AA@3 AB Y@3 AC AD AE AF AG AH
  Y AI Z AA@3 AB Y@3 AC AJ AK AF AG AL ~ A AM C ~ A AN E AO K F AP F I M E F K F H F G J N O P Q AQ S AR W V AS P Q R S
  T W AT
>`.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: "eb2@3 ~ bb1@3 ~ f1@3 ~ bb1@3 ~", L: "eb2@3 ~ eb1@2 ~@2 f1@3 ~ bb1@2 ~@2",
  M: "f1@3 ~ f1@4 bb1 ~@3 bb1 ~ bb1 ~", N: "bb1 ~ bb1@2 c2@2 d2@2 eb2@4 bb1@4", O: "g1@2 d2 eb2 c2@2 bb1@2",
  P: "g1@2 ~ g1 bb1@2 ab1@2", Q: "f1@3 ~ bb1@3 ~ g1@7 ~", R: "eb2@5 ~ bb1@2 eb2@2 ~ eb2 bb1@2 ~ bb1",
  S: "g1@2 ~ g1 d2@2 eb2@2 c2@3 ~ bb1@4", T: "g1@5 ~ g1 ~ bb1@2 ~ bb1 ab1@2 ~ ab1",
  U: "f1@2 ~ f1 bb1@2 ~ bb1 eb2@2 ~@2 eb2 ~@3", V: "eb2 ~ bb1@2 c2@2 d2@2 eb2@4 bb1@4",
  W: "f1@2 ~ f1 bb1@2 ~ bb1 eb2@2 ~@2 eb2@2 ~@2", X: "eb2 ~ eb2!2 eb2@2 ~@2 ab1@2 ~@2 eb1@2 ~@2",
  Y: "ab1@3 ~ eb1@3 ~ ab1@3 ~ eb1@3 ~", Z: "ab1@3 ~ eb1@2 ~@2 bb1@3 ~ eb1@3 ~", AA: "bb1@3 ~ eb1@3 ~ bb1@3 ~ eb1@3 ~",
  AB: "bb1@3 ~ eb1@3 ~ ab1@3 ~ eb1@2 ~@2", AC: "ab1@3 ~ ab1@2 ~@2 db2@3 ~ ab1@3 ~", AD: "db2@3 ~@5 bb1@3 ~ bb1@3 ~",
  AE: "bb1@3 ~ bb1@3 ~ eb2@3 ~ eb2@3 ~", AF: "eb2@3 ~ eb2@3 ~ eb2@3 ~ eb2@3 ~",
  AG: "eb2@3 ~ eb2@2 ~@2 ab1@2 eb2@2 c2@2 eb2@2", AH: "ab1 ~@3 ab1 ~ eb1 ~", AI: "ab1@2 ~@2 eb1@3 ~ ab1@3 ~ eb1@3 ~",
  AJ: "db2@3 ~@5 bb1@2 ~@2 bb1@2 ~@2", AK: "bb1@2 ~@2 bb1@3 ~ eb2@3 ~ eb2@3 ~", AL: "ab1 ~@3 ab1@2 ~@10",
  AM: "db2 ~ db2!2 db2@3 ~ c2@3 ~ g1@2 a1@2", AN: "d2@2 eb2@2 f1@2 g1@2 eb2@3 ~ f1@3 ~",
  AO: "f1@2 ~@2 bb1@3 ~ eb2@3 ~ bb1@3 ~", AP: "eb2@3 ~@5 f1@2 ~@2 bb1@3 ~", AQ: "eb2@6 bb1@2 eb2@2 ~ eb2 bb1@2 ~ bb1",
  AR: "g1@5 ~ g1@2 bb1@3 bb1 ab1@2 ~ ab1", AS: "g1@3 ~ d2 ~ eb2 ~ c2@3 ~ bb1@3 ~", AT: "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 G K L M N O L P Q R L S N O L P Q T U V@2 W@2 X@2 Y U Z@2 AA AB AC AD AE AF AG@2 AH
  AI AJ AK Y U Z@2 AA AL AM AN AO AP ~@7 A B AQ J I J F G AR J AQ J I J AS G K L M N O L AT Q AU L M N O L P Q T
>`.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]@2 ~@2 [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: "bb4 ~@9 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Eb
  L: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Eb
  M: "~@2 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~@3 [ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~", // Eb Bb7
  N: "~@2 [ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~@3 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~", // Bb7 Eb
  O: "~@2 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Eb
  P: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~", // Eb Bb7
  Q: "~@2 [ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~ [g4,bb4,eb5] ~ bb4!2 [g4,bb4,eb5] ~ bb4!2", // Bb7 Eb
  R: "[g4,eb5] ~@9 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~", // Cm Eb
  S: "~@2 [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~@3 [f4,ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~", // Eb Bb7
  T: "[g4,bb4,eb5] ~ [g4,bb4,eb5]!3 ~@11", U: "~@4 [c5,eb5]@3 ~ [c5,f5]@4 ab4@2 f5@2, ~@12 c5 ~ c5 ~",
  V: "[[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
  W: "[[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
  X: "[[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
  Y: "[eb4,g4]@3 ~ [g4,eb5]@3 ~ [eb4,ab4,c5]@8", Z: "[[c5,eb5]@2 c5 ab4 [c4,eb4]@5 ~ ab4 c5 f4@2 eb4@2]/2",
  AA: "ab4@3 ~ [eb5,gb5]@4 [db5,f5]@8, ~ ab5@3", AB: "~@10 [bb4,d5,ab5] ~@3 [bb4,d5,ab5] ~",
  AC: "~@2 [bb4,d5,f5] ~@3 [bb4,d5,f5] ~@3 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~", // Bb Ab
  AD: "~@2 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~@3 [g4,bb4,db5,eb5] ~@3 [g4,bb4,eb5] ~", // Ab Eb7 Eb
  AE: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~", // Eb Ab
  AF: "[ab4,c5,eb5] ~@3 [c5,eb5]@4 [c5,f5]@3 ~ [ab4,c5]@2 [c5,f5]@2", // Ab Cm F5 Ab F5
  AG: "[[c5,eb5]@4 c5@2 ab4@2 [c4,eb4]@10 ~@2 ab4@2 c5@2 [ab3,c4,f4]@4 [ab3,c4,eb4]@3 ~]/2", // Cm Fm Ab
  AH: "[c4,eb4,ab4]@3 ~ [ab4,c5,f5]@3 ~ [db4,eb4,g4]@8", AI: "~@2 eb5@2 [db5,f5]@2 db5 f5",
  AJ: "[g4,db5,eb5]@3 ~ [bb4,db5]@2 [eb4,g4] ~ [g3,db4,eb4]@8", AK: "~@4 g4@2 bb4@2 f4@4 eb4@3 ~",
  AL: "~@10 [ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~", AM: "~@2 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~",
  AN: "~@2 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~", // Ab Eb
  AO: "~@2 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~ [eb4,ab4,c5] ~@3 eb5 db5 c5 bb4", AP: "ab4 ~ ab4!3 ~@11",
  AQ: "~@2 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~@3 [d4,ab4,bb4] ~@3 [d4,ab4,bb4] ~", // Eb Bb7
  AR: "bb4 ~@9 [d4,ab4,bb4] ~@3 [d4,ab4,bb4] ~", // Bb7
  AS: "~@2 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~@3 [d4,f4,bb4] ~ [d4,f4,bb4]@3 ~", // Eb Bb
  AT: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [f4,ab4,bb4,d5] ~@3 [ab4,bb4,d5] ~", // Eb Bb7
  AU: "[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 H AU P AV AW@2 M@2 T AX P AY R@2 M@2 T AZ V W X Y V Z AA AB
  V W X Y V Z AA BA
>`.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]@2 ~ [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: "[bb3,bb4] ~@3 [c5,eb5] ~@2 [c5,eb5] [bb4,d5]@3 [a4,db5] [bb4,d5]@3 [a4,db5]", // Bb Cm Bb A Bb A
  AV: "~@4 bb4 c5 ~ g4 ab4 bb4 ~@2 bb5@3 ~, ~@11 d5@5",
  AW: "[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
  AX: "[bb3,bb4] ~@3 [c5,eb5]@2 ~ [c5,eb5] [bb4,d5]@3 [a4,db5] [bb4,d5]@3 [a4,db5]", // Bb Cm Bb A Bb A
  AY: "~@4 bb4 c5 ~ g4 ab4 bb4 ~ d5 bb5@3 ~", AZ: "[bb3,bb4] ~@9 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~",
  BA: "[g4,bb4,eb5] ~ [g4,bb4,eb5]!3 ~@11", // Eb
})).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 G O I J P Q M R ~@28 S T U V W ~ A B C ~ X D Y ~@15 F G O I J P L Z N G O I
  AA P L M AB
>`.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@5 ~ 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 ~@2 g2@2 bb2@3 ~ ab2@3 ~", P: "g2@2 ~ g2 d2 ~ eb2 ~ c3@4 bb2@4",
  Q: "g2@5 ~ g2 ~ bb2@2 ~ bb2 ab2@2 ~ ab2", R: "eb2 ~ eb2 ~ eb2 ~@11", S: "~@4 bb1 ~ bb1 ~",
  T: "bb1@2 ~@2 bb1@2 ~@2 eb2@2 ~@2 eb2 ~@3", U: "eb2 ~@3 eb2 ~@3 eb2 ~@3 eb2 ~@3",
  V: "eb2 ~@3 eb2 ~@3 ab2 ~@3 eb2 ~@3", W: "ab2 ~@3 ab1 ~@11", X: "~@8 eb2 ~ eb2!2 eb2@3 ~", Y: "bb1 ~@15",
  Z: "f2@2 ~ f2 bb2@2 ~ bb2 eb2@2 ~@2 eb2 ~@3", AA: "eb2@5 ~ bb1@2 eb2@2 ~ eb2 bb1 ~@2 bb1",
  AB: "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 C D A B E F G ~@7 H I J K L M N O W
>`.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: "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)

// drums · snare
const snare = s("sd").struct(`<
  A B C D E B C F G H@6 I G H@6 I G H J K J H@2 L G H J K J H@2 L M H@8 J H@2 K N H@2 L G H@6 K O H@2 K N H@2 I C B C D
  E B C F G H@6 I G H@6 I G H@2 K J H@2 L G H J K J H@2 L P
>`.pickRestart({
  A: "~@8 x ~ x!3 ~@3", B: "x ~ x!3 ~@3 x ~ x!3 ~ x ~", C: "x ~ x!3 ~@3 x ~ x!3 ~@3", D: "x ~ x!3 ~@3 x!5 ~ x ~",
  E: "x ~@3 x ~@3 x ~ x!3 ~@3", F: "x!5 ~ x ~", G: "x ~@4 x ~ x", H: "~ x ~ x ~ x ~ x",
  I: "~@2 x ~@3 x ~ x ~ x!3 ~ x ~", J: "~@2 x!3 ~ x ~@3 x ~@3 x ~", K: "~@2 x ~@3 x ~@3 x!3 ~ x ~",
  L: "~@2 x ~@3 x ~ x ~ x!3 ~ x!2", M: "x ~ x!3 ~@5 x ~@3 x ~", N: "x!4 ~ x ~ x", O: "x!5 ~ x ~@3 x ~@3 x ~",
  P: "x ~ x!3 ~@11",
})).gain(0.71)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A B C ~ A D B ~@3 A ~@3 B ~@3 A ~@3 A D B D B D B D B D B D B D B D B ~@12 D E B E F ~@11 D E B E B ~ A B E ~ A D
  B ~@3 A ~@3 B ~@3 A ~@3 A D B D B D B D B D B D B D B D C
>`.pickRestart({
  A: "~ x", B: "x!2", C: "x!2 ~@2", D: "x ~ x!2", E: "x!3 ~", F: "x",
})).gain(0.5)

// drums · ride
const ride = s("rd").struct(`<
  ~@2 A B C ~@3 D E@7 F E@7 F E@7 F E@20 F E@3 F E@11 F E@3 G ~ A B C ~ A F@2 E@7 F E@3 F E@3 F E@7 F E@7 C
>`.pickRestart({
  A: "~ x", B: "x ~@3 x ~ x!2", C: "x!2 ~@2", D: "~@2 x!2", E: "x!4", F: "x ~ x!2", G: "x!3 ~",
// … 3 more lines