Strudelify

Wiener Praterleben

Will Glahe

KeyA majorTempo178 bpm
0:00/0:00
// Wiener Praterleben — Will Glahe
// 178 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(178/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 · fretless bass · "FRETLESS"
const bass = note(`<
  A B C D@2 E F@2 G H@2 I J@2 K L@2 M N@2 O P@2 Q R S T U V W X@2 Y Z@2 AA AB S T U V W X@2 Y Z@2 AA AC AD AE AC S AF AG
  S AH AG S AE AI AD AE AI S AJ AK AL AM AN AD AO AP AQ AR AS@2 AT AU@2 AV AW@2 AX AY@2 AZ BA@2 BB BC@2 AX BD@2 BE BF@2
  BG BH BI BJ BK BL BM BN@2 BO BP@2 BQ BR BI BJ BK BL BM BN@2 BO BP@2 BQ BS
>`.pickRestart({
  A: "~@3 a1", B: "~@4 e1@3 ~", C: "~@2 a1@3 ~@3", D: "[e1@6 ~@6 a1@7 ~@5 e1@6 ~@2]/2", E: "~@4 b1@7 ~@5",
  F: "[e1@7 ~@5 b1@7 ~@5 e1@7 ~]/2", G: "~ b1@2 ~", H: "[e1@7 ~@5 b1@7 ~@5 e1@4 f#1@4]/2", I: "g#1@2 a1@3 ~@3",
  J: "[e1@8 ~@4 a1@6 ~@6 e1@7 ~]/2", K: "~@4 a1@7 ~@5", L: "[e1@8 ~@4 a1@7 ~@5 a1@4 b1@4]/2", M: "c#2@4 d2@7 ~@5",
  N: "[d2@2 ~ d2@2 ~ d2@2]/2", O: "~@4 e2@9 ~@3", P: "[e2@9 ~@3 b1@8 ~@4 e2@4 f#2@4]/2", Q: "g#2 a2 e2 c#2",
  R: "a1@5 ~@7 d2@4", S: "~@8 d2@5 ~@3", T: "~@2 d2 ~ d2 ~ d2 ~", U: "e2@5 ~@7 e2@4", V: "~@8 a1@5 ~@3",
  W: "~@4 a1@4 b1@3 ~ c#2@4", X: "[d2@5 ~@7 d2@6 ~@6 d2@6 ~@2]/2", Y: "~ d2 e2 f#2", Z: "[g2@6 ~@6 g#2@6 ~@6 a2@7 ~]/2",
  AA: "~@4 e2@3 ~ e2@3 ~ a1@4", AB: "d2@5 ~@7 d2@4", AC: "d2@5 ~@7 g1@4", AD: "~@2 d2 ~", AE: "~ g1 ~@2",
  AF: "~ a1 ~@2", AG: "d2@5 ~@7 a1@4", AH: "~@4 a1@5 ~@7", AI: "d2 ~@2 g1", AJ: "b1@4 c2@5 ~@7", AK: "c2@5 ~@7 c2@4",
  AL: "~@8 c#2@5 ~@3", AM: "~@4 d2@5 ~@7", AN: "d2 ~@2 a1", AO: "~@4 g1@4 d2@3 ~ b1@4", AP: "g1 ~@2 g2",
  AQ: "b2 a2 g2 f2", AR: "d2@2 c2@3 ~@3", AS: "[g1@6 ~@6 c2@7 ~@5 g1@7 ~]/2", AT: "~ c2@2 ~",
  AU: "[g1@5 ~@7 c2@7 ~@5 g1@6 ~@2]/2", AV: "~@2 d2@3 ~@3", AW: "[g1@6 ~@6 d2@7 ~@5 g1@7 ~]/2", AX: "~@4 d2@7 ~@5",
  AY: "[g1@7 ~@5 d2@8 ~@4 g1@6 ~@2]/2", AZ: "b1@2 c2@3 ~@3", BA: "[g1@6 ~@6 c2@6 ~@6 g1@5 ~@3]/2", BB: "~@2 c2@3 ~@3",
  BC: "[g1@7 ~@5 c2@7 ~@5 c#2@8]/2", BD: "[d2@7 ~@5 d2@9 ~@3 g1@6 ~@2]/2", BE: "b1@4 c2@9 ~@3",
  BF: "[g1@7 ~@5 d2@10 ~@2 g1@8]/2", BG: "~ c2 g2 e2", BH: "c2 ~@2 a1", BI: "~@2 a1 c#2", BJ: "e2@4 a1@5 ~@7",
  BK: "b1@5 ~@7 b1@4", BL: "~@2 e1 g#1", BM: "b1@2 e1@3 ~@3", BN: "[a1@3 ~@3 a1@3 ~@3 a1@2 c#2@2]/2",
  BO: "e2@3 ~ a1@4 b1@4 c#2@4", BP: "[d2@3 ~@3 d#2@3 ~@3 e2@3 ~]/2", BQ: "~ b1 ~ e1", BR: "a1@5 ~@7 a1@4",
  BS: "a1@4 e2@3 ~ c#2@4 a1@4",
})).s("gm_fretless_bass").gain(0.44)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A B C A D E F G E F H C A B C A I J K L C M H N O P Q R S T O P U V W X O P Q R S T O P U V W X Y Z AA Y AB AC AD AE
  AC AD AF AG Y Z AA Y AH AI@3 AA AJ AK AL AM AN AO AP AQ AO AP AR AS AT AU AS AT AV AO AP AQ AO AW AX AY AZ BA AO BB BC
  BD A B BE BF BG C A B BH BI D N A B BE BF BG C A B BH BI D BJ
