Strudelify
Hocus Pocus cover art

1973 · Golden Oldies

Hocus Pocus

Focus

KeyA majorTempo183 bpm
0:00/0:00
// Hocus Pocus — Focus
// 183 bpm, 4/4, key A major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 3 "LEAD GTR" named as a guitar, played on overdriven guitar (its lead 5 charang patch is not one)
// note: duplicate parts dropped: ch 3 "LEAD GTR" overdriven guitar (copy of ch 4 "LEAD GT2" distortion guitar)
// note: Full arrangement: all 158 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(183/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 · slap bass 1 · "E.BASS"
const bass = note(`<
  ~@5 A ~@3 B ~@2 C D ~@2 E F@3 G@4 H@4 G@4 I@2 J K@3 ~@2 C D ~@7 L@8 M@3 N@4 O@4 P@4 I@2 Q@4 ~@3 R ~@7 L@8 M@3 S@4 T@4
  U@4 V@2 W X Y@2 ~@3 Z ~@9 Z AA@4 AB@4 AC@4 AD@4 V@2 W AE Y@2 ~@2 AF@2
>`.pickRestart({
  A: "~@3 e1@6 a1@4 ~@11", B: "~@3 e1@6 a1@5 ~@10", C: "~@4 e1 ~ f#1 ~", D: "g1@4 ~@2 g#1@3 a1@6 ~@9",
  E: "~@2 a2@2 a2 c3 a2 g2",
  F: "[e2@3 d2@3 c2@2 ~ a1@7 ~@2 a1 ~@2 a1@6 ~@3 g1!2 ~ g1@2 ~ a1@3 a1@3 a1@2 ~ a1@9 e2!2 ~ e2@3 ~@3 f2@9]/3",
  G: "[e1 ~@2 c2@9 a#1!2 ~ a#1@3 e2 ~@2 e2@6 e1@6 a1@7 ~@2 a1 ~@2 a1@6 ~@3 g1!2 ~ g1@2 ~ a1@3 a1 ~@2 a1@2 ~ a1@9 e2!2 ~ e2@3 ~@3 f2@9]/4",
  H: "[e1 ~@2 d2@8 ~ a#1!2 ~ b1@3 e1 ~@2 e2@6 e1@6 a1@7 ~@2 a1 ~@2 a1@6 ~@3 g1!2 ~ g1@2 ~ a1@3 a1@3 a1@2 ~ a1@9 e2!2 ~ e2@3 ~@3 f2@9]/4",
  I: "[e1 ~@2 d2@9 a#1!2 ~ b1@3 e1 ~@2 e2@6 e1@6 a1@8 ~ c2@6]/2", J: "~ d2@7",
  K: "[d1 ~@2 d1@3 d1 ~@2 d2@7 ~@2 f2@8 ~ g2@29 ~ e1@4 ~@11]/3",
  L: "[~@3 e2@6 a2@48 a1@42 ~@6 a1@47 ~ a1@11 ~ a2@5 ~ a2@5 ~ a2@6 g2@6 e2@3]/8",
  M: "[d#2@2 ~ d2@3 c2@2 ~ a1@7 ~@2 a1 ~@2 a1@6 ~@3 g1!2 ~ g1@2 ~ a1@3 a1@3 a1@2 ~ a1@9 e2!2 ~ e2@3 ~@3 f2@9]/3",
  N: "[e1 ~@2 c2@9 a#1!2 ~ a#1@3 e2 ~@2 e2@6 e1@6 a1@7 ~@2 a1 ~@2 a1@6 ~@3 g1!2 ~ g1@2 ~ a1@3 a1 ~@2 a1 ~@2 a1@9 e2!2 ~ e2@3 ~@3 f2@9]/4",
  O: "[e1 ~@2 d2@9 a#1!2 ~ b1@3 e1 ~@2 e2@6 e1@6 a1@7 ~@2 a1 ~@2 a1@6 ~@3 g1!2 ~ g1@2 ~ a1@3 a1@3 a1@2 ~ a1@9 e2!2 ~ e2@3 ~@3 f2@9]/4",
  P: "[e1 ~@2 c2@9 a#1!2 ~ a#1@3 e2 ~@2 e2@6 e1@6 a1@7 ~@2 a1 ~@2 a1@6 ~@3 g1!2 ~ g1@2 ~ a1@3 a1@3 a1@2 ~ a1@9 e2!2 ~ e2@3 ~@3 f2@9]/4",
  Q: "[~@24 d1 ~@2 d1@3 d1 ~@2 d2@7 ~@2 f2@8 ~ g2@29 ~ e2@4 ~@11, ~@3 d2@23 ~@70]/4", R: "~@3 a1@2 ~@3",
  S: "[e1 ~@2 c2@9 a#1!2 ~ a#1@3 e2 ~@2 e2@6 e1@6 a1@7 ~@2 a1 ~@2 a1@6 ~@2 g1 ~ g1 ~ g1@2 ~ a1@3 a1 ~@2 a1@2 ~ a1@8 e2 ~ e2 ~ e2@3 ~@3 f2@9]/4",
  T: "[e1 ~@2 d2@8 a#1 ~ a#1 ~ b1@3 e1 ~@2 e2@6 e1@6 a1@6 ~@3 a1 ~@2 a1@6 ~@3 g1!2 ~ g1@2 ~ a1@3 a1@3 a1@2 ~ a1@9 e2!2 ~ e2@3 ~@3 f2@9]/4",
  U: "[e1 ~@2 c2@9 a#1!2 ~ a#1@3 e2 ~@2 e2@6 e1@6 a1@7 ~ a1 ~@2 a1@6 ~@3 g1 ~ g1 g1@2 ~ a1@3 a1@3 a1@2 ~ a1@9 e2 ~ e2 e2@3 ~@3 f2@9 e1]/4",
  V: "[~@2 d2@9 a#1 ~ a#1 b1@3 e1 ~@2 e2@6 e1@6 a1@8 ~ c2@6 ~]/2", W: "~@2 d2@21 d1",
  X: "~@2 d1@3 d1 ~@2 d2@7 ~@2 f2@7", Y: "[~@2 g2@29 ~ e2@4 ~@12]/2", Z: "~@8 a1@3 ~@13",
  AA: "[~@20 e1@2 ~ e1@3 g1@3 g#1 ~@2 a1@7 ~@3 a1 ~ a1@6 ~@3 g1 ~ g1 g1@2 ~ a1@3 a1@3 a1@2 ~ a1@9 e2 ~ e2 e2@3 ~@3 f2@9 e1]/4",
  AB: "[~@2 c2@9 a#1 ~ a#1 a#1@3 e2 ~@2 e2@6 e1@6 a1@7 ~@3 a1 ~ a1@6 ~@3 g1 ~ g1 g1@2 ~ a1@3 a1@3 a1@2 ~ a1@9 e2 ~ e2 e2@3 ~@3 f2@9 e1]/4",
  AC: "[~@2 d2@9 a#1 ~ a#1 b1@3 e1 ~@2 e2@6 e1@6 a1@7 ~@3 a1 ~ a1@6 ~@3 g1 ~ g1 g1@2 ~ a1@3 a1@3 a1@2 ~ a1@9 e2 ~ e2 e2@3 ~@3 f2@9 e1]/4",
  AD: "[~@2 c2@9 a#1 ~ a#1 a#1@3 e2 ~@2 e2@6 e1@6 a1@7 ~@3 a1 ~ a1@6 ~@3 g1 ~ g1 g1@2 ~ a1@3 a1 ~@2 a1 ~@2 a1@9 e2 ~ e2 e2@3 ~@3 f2@9 e1]/4",
  AE: "~@2 d1 ~@2 d1@2 ~ d2@7 ~@2 f2@4 ~@3", AF: "[~@5 e1@3 ~@3 f1@3 ~@3 f#1@3 ~@3 g1@3 g#1@2 ~ a1 ~ a1 a1@6 ~@10]/2",
})).s("gm_slap_bass_1").gain(0.44)

