Strudelify

Just An Illusion

Imagination

KeyE majorTempo110 bpm
0:00/0:00
// Just An Illusion — Imagination
// 110 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 99 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. 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(`<
  ~@8 A B C D E F G H I J G H K J G H K J G H K J G H K J G H K L M@2 N@2 A D E F O@2 P@2 A D E F G H I J G H K Q G H K
  L R@2 C S T@2 E F R@2 U@2 A D E F V W X Y Z AA AB AC AD AE AD AE AF AA AG AH AI
>`.pickRestart({
  A: "~ b1@4 a1 ~@4 b1 e2@6 e2 ~@4 e2@2", B: "~ f#2@4 f#2 ~@4 e1@6 f#1 ~@3 a1 ~@3",
  C: "~ b1@4 a1 ~@4 b1@3 e2@4 e2 ~@4 e2@2", D: "~ f#2@4 f#2 ~@4 e1@6 f#1 ~@3 f#1 ~@3",
  E: "~ a1 ~@3 a1 ~@4 a1!2 ~@4 a1 ~@3 e1@4", F: "~ a1 ~@3 a1 ~@4 a1!2 ~@4 a1 ~@2 a1!2 ~@3",
  G: "~ f#1@4 f#1 ~@4 f#1!2 ~@4 f#1 ~@3 f#1@4", H: "~ e1@4 e1 ~@4 e1!2 ~@4 e1 ~@3 e1@4",
  I: "~ d1@4 d1@2 ~@3 d1!2 ~@4 d1 ~@3 d1@4", J: "~ c#1@4 c#1 ~@4 c#1!2 ~@4 c#1 ~@3 e1@4",
  K: "~ d1@4 d1 ~@4 d1!2 ~@4 d1 ~@3 d1@4", L: "~ c#1@4 c#1 ~@4 c#1!2 ~@4 c#1 ~@3 c#1@4",
  M: "[~ b1@4 a1 ~@5 e2@6 e2 ~@4 e2 f#2@6 f#2 ~@4 e1@6 f#1 ~@3 a1 ~@3, ~@5 b1 ~@18]/2",
  N: "[~ b1@4 a1 ~@4 b1@3 e2@4 e2 ~@5 f#2@5 ~ f#2 ~@4 e1@6 f#1 ~@3 a1 ~@3, ~@11 e2 ~@12]/2",
  O: "[~ b1@4 a1 ~@4 b1@3 e2@4 e2 ~@4 e2 f#2@6 f#2 ~@4 e1@6 f#1 ~@3 a1 ~@3]/2",
  P: "[~ b1@4 a1 ~@4 b1 e2@6 e2 ~@4 e2 f#2@6 ~ f#2 ~@3 e1@6 f#1 ~@3 a1 ~@3]/2",
  Q: "~ c#1@3 ~ c#1 ~@4 c#1!2 ~@4 c#1 ~@3 e1@4",
  R: "[~ b1@4 a1 ~@4 b1 e2@6 e2 ~@4 e2 f#2@6 f#2 ~@4 e1@6 f#1 ~@3 a1 ~@3]/2",
  S: "~ f#2@4 f#2 ~@4 e1@6 f#1 ~@3 a1@2 ~@2",
  T: "[~ b1@4 a1 ~@4 b1@3 e2@4 e2 ~@4 e2 f#2@6 f#2 ~@4 e1@6 f#1 ~@3 f#1 ~@3]/2",
  U: "[~ b1@4 a1 ~@4 b1 e2@6 e2 ~@4 e2 f#2@6 f#2 ~@4 e1@6 f#1 ~@3 a1@2 ~@2]/2", V: "~@7 b1@4 a1 ~@4 b1@2 e2@5 e2",
  W: "~@4 e2@3 f#2@3 ~ f#2 ~@4 c#2@6 b1 ~", X: "~ a1@3 f#1@3 b1@4 a1 ~@4 b1 e2@6 e2",
  Y: "~@4 e2 f#2@6 f#2 ~@4 f#2@6 e2@2", Z: "~ c#2@3 a1@3 b1@4 a1 ~@4 b1@3 e2@4 e2",
  AA: "~@4 e2@3 f#2@4 f#2 ~@4 e1@6 f#1 ~", AB: "~@2 f#1 ~@4 a1 ~@3 a1 ~@4 a1!2 ~@4 a1 ~",
  AC: "~@2 e1@4 ~ a1 ~@3 a1 ~@4 a1!2 ~@4 a1 ~", AD: "~@2 a1 ~@4 b1@4 a1 ~@4 b1@3 e2@4 e2",
  AE: "~@4 e2 f#2@6 f#2 ~@4 e1@6 f#1 ~", AF: "~@2 a1 ~@4 b1@4 a1 ~@4 b1 e2@6 e2",
  AG: "~@2 f#1@2 ~@3 a1 ~@3 a1 ~@4 a1!2 ~@4 a1 ~", AH: "~@2 e1@5 a1 ~@3 a1 ~@4 a1!2 ~@4 a1 ~", AI: "~ a1 ~ a1 ~@20",
})).s("gm_electric_bass_finger").gain(0.74)

// bass · electric bass finger · "FINGERDBAS" · soft notes
const bass_soft = note(`<
  ~@8 A B C D E F G H I J G H K J G H K J G H K J G H K J G H K L M@2 N@2 A D E F O@2 P@2 A D E F G H I J G H K Q G H K
  L R@2 C S T@2 E F U@4 A V E F W X Y Z AA AB AC AD AE AF AG AF AH AB AI AJ AK
