Strudelify

Slavenkoor Carnavalesque

Assekruus

KeyB♭ majorTempo59 bpm
0:00/0:00
// Slavenkoor Carnavalesque — Assekruus
// 59 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 44 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(59/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 · alto sax
const alto_sax = note("<~@7 A B C D E F G H I J K L M N O P Q R S T U@2 V@3 W@2 X@2 Y@2 Z@2 AA@2 AB AC>".pickRestart({
  A: "~@24 g5@5 f5@2 ~", B: "~@8 bb4@5 ~@11 g5@4 ~ eb5 ~@2", C: "eb5@2 d5@3 f5@3 ab5@10 ~@6 bb4@4 ~ bb4 ~@2",
  D: "bb4@7 ~ eb5@4 ~ g5 ~@2 g5@5 ~@3 g5@5 ~@3", E: "eb5@8 ~@16 g5@5 f5@2 ~",
  F: "eb5@7 ~ bb4@4 ~ bb5 ~@2 bb5@8 g5@4 ~ eb5 ~@2", G: "eb5@2 ~@22 bb4@4 ~ bb4 ~@2",
  H: "bb4@2 eb5@2 ~ g5 ~@2 bb5@2 ~@3 f5@2 ~ eb5@8 d5@2 g5@2 ~ f5@3", I: "eb5@10 ~@14 bb4@4 ~ bb4@2 ~",
  J: "d5@7 ~ d5@5 ~@3 d5@6 ~@2 d5@2 c5@3 bb4@3", K: "a4@7 ~ g4@2 ~ a4@2 bb4@2 ~ f4@9 ~ f4@3 e4@2 eb4",
  L: "~@8 eb4 ~@7 eb4 ~@7 eb4@2 d4@3 eb4@3", M: "eb5@8 d5@8 ~@8 f4@4 ~ f4@2 db5, d5 ~@31",
  N: "d5@8 d5@5 d5@2 ~ d5@6 ~@2 d5@2 c5@3 bb4@3", O: "a4@7 ~ g4@2 ~ a4@2 bb4@2 ~ f4@8 ~@2 f4@3 e4@3",
  P: "eb4 ~@7 eb4 ~@7 eb4 ~@7 eb4@2 ~ g4@2 f4@3", Q: "d4@15 ~@9 bb4@3 ~@2 bb4 ~@2",
  R: "ab5@7 ~ ab5@4 ~ ab5@2 ~ gb5@6 ~@2 gb5@4 ~ gb5@2 ~", S: "f5@22 ~@2 bb4@4 ~ bb4@2 ~",
  T: "ab5@7 ~ ab5@4 ~ ab5@2 ~ gb5@7 ~ gb5@2 ~ ab5@2 gb5@2 ~",
  U: "[f5@16 ~@7 g5@3 ~ f5@4 eb5@7 bb4@3 ~@2 bb5@2 ~ bb5@7 ~ g5@3 ~ eb5@2 ~@2 eb5@2]/2",
  V: "[d5@3 f5@2 ab5@11 ~@5 bb4@3 ~ bb4@2 ~@2 bb4@7 ~ eb5@3 g5@2 ~@2 g5@4 f5@4 g5@4 f5@4 eb5@7 d5@13 ~@3 g5@4 f5@3 eb5@6, ~@83 gb5 ~@12]/3",
  W: "[~@2 bb4@3 ~ bb5@2 ~@2 bb5@8 g5@3 ~ eb5@2 ~ eb5@2 ~ d5@3 f5@3 ab5@10 ~@5 bb4@2 ~@2 bb4@2 ~ bb4@2 ~ eb5@3 g5@2]/2",
  X: "[bb5@2 ~ ab5@2 ~ f5@2 eb5@7 ~ d5@2 g5@3 f5@2 ~ eb5@12 ~@11 g5@3 f5@4 ~ eb5@7 bb4@2]/2",
  Y: "[~@2 bb5@2 ~@2 bb5@7 ~ g5@3 eb5@2 ~@2 eb5@2 ~ d5@2 f5@2 ~ ab5@11 ~@4 bb4@3 ~@2 bb4@2 ~ bb4@7 ~ eb5@3 ~]/2",
  Z: "[g5@2 ~@2 g5@4 f5@3 g5@4 f5@4 eb5@8 d5@13 ~@2 gb5 g5@4 f5@3 eb5@8 bb4@3 ~ bb5@2]/2",
  AA: "[~@2 bb5@7 g5@3 ~ eb5@2 ~@2 eb5@2 d5@3 f5@3 ab5@10 ~@5 bb4@2 ~@2 bb4@2 ~@2 bb4@2 ~ eb5@3 g5@2 bb5@2 ~ ab5@2 f5@2 ~]/2",
  AB: "eb5@7 d5@3 g5@3 f5@2 eb5@12 ~@5", AC: "~@2 [a4,bb4] ~ ab4 ~ g4 ~@25",
})).s("gm_alto_sax").gain(0.42).pan(0.3)