// bass · electric guitar muted · "SynthBass"
const bass_2 = note(`<
  ~@5 A ~@3 B ~@2 C D ~@2 E F@3 G@4 H@4 G@4 I@2 J K@3 ~@2 C D ~@7 L@8 M@3 N@4 O@4 P@4 I@2 Q@4 ~@3 R ~@7 L@8 M@3 S@4 T@4
  U@4 V@2 W X Y@2 ~@3 Z ~@9 Z AA@4 AB@4 AC@4 AD@4 V@2 W AE Y@2 ~@2 AF@2
>`.pickRestart({
  A: "~@3 e0@6 a0@4 ~@11", B: "~@3 e0@6 a0@5 ~@10", C: "~@4 e0 ~ f#0 ~", D: "g0@4 ~@2 g#0@3 a0@6 ~@9",
  E: "~@2 a1@2 a1 c2 a1 g1",
  F: "[e1@3 d1@3 c1@2 ~ a0@7 ~@2 a0 ~@2 a0@6 ~@3 g0!2 ~ g0@2 ~ a0@3 a0@3 a0@2 ~ a0@9 e1!2 ~ e1@3 ~@3 f1@9]/3",
  G: "[e0 ~@2 c1@9 a#0!2 ~ a#0@3 e1 ~@2 e1@6 e0@6 a0@7 ~@2 a0 ~@2 a0@6 ~@3 g0!2 ~ g0@2 ~ a0@3 a0 ~@2 a0@2 ~ a0@9 e1!2 ~ e1@3 ~@3 f1@9]/4",
  H: "[e0 ~@2 d1@8 ~ a#0!2 ~ b0@3 e0 ~@2 e1@6 e0@6 a0@7 ~@2 a0 ~@2 a0@6 ~@3 g0!2 ~ g0@2 ~ a0@3 a0@3 a0@2 ~ a0@9 e1!2 ~ e1@3 ~@3 f1@9]/4",
  I: "[e0 ~@2 d1@9 a#0!2 ~ b0@3 e0 ~@2 e1@6 e0@6 a0@8 ~ c1@6]/2", J: "~ d1@7",
  K: "[d0 ~@2 d0@3 d0 ~@2 d1@7 ~@2 f1@8 ~ g1@29 ~ e0@4 ~@11]/3",
  L: "[~@3 e1@6 a1@48 a0@42 ~@6 a0@47 ~ a0@11 ~ a1@5 ~ a1@5 ~ a1@6 g1@6 e1@3]/8",
  M: "[d#1@2 ~ d1@3 c1@2 ~ a0@7 ~@2 a0 ~@2 a0@6 ~@3 g0!2 ~ g0@2 ~ a0@3 a0@3 a0@2 ~ a0@9 e1!2 ~ e1@3 ~@3 f1@9]/3",
  N: "[e0 ~@2 c1@9 a#0!2 ~ a#0@3 e1 ~@2 e1@6 e0@6 a0@7 ~@2 a0 ~@2 a0@6 ~@3 g0!2 ~ g0@2 ~ a0@3 a0 ~@2 a0 ~@2 a0@9 e1!2 ~ e1@3 ~@3 f1@9]/4",
  O: "[e0 ~@2 d1@9 a#0!2 ~ b0@3 e0 ~@2 e1@6 e0@6 a0@7 ~@2 a0 ~@2 a0@6 ~@3 g0!2 ~ g0@2 ~ a0@3 a0@3 a0@2 ~ a0@9 e1!2 ~ e1@3 ~@3 f1@9]/4",
  P: "[e0 ~@2 c1@9 a#0!2 ~ a#0@3 e1 ~@2 e1@6 e0@6 a0@7 ~@2 a0 ~@2 a0@6 ~@3 g0!2 ~ g0@2 ~ a0@3 a0@3 a0@2 ~ a0@9 e1!2 ~ e1@3 ~@3 f1@9]/4",
  Q: "[~@24 d0 ~@2 d0@3 d0 ~@2 d1@7 ~@2 f1@8 ~ g1@29 ~ e1@4 ~@11, ~@3 d1@23 ~@70]/4", R: "~@3 a0@2 ~@3",
  S: "[e0 ~@2 c1@9 a#0!2 ~ a#0@3 e1 ~@2 e1@6 e0@6 a0@7 ~@2 a0 ~@2 a0@6 ~@2 g0 ~ g0 ~ g0@2 ~ a0@3 a0 ~@2 a0@2 ~ a0@8 e1 ~ e1 ~ e1@3 ~@3 f1@9]/4",
  T: "[e0 ~@2 d1@8 a#0 ~ a#0 ~ b0@3 e0 ~@2 e1@6 e0@6 a0@6 ~@3 a0 ~@2 a0@6 ~@3 g0!2 ~ g0@2 ~ a0@3 a0@3 a0@2 ~ a0@9 e1!2 ~ e1@3 ~@3 f1@9]/4",
  U: "[e0 ~@2 c1@9 a#0!2 ~ a#0@3 e1 ~@2 e1@6 e0@6 a0@7 ~ a0 ~@2 a0@6 ~@3 g0 ~ g0 g0@2 ~ a0@3 a0@3 a0@2 ~ a0@9 e1 ~ e1 e1@3 ~@3 f1@9 e0]/4",
  V: "[~@2 d1@9 a#0 ~ a#0 b0@3 e0 ~@2 e1@6 e0@6 a0@8 ~ c1@6 ~]/2", W: "~@2 d1@21 d0",
  X: "~@2 d0@3 d0 ~@2 d1@7 ~@2 f1@7", Y: "[~@2 g1@29 ~ e1@4 ~@12]/2", Z: "~@8 a0@3 ~@13",
  AA: "[~@20 e0@2 ~ e0@3 g0@3 g#0 ~@2 a0@7 ~@3 a0 ~ a0@6 ~@3 g0 ~ g0 g0@2 ~ a0@3 a0@3 a0@2 ~ a0@9 e1 ~ e1 e1@3 ~@3 f1@9 e0]/4",
  AB: "[~@2 c1@9 a#0 ~ a#0 a#0@3 e1 ~@2 e1@6 e0@6 a0@7 ~@3 a0 ~ a0@6 ~@3 g0 ~ g0 g0@2 ~ a0@3 a0@3 a0@2 ~ a0@9 e1 ~ e1 e1@3 ~@3 f1@9 e0]/4",
  AC: "[~@2 d1@9 a#0 ~ a#0 b0@3 e0 ~@2 e1@6 e0@6 a0@7 ~@3 a0 ~ a0@6 ~@3 g0 ~ g0 g0@2 ~ a0@3 a0@3 a0@2 ~ a0@9 e1 ~ e1 e1@3 ~@3 f1@9 e0]/4",
  AD: "[~@2 c1@9 a#0 ~ a#0 a#0@3 e1 ~@2 e1@6 e0@6 a0@7 ~@3 a0 ~ a0@6 ~@3 g0 ~ g0 g0@2 ~ a0@3 a0 ~@2 a0 ~@2 a0@9 e1 ~ e1 e1@3 ~@3 f1@9 e0]/4",
  AE: "~@2 d0 ~@2 d0@2 ~ d1@7 ~@2 f1@4 ~@3", AF: "[~@5 e0@3 ~@3 f0@3 ~@3 f#0@3 ~@3 g0@3 g#0@2 ~ a0 ~ a0 a0@6 ~@10]/2",
})).s("gm_electric_guitar_muted").gain(0.72)