>`.pickRestart({
  A: "[c#4,e4,a4] ~@3 [c#4,e4,a4] ~@7 [c#4,e4,a4] ~@3", B: "[c#4,e4,a4] ~@7 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3",
  C: "~@4 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@7", D: "[c#4,e4,a4] ~@7 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3",
  E: "~@4 [b3,d4,g#4] ~@3 [b3,d4,g#4] ~@7", F: "[b3,d4,g#4] ~@3 [b3,d4,g#4] ~@7 [b3,d4,g#4] ~@3",
  G: "[b3,d4,g#4] ~@7 [b3,d4,g#4] ~@3 [b3,d4,g#4] ~@3", H: "[b3,d4,g#4] ~@7 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3",
  I: "[c#4,e4,a4] ~@7 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3", J: "~@4 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@7",
  K: "[d4,f#4,b4] ~@3 [d4,f#4,b4] ~@7 [d4,f#4,b4] ~@3", L: "[d4,f#4,b4] ~@7 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3",
  M: "[b3,g#4] ~@3 [b3,d4,g#4] ~@7 [b3,d4,g#4] ~@3", N: "[c#4,e4,a4] ~@15",
  O: "[f#3,a3,d4] ~@3 [f#3,a3,d4] ~@7 [f#3,a3,d4] ~@3", P: "[f#3,a3,d4] ~@7 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3",
  Q: "~@4 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~@7", R: "[e3,a3,c#4] ~@3 [e3,a3,c#4] ~@7 [e3,a3,c#4] ~@3",
  S: "[e3,a3,c#4] ~@7 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~@3", T: "~@4 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@7",
  U: "~@4 [b3,d4,g4] ~@3 [b3,d4,g4] ~@7", V: "[b3,d4,g#4] ~@3 [b3,d4,g#4] ~@7 [a3,d4,f#4] ~@3",
  W: "[a3,d4,f#4] ~@7 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~@3", X: "[f#3,a3,d4] ~@15",
  Y: "[b3,d4,g4] ~@3 [b3,d4,g4] ~@7 [g3,b3,d4] ~@3", Z: "[g3,b3,d4] ~@7 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3",
  AA: "~@4 [g3,b3,d4] ~@3 [g3,b3,d4] ~@7", AB: "[g3,b3,d4] ~@7 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3",
  AC: "~@4 [a3,c4,e4] ~@3 [a3,c4,e4] ~@7", AD: "[a3,d4,f#4] ~@3 [a3,d4,f#4] ~@7 [a3,c4,e4] ~@3",
  AE: "[a3,c4,e4] ~@7 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3", AF: "[a3,c4,e4] ~@7 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3",
  AG: "~@4 [g3,b3,e4] ~@3 [g3,b3,e4] ~@7", AH: "[g3,b3,d4] ~@7 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3",
  AI: "[~@4 [a3,c4,e4] ~@3 [a3,c4,e4]@2 ~@6 [c4,e4]@6 ~@6 [c#4,e4]@6 ~@6 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3, ~@6 a3@5 ~ a#3@5 ~@7]/3", // Am C C#m G
  AJ: "[a3,c4,e4] ~@3 [a3,c4,e4] ~@7 [a3,d4,f#4] ~@3", AK: "[a3,d4,f#4] ~@3 [b3,d4,g4]@11 ~",
  AL: "[b3,d4,g4] ~@11 g3@3 ~", AM: "b3 a3 g3 f3", AN: "d3@4 c3@3 ~ [c4,e4,a4] ~@3 [g3,c4,e4] ~@3",
  AO: "~@4 [g3,c4,e4] ~@3 [g3,c4,e4] ~@7", AP: "[g3,c4,e4] ~@3 [g3,c4,e4] ~@7 [g3,c4,e4] ~@3",
  AQ: "[g3,c4,e4] ~@7 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3", AR: "[g3,c4,e4] ~@7 [b3,d4,f4] ~@3 [b3,d4,f4] ~@3",
  AS: "~@4 [b3,d4,f4] ~@3 [b3,d4,f4] ~@7", AT: "[b3,d4,f4] ~@3 [b3,d4,f4] ~@7 [b3,d4,f4] ~@3",
  AU: "[b3,d4,f4] ~@7 [b3,d4,f4] ~@3 [b3,d4,f4] ~@3", AV: "[b3,d4,f4] ~@7 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3",
  AW: "[g3,c4,e4] ~@3 [g3,c4,e4] ~@7 [g3,c#4,e4] ~@3", AX: "[g3,c#4,e4] ~@7 [f3,a3,d4] ~@3 [f3,a3,d4] ~@3",
  AY: "~@4 [f3,a3,d4] ~@3 [f3,a3,d4] ~@7", AZ: "[a3,d4,f4] ~@3 [a3,d4,f4] ~@7 [a3,d4,f4] ~@3",
  BA: "[a3,d4,f4] ~@7 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3", BB: "[a3,d4,f4] ~@3 [a3,d4,f4] ~@7 [g3,b3,d4] ~@3",
  BC: "[g3,b3,d4] ~@7 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3", BD: "[g3,c4,e4] ~@15", BE: "~@4 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@7",
  BF: "[b3,e4,g#4] ~@3 [b3,e4,g#4] ~@7 [b3,e4,g#4] ~@3", BG: "[b3,e4,g#4] ~@7 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3",
  BH: "~@4 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@7", BI: "[d#4,f#4,a4] ~@3 [d#4,f#4,a4] ~@7 [c#4,e4,a4] ~@3",
  BJ: "[c#4,e4,a4]@11 ~@5", // A
})).s("gm_acoustic_guitar_steel").gain(0.3)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@12 A@7 ~@77 B@3 ~@25>".pickRestart({
  A: "[~@12 [a4,c#5]@24 ~@24 a4@13 g4@9 ~@2 [f#4,d5,d6]@23 ~@5, ~@3 c#6@18 ~@7, ~@15 c#5@6 ~@7]/7", // A D
  B: "[~@12 [d4,f4]@12 [d4,g4]@11 ~ [e4,g4]@12]/3", // Dm G5 Em
})).s("gm_string_ensemble_1").gain(0.22).pan(0.6)

// other · accordion
const accordion = note(`<
  ~@18 A@7 ~@38 B C D E ~@20 F@3 G@4 ~@2 H@4 I ~ J K ~ L I M N O P Q R ~ L K ~ J I S N T U V