// other · alto sax · soft notes
const alto_sax_soft = note("<~@7 A@2 ~ B C ~ D E ~ F ~@5 G ~@8 H ~@3 I ~@3 J ~@4>".pickRestart({
  A: "[~@31 eb5@8 ~@6 bb5 ~@2 bb5@8 ~@8]/2", B: "~@21 f5@3 ~@5 f5@2 ~", C: "~ d5 ~@2", D: "~@3 d5@2 f5@3 ab5@8 ~@16",
  E: "~@5 ab5 ~@10", F: "~@13 d5 ~@18", G: "~@21 eb4 ~@10", H: "~@18 f5 ~@13", I: "~@13 bb5@2 ~@17", J: "~@10 f5 ~@21",
})).s("gm_alto_sax").gain(0.24).pan(0.3)

// bass · tuba
const bass = note("<~@6 A B C D E F C D G H I J K L M N O P Q R S T U V W X Y Z AA@2 AB AC AD AE AF AG@3>".pickRestart({
  A: "~@16 bb1 ~ c2 ~@2 d2 ~@2 bb2!2 g2 ~@2 f2@2 ~", B: "eb2@2 ~@6 bb1@3 ~@5 eb2@2 ~@5 bb1@2 ~ c2@2 ~ d2@2 ~",
  C: "eb2@5 ~@3 bb1@4 ~@4 eb2@4 ~@3 bb1@3 ~@3 a2 ~@2", D: "bb2@5 ~@3 f2@5 ~@3 bb1@6 ~@2 f2 ~@2 bb2 ~ f2 ~@2",
  E: "eb2@6 ~@2 bb1@3 ~@2 ab2 ~ ab2@8 ~ a2@6 ~@2", F: "bb2@6 ~@2 f2@6 ~@2 bb1@5 ~@3 bb1 ~ c2 ~@2 d2 ~@2",
  G: "eb2@6 ~@2 ab2@3 ~@2 ab2 ~ eb2@8 ~ bb1@6 ~@2", H: "eb2@6 ~@2 bb2@3 ~@2 g2 ~@2 eb2@4 ~@4 eb2@2 ~@3 bb2 ~@2",
  I: "bb2@2 ~@6 f2@2 ~@5 bb2@2 ~@7 bb2 ~ a2 ~@2 g2 ~@2", J: "f2 ~@3 c2 ~@3 bb1 ~@3 bb2 ~@3",
  K: "f2@2 ~@6 c2@2 ~@6 f2@2 ~@6 f2 ~@2 g2 ~ f2 ~@2", L: "bb2@2 ~@6 f2@2 ~@6 bb2 ~@6 f2 ~@2 g2 ~@2 a2 ~@2",
  M: "bb2@2 ~@6 f2@2 ~@6 bb2@2 ~@6 bb2 ~ a2 ~@2 g2 ~@2", N: "f2@2 ~@6 c2@2 ~@6 bb1@2 ~@6 bb2 ~@7",
  O: "f2@2 ~@6 c2 ~@7 f2 ~@7 f2 ~@2 g2 ~ f2 ~@2", P: "bb1 ~@7 f2 ~@7 bb2 ~@7 f2 ~@7",
  Q: "bb2@3 ~@5 f2@2 ~@6 eb2@2 ~@6 bb2@3 ~@5", R: "bb2@3 ~@5 f2@3 ~@2 ab2 ~@2 bb2@3 ~@5 f2@2 ~@3 ab2 ~@2",
  S: "bb2@3 ~@5 f2@2 ~@6 eb2@3 ~@5 ab2@2 ~@6",
  T: "bb2 ~@3 f2 ~@3 bb2 ~@2 f2 ~@3 bb2 ~@3 f2 ~@3 bb2 ~ ab2 ~ g2 ~ f2 ~ eb2",
  U: "~@3 bb1@2 ~ eb2@2 ~@2 bb1@2 ~@2 eb2@2 ~@2 bb1@2 ~@2 eb2@2 ~@2 d2 ~ c2 ~ bb1 ~",
  V: "~@2 f2@2 ~ bb2@2 ~@2 f2@2 ~@2 bb2 ~@3 f2 ~@3 bb2@2 ~@2 bb1 ~@3 eb2@2 ~",
  W: "bb1 ~@3 eb2 ~@3 bb1 ~@3 ab2@2 ~@2 ab2@2 ~@2 a2@2 ~@2 a2@2 ~@2 bb2@2 ~@2",
  X: "f2@2 ~ bb2@2 ~@2 f2 ~@3 bb2@2 ~@2 f2 ~@3 bb1@3 ~ c2 ~ d2 ~ eb2@2 ~ bb1 ~",
  Y: "~@2 eb2@2 ~@2 bb1 ~@3 eb2@2 ~@2 bb1@2 ~@2 eb2@2 ~@2 a2 ~@3 bb2@2 ~ f2@2 ~",
  Z: "~ bb2@2 ~@2 f2@2 ~@2 [a2,bb2] ~@3 f2@2 ~@2 bb2@2 ~@2 bb1 ~ d2 ~ eb2 ~@3 eb2@2 ~", // Bbmaj7
  AA: "[ab2@2 ~@2 ab2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 bb1@2 ~@2 bb1@2 ~ eb2@2 ~@2 bb1@2 ~@2 eb2@2 ~@2 bb1@2 ~@2 eb2@2 ~@2 bb1@2 ~ eb2 ~ bb1 ~ c2 ~ d2 ~@2 eb2 ~@2 bb1@2 ~@2 eb2@2]/2",
  AB: "~@2 bb1@2 ~@2 eb2@2 ~@2 bb1@2 ~ eb2@2 ~@2 d2 ~ c2 ~ bb1 ~@3 f2@2 ~@2 bb2@2 ~",
  AC: "~ f2@2 ~@2 bb2 ~@2 f2 ~@3 bb2@2 ~@2 bb1 ~@3 eb2@2 ~@2 bb1 ~@3 eb2 ~@3",
  AD: "bb1 ~@3 ab2@2 ~@2 ab2@2 ~ a2@2 ~@2 a2@2 ~@2 bb2@2 ~@2 f2@2 ~@2 bb2@2 ~@2 f2",
  AE: "~@3 bb2@2 ~@2 f2 ~@2 bb1@3 ~ c2 ~ d2 ~ eb2@2 ~@2 bb1 ~@3 eb2@2 ~@2 bb1 ~",
  AF: "~@2 eb2@2 ~ bb1@2 ~@2 eb2@2 ~@3 a2 ~@2 bb2@2 ~@2 f2@2 ~@2 bb2@2 ~@2 f2@2 ~",
  AG: "[~ [a2,bb2] ~@2 f2@2 ~@2 bb2@2 ~@2 bb1 ~ d2 ~ eb2 ~@3 eb2@2 ~@2 ab2@2 ~@2 ab2@2 ~ eb2@2 ~@2 eb2@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 eb2@2 ~@2 bb1@2 ~@2 eb2@2 ~@2 bb1@2 ~@2 eb2@2 ~ bb1@2 d2 ~ eb2 ~@25]/3", // Bbmaj7
})).s("gm_tuba").gain(0.6).pan(0.4)