// chords · overdriven guitar · "E.GTR 1"
const overdriven_guitar = note(`<
  ~ A@3 B@4 C@4 D@4 E@4 F@4 E@4 F@4 G@6 ~@19 H@3 D@4 C@4 D@4 I@2 J@2 K@2 ~@19 H@3 D@4 C@4 L@4 M N O@2 P@2 ~@15 Q@3 R@4 M
  S@3 R@4 M N O@2 P@2 ~@3 T
>`.pickRestart({
  A: "[~@9 [g2,d3,g3]@3 [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3]@3 [a2,e3,a3] ~@2 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [e3,b3,e4]@2 ~@4 [f3,c4,f4]@6 [f2,c3,f3] ~@2]/3", // G5 A5 G5 A5 E5 F5
  B: "[[f2,c3,f3] ~@2 [c3,g3,c4]@6 [c#2,g#2,c#3] ~@2 [c#2,g#2,c#3] ~@2 [a#2,f3,a#3]@2 ~@4 [e3,b3,e4]@6 [c2,g2,c3] ~@2 [c2,g2,c3] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3] ~@2 [a2,e3,a3]@2 ~ [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [e3,b3,e4]@2 ~@4 [f3,c4,f4]@6 [f2,c3,f3] ~@2]/4", // F5 C5 C#5 A#5 E5 C5 G5 A5 …
  C: "[[f2,c3,f3] ~@2 [d3,a3,d4]@6 [d2,a2,d3] ~@2 [d2,a2,d3] ~@2 [b2,f#3,b3]@2 ~ [b1,f#2,b2] ~@2 [e3,b3,e4]@5 ~ [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3]@2 ~ [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [e3,b3,e4]@2 ~@4 [f3,c4,f4]@6 [f2,c3,f3] ~@2]/4", // F5 D5 B5 E5 F5 G5 A5 G5 …
  D: "[[f2,c3,f3] ~@2 [c3,g3,c4]@6 [c#2,g#2,c#3] ~@2 [c#2,g#2,c#3] ~@2 [a#2,f3,a#3]@2 ~@4 [e3,b3,e4]@12 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3]@2 ~ [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [e3,b3,e4]@2 ~@4 [f3,c4,f4]@6 [f2,c3,f3] ~@2]/4", // F5 C5 C#5 A#5 E5 G5 A5 G5 …
  E: "[[f2,c3,f3] ~@2 [d3,a3,d4]@6 [d2,a2,d3] ~@2 [d2,a2,d3] ~@2 [b2,f#3,b3]@2 ~ [b1,f#2,b2] ~@2 [e3,b3,e4]@5 ~ [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [e3,b3,e4]@2 ~@4 [f3,c4,f4]@6 [f2,c3,f3] ~@2]/4", // F5 D5 B5 E5 F5 G5 A5 G5 …
  F: "[[f2,c3,f3] ~@2 [c3,g3,c4]@6 [c#2,g#2,c#3] ~@2 [c#2,g#2,c#3] ~@2 [a#2,f3,a#3]@2 ~@4 [e3,b3,e4]@12 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [e3,b3,e4]@2 ~@4 [f3,c4,f4]@6 [f2,c3,f3] ~@2]/4", // F5 C5 C#5 A#5 E5 G5 A5 G5 …
  G: "[[f2,c3,f3] ~@2 [d3,a3,d4]@6 [d2,a2,d3] ~@2 [d2,a2,d3] ~@2 [b2,f#3,b3]@2 ~ [b1,f#2,b2] ~@2 [e3,b3,e4]@5 ~ [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [a2,e3,a3]@9 [c3,g3,c4]@9 [d3,a3,d4]@28 ~@2 [d3,a3,d4]@9 [f2,c3,f3]@9 [g2,d3,g3]@30 [e2,b2,e3]@4 ~@11]/6", // F5 D5 B5 E5 F5 A5 C5 D5 …
  H: "[~@9 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3]@2 ~ [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [e3,b3,e4]@2 ~@4 [f3,c4,f4]@6 [f2,c3,f3] ~@2]/3", // G5 A5 G5 A5 E5 F5
  I: "[[f2,c3,f3] ~@2 [d3,a3,d4]@6 [d2,a2,d3] ~@2 [d2,a2,d3] ~@2 [b2,f#3,b3]@2 ~ [b1,f#2,b2] ~@2 [e3,b3,e4]@5 ~ [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [a2,e3,a3]@8 ~ [c3,g3,c4]@5 ~]/2", // F5 D5 B5 E5 F5 A5 C5
  J: "[~@3 [d3,a3,d4]@28 ~@2 [d3,a3,d4]@7 ~@2 [f2,c3,f3]@6]/2", K: "[~@3 [g2,d3,g3]@30 [e2,b2,e3]@4 ~@11]/2",
  L: "[[f2,c3,f3] ~@2 [c3,g3,c4]@6 [c#2,g#2,c#3] ~@2 [c#2,g#2,c#3] ~@2 [a#2,f3,a#3]@2 ~@4 [e3,b3,e4]@12 [g2,d3,g3]@2 [a2,e3,a3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3]@2 ~ [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [e3,b3,e4]@2 ~@4 [f3,c4,f4]@6 [f2,c3,f3] ~@2 [f2,c3,f3]]/4", // F5 C5 C#5 A#5 E5 G5 A5 G5 …
  M: "~@2 [d3,a3,d4]@6 [d2,a2,d3] ~@2 [d2,a2,d3] ~@2 [b2,f#3,b3]@2 ~ [b1,f#2,b2] ~@2 [e3,b3,e4]@4", // D5 B5 E5
  N: "~@2 [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [a2,e3,a3]@8 ~ [c3,g3,c4]@5 ~@2", // F5 A5 C5
  O: "[~@2 [d3,a3,d4]@28 ~@2 [d3,a3,d4]@7 ~@2 [f2,c3,f3]@6 ~]/2", P: "[~ [g2,d3,g3]@15 [e2,b2,e3]@2 ~@6]/2",
  Q: "[~@8 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3]@2 ~ [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [e3,b3,e4]@2 ~@4 [f3,c4,f4]@6 [f2,c3,f3] ~@2 [f2,c3,f3]]/3", // G5 A5 G5 A5 E5 F5
  R: "[~@2 [c3,g3,c4]@6 [c#2,g#2,c#3] ~@2 [c#2,g#2,c#3] ~@2 [a#2,f3,a#3]@2 ~@4 [e3,b3,e4]@12 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3]@2 ~ [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [e3,b3,e4]@2 ~@4 [f3,c4,f4]@6 [f2,c3,f3] ~@2 [f2,c3,f3]]/4", // C5 C#5 A#5 E5 G5 A5 G5 A5 …
  S: "[~@2 [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3]@2 ~ [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [g2,d3,g3]@3 [a2,e3,a3]@2 ~ [a2,e3,a3] ~@2 [a2,e3,a3] ~@2 [a2,e3,a3]@6 [a1,e2,a2] ~@2 [a1,e2,a2] ~@2 [e3,b3,e4]@2 ~@4 [f3,c4,f4]@6 [f2,c3,f3] ~@2 [f2,c3,f3]]/3", // F5 G5 A5 G5 A5 E5 F5
  T: "~@8 [a2,e3,a3]@5 ~@11", // A5
})).s("gm_overdriven_guitar").gain(0.39).pan(0.4)