>`.pickRestart({
  A: "[~@12 [d4,f#4,b4]@24 [e4,a4]@23 ~ [b3,d4,g#4]@11 ~ [d4,g#4,b4]@12 [c#4,e4,a4]@14 ~@14, ~@36 c#4@21 ~@55]/7", // Bm A5 G#dim A
  B: "g5 ~ g5 ~ f#5 g5 ~ f#5 e5 f#5 ~ e5 ~@4, ~ a5@2 ~@13", C: "~@8 g5 ~ g5@2 f#5@4, ~@9 a5@2 ~@5",
  D: "g5@2 ~@2 e5@2 ~@6 [e5,a5] ~@3, ~@2 e5@2 a5 ~@11, ~@3 g5@2 ~@11", E: "[c5,e5]@7 ~@9",
  F: "[~@12 [g4,c5,e5]@13 ~@3 [e4,g4]@7 ~ [g4,c5,e5]@12]/3", // C Em C
  G: "[~@12 [g4,c5,e5]@12 [g4,a#4,e5]@11 ~ [f4,a4,d5]@14 ~@14]/4", // C Edim Dm
  H: "[~@12 f4@12 [b3,d4,g4]@11 ~ [c4,e4,g4]@14 ~@10 e5 ~ e5 ~, ~@11 [a3,d4]@12 ~@41]/4", // G C D5
  I: "f#5 ~ f#5 ~ e5 ~ e5 ~ a5 ~@7", J: "~@10 g#5 f#5 e5 ~ e5 ~", K: "f#5 ~ f#5 ~ e5 ~ e5 ~ b5@2 ~@6",
  L: "~@12 e5 ~ e5 ~", M: "~@4 a5 ~@3 a5 ~@3 g#5@2 ~@2", N: "f#5 ~@11 f#5 ~ f#5 ~", O: "g#5 ~ g#5 ~ f#5 ~ f#5 ~ a5 ~@7",
  P: "~@4 f#5 ~@3 f#5 ~@3 e5 ~@3", Q: "a4@2 ~@10 e5 ~ e5 ~", R: "f#5 ~ f#5 ~ e5 ~ e5 ~ a5@2 ~@6",
  S: "~@4 a5 ~@3 a5 ~@3 g#5 ~@3", T: "g#5!2 ~ f#5 ~ f#5 ~@2 a5@2 ~@6", U: "~@4 f#5 ~@3 f#5@2 ~@2 e5@2 ~@2",
  V: "a5@13 ~@3",
})).s("gm_accordion").gain(0.26).pan(0.3)

// chords · xylophone
const xylophone = note(`<
  ~@2 A B ~ C D ~@17 E F ~ G H ~ E F ~ I J ~ E F ~ G H ~ E F ~ I J ~ K L M N O P Q R S T U V W ~@5 X ~@26 Y Z AA ~@3 AB
  AC ~ AD AE ~ AB AC ~ AF AG ~ AB AC ~ AD AE ~ AB AC ~ AF AG ~@2