// other · trumpet
const trumpet = note("<~@7 A B C D E F G H I ~@3 J K L M N O P Q R@2 S@5 T@2 U@2 V@2 W@2 X Y>".pickRestart({
  A: "~@24 g5@4 ~ f5@2 ~, ~@24 gb5 ~@7", B: "eb5@8 bb4@4 ~ bb5 ~@2 bb5@7 ~ g5@3 ~@2 eb5 ~@2",
  C: "eb5@2 d5@3 f5@3 ab5@11 ~@5 bb4@3 ~@2 bb4 ~@2", D: "bb4@7 ~ eb5@4 ~ g5 ~@2 g5@5 f5@3 g5@5 f5@3",
  E: "eb5@9 d5@5 ~@10 g5@4 ~ f5 ~@2", F: "eb5@8 bb4@4 ~ bb5 ~@2 bb5@8 g5@4 ~ eb5 ~@2",
  G: "eb5@2 ~ d5@2 f5@3 ab5@9 ~@7 bb4@3 ~@2 bb4 ~@2",
  H: "bb4@2 eb5@2 ~ g5 ~@2 bb5@2 ab5@2 ~ f5@3 eb5@8 d5 ~@2 g5 ~ f5 ~@2", I: "eb5@11 ~@21",
  J: "~@8 bb3@4 ~ c4 ~@2 d4@7 ~ c4 ~@7, ~@8 a3 ~@23", K: "f4@8 f4@4 ~ f4 ~@2 f4@7 ~ f4 ~ f4 ~@2 f4 ~@2",
  L: "f4@7 ~ eb4@2 ~ f4@2 g4@2 ~ d4@8 ~@3 d4@2 db4 ~@2", M: "~@2 c4@4 ~@4 c4@4 ~@4 c4@4 ~@2 c4@2 eb4@3 d4@3",
  N: "bb3@7 ~@4 bb3 ~ c4 ~@2 d4 ~@7 bb4@4 ~ bb4@3", O: "ab5@7 ~ ab5@4 ~ ab5@2 ~ gb5@7 ~ gb5@4 ~ gb5@2 ~",
  P: "f5@18 ~@6 bb4@3 ~@2 bb4@2 ~", Q: "ab5@6 ~@2 ab5@3 ~@2 ab5@2 ~ gb5@7 ~ gb5@3 ~@3 gb5@2",
  R: "[f5@14 [gb5,g5] bb5@8 g5@4 f5@4 eb5@7 bb4@2 ~@3 bb5 ~@2 bb5@8 g5@2 ~@2 eb5@2 ~@2 eb5@2, ~@15 ab5 ~@48]/2", // Gmaj7
  S: "[d5@3 f5@2 ab5@12 ~@4 bb4@2 ~@2 bb4@2 ~ bb4@7 ~ eb5@4 g5@2 ~@2 g5@3 ~ f5@4 g5@4 f5@4 eb5@8 d5@9 ~@6 g5@4 f5@4 eb5@8 bb4@3 bb5@2 ~@2 bb5@7 ~ g5@3 ~ eb5@2 ~@2 eb5@2 d5@3 f5@2 ab5@11 ~@5 bb4@2 ~@2 bb4@2 ~@2 bb4@2 eb5@3 g5 ~]/5",
  T: "[~ bb5@2 ab5@2 ~ f5@2 eb5@7 ~ d5@2 g5@2 ~ f5@2 ~ eb5@15 ~@23 bb4@2]/2",
  U: "[~@2 bb5 ~@3 bb5@8 g5@2 ~ eb5@2 ~@2 eb5@2 ~ d5@3 f5@2 ab5@12 ~@3 bb4@2 ~@2 bb4@2 ~@2 bb4@7 ~ eb5@4]/2",
  V: "[g5@2 ~@2 g5@3 f5@4 ~ g5@3 f5@4 eb5@8 d5@9 ~@7 g5@3 f5@4 eb5@8 bb4@3 ~ bb5@2]/2",
  W: "[~@2 bb5@7 g5@3 ~ eb5@2 ~@2 eb5@2 ~ d5@3 f5@2 ab5@11 ~@5 bb4@2 ~@2 bb4@2 ~ bb4@2 ~ eb5@3 g5 ~ bb5@2 ~ ab5@2 f5@2 ~]/2",
  X: "eb5@7 d5@2 ~ g5@2 ~ f5@2 eb5@15 ~@2", Y: "~@2 [c4,db4] d4 ~ c4 ~ bb3 ~@24",
})).s("gm_trumpet").gain(0.3).pan(0.4)