// other · distortion guitar · "LEAD GT2"
const distortion_guitar = note(`<
  ~@9 A@3 ~ A@3 ~ B@3 ~ C@3 ~ C@3 ~ D@3 ~@65 E@2 F G H@2 I J@2 K L@3 M@4 ~@44
>`.pickRestart({
  A: "[~@3 [g4,d5] [a4,e5]!3 [a4,e5]@2 ~@2 [g4,d5] [a4,e5]!3 [a4,e5]@2 ~@7]/3", // G5 A5 G5 A5
  B: "[~@9 [d4,g4]@3 [e4,a4]@3 [e4,a4]@2 ~ [e4,a4]@2 ~ a4@10 ~@2 [d4,g4]@3 [e4,a4]@2 ~ [e4,a4] ~@2 [e4,a4] ~@2 a4@12 ~@15, ~@7 e4@2 ~@6 e4@2 ~@7]/3", // G5 A5 G5 A5
  C: "[~@9 [d4,g4]@3 [e4,a4]@3 [e4,a4]@2 ~ [e4,a4]@2 ~ a4@10 ~@2 [d4,g4]@3 [e4,a4]@2 ~ [e4,a4] ~@2 [e4,a4] ~@2 a4@10 ~@17, ~@7 e4@2 ~@6 e4@2 ~@7]/3", // G5 A5 G5 A5
  D: "[~@9 [d4,g4]@3 [e4,a4]@3 [e4,a4]@2 ~ [e4,a4]@2 ~ a4@9 ~@3 [d4,g4]@3 [e4,a4]@2 ~ [e4,a4] ~@2 [e4,a4] ~@2 a4@10 ~@17, ~@7 e4@2 ~@6 e4@2 ~@7]/3", // G5 A5 G5 A5
  E: "[c5@12 a4@14 ~ g4@3 a4@3 g4@3 f#4@3 g4@3 f#4@3 g4@3]/2", F: "f#4@3 e4@5 ~ e4@2 ~ e4@2 ~ g4@3 a4@3 a#4@3",
  G: "b4@3 c5@3 e5@3 d#5@2 ~ b4@2 ~ d5@2 ~ c5 d5 c5 d5 c5 d5",
  H: "[c5 d5 c5 d5 c5@2 ~ e5 ~ e5@2 ~ g5@2 ~ a5@2 ~ a5@8 a5@3 ~ g5@5 a5@3 g5@5 e4 ~@2 d5 ~, ~@45 e5@2 ~]/2",
  I: "e4 d5@2 c5 e4 ~ c5 a4 ~ e4 a4 ~ g4 e4 ~@2 g4 ~ e4 d#4 ~ d4 c4 ~, ~@15 a4@2 ~@7",
  J: "[~ a3 ~ c4 d4 d#4 ~ e4@2 a4@2 c5@2 d5@2 e5@2 g5@2 a5@2 a5@10 c6 ~ a5 c6 ~ a5 g5 ~ a5 c6 ~ a5 g5 ~ a5 c6 ~, d4 ~@23]/2",
  K: "a5 g5 ~ a5 c6 ~ a5 g5 ~ a5 c6 ~ a5 g5 ~ a5 c6 ~ a5 g5 ~ a5 a5@2",
  L: "[g5@2 e5 ~ g5@2 ~ f#5@2 d5@2 ~ e5@2 ~ d5@2 e5@2 c5@2 d5@2 c5@2 d5@2 b4@2 c5@2 a4@2 b4@2 g4@2 a4@2 f#4@2 g4@2 e4 ~ f#4@11 ~ g#4@4 a4 ~@2 a4 ~ g#4 ~ a4@2 e4@2, ~@11 f#5@2 ~@50 b4@2 ~@7]/3",
  M: "[f4@2 d4 ~ e4 ~ c4@2 d4 ~@3 b3 ~ c4 ~@2 b3 ~ a3 ~ g#3 ~ b3@2 g#3 ~ a3 ~ b3@2 c4 ~ c4@2 d4@2 e4 ~ e4@2 f#4 ~ g4 ~ g4@2 a4@2 b4 ~ b4@2 c5@2 d5 ~ e5@2 d5 ~ e5 ~ g5 ~ e5 ~ a5 ~ a5@9 ~@18]/4",
})).s("gm_distortion_guitar").gain(0.52).pan(0.2)