>`.pickRestart({
  A: "~@8 [e5,a5] ~ [e5,a5] ~ [e5,a5] ~@3", B: "[c#5,f#5] ~ [c#5,f#5] ~ [c#5,f#5] ~@3 [c#5,e5] ~@7",
  C: "~@8 [e5,g#5] ~ [e5,g#5] ~ [e5,g#5] ~@3", D: "[d5,f#5] ~ [d5,f#5] ~ [d5,f#5] ~@3 [b4,e5] ~@7",
  E: "~@12 [f#6,a6] ~ [f#6,a6] ~", F: "[g6,b6] ~ [g6,b6] ~ [f#6,a6] ~ [f#6,a6] ~ [a6,d7] ~@7",
  G: "~@12 [e6,a6] ~ [e6,a6] ~", H: "[f#6,b6] ~ [f#6,b6] ~ [e6,a6] ~ [e6,a6] ~ a6@2 ~@6, ~@8 e7 ~@7",
  I: "~@12 [g#6,b6] ~ [g#6,b6] ~", J: "[a6,c#7] ~ [a6,c#7] ~ [g#6,b6] b6 g#6 ~ a6@2 ~@6, ~@8 d7 ~@7",
  K: "~@6 d5 ~, ~@12 b4 ~@3", L: "~@4 [b4,d5] ~@3 [b4,e5] ~@7",
  M: "[b4,e5] ~@3 [b4,g5] ~ [b4,g5] ~ [b4,g5] ~@3 [b4,g5] ~@3", // E5 Em
  N: "[b4,g5] ~@3 [b4,f#5] ~@3 [b4,e5] ~@3 [b4,g5] ~ [b4,g5] ~", O: "[b4,g5] ~@3 [b4,g5] ~@3 [b4,g5] ~@3 [b4,f#5] ~@3",
  P: "[b4,e5] ~@3 [c5,f#5] ~ [c5,f#5] ~ [c5,f#5] ~@3 [c5,f#5] ~@3", Q: "e5 c5 [c5,e5] e5 c5 ~@7 [c5,d5] ~@3",
  R: "~@4 [c5,d5] ~@3 [c5,e5] ~@7", S: "[c5,e5] ~@3 [c5,a5] ~ [c5,a5] ~ [c5,a5] ~@3 [c5,a5] ~@3",
  T: "[c5,a5] ~@3 [c5,f#5] ~@3 e5@2 ~@2 [c5,a5] ~ [c5,a5] ~, ~@8 c5 ~@7", // F Cdim F
  U: "[c5,a5] ~@3 [c5,a5] ~@3 [c5,a5] ~@3 [c5,f#5] ~@3", V: "[c5,e5] ~@3 [b4,g5] ~ [b4,g5] ~ [b4,g5] ~@3 [b4,g5] ~@3",
  W: "e5 b4 [b4,e5] e5 b4 [b4,e5] ~@10", X: "~@7 e4 f4 [g4,a4,b4] [c5,d5,e5] [f5,g5,a5,b5] [c6,d6] ~@3, ~@12 e6@3 ~",
  Y: "~@12 [b4,g5] ~@3", Z: "[b4,g5] ~@3 [a4,f5] ~@11", AA: "~@4 [a4,f5] ~@3 [a4,f5] ~@3 [g4,e5] ~@3",
  AB: "~@12 [c#5,e5] ~ [c#5,e5] ~", AC: "[d5,f#5] ~ [d5,f#5] ~ [c#5,e5] ~ [c#5,e5] ~ [e5,a5] ~@7",
  AD: "~@12 [b4,e5] ~ [b4,e5] ~", AE: "[c#5,f#5] ~ [c#5,f#5] ~ [b4,e5] ~ [b4,e5] ~ e5@2 ~@6, ~@8 b5 ~@7",
  AF: "~@12 [d#5,f#5] ~ [d#5,f#5] ~", AG: "[e5,g#5] ~ [e5,g#5] ~ [d#5,f#5] f#5 d#5 ~ e5@2 ~@6, ~@8 a5 ~@7",
})).s("gm_xylophone").gain(0.22).pan(0.6)

// chords · drawbar organ · "ORGAN 1"
const drawbar_organ = note("<~@48 A@5 B C@6 D ~@14 E@3 F@2 G@4 H@4 ~@36>".pickRestart({
  A: "[~@13 d6@11 e6@12 g6@16 f#6@4 e6@4 g6@16 f#6@4]/5", B: "e6 f#6@3",
  C: "[e6@12 d6@12 e6@12 a6@16 f#6@4 e6@4 a6@15 f#6@4 e6@5 g6@11 f#6]/6", D: "e6@11 ~@5",
  E: "[~@2 g5 b5 a5@6 ~ g5 [c6,e6]@13 ~ g5 b5 ~ a5@6 g5 [c6,e6]@12]/3", // C
  F: "[~@2 g5 ~@2 a5@6 g5 [c6,e6]@10 g5 ~ [c6,e6]@8, ~@2 b5 ~@13]/2", // C
  G: "[~@4 [b5,f6]@14 g5 b5 a5@6 g5 ~ [b5,f6,a6]@14 g5 b5 a5@7 g5 [b5,f6,a6]@12]/4", // Bdim Bm7b5
  H: "[~@2 g5 ~ a5@7 g5 [b5,f6,a6]@9 ~ b5 ~ [b5,f6,a6]@10 b5 ~ [c6,e6,g6]@23 ~@5, ~@3 b5@2 ~@59]/4", // Bm7b5 C
})).s("gm_drawbar_organ").gain(0.33).pan(0.9)

// chords · drawbar organ · "ORGAN 1" · soft notes
const drawbar_organ_soft = note("<~@48 A@5 B@8 ~@19 C ~@43>".pickRestart({
  A: "[~@13 b4@67]/5", B: "[~ c5@24 b4@6 ~]/8", C: "~@2 g5 ~@13",
})).s("gm_drawbar_organ").gain(0.11).pan(0.9)

// chords · whistle
const whistle = note(`<
  ~@26 A B ~ C D ~ E F ~ G H ~ A B ~ C D ~ E F ~ G H ~@52 I J ~ K L ~ M N ~ O P ~ I J ~ K L ~ M N ~ O P