// other · tubular bells · "+CHURCHBEL"
const tubular_bells = note("<A@5 B@5 ~@34>".pickRestart({
  A: "f3!2", B: "[f3@8 f3@69 ~@3]/5",
})).s("gm_tubular_bells").gain(0.5)

// other · trumpet
const trumpet_2 = note("<~@7 A B C D E F G H I J K L M N O P Q R S T U@2 V@5 W@2 X@2 Y Z AA@2 AB ~>".pickRestart({
  A: "~@2 g3 ~@2 g3 ~@5 g3 ~ g3 ~@4 g3 ~@2 g3 ~@2 g3@2 g3@2 ~ [f3,ab3]@3, ~@24 bb3@5 g3 ~@2", // Fm
  B: "[eb3,g3]@8 [bb2,eb3]@4 ~ [bb3,eb4] ~@2 [bb3,eb4]@8 [g3,bb3]@4 ~ [eb3,bb3] ~@2", // Eb Eb5 Gm Eb5
  C: "[eb3,bb3]@2 [d3,f3]@3 [f3,bb3]@3 ab3@10 ~@6 [bb2,bb3]@4 ~ [bb2,ab3] ~@2, ~@8 d4@7 ~@17", // Eb5 Dm Bb5 Bb Bb7
  D: "[bb2,g3]@7 ~ [eb3,g3]@5 g3@3 ab3@4 ~ f3@3 [g3,a3]@5 f3@3, ~@16 g3@2 ~@3 ab3 ~@7 a3 ~@2", // Eb Gsus2
  E: "[eb3,bb3]@8 [d3,bb3]@6 ~@9 f3 [g3,bb3]@5 [f3,ab3]@3, ~@24 gb3 ~@7", // Eb5 Gm Fm
  F: "eb3@6 g3 ~ [bb2,eb3]@3 ~@2 [bb3,eb4] ~@2 [bb3,eb4]@8 g3@5 [eb3,bb3] ~@2, g3@5 ~@19 bb3@3 ~@5", // Eb5
  G: "[eb3,bb3]@2 d3@2 ~ f3@2 ~ [ab3,d4]@8 ~@8 [bb2,bb3]@4 ~ [bb2,bb3] ~@2, ~@2 f3 ~@2 bb3 ~@26", // Eb5 Abdim Bb
  H: "bb2@2 ~ eb3 ~ g3@2 ~@3 ab3@2 ~ f3@3 [eb3,bb3]@8 [d3,ab3]@2 [g3,bb3]@2 ~ [f3,ab3]@3, bb3@7 bb3@3 ~@22, ~@8 c4@7 ~@17", // Eb5 Ddim Gm Fm
  I: "[eb3,g3]@11 ~@13 g3@3 ~@2 g3 ~@2", J: "bb3@7 ~ bb3@5 bb3@2 ~ bb3@8 bb3@2 a3@2 ~ g3@3",
  K: "f3@7 ~ eb3@2 f3@2 ~ g3@3 d3@8 ~@3 d3@2 db3@2 ~",
  L: "c3@2 [eb4,e4] f4@2 [eb4,e4] ~@2 c3@2 [eb4,e4] f4@2 [eb4,e4] ~@2 c3 ~ [eb4,e4] f4@2 [eb4,e4] ~@2 c3@3 b2@2 c3@2 ~", // Emaj7
  M: "eb3@8 d3@8 ~@8 d3@4 ~ d3@3", N: "bb3@8 bb3@5 bb3@2 ~ bb3@5 bb3@2 ~ bb3@2 a3@3 g3@3, ~@24 a3 ~@7",
  O: "f3@6 ~@2 eb3@2 f3@2 ~ eb3@3 d3@8 ~@3 d3@2 db3@2 ~",
  P: "c3@2 [eb4,e4] f4@2 [eb4,e4] ~@2 c3 ~ [eb4,e4] f4@2 [eb4,e4] ~@2 c3 ~ [eb4,e4] f4@2 [eb4,e4] ~@2 c3@3 eb3@2 d3@3", // Emaj7
  Q: "bb2@16 ~@8 bb2@3 ~@2 bb2 ~@2", R: "f3@6 ~@2 f3@4 ~ f3 ~@2 eb3@6 ~@2 eb3@3 ~@2 eb3 ~@2",
  S: "d3@15 ~ bb2@6 ~@2 bb2@3 ~@2 bb2 ~@2", T: "f3@6 ~@2 f3@3 ~@2 f3 ~@2 eb3@6 ~@2 eb3@3 ~@2 eb3 ~@2",
  U: "[bb3@15 ~@8 bb3@4 ab3@4 g3@8 eb3@2 ~@2 eb4@2 ~ eb4@6 ~@2 bb3@2 ~@2 bb3@2 ~@2 bb3@2]/2",
  V: "[f3@2 ~ bb3@2 ~ d4@9 ~@6 bb3@2 ~@2 bb3@2 ~@2 bb3@6 ~ bb3@2 ~@2 bb3@2 ~@2 ab3@8 a3@7 ~ bb3@7 bb3 ~ bb3!3 ~ bb3 ~ bb3@6 ~@2 bb3@4 ab3@4 g3@8 ~@3 g3@2 ~@2 bb3@6 ~@2 bb3 ~@3 bb3@3 ~ bb3@2 f3@2 ~ bb3@2 d4@13 ~@3 bb3@3 ~ ab3@2 ~@2 g3@7, ~@102 a3 ~@57]/5",
  W: "[ab3@7 ~ g3@8 [f3,bb3]@2 bb3@2 ~ [ab3,d4]@3 [g3,eb4]@19 f3@4 bb3@3 ab3@4 g3@7 ~ eb3@2]/2", // Bb5 Abdim Cm
  X: "[~@2 eb4@2 ~@2 eb4@6 ~@2 bb3@2 ~@2 bb3@2 ~ bb3@2 ~ f3@2 bb3@2 ~ d4@9 ~@7 bb3@2 ~@2 bb3@2 ~ bb3@6 ~@2 bb3@2 ~@2]/2",
  Y: "bb3@2 ~@2 ab3@8 a3@7 bb3@7 ~ bb3 ~ [f3,bb3]!2 [e3,f3,bb3]", // Bb5 Bb
  Z: "~ [a3,bb3] ~ bb3@3 ~ [ab3,bb3]@3 ~ g3@3 [f3,ab3]@4 g3@8 ~@4 g3@2, ~@10 bb3@4 ~@16 a3 ~", // Bbmaj7 Absus2 Fm
  AA: "[~@2 bb3@6 ~@2 bb3 ~@2 bb3@3 ~ bb3@2 ~ f3@2 bb3@3 d4@13 ~@2 bb3@3 ~ ab3@2 ~@2 g3@7 ~ ab3@7 ~]/2",
  AB: "g3@7 ab3 bb3@2 bb3@2 ~ d4@2 [eb3,g3,eb4]@17, ~@7 f3@2 ~ ab3 ~ ab3@3 ~@17, ~@13 f3 ~@18", // Eb
})).s("gm_trumpet").gain(0.4).pan(0.6)