// chords · percussive organ · "ROCK ORGA"
const percussive_organ = note(`<
  ~@33 A B@4 ~@3 C@8 D@6 E@3 ~@15 A B@4 ~@3 C@8 D@6 E@3 ~@15 F G@2 H@2 ~@40
>`.pickRestart({
  A: "~@3 a4@2 ~ [g4,c5]@2", B: "[~@3 [a4,d5]@28 ~@2 [a4,d5]@7 ~@2 [c5,f5]@8 ~ [d5,g5]@28 ~@2 [g#4,d5,g5]@4 ~@11]/4",
  C: "[~@3 [a4,e5,a5,c6]@4 [e4,d5,g5,b5]@4 [f4,c5,f5,a5]@4 [c4,b4,e5,g5]@4 [d4,a4,d5,f5]@4 [c4,g4,c5,e5]@4 [b3,f#4,b4,d#5]@4 [e4,g#4,b4,e5]@4 [a4,e5,a5,c6]@4 [e4,d5,g5,b5]@4 [f4,c5,f5,a5]@4 [c4,b4,e5,g5]@4 [d4,a4,d5,f5]@4 [c4,g4,c5,e5]@4 [b3,f#4,b4,d#5]@4 [e4,g#4,b4,e5]]/8", // Am Em7 F Cmaj7 Dm C B E …
  D: "[~@3 [a4,c#5,e5]@8 [a#4,d5,f5]@8 [c5,e5,g5]@8 [d5,f5,a5]@8 [e5,g5,b5]@8 [f5,a5,c6]@4 [g5,b5,d6]]/6", // A A# C Dm Em F G
  E: "[~@9 [a5,c#6,e6]@49 ~@14]/3", F: "~@8 a4@6 ~@3 [g4,c5]@7", G: "[~@2 [a4,d5]@28 ~@2 [a4,d5]@7 ~@2 [c5,f5]@7]/2",
  H: "[~ [d5,g5]@14 ~ [g#4,d5,g5]@2 ~@6]/2", // G5 G
})).s("gm_percussive_organ").gain(0.36).pan(0.8)