>`.pickRestart({
  A: "~ b2@4 a2 ~@4 b2 e3@6 e3 ~@4 e3@2", B: "~ f#3@4 f#3 ~@4 e2@6 f#2 ~@3 a2 ~@3",
  C: "~ b2@4 a2 ~@4 b2@3 e3@4 e3 ~@4 e3@2", D: "~ f#3@4 f#3 ~@4 e2@6 f#2 ~@3 f#2 ~@3",
  E: "~ a2 ~@3 a2 ~@4 a2!2 ~@4 a2 ~@3 e2@4", F: "~ a2 ~@3 a2 ~@4 a2!2 ~@4 a2 ~@2 a2!2 ~@3",
  G: "~ f#2@4 f#2 ~@4 f#2!2 ~@4 f#2 ~@3 f#2@4", H: "~ e2@4 e2 ~@4 e2!2 ~@4 e2 ~@3 e2@4",
  I: "~ d2@4 d2@2 ~@3 d2!2 ~@4 d2 ~@3 d2@4", J: "~ c#2@4 c#2 ~@4 c#2!2 ~@4 c#2 ~@3 e2@4",
  K: "~ d2@4 d2 ~@4 d2!2 ~@4 d2 ~@3 d2@4", L: "~ c#2@4 c#2 ~@4 c#2!2 ~@4 c#2 ~@3 c#2@4",
  M: "[~ b2@4 a2 ~@5 e3@6 e3 ~@4 e3 f#3@6 f#3 ~@4 e2@6 f#2 ~@3 a2 ~@3, ~@5 b2 ~@18]/2",
  N: "[~ b2@4 a2 ~@4 b2@3 e3@4 e3 ~@5 f#3@5 ~ f#3 ~@4 e2@6 f#2 ~@3 a2 ~@3, ~@11 e3 ~@12]/2",
  O: "[~ b2@4 a2 ~@4 b2@3 e3@4 e3 ~@4 e3 f#3@6 f#3 ~@4 e2@6 f#2 ~@3 a2 ~@3]/2",
  P: "[~ b2@4 a2 ~@4 b2 e3@6 e3 ~@4 e3 f#3@6 ~ f#3 ~@3 e2@6 f#2 ~@3 a2 ~@3]/2",
  Q: "~ c#2@3 ~ c#2 ~@4 c#2!2 ~@4 c#2 ~@3 e2@4",
  R: "[~ b2@4 a2 ~@4 b2 e3@6 e3 ~@4 e3 f#3@6 f#3 ~@4 e2@6 f#2 ~@3 a2@2 ~@2]/2",
  S: "~ f#3@4 f#3 ~@4 e2@6 f#2 ~@3 a2@2 ~@2",
  T: "[~ b2@4 a2 ~@4 b2@3 e3@4 e3 ~@4 e3 f#3@6 f#3 ~@4 e2@6 f#2 ~@3 f#2 ~@3]/2",
  U: "[~ b2@4 a2 ~@4 b2 e3@6 e3 ~@4 e3 f#3@6 f#3 ~@4 e2@6 f#2 ~@3 a2 ~@3]/2",
  V: "~ f#3@4 f#3 ~@4 e2@6 f#2 ~@3 f#2@2 ~@2", W: "~@7 b2@4 a2 ~@4 b2@2 e3@5 e3",
  X: "~@4 e3@3 f#3@3 ~ f#3 ~@4 c#3@6 b2 ~", Y: "~ a2@3 f#2@3 b2@4 a2 ~@4 b2 e3@6 e3",
  Z: "~@4 e3 f#3@6 f#3 ~@4 f#3@6 e3@2", AA: "~ c#3@3 a2@3 b2@4 a2 ~@4 b2@3 e3@4 e3",
  AB: "~@4 e3@3 f#3@4 f#3 ~@4 e2@6 f#2 ~", AC: "~@2 f#2 ~@4 a2 ~@3 a2 ~@4 a2!2 ~@4 a2 ~",
  AD: "~@2 e2@4 ~ a2 ~@3 a2 ~@4 a2!2 ~@4 a2 ~", AE: "~@2 a2 ~@4 b2@4 a2 ~@4 b2@3 e3@4 e3",
  AF: "~@4 e3 f#3@6 f#3 ~@4 e2@6 f#2 ~", AG: "~@2 a2@2 ~@3 b2@4 a2 ~@4 b2@3 e3@4 e3",
  AH: "~@2 a2 ~@4 b2@4 a2 ~@4 b2 e3@6 e3", AI: "~@2 f#2@2 ~@3 a2 ~@3 a2 ~@4 a2!2 ~@4 a2 ~",
  AJ: "~@2 e2@5 a2 ~@3 a2 ~@4 a2!2 ~@4 a2 ~", AK: "~ a2 ~ a2 ~@20",
})).s("gm_electric_bass_finger").gain(0.44)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~ A ~ A ~ A ~ A B C D E F@2 ~@9 G ~ G ~@9 G ~ G B C B C B C H@2 D I J K D L M@2 ~@9 G ~ G ~ N O K D P Q@3 R J S D L
  T@2 ~@5 U V W@3 X Y@2 Z@4
>`.pickRestart({
  A: "~@19 a4@2 ~@3, ~@13 b4@11", B: "~ [f#4,b4]@4 [e4,a4] ~@4 [f#4,b4] ~@13",
  C: "~ [b3,e4]@4 [c#4,f#4] ~@4 [b3,e4]@6 [c#4,f#4] ~@3 [c#4,f#4] ~@3", // E5 F#5 E5 F#5
  D: "~@5 [e4,a4] ~@4 [f#4,b4] ~@2 g#4@6 e4@5, ~ [f#4,b4]@6 a4@6 ~@11", // A5 B5
  E: "~ [b3,e4,f#4]@4 c#4 ~@4 [b3,e4]@6 f#4@2 ~@2 [c#4,f#4] ~@3, ~@5 f#4@11 c#4 ~@7", // Bsus4 E5 F#5
  F: "[~@7 a4@6 c#5@6 ~@6 d5@6 c#5@6 e5@6 [d5,e5,a5]!2 ~@3, ~ b4@17 ~ b4@27 ~@2, ~@7 e4@35 ~@6, ~@13 a4@29 ~@6, ~@19 e5@6 a5@17 ~@6]/2", // Dsus2
  G: "~@13 b4@6 a4@4 ~",
  H: "[~@13 c#5@6 ~@6 d5@6 c#5@6 e5@6 d5@5, ~ e4@42 ~@5, ~@7 a4@36 ~@5, ~@13 e5@6 a5@24 ~@5, ~@19 b4@29]/2",
  I: "~ [b3,e4,f#4]@4 c#4 ~@4 [b3,e4]@6 f#4@3 ~ [c#4,f#4] ~@3, ~@5 f#4@11 c#4 ~@2 c#5@5", // Bsus4 E5 F#5
  J: "~@5 [e4,a4] ~@4 [f#4,b4] ~@2 b4@6 c#5@5, ~ [f#4,b4]@6 a4@6 ~@11", // A5 B5
  K: "~ [b3,e4,f#4]@4 c#4 ~@4 [b3,e4]@6 f#4@4 f#4@4, ~@5 f#4@11 c#4 ~@3 c#4 ~@3", // Bsus4 E5
  L: "~ [b3,e4,f#4]@4 c#4 ~@4 [b3,e4]@6 f#4@4 f#4@2 ~@2, ~@5 f#4@11 c#4 ~@3 c#4 ~@3", // Bsus4 E5
  M: "[~@7 a4@6 c#5@6 ~@6 d5@6 c#5@6 e5@6 [d5,e5,a5]!2 ~@3, ~ b4@17 ~ b4@27 ~@2, ~@7 e4@35 ~@6, ~@13 a4@30 ~@5, ~@19 e5@6 a5@17 ~@6]/2", // Dsus2
  N: "~@10 [b3,e4]@6 [c#4,f#4] ~@3 [c#4,f#4] ~@3, ~@19 c#5@5", O: "~ b4@6 a4@6 b4@6 c#5@5",
  P: "~ [b3,e4,f#4]@4 c#4 ~@4 [b3,e4]@6 f#4@4 f#4@3 ~, ~@5 f#4@11 c#4 ~@3 c#4 ~@3", // Bsus4 E5
  Q: "[~@7 a4@6 c#5@6 ~@6 d5@6 c#5@6 ~@6 d5@5 ~ [f#4,b4]@5 [e4,a4] ~@3 [f#4,b4] ~@2 g#4@6 e4@5, ~ b4@17 ~ b4@18 e5@12 ~@23, ~@7 e4@43 ~@22, ~@13 a4@36 ~@6 a4@6 ~@11, ~@19 e5@6 a5@23 ~@24]/3", // B5 A5 B5
  R: "~ [b3,e4,f#4]@4 c#4 ~@4 [b3,e4]@6 f#4@3 ~ f#4 c#4 ~@2, ~@5 f#4@11 c#4 ~@2 c#5@5", // Bsus4 E5
  S: "~ [b3,e4,f#4]@4 c#4 ~@4 [b3,e4]@6 f#4@5 f#4@3, ~@5 f#4@11 c#4 ~@4 c#4 ~@2", // Bsus4 E5
  T: "[~@7 a4@6 c#5@6 ~@6 d5@6 c#5@6 e5@6 [d5,e5,a5]!2 ~@3, ~ b4@17 ~ b4@27 ~@2, ~@7 e4@35 ~@6, ~@13 a4@29 ~@6, ~@19 e5@6 a5@18 ~@5]/2", // Dsus2
  U: "~@7 [b3,e4]@4 [c#4,f#4] ~@4 [b3,e4]@6 [c#4,f#4] ~", V: "~@2 [c#4,f#4] ~@10 a4@6 c#5@5, ~@7 b4@17",
  W: "[~@7 d5@6 c#5@6 ~@6 d5@5 ~ f#4@4 [e4,a4] ~@4 [f#4,b4] ~@2 g#4@6 e4@6 [b3,e4,f#4]@4 c#4 ~@4 [b3,e4]@6 f#4@2, ~ b4@29 ~ b4@6 a4@6 ~@16 f#4@11 c#4 ~, ~@19 e5@12 ~@41]/3", // A5 B5 Bsus4 E5
  X: "~@3 [c#4,f#4] ~@3 [f#4,b4]@5 [e4,a4] ~@3 [f#4,b4] ~@2 b4@5, ~ c#5@6 ~@6 a4@6 ~@5", // F#5 B5 A5 B5
  Y: "[~ c#5@6 [b3,e4,f#4]@4 c#4 ~@4 [b3,e4]@6 f#4@4 f#4@5 [f#4,b4]@5 [e4,a4] ~@3 [f#4,b4] ~@2 g#4@5, ~@11 f#4@11 c#4 ~@3 c#4 ~@10 a4@6 ~@5]/2", // Bsus4 E5 B5 A5 B5
  Z: "[~ e4@6 [b3,e4,f#4]@5 c#4 ~@3 [b3,e4]@6 f#4@4 f#4@2 ~@9 a4@6 c#5@6 ~@6 d5@6 c#5@6 e5@6 [d5,e5,a5]!2 ~@21, ~@12 f#4@10 c#4 ~@3 c#4 ~@4 b4@17 ~ b4@27 ~@20, ~@37 e4@35 ~@24, ~@43 a4@29 ~@24, ~@49 e5@6 a5@17 ~@24]/4", // Bsus4 E5 Dsus2
})).s("gm_lead_2_sawtooth").gain(0.32)