// other · clarinet
const clarinet = note("<~@7 A B C D E F G H I J K L M N O P Q R S T U@2 V@3 W@2 X@2 Y@2 Z@2 AA@2 AB AC>".pickRestart({
  A: "~@24 g5@5 f5@3", B: "eb5@8 bb4@4 ~ bb5 ~@2 bb5@7 ~ g5@4 ~ eb5 ~@2",
  C: "eb5@2 ~ d5@2 f5@3 ab5@10 ~@6 bb4@4 ~ bb4 ~@2", D: "bb4@8 eb5@4 ~ g5 ~@2 g5@5 f5@3 g5@5 f5@3",
  E: "eb5@8 d5@7 ~@9 g5@5 f5@3", F: "eb5@8 bb4@5 bb5 ~@2 bb5@8 g5@4 ~ eb5 ~@2",
  G: "eb5@2 ~ d5@2 f5@2 ~ ab5@9 ~@7 bb4@4 ~ bb4 ~@2", H: "bb4@3 eb5@2 g5@2 ~ bb5@3 ab5@2 f5@3 eb5@8 d5@2 g5@2 ~ f5@3",
  I: "eb5@9 ~@15 bb5@3 ~@2 bb5 ~@2", J: "d6@7 ~ d6@7 ~ d6@7 ~ d6@2 c6@2 ~ bb5@3",
  K: "a5@7 ~ g5@3 a5@2 bb5@2 ~ f5@8 ~@2 f5@3 e5@3", L: "eb5 ~@7 eb5 ~@7 eb5 ~@7 eb5@2 d5@2 ~ eb5@2 gb5",
  M: "g5@7 ~ f5@7 ~@9 f5@3 ~@2 f5@2 ~", N: "d6@7 ~ d6@5 d6 ~@2 d6@8 d6@2 ~ c6@2 bb5@3",
  O: "a5@7 ~ g5@2 ~ a5@2 bb5@2 ~ f5@8 ~@3 f5@2 e5@3",
  P: "eb5@2 ~@6 eb5 ~@7 eb5 ~ d5@2 ~ c5 ~ d5 [c5,eb5]@3 [eb5,g5]@2 [d5,f5]@3", Q: "bb4@3 ~@5, d5 ~@15",
  R: "[f5,f6]@6 ~@2 [f5,f6]@4 ~ [f5,f6]@2 ~ [eb5,eb6]@6 ~@2 [eb5,eb6]@4 ~ [eb5,eb6]@2 ~", // F Eb
  S: "[d5,d6]@16 ~@13 [d5,d6] ~@2", // D
  T: "[f5,f6]@6 ~@2 [f5,f6]@4 ~ [f5,f6] ~@2 [eb5,eb6]@6 ~@2 [eb5,eb6]@3 ~@2 [eb5,eb6] ~@2", // F Eb
  U: "[[bb5,bb6]@21 ~@2 g6@3 ~ f6@4 eb6@7 ~ bb5@3 bb6@2 ~@2 bb6@7 ~ g6@3 ~ eb6@2 ~@2 eb6@2, [d5,d6]@7 ~@57]/2", // Bb D
  V: "[d6@2 ~ f6@2 ab6@11 ~@5 bb5@2 ~@2 bb5@2 ~@2 bb5@7 eb6@3 ~ g6@2 ~@2 g6@4 f6@4 g6@4 f6@4 eb6@7 d6@8 ~@8 g6@4 f6@3 eb6@6]/3",
  W: "[~@2 bb5@3 ~ bb6@2 ~@2 bb6@7 ~ g6@3 ~ eb6@2 ~@2 eb6@2 d6@2 ~ f6@2 ab6@12 ~@4 bb5@2 ~@2 bb5@2 ~@2 bb5@2 eb6@2 ~ g6@2]/2",
  X: "[bb6@3 ab6@2 f6@2 ~ eb6@8 d6@2 g6@3 f6@3 eb6@16 ~@5 bb6@2 g6@4 f6@3 eb6@7 ~ bb5@2]/2",
  Y: "[~@2 bb6@2 ~@2 bb6@7 g6@3 ~ eb6@2 ~@2 eb6@2 ~ d6@2 ~ f6@2 ab6@11 ~@5 bb5@2 ~@2 bb5@2 ~ bb5@7 ~ eb6@3 ~]/2",
  Z: "[g6@2 ~@2 g6@3 f6@4 ~ g6@3 f6@4 eb6@7 ~ d6@8 ~@8 g6@3 f6@4 eb6@8 bb5@3 ~ bb6@2]/2",
  AA: "[~@2 bb6@7 g6@3 ~ eb6@2 ~@2 eb6@2 ~ d6@2 f6@3 ab6@12 ~@4 bb5@2 ~ bb5@2 ~@2 bb5@2 ~ eb6@2 g6@2 ~ bb6@2 ab6@2 ~ f6@2 ~]/2",
  AB: "eb6@7 d6@3 g6@3 f6@2 eb6@16 ~", AC: "~@2 bb4 ~ ab4 ~ g4 ~@25",
})).s("gm_clarinet").gain(0.25).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@5 A@4 B A@3 B A@3 C A@3 C A@5 D E F G H I J K L M N O E P Q H R>".pickRestart({
  A: "x!4", B: "x ~@7 x ~@4 x ~@2 x ~@7 x ~@7", C: "x ~@7 x ~@7 x ~@2 x ~ x ~@2 x ~@7",
  D: "x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x", E: "~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~",
  F: "~@2 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", G: "~ x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3",
  H: "x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x", I: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  J: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", K: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x",
  L: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~", M: "~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@2",
  N: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3", O: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x",
  P: "~@2 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", Q: "~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3",
  R: "~@3 x!2 ~ x ~@25",
})).gain(0.5)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@2 A@3 ~@6 B ~@3 B ~ C D B ~ C D B ~@20>".pickRestart({
  A: "x!4", B: "~@29 x ~@2", C: "~@13 x ~@15 x ~@2", D: "~@5 x ~@7 x ~@7 x ~@10",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B C@3 D B E C D B E B E B E B E B E B@3 F G H I J K L M N O P Q R Q S T U