// chords · flute · "ROCK ORGA"
const flute = note("<~@121 A B C D E F G@5 ~@26>".pickRestart({
  A: "~@8 [e5,a5] ~@2 [e5,a5] ~ [e5,a5]!2 ~@2 [e5,a5] ~ [e5,a5]!2 ~@2 [e5,a5]", // A5
  B: "~@2 [g5,c6]@6 [e5,a5] ~@2 [e5,a5] ~ [e5,a5]!2 ~@2 [e5,a5] ~ [e5,a5] [a5,d6] ~@2 [g5,c6]", // C5 A5 D5 C5
  C: "~@2 [e5,a5]@4 ~@2 [e5,a5] ~@2 [e5,a5] ~ [e5,a5]!2 ~@2 [e5,a5] ~ [e5,a5]!2 ~@2 [e5,a5]", // A5
  D: "~@2 [g5,c6]@4 ~@2 [e5,a5] ~@2 [e5,a5] ~ [e5,a5]!2 ~@2 [e5,a5] ~ [e5,a5] [a5,d6] ~@2 [g5,c6]", // C5 A5 D5 C5
  E: "~@2 [e5,a5]@4 ~@2 [b5,e6]@6 [a5,d6]@6 [g5,c6] ~@2 [e5,a5]", // A5 E5 D5 C5 A5
  F: "~@2 [d5,g5] ~@5 [b5,e6]@6 [a5,d6]@6 [g5,c6] ~@2 [e5,a5]", // G5 E5 D5 C5 A5
  G: "[~@2 [d5,g5] ~@5 [e5,a5]@7 ~@5 [f#5,b5]@7 ~@5 [g5,c6]@6 ~@6 [a5,d6]@6 ~@6 [b5,e6]@6 ~@6 [c6,f6]@6 [d6,g6]@6 e6@17 d6 c6 b5 [g5,a5] [e5,f5] [c5,d5] [g4,a4,b4] [e4,f4] ~@15, ~@80 a6@21 ~@19]/5", // G5 A5 B5 C5 D5 E5 F5 G5 …
})).s("gm_flute").gain(0.51).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A ~@3 A ~ B C D@2 E F G H I F D@2 E F J G I F K L K M E ~@2 N O ~@7 E ~ E ~ P G N Q R D E F S T E F G U E F S U E
  F N Q@3 V W@3 X ~@7 E ~ E ~ P G N Q Y H I F G H I F G H I F Z AA AB AC AD AE AD AF AG AH@3 AI ~@9 AJ ~ AA@2 AB AC AA@2
  AB AC AA@2 AB AC AA@2 AB AC AD AE AD AF AJ ~@3 AK