// chords · lead 2 sawtooth · "SAW WAVE" · soft notes
const lead_2_sawtooth_soft = note(`<
  A B A B A B A B ~@18 A C A C D@2 A C ~@20 A C A E@2 C A F ~@26 G@3 ~@8
>`.pickRestart({
  A: "~ [f#4,a4,c#5]@23", B: "~ [e4,g#4]@23, ~ b4@12 ~@11", C: "~ [e4,g#4,b4]@23",
  D: "[~ [a4,c#5]@24 [e4,g#4,b4]@23, ~ f#4@21 ~@26]/2", E: "[~ [g#4,b4]@24 [f#4,a4,c#5]@23, ~ e4@22 ~@25]/2",
  F: "~ [g#4,b4]@23", G: "[~@31 a5@23 ~@18, ~@13 e4@42 ~@17, ~@19 a4@36 ~@17, ~@25 e5@18 ~@29]/3",
})).s("gm_lead_2_sawtooth").gain(0.16)

// other · piano · "EL/AC.PNO"
const piano = note("<~@66 A B A C D E F@2 ~@25>".pickRestart({
  A: "~ b4 a4 ~ b4 a4 ~@2 a4 ~@2 b4 ~@2 a4 ~@2 b4 ~@2 a4 ~ b4 c#5, ~@7 b4@2 ~@15",
  B: "~@2 f#4 ~@2 f#4 ~@18, ~ a4@2 ~@21", C: "~ e5 f#5 ~@2 f#5 ~@14 g#5 ~ f#5 ~, ~@19 a5@2 ~@3",
  D: "~ b5 a5 ~ b5 a5 ~ b5 a5 ~@2 b5 ~@2 a5 ~@2 b5 ~@2 a5 ~ b5 c#6", E: "~ a5 f#5 ~@2 f#5 ~@18",
  F: "[~ b5@3 ~@9 a5@5 a5@4 a5 ~@14 a5@11, ~@4 a5@4 a5@4 ~@11 a5@5 a5 a6@3 a5@2 b6@14, ~@5 c#6@43, ~@5 e6@19, ~@25 f#6@23]/2",
})).s("gm_piano").gain(0.58)