>`.pickRestart({
  A: "x ~@7 x ~@7 x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2",
  B: "x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2",
  C: "x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2 x!4 ~ x ~@2",
  D: "x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x!4 ~@2 x ~@7",
  E: "x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x!4 ~@2 x!2 ~ x ~ x ~@2",
  F: "x ~@3 x ~@3 x ~@3 x ~@2 x ~ x!3 ~ x ~ x!5 ~ x ~ x", G: "x ~ x!2 ~ x ~ x!25", H: "x!28 ~ x ~ x",
  I: "x!4 ~ x!6 ~ x!11 ~ x!8", J: "x!29 ~ x!2", K: "~ x!10 ~ x!20", L: "x!24 ~ x ~ x!4 ~", M: "x!7 ~ x!11 ~ x!12",
  N: "x!27 ~ x ~ x!2", O: "x!7 ~ x!24", P: "x!27 ~ x!4", Q: "x!3 ~ x!28", R: "x!20 ~ x!2 ~ x ~ x!6",
  S: "x!15 ~ x ~ x!5 ~ x!7 ~", T: "x!10 ~ x!21", U: "x!7 ~@25",
})).gain(0.35)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@2 A@2 B C D ~ E F G H E F G H G H G H G H G H ~@2 I J K L M N O P Q R S T U V W X Y ~
>`.pickRestart({
  A: "x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2", B: "~@2 x!2 ~ x ~@4 x!2 ~ x ~@12 x ~@5",
  C: "~ x ~@3 x ~@3 x ~@3 x ~@2", D: "~ x ~@14", E: "~@5 x ~@7 x ~@5 x ~ x ~@7 x ~@2", F: "~@5 x ~@7 x ~@18",
  G: "~@29 x ~@2", H: "~@13 x ~@5 x ~@12", I: "~@6 x ~@4 x ~@9 x ~@10", J: "~@8 x ~@2 x ~@3 x ~@16",
  K: "~ x ~@4 x ~@8 x ~@3 x ~ x ~@5 x ~ x ~ x", L: "~@5 x ~@6 x ~ x ~@5 x ~@7 x ~ x ~",
  M: "~@4 x ~ x ~@4 x ~ x ~@5 x ~@3 x ~ x ~ x ~ x ~@2", N: "~@3 x ~@25 x ~@2",
  O: "~@2 x ~@6 x ~ x ~@3 x ~ x ~@5 x ~ x ~ x ~@4", P: "x ~@7 x ~ x ~@5 x ~@7 x ~ x ~@4 x",
  Q: "~ x ~@5 x ~ x ~@5 x ~@3 x ~ x ~ x ~ x ~@4 x ~", R: "~@24 x ~@4 x ~@2",
  S: "~@5 x ~ x ~@3 x ~ x ~@5 x ~ x!2 ~@5 x ~@3", T: "~@4 x ~ x ~@5 x ~@6 x ~ x ~@5 x ~ x ~@2",
  U: "~@3 x ~ x ~@5 x ~@3 x!2 ~ x ~ x ~@5 x ~@5", V: "~@20 x ~@4 x ~@6", W: "~ x ~ x ~@3 x ~ x ~@4 x ~ x ~ x ~@5 x ~@7",
  X: "x ~ x ~@5 x ~@6 x ~ x ~@5 x ~ x ~@5 x", Y: "~ x ~@4 x ~@3 x ~ x ~ x ~ x ~@5 x ~@9",
})).gain(0.15)

// drums · ride
const ride = s("rd").struct("<~@8 A B C D A B C D C B C@3 B C@5 E F G H I J K L M N O P F Q R I S>".pickRestart({
  A: "x!2 ~ x", B: "x!2", C: "x!4", D: "x ~ x!2", E: "x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x",
  F: "~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~", G: "~@2 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  H: "~ x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3", I: "x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  J: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", K: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  L: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x", M: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~",
// … 14 more lines