>`.pickRestart({
  A: "~ x ~ x ~@4", B: "~ x", C: "~@4 x ~@2 x", D: "~@3 x ~@2 x!2", E: "~@3 x ~@4", F: "x ~@3 x ~@2 x",
  G: "~@3 x ~@3 x", H: "x ~@2 x ~@3 x", I: "x ~@2 x ~@4", J: "~@5 x ~ x", K: "~@3 x ~@2 x ~", L: "~ x ~@5 x",
  M: "~ x ~@6", N: "~@3 x ~ x ~ x", O: "~ x!3 ~@4", P: "~@2 x!2 ~@4", Q: "~ x ~ x ~ x ~ x", R: "~ x ~ x ~@2 x!2",
  S: "~@2 x!2 ~@3 x", T: "~@3 x!2 ~@2 x", U: "x ~@2 x ~@2 x!2", V: "~ x ~ x!5", W: "x!8", X: "x!2 ~ x ~@4",
  Y: "~ x ~ x ~@3 x", Z: "~@9 x ~@10 x ~@2 x", AA: "~@8 x ~@11 x ~@2 x", AB: "~@8 x ~@14 x", AC: "~@11 x ~@8 x ~@3",
  AD: "~@8 x ~@8 x ~@6", AE: "~ x ~@8 x ~", AF: "~ x ~@10", AG: "~@8 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
  AH: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", AI: "~@2 x ~@2 x ~@2 x ~@15", AJ: "~ x ~",
  AK: "~@5 x ~@2 x ~@15",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B ~ B A B C D E F G@11 H G@4 I J K ~@12 B ~@6 L F G@7 F G@7 M N O P Q R S T ~@8 B ~@6 L F G@11 U V@3 W X Y Z Y
  AA AB AC Z ~@9 AD ~ AE V@15 W X Y Z ~@4 AF
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@6", C: "~@11 x", D: "~@5 x ~@2", E: "~@5 x!3", F: "x!3 ~@2 x ~@2", G: "~ x ~@3 x ~@2",
  H: "~ x ~ x ~@2 x ~", I: "x ~@3 x ~ x!2", J: "x ~@4 x ~@2", K: "x ~@2 x ~@4", L: "~@3 x ~ x ~ x", M: "x!4 ~ x!2 ~",
  N: "x!2 ~@3 x ~ x", O: "x ~@2 x ~@2 x ~", P: "~@3 x ~@18 x!2", Q: "x!10 ~@3 x ~ x ~@3 x ~ x ~@2",
  R: "~ x ~ x ~@5 x ~@5 x ~@3 x ~ x ~@2", S: "~ x ~ x ~@3 x ~@5 x ~ x ~@6 x ~", T: "x ~@3 x ~@2 x ~ x ~@3 x ~ x!2 ~@7",
  U: "~@3 x ~@10 x ~@9", V: "~ x ~@5 x ~@4", W: "~@2 x ~@11 x ~@8 x", X: "~@11 x ~@5 x ~@2 x ~@2 x", Y: "~@14 x ~@8 x",
  Z: "~ x ~", AA: "~@5 x ~@8 x ~@5 x ~@2 x", AB: "~@2 x ~@2 x ~@5 x ~@2 x ~@5 x ~@2 x", AC: "~@5 x ~@5 x ~@4 x ~@7",
  AD: "~@23 x", AE: "~@7 x ~@4", AF: "~ x ~@2 x ~@7",
})).gain(0.72)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@74 A ~ B C D E F ~@36 G H I J ~@35 K ~>".pickRestart({
  A: "~ x", B: "~@12 x!10 ~@2", C: "~@5 x!2 ~ x!2 ~ x", D: "x ~@3 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x ~@3 x ~",
  E: "x ~@3 x ~ x ~@3 x ~ x ~@3 x ~@2 x ~ x ~@2", F: "~ x ~@4 x ~@3 x ~@13", G: "~@10 x!2 ~ x ~@2 x ~@2 x!2 ~ x ~",
  H: "~ x ~@2 x ~@2 x ~@2 x!2 ~ x ~@5 x ~@2 x ~", I: "~ x ~@2 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  J: "~ x ~@2 x ~@2 x ~@2 x ~@3 x ~@4 x ~@4", K: "~@23 x",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@9 A ~@6 B ~@20 C D E F G ~@7 H ~@6 I J ~@17 K ~@3 A ~ L ~@7 M ~@6 I J ~@19 N ~@2 O P ~@9 Q R S ~@19 N T U V ~
>`.pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@2", C: "~ x ~@5 x", D: "~@3 x ~@2 x ~", E: "~ x ~ x ~@4", F: "x ~@2 x ~@2 x ~",
  G: "x!4 ~@4", H: "~@3 x!2 ~@7", I: "~@3 x ~ x ~ x", J: "~ x ~@6", K: "~ x!2 ~@5", L: "~@3 x!2 ~ x!2 ~ x ~@14",
  M: "~@6 x!2 ~@16", N: "~ x ~@10", O: "~@17 x ~@4 x!2", P: "~ x!2 ~ x!2 ~ x!2 ~@15", Q: "~@7 x ~@4", R: "~@23 x",
  S: "~@2 x ~@2 x ~@18", T: "~@11 x ~@2 x ~@9", U: "~@14 x ~@2 x ~@6", V: "~@11 x ~@5 x ~@6",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  [~@3 x ~ x ~ x]
  [~ x ~@6]
  ~@119
  [~@7 x ~@3 x]
  [~ x ~@2 x ~@2 x ~@2 x ~]!9
  [~ x ~@10]
  ~@26
>`).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@9 A ~@3 B ~ C D ~@19 E F G H I J ~@38 K L ~@34 M N@2 O P ~@11 N ~@19 M ~ Q R S ~
>`.pickRestart({
// … 64 more lines