// chords · epiano1 · "EL/AC.PNO"
const epiano1 = note(`<
  ~@14 A B C D C B A E ~@4 A B C B C B A F ~@4 G H I J G H ~@2 G H G H G H K L A B C D C B A F ~@12 G H G H G H K@2 ~@4
  M N O@3 P Q R Q P S@2 T
>`.pickRestart({
  A: "~ [a4,c#5,e5] ~@3 [a4,c#5,e5] ~@4 [a4,c#5,e5]!2 ~@4 [a4,c#5,e5] ~@3 [a4,c#5,e5]@3 ~", // A
  B: "~ [g#4,b4,e5] ~@3 [g#4,b4,e5] ~@4 [g#4,b4,e5]!2 ~@4 [g#4,b4,e5] ~@3 [g#4,b4,e5]@3 ~", // E
  C: "~ [a4,c#5,e5] ~@3 [a4,c#5,e5] ~@4 [a4,c#5,e5]!2 ~@4 [a4,c#5,e5] ~@3 [a4,c#5,e5]@4", // A
  D: "~ [g#4,b4,e5] ~@3 [g#4,b4,e5] ~@4 [g#4,b4,e5]!2 ~@4 [g#4,b4,e5] ~@3 [g#4,b4,e5]@4", // E
  E: "~ [g#4,b4] ~@3 [g#4,b4,e5] ~@4 [g#4,b4,e5]!2 ~@4 [g#4,b4,e5] ~@3 [e3,g#4,b4,e5]@4, ~ e5@2 ~@21", // G#m E
  F: "~ [g#4,b4,e5] ~@3 [g#4,b4,e5] ~@4 [g#4,b4,e5]!2 ~@4 [g#4,b4,e5] ~@3 [e3,g#4,b4,e5]@4", // E
  G: "~ [b4,d5,f#5] ~@3 [b4,d5,f#5] ~@4 [b4,d5,f#5] ~@5 [b4,d5,f#5] ~@3 [b4,d5,f#5] ~@3", // Bm
  H: "~ [g#4,b4,e5]@3 ~ [a4,c#5,e5] ~@4 [g#4,b4,e5]@5 ~ [a4,c#5,e5] ~@3 [a4,c#5,e5] ~@3", // E A E A
  I: "~ [b4,d5,f#5] ~@4 [b4,d5,f#5] ~@3 [b4,d5,f#5] ~@5 [b4,d5,f#5] ~@3 [b4,d5,f#5] ~@3", // Bm
  J: "~ [g#4,b4,e5]@3 ~ [c#5,e5] a4 ~@3 [g#4,b4,e5]@5 ~ [a4,c#5,e5] ~@3 [a4,c#5,e5] ~@3", K: "~ [a3,e4,g4,b4,d5]@23",
  L: "~ [a3,g4,b4,d5,e5]@21 ~@2", M: "~@22 [b4,d5,f#5] ~", N: "~@2 [b4,d5,f#5] ~@21",
  O: "[~@25 [e5,g5,b5,d6]@29 ~ [b4,d5,f#5] ~@3 [b4,d5,f#5] ~@4 [b4,d5,f#5] ~@5 [b4,d5,f#5] ~, ~@7 [e4,g4,b4,d5]@47 ~@18]/3", // Em7 Bm Em7
  P: "~@2 [b4,d5,f#5] ~@4 [g#4,b4,e5]@3 ~ [a4,c#5,e5] ~@4 [g#4,b4,e5]@5 ~ [a4,c#5,e5] ~", // Bm E A E A
  Q: "~@2 [a4,c#5,e5] ~@4 [b4,d5,f#5] ~@3 [b4,d5,f#5] ~@4 [b4,d5,f#5] ~@5 [b4,d5,f#5] ~", // A Bm
  R: "~@2 [b4,d5,f#5] ~@4 [g#4,b4,e5]@4 [a4,c#5,e5] ~@4 [g#4,b4,e5]@5 ~ [a4,c#5,e5] ~", // Bm E A E A
  S: "[~@2 [a4,c#5,e5] ~@4 [a3,e4,g4,b4,d5]@23 ~ [a3,e4,g4,b4,d5]@17]/2", T: "~ [g4,b4,d5,e5] [g4,b4,e5] d5 ~@20",
})).s("gm_epiano1").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@8
  [~ x ~@5 x ~@5 x ~@5 x ~@4]!74
  [~@7 x ~@5 x ~@5 x ~@4]
  [~ x ~@5 x ~@5 x ~@5 x ~@4]!15
  [~ x ~@22]