>`.pickRestart({
  A: "~@4 [d7,f#7] ~@3 [d7,f#7] ~@3 [d7,f#7] ~@3", B: "[c#7,e7] ~@7",
  C: "~@4 [b6,f#7] ~@3 [b6,f#7] ~@3 c#7@2 ~@2, ~@12 f#7 ~@3", D: "d7 ~@7",
  E: "~@4 f#7@2 ~@2 [d7,f#7] ~@3 [c#7,f#7] ~@3, ~@4 d7 ~@11", F: "d7 ~@7, b6 ~@15",
  G: "~@4 f#7@2 ~@2 [b6,f#7] ~@3 [c#7,f#7] ~@3, ~@4 b6 ~@11", H: "d7 ~@7, f#7 ~@15",
  I: "~@4 [c#7,a7] ~@3 [c#7,a7] ~@3 [c#7,a7] ~@3", J: "[b6,g#7] ~@7",
  K: "~@4 [c#7,f#7] ~@3 [c#7,f#7] ~@3 g#7@2 ~@2, ~@12 c#7 ~@3", L: "[a6,a7] ~@7",
  M: "~@4 c#7@2 ~@2 [c#7,a7] ~@3 [c#7,g#7] ~@3, ~@4 a7 ~@11", N: "a6 ~@7, f#7 ~@15",
  O: "~@4 c#7@2 ~@2 [c#7,f#7] ~@3 [c#7,g#7] ~@3, ~@4 f#7 ~@11", P: "a7 ~@7, c#7 ~@15",
})).s("gm_whistle").gain(0.12).pan(0.2)

// other · glockenspiel · "GLOCKENSPL"
const glockenspiel = note("<~@14 A B ~ C D ~@2 E ~@102>".pickRestart({
  A: "~@4 e6 ~ c#6 ~", B: "b5 ~@3 b5@2 ~@2 a5@2 ~@6", C: "~@8 d6 ~@7", D: "b5 ~@3 b5@2 ~@2 d6 ~@7",
  E: "e6@3 ~ c#6@3 ~ a5@2 ~@6",
})).s("gm_glockenspiel").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  A B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C E B C D B C D B C D B C D B C D B C D B C D B
  C D B C D B F G H E G H E D B I D B C D B C D B C D B C D B C D B C D B I G B F D B C D B C D B C D B C E B C D B C D
  B C D B C D
>`.pickRestart({
  A: "~@3 x", B: "~ x", C: "~ x ~@2", D: "x ~@2 x", E: "x!2 ~ x", F: "~ x ~ x", G: "x ~ x!2", H: "~ x!2 ~",
  I: "x!2 ~@2",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@65 A B C A B C D E ~@15 C A B C A B C A B C A ~@25>".pickRestart({
  A: "~ x", B: "~ x ~@2", C: "x ~@2 x", D: "~@2 x!2", E: "x",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  ~@25 A B C A D C E F C A F D A B C A G C H G C A F D E F C E F C E F C E F C E F C E D ~@6 A I J C E K C E F L E F C E
  K C ~@12 A B C A D C E F C A F D A B C A G C H G C A F D
>`.pickRestart({
  A: "~@3 x", B: "x!3 ~", C: "~ x!2 ~", D: "x", E: "x!2 ~ x", F: "x ~ x!2", G: "x!2", H: "~ x ~ x",
  I: "x ~@3 x ~@3 x!8", J: "x!5 ~@3 x ~@3 x ~@3", K: "x ~@6 x!2 ~@3 x ~@3", L: "~@3 x!2 ~@3 x ~@7",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@2 A B ~ A C ~@16 D E ~ F E ~ F E ~ F E ~ F G ~ F E ~ F E ~ F E ~ F E ~ F H I ~@3 F H I ~ J K@11 E ~@14 J K@11 E ~ F
  E ~ F E ~ F E ~ F G ~ F E ~ F E ~ F E ~ F L
>`.pickRestart({
  A: "~@4 x!3 ~", B: "x!3 ~ x ~@3", C: "x ~ x!2 ~@4 x ~@7", D: "~@4 x ~@5 x!3 ~@3", E: "x", F: "~ x!3", G: "x!2 ~@2",
  H: "x ~@2 x", I: "x!3 ~", J: "~@3 x", K: "x!4", L: "x!10 ~ x ~@4",
})).gain(0.25)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@26 A ~@2 A ~@2 A ~@2 A ~@2 A ~@2 A ~@2 A ~@2 A ~@2 A B C ~@3 A B C ~ B A@11 ~@15 B A@11 ~@2 A ~@2 A ~@2 A ~@2 A ~@2
  A ~@2 A ~@2 A ~@2 A D
>`.pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~@11 x ~@3 x", C: "~@3 x ~@3 x ~@8", D: "~@5 x ~@2",
})).gain(0.1)

// drums · splash
const splash = s("cr").struct("<~@74 [~ x ~@2] ~@48 [~@3 x]>").gain(0.35)

// … 34 more lines