>`).gain(0.52)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B A@15 B A@13 B A B A@5 B A B A@3 B A@13 B A B A@3 B A B A B A@3 B C D E D E D@5 E D E D@3 F
>`.pickRestart({
  A: "~@7 x ~@11 x ~@4", B: "~@7 x ~@11 x!2 ~@3", C: "~@13 x ~@10", D: "~ x ~@11 x ~@10", E: "~ x!2 ~@10 x ~@10",
  F: "~ x!2 ~@21",
})).gain(0.66)

// drums · clap
const clap = s("cp").struct("<~@13 [~@19 x ~@4] [~@7 x ~@11 x ~@4]!68 [~@13 x ~@10] [~ x ~@11 x ~@10]!15 [~ x ~@22]>")
  .gain(0.59)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B C D A D C D@2 B D@3 B E B@3 C D@2 B D@3 B C B@3 F G A B A D A D H G I D A B A J C D@2 B D@3 B A D@3 K G A D F
  L A M N G A D A B A J O D P Q P D R D S Q P Q P D R D T
>`.pickRestart({
  A: "~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2", B: "~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@3",
  C: "~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@3", D: "~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2",
  E: "~ x ~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@3", F: "~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~",
  G: "x!3 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2", H: "~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@2 x ~ x!2 ~ x ~",
  I: "~@2 x ~ x!2 ~ x!2 ~ x ~ x!3 ~ x!2 ~ x!2 ~ x!2", J: "~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~@4",
  K: "~@2 x ~ x ~ x!3 ~ x ~ x!3 ~ x!2 ~ x!2 ~ x ~", L: "x!3 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@3",
  M: "~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@4 x!2 ~@3", N: "~@2 x ~ x!2 ~ x!2 ~ x ~ x!3 ~@2 x ~ x!2 ~ x ~",
  O: "~@8 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2", P: "~ x!2 ~ x!2 ~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2",
  Q: "~ x!2 ~ x ~ x!3 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2", R: "~ x!2 ~@5 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2",
  S: "~ x!2 ~@5 x ~ x ~ x!3 ~ x!2 ~ x!2 ~ x!2", T: "~ x!2 ~@21",
})).gain(0.37)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9 A@2 ~@3 A ~@2 A ~@3 A@6 ~@2 A ~@3 A@5 ~@3 A ~@4 B ~@4 A ~@2 A ~@2 A ~@3 A ~@9 A ~ C B ~@4 A ~@8 D ~ D ~@5 D ~@2
>`.pickRestart({
  A: "~@11 x", B: "~@2 x", C: "~@8 x ~@2 x", D: "~ x ~@4",
})).gain(0.52)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~ A ~ A ~ A ~@7 A ~@3 A ~@7 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@7 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B
  ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@2
>`.pickRestart({
  A: "~ x ~@22", B: "~@7 x ~@16",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A@22 B A@15 C D A@6 C D E A@4 F A@12 G D A@2 C H A@2 G D A@5 F I A@2 J A@4 E J A K A@4 L
>`.pickRestart({
  A: "~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2", B: "~ x ~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2",
  C: "~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~", D: "x!3 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2",
  E: "~ x!2 ~ x!2 ~ x!2 ~ x ~ x!3 ~ x!2 ~ x!2 ~ x!2", F: "~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~@4",
  G: "~ x!2 ~ x!2 ~ x!2 ~ x ~ x!3 ~ x!2 ~ x!2 ~ x ~", H: "x!2 ~ x!3 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2",
// … 11 more lines

More by Imagination