Strudelify

Can't Take My Eyes Off You

Boys Town Gang

KeyC majorTempo132 bpm
0:00/0:00
// Can't Take My Eyes Off You — Boys Town Gang
// 132 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 8 "TENOR SAX" named as a reed, played on tenor sax (its piano patch is not one); ch 12 "JAZZ GTR" named as a guitar, played on electric guitar jazz (its piano patch is not one)
// note: Full arrangement: all 189 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/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(`<
  ~@12 A@20 B C D E F G H I A@8 J K L M N J O P Q R S K T U V W X@5 Y Z AA Z@2 X@6 B C D E F G H I@2 AB AC AD AE AB AC
  AF AG AB AC AD AE AH AI AJ ~ AK@5 AL AM AN AM@2 AK@6 B C D E F G H I AO AB AC AD AE AB AC AF AG AB AC AD AE AH AI AJ ~
  AK@5 AL AM AN AM@2 AK@6 B C D E AP G H I AO AB AC AD AE AB AC AF AG AB AC AD AE AH AQ AR AS AT@2
>`.pickRestart({
  A: "c2!2 ~ c2 c2@2 c1!2", B: "d1@2 ~@2 d1@3 ~ d1@3 ~ d1@4", C: "g1@3 ~ g1@3 ~ g1@3 ~ g1@3 ~",
  D: "c1@2 ~@2 c1@3 ~ c1@3 ~ c1@3 ~", E: "c1@3 ~ c1@3 ~ c1@3 ~ c1@2 c#1@2", F: "d1@3 ~ d1@3 ~ d1@3 ~ d1@3 ~",
  G: "g1@3 ~ g1@3 ~ g1@3 ~ g1@2 b0@2", H: "c1@3 ~ c1@3 ~ c1@3 ~ c1@3 ~", I: "a0@3 ~ a0@3 ~ a0@3 ~ a0@3 ~",
  J: "c1@4 ~@2 c1@2 c1@5 ~@3", K: "c1@5 ~ c1@2 c1@4 ~@2 c1@2", L: "c1@5 ~@3 c1@6 ~@2", M: "c1@2 ~ c1 c1@2 ~ c1",
  N: "c1@3 ~ c1@3 ~", O: "f1@2 ~ f1 f1@3 ~", P: "f1@2 ~ f1 ~ f1 ~ f1", Q: "f1@5 ~ f1@2 f1@6 ~@2",
  R: "f1@4 ~@2 f1@2 f1@5 ~@3", S: "c1@2 ~ c1 c1@3 ~", T: "~@2 c1@2 ~@2 c1@2 c1@5 ~@3", U: "c1@5 ~ c1@2 c1@5 ~ c1@2",
  V: "~ c1 ~ c1 c1@2 ~@2", W: "c1@4 ~@2 c1@2 c1@3 ~@5", X: "c1 c2 c1 c2 c1 c2 c1 c2", Y: "c1 c2 c1 c2 d1 d2 e1 e2",
  Z: "f1 f2 f1 f2 f1 f2 f1 f2", AA: "f1 f2 f1 f2 f1 f2 d#1 e1", AB: "d1 d2 d1 d2 d1 d2 d1 d2",
  AC: "g1 g2 g1 g2 g1 g2 g1 g2", AD: "e1 e2 e1 e2 e1 e2 c1 c2", AE: "a0 a1 a0 a1 a0 a1 a0 a1",
  AF: "c2 c3 c2 c3 c2 c3 c2 c3", AG: "a1 a2 a1 a2 a1 a2 a1 a2", AH: "d1@4 ~@2 d1@5 ~ d1@4",
  AI: "~@2 d1@5 ~ d1@2 ~@2 d1@2 ~@2", AJ: "a#0@5 ~ a#0@10", AK: "d#1 d#2 d#1 d#2 d#1 d#2 d#1 d#2",
  AL: "d#1 d#2 d#1 d#2 f1 f2 g1 g2", AM: "g#1 g#2 g#1 g#2 g#1 g#2 g#1 g#2", AN: "g#1 g#2 g#1 g#2 g#1 g#2 f#1 g1",
  AO: "a0@3 ~@13", AP: "d1@3 ~ d1@3 ~ d1@3 ~ d1@4", AQ: "~@2 d1@5 ~ d1@2 ~@2 d1@4", AR: "g1@4 ~@2 g1@5 ~ g1@4",
  AS: "~@2 g1@5 ~ g1@2 ~@2 g1@4", AT: "[c1@9 ~@7]/2",
})).s("gm_electric_bass_finger").gain(0.27)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@32 A B C D A B C ~@9 E ~ F ~ G ~ H ~ I ~ E ~ J ~@3 K@6 L@3 M@7 A B C D A B C ~@18 N@6 O@3 P@7 A B C D A B C ~@18 N@6
  O@3 P@7 A B C D A B C ~@20
>`.pickRestart({
  A: "~@4 [d4,f4,a4] ~ [d4,f4,a4] ~@5 [d4,f4,a4] ~ [d4,f4,a4] ~", // Dm
  B: "~@4 [d4,f4,a4] ~ [d4,f4,a4] ~@3 [d4,f4,a4] ~@3 [d4,f4,a4] ~", // Dm
  C: "~@4 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~ [c4,e4,g4] ~", // C
  D: "~@4 [c4,e4,g4] ~ [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", E: "~@10 [e4,g4,c5] ~@3 [e4,g4,c5] ~",
  F: "~@10 [e4,g4,b4] ~@3 [e4,g4,b4] ~", G: "~@10 [e4,g4,a#4] ~@3 [e4,g4,a#4] ~", H: "~@10 [f4,a4,c5] ~@3 [f4,a4,c5] ~",
  I: "~@10 [c4,f4,g#4] ~@3 [c4,f4,g#4] ~", J: "~@10 [f4,a4,c5] ~@3 [a4,c5,d5] ~",
  K: "[[g4,c5]@3 ~ [g4,c5] ~@5 [g4,c5] ~@3 [g4,c5]@5 ~ [g4,c5] ~@5 [g4,c5] ~@3 [g4,b4]@5 ~ [g4,b4] ~@5 [g4,b4] ~@3 [g4,b4]@5 ~ [g4,b4] ~@5 [g4,b4] ~@3 [g4,a#4]@5 ~ [g4,a#4] ~@5 [g4,a#4] ~@3 [g4,a#4]@5 ~ [g4,a#4] ~@5 [g4,a#4] ~@5]/6", // C5 G Gm
  L: "[[f4,a4,c5]@4 [f4,a4,c5]@4 ~@2 [f4,a4,c5] ~@3 [f4,a4,c5]@5 ~ [f4,a4,c5] ~@5 [f4,a4,c5] ~@3 [f4,g#4]@5 ~ [f4,g#4] ~@5 [f4,g#4] ~@3 [f4,g#4]@2]/3", // F Fm
  M: "[~@4 [f4,g#4] ~@5 [f4,g#4] ~@3 [g4,e5]@5 ~ [g4,e5] ~@5 [g4,c5,e5] ~@3 [g4,c5,e5]@5 ~ [g4,c5,e5] ~@5 [g4,c5,e5] ~@3 [a4,d5,f#5]@5 ~ [a4,d5,f#5] ~@5 [a4,d5,f#5] ~@3 [a4,d5,f5]@5 ~ [a4,d5,f5] ~@5 [a4,d5,f5] ~@3 [g4,c5,e5]@5 ~ [g4,c5,e5] ~@5 [g4,c5,e5] ~@3 [g4,c5,e5]@5 ~ [g4,c5,e5] ~@11, ~@7 c5@3 ~@46]/7", // Fm C D Dm C
  N: "[d#5@3 ~ [a#4,d#5] ~@5 [a#4,d#5] ~@3 [a#4,d#5]@5 ~ [a#4,d#5] ~@5 [a#4,d#5] ~@3 [a#4,d5]@5 ~ [a#4,d5] ~@5 [a#4,d5] ~@3 [a#4,d5]@5 ~ [a#4,d5] ~@5 [a#4,d5] ~@3 [a#4,c#5]@5 ~ [a#4,c#5] ~@5 [a#4,c#5] ~@3 [a#4,c#5]@5 ~ [a#4,c#5] ~@5 [a#4,c#5] ~@5]/6", // D#5 A# A#m
  O: "[[g#4,c5,d#5]@4 [g#4,c5,d#5]@4 ~@2 [g#4,c5,d#5] ~@3 [g#4,c5,d#5]@5 ~ [g#4,c5,d#5] ~@5 [g#4,c5,d#5] ~@3 [g#4,b4]@5 ~ [g#4,b4] ~@5 [g#4,b4] ~@3 [g#4,b4]@2]/3", // G# G#m
  P: "[~@4 [g#4,b4] ~@5 [g#4,b4] ~@3 [a#4,g5]@5 ~ [a#4,g5] ~@5 [a#4,d#5,g5] ~@3 [a#4,d#5,g5]@5 ~ [a#4,d#5,g5] ~@5 [a#4,d#5,g5] ~@3 [c5,f5,a5]@5 ~ [c5,f5,a5] ~@5 [c5,f5,a5] ~@3 [c5,f5,g#5]@5 ~ [c5,f5,g#5] ~@5 [c5,f5,g#5] ~@3 [a#4,d#5,g5]@5 ~ [a#4,d#5,g5] ~@5 [a#4,d#5,g5] ~@3 [a#4,d#5,g5]@5 ~ [a#4,d#5,g5] ~@11, ~@7 d#5@3 ~@46]/7", // G#m D# F Fm D#
})).s("gm_electric_guitar_clean").gain(0.3)

// other · harpsichord · "HARPSICHRD"
const harpsichord = note(`<
  ~@89 A@2 B@2 A@2 ~@2 A@2 B@2 ~@29 A@2 B@2 A@2 ~@2 A@2 B@2 ~@29 A@2 B@2 A@2 ~@2 A@2 B@2 ~@6
>`.pickRestart({
  A: "d4!16", B: "e4!16",
})).s("gm_harpsichord").gain(0.5)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~@48 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 A@2 I@2 C@2 D@2 E@2 F@2 J@2 H@2 ~@25 K@2 L@2 M@2 N@2 O@2 P@2 Q@2 R@2 ~@25 K@2 L@2
  M@2 N@2 O@2 P@2 Q@2 S@2 ~@27
>`.pickRestart({
  A: "[[e4,g4,c5]@24 [e4,g4]@3 a4@2 c5@3]/2", B: "[e4@22 e4@2 g4@2 ~ g4@2 a4@3, c4@29 ~@3, [g4,b4]@25 ~@7]/2",
  C: "[[c4,e4,g4,a#4]@6 c5 a#4]/2", D: "[c4,f4,a4]/2", E: "[[c4,f4,g#4]@24 g#4@3 g4@2 f4@3]/2", F: "[c4,e4,g4]/2",
  G: "[a3,c4,d4,f4]/2", H: "[g3,c4,e4]/2", I: "[e4@22 e4@2 g4@3 g4@2 a4@3, c4@29 ~@3, [g4,b4]@25 ~@7]/2",
  J: "[a3,c4,d4,f#4]/2", K: "[[g4,a#4,d#5]@24 [g4,a#4]@3 c5@2 d#5@3]/2",
  L: "[g4@22 g4@2 a#4@3 ~@2 c5@3, d#4@29 ~@3, [a#4,d5]@25 ~@2 a#4@5]/2", M: "[[d#4,g4,a#4,c#5]@6 d#5 c#5]/2",
  N: "[d#4,g#4,c5]/2", O: "[[d#4,g#4,b4]@24 b4@3 a#4@2 g#4@3]/2", P: "[d#4,g4,a#4]/2", Q: "[c4,d#4,f4,a4]/2",
  R: "[a#3,d#4,g4]/2", S: "[[a#3,d#4,g4]@7 ~]/2",
})).s("gm_epiano1").gain(0.13)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C@2 A D@2 ~ A E F@2 A E G@2 A B C@2 A B C@2 A H@3 A B C@2 ~@8 A B C@2 A I@3 J K L@2 M@2 N@2 O P Q ~ R ~ S@2 T K
  U@2 M@2 N@2 O P Q ~ V ~ S@2 ~@25 W X Y@2 Z@2 AA@2 AB AC AD ~ AE ~ AF@2 ~@25 W X Y@2 Z@2 AA@2 AB AC AD ~ AE ~ AF@2 ~@27
>`.pickRestart({
  A: "[d3,f#3,a3,c4,d4]", B: "[d3,f3,a3,c4,d4]", C: "[c3,g3,c4,e4]/2",
  D: "[[f3,a3,d4] [g3,c4,e4], d3, c4 ~@15 c3 ~@15]/2", E: "[d3,f3,a3,d4], c4 ~@15", F: "[[c3,g3,e4], c4 ~@31]/2",
  G: "[[c3,g3,e4]@5 ~@3, c4 ~@31]/2", H: "[[f3,a3,d4] [g3,c4,e4]@2, d3, c4 ~@15 c3 ~@31]/3",
  I: "[[d3,f3,c4] [c3,e4]@2, [a3,d4], ~@16 [g3,c4] ~@31]/3", J: "[e4,g4,c5]@15 ~", K: "~@8 [e4,g4]@3 a4@2 c5 ~@2",
  L: "[e4@22 e4@2 g4@3 ~@2 a4@3, c4@29 ~@3, [g4,b4]@25 ~@2 g4@5]/2", M: "[[c4,e4,g4,a#4]@22 ~@2 c5@3 ~ a#4@4]/2",
  N: "[[c4,f4,a4]@19 ~@13]/2", O: "[c4,f4,g#4]@15 ~", P: "~@8 g#4@3 g4@2 f4 ~@2", Q: "[c4,e4,g4]@13 ~@3",
  R: "[a3,c4,d4,f4]@15 ~", S: "[[g3,c4,e4]@7 ~]/2", T: "[e4,g4,c5]@5 ~@3",
  U: "[e4@22 e4@2 g4@2 ~ g4@2 a4@2 ~, c4@29 ~@3, [g4,b4]@3 ~]/2", V: "[a3,c4,d4,f#4]@15 ~", W: "[g4,a#4,d#5]@5 ~@3",
  X: "~@8 [g4,a#4]@3 c5@2 d#5 ~@2", Y: "[g4@22 g4@2 a#4@2 ~ a#4@2 c5@2 ~, d#4@29 ~@3, [a#4,d5]@25 ~@7]/2",
  Z: "[[d#4,g4,a#4,c#5]@22 ~@2 d#5@3 ~ c#5@4]/2", AA: "[[d#4,g#4,c5]@19 ~@13]/2", AB: "[d#4,g#4,b4]@15 ~",
  AC: "~@8 b4@3 a#4@2 g#4 ~@2", AD: "[d#4,g4,a#4]@13 ~@3", AE: "[c4,d#4,f4,a4]@15 ~", AF: "[[a#3,d#4,g4]@7 ~]/2",
})).s("gm_piano").gain(0.25)

// chords · tenor sax
const tenor_sax = note(`<
  ~@32 A B C D E F C G ~@36 H@4 A B C I E J C K@2 L M N O P Q R S L Q T U V@2 W@2 ~@12 X@4 A B C D E J C K@2 L M N O P Q
  R S L Q T U V@2 W@2 ~@12 X@4 A B C D E J C K@2 L M N O P Q R S L Q T U ~@6
>`.pickRestart({
  A: "[g#3,d4,f4,d5,f5,g#5]@3 ~ [d5,f5,a5] ~@3 [g#3,d4,f4,d5,f5,g#5]@3 ~ [d5,f5,a5] ~@3", // Ddim Dm Ddim Dm
  B: "[g#3,d4,f4,d5,f5,g#5]@3 ~ [d5,f5,a5] ~ [g#3,d4,f4,d5,f5,c6]@2 ~@2 [g#3,d5,f5,b5] ~@3 [g#3,d4,f4]@2, ~@10 [d4,f4]@2 ~@2 [d5,a5] ~", // Ddim Dm Dm7b5 G#dim Ddim Dm D5
  C: "[g3,c4,e4,c5,e5,g#5]@4 [c5,e5,a5] ~@3 [g3,c4,e4,c5,e5,g#5]@4 [c5,e5,a5] ~@3", // C Am C Am
  D: "[g3,c4,e4,c5,e5,g#5]@3 ~ [c5,e5,a5] ~ [e4,c5,e5,c6] ~@3 [g3,e4,c5,e5,b5] ~@3 [c4,c5,e5,a5] ~, ~@3 [g3,c4] ~ c4 ~ [g3,e4]", // C Am C Cmaj7 Am C5 C
  E: "[g#3,d4,f4,d5,f5,g#5]@3 ~ [d5,f5,a5] ~@3 [g#3,d4,f4,d5,f5,g#5]@4 [d5,f5,a5] ~@3", // Ddim Dm Ddim Dm
  F: "[g#3,d4,f4,d5,f5,g#5]@4 [d5,f5,a5] ~ [d5,f5,c6]@2 ~@2 [g#3,d4,f4,d5,f5,b5] ~@3 [f4,d5,f5,a5] ~, ~@6 [g#3,d4,f4] ~@7 [g#3,d4]@2", // Ddim Dm Dm7 G#dim Dm Ddim G#dim
  G: "[e5,c6]@7 ~", H: "[~@8 f#4@8 f4@15 ~ [g4,c5] ~@31, ~@4 [a4,d5]@25 ~@3, ~@16 e4@13 ~@3]/4",
  I: "[g3,c4,e4,c5,e5,g#5]@3 ~ [c5,e5,a5] ~ [e4,c5,e5,c6] ~@3 [g3,e4,c5,e5,b5] ~@3 [e4,c5,e5,a5] ~, ~@3 [g3,c4] ~ c4 ~ [g3,c4]", // C Am C Cmaj7 Am C5
  J: "[g#3,d4,f4,d5,f5,g#5]@4 [d5,f5,a5] ~ [d5,f5,c6]@2 ~@2 [g#3,d4,f4,d5,f5,b5] ~@3 [g#3,f4,d5,f5,a5] ~, ~@6 [g#3,d4,f4] ~@7 d4@2", // Ddim Dm Dm7 G#dim Dm Ddim
  K: "[e5,c6]/2", L: "[a3,c4,f4] ~ [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~",
  M: "[a3,c4,f4]@2 ~@4 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~", // F Em
  N: "[b3,e4,g4]@2 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~", // Em
  O: "[b3,e4,g4]@2 [b3,e4,g4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~", // Em F
  P: "[a3,c4,f4]@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~", // F
  Q: "[a3,c4,f4]@2 [a3,c4,f4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~", R: "[c4,d4,e4,g4]@15 ~",
  S: "[a3,c4,e4,g4]@13 ~@3", T: "[b3,e4,g4] ~ [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~",
  U: "[b3,e4,g4] ~ [b3,e4,g4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~", V: "[[a3,c4,f4,a4,c5,e5]@29 ~@3]/2",
  W: "[[a#3,d4,f4,g4,a#4]@29 ~@3]/2", X: "[~@8 a4@8 g#4@15 ~ [a#4,d#5] ~@31, ~@4 [c5,f5]@25 ~@3, ~@16 g4@13 ~@3]/4",
})).s("gm_tenor_sax").gain(0.36)

// chords · tenor sax
const tenor_sax_2 = note(`<
  ~@90 A ~ B ~@2 C ~@2 A ~ B D E F@2 ~@26 A ~ B ~@2 C ~@2 A ~ B D E F@2 ~@26 A ~ B ~@2 C ~@2 A ~@8
>`.pickRestart({
  A: "~@4 [c#5,d5] ~@7 [c#5,d5] ~@3", B: "~@4 [d5,e5] ~@7 [d5,e5] ~@3", C: "~@4 [c#5,d5] ~@7 d5@2 ~@2, ~@12 c#5 ~@3",
  D: "d4@3 ~@3 d4@3 ~@3 d4@3 ~", E: "~@2 d4@4 ~@2 d4@2 ~@2 d4@3 ~", F: "[a#3@31 ~]/2",
})).s("gm_tenor_sax").gain(0.3).pan(0.7)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@3 A B C D E B C D E B C D E B C D E B C D E B C D E B C D E ~@8 B C D E B C D E ~@39 F@2 ~@39 F@2 ~@39 F@2 ~@18
>`.pickRestart({
  A: "~@14 a3 ~", B: "d4 ~ d4 ~@3 a3 ~ d4 ~ d4 ~@3 a3 ~", C: "d4 ~ d4 ~@3 a3 ~ d4 ~ d4 ~@3 g3 ~",
  D: "c4 ~ c4 ~@3 g3 ~ c4 ~ c4 ~@3 g3 ~", E: "c4 ~ c4 ~@3 g3 ~ c4 ~ c4 ~@5", F: "[e5,c6]/2",
})).s("gm_brass_section").gain(0.3)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@24 A B C@3 B D@2 ~@8 A B E@4 F G ~@14 H I ~@12 J K L@2 ~@9 M@2 N O P Q R@2 M@2 S@2 T U V@2 ~@14 W@2 ~@9 M@2 N O P Q
  R@2 M@2 X@2 T U V@2 ~@14 W@2 ~@9 M@2 N O P Q Y@2 M@2 Z@2 AA AB AC AD AE ~
>`.pickRestart({
  A: "[d4,f#4]", B: "[d4,f4]@15 ~",
  C: "[e4@2 c4 ~@3 b3@2 ~@2 c4@2 d4@2 ~@2 d4 ~ c4@2 ~@2 b3@2 ~@2 c4@2 d4@2 ~@2 f#4@15 ~, d4@5 ~@9 e4@4 ~@12 e4@17 ~, ~@32 d4 ~@15]/3",
  D: "[d4@2 c4@2 ~@2 b3@2 ~@2 c4@2 d4@2 ~@2 d4 ~ c4@2 ~@2 b3@2 ~@2 c4@2 ~@4, ~@7 e4@2 ~@7]/2",
  E: "[e4@2 c4 ~@3 b3@2 ~@2 c4@2 d4@2 ~@2 d4 ~ c4@2 ~@2 b3@2 ~@2 c4@2 d4@2 ~@2 d4 ~@31, d4@2 ~@5 e4@2 ~@6 e4@15 ~@2]/4",
  F: "~@2 c4 ~@3 b3@2 ~@2 c4@2 ~@2 d4@2, d4 ~@3", G: "~@2 e4@11 ~@3", H: "d4 ~ c4@2 ~@2 b3 ~@3 c4 ~@3 d4@2",
  I: "~ e4@5 ~@2", J: "~ a3", K: "d4@8 b3@5 ~@3",
  L: "[~@2 c4 ~@3 b3@2 ~@2 c4 ~ d4@2 ~@2 d4 ~ c4 ~@3 b3 ~@3 c4@4 ~@2, d4@2 ~@5 e4@2 ~@7]/2",
  M: "[[a2,c3,f3]@21 ~ [b2,e3,g3]@8 ~@2]/2", N: "[b2,e3,g3]@7 ~", O: "[b2,e3,g3]@5 ~ [c3,f3,a3]@7 ~@3",
  P: "[a2,c3,f3]@7 ~", Q: "[a2,c3,f3]@5 ~ [b2,e3,g3]@8 ~@2", R: "[c3@15 ~ a2@12 ~@4, [e3,g3]@7 ~]/2",
  S: "[[b2,e3,g3]@21 ~ [c3,f3,a3]@9 ~]/2", T: "d3@5 ~ d3@5 ~ d3@4", U: "~@2 d3@5 ~ d3@3 ~ d3@3 ~",
  V: "[[a#2,g3,a#3]@31 ~]/2", // D#
  W: "[f3@2 d#3 ~@3 d3 ~@3 [d#3,d#4]@2 f3@2 ~@2 f3 ~ d#3 ~@3 d3 ~@3 d#3@2 f3@2 g3@2, ~@7 g3@2 ~@7]/2", // D#
  X: "[[b2,e3]@21 ~ [c3,a3]@9 ~, g3@31 ~, ~@22 f3 ~@9]/2", Y: "[c3@15 ~ a2@12 ~@4, [e3,g3]@29 ~@3]/2",
  Z: "[[b2,e3,g3]@22 [c3,f3,a3]@9 ~]/2", AA: "[a2,d3]@5 ~ [a2,d3]@5 ~ [a2,d3]@4",
  AB: "~@2 [a2,d3]@5 ~ [a2,d3]@2 ~@2 [a2,d3] ~@3", AC: "[d3,g3]@5 ~ [d3,g3]@5 ~ [d3,g3]@4",
  AD: "~@2 [d3,g3]@5 ~ [d3,g3]@2 ~@2 [d3,g3]@2 ~@2", AE: "[e3,g3,c4]@13 ~@3",
})).s("gm_electric_guitar_jazz").gain(0.31)

// drums · kick
const kick = s("bd").struct("<~@8 [x!4]!179 x ~>").gain(0.52)

// drums · rim
const rim = s("rim").struct(`<
  ~@16 A@16 ~@7 A@9 ~@15 A ~@15 A ~@7 A@2 ~@7 A ~@6 A@2 ~@15 A ~@7 A@2 ~@7 A ~@6 A@2 ~@15 A ~@7 A@2 ~@7 A ~@7 A ~@2
>`.pickRestart({
  A: "~ x ~ x",
})).gain(0.59)

// drums · clap
const clap = s("cp").struct("<~@16 A@32 ~@15 A ~@15 A@10 B@14 A@2 ~@15 A@10 B@14 A@2 ~@15 A@10 B@16 C ~>".pickRestart({
  A: "~ x ~ x", B: "x!4", C: "x",
})).gain(0.52)

// drums · snare
const snare = s("sd").struct("<~@16 [~ x ~ x]!171 ~@2>").gain(0.59)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@30 A B ~@7 A ~@7 B ~@15 B ~@15 B ~@7 A B ~@7 B ~@6 A B ~@15 B ~@7 A B ~@7 B ~@6 A B ~@15 B ~@7 A B ~@7 B ~@7 B ~@2
>`.pickRestart({
  A: "x!16", B: "x!13 ~ x ~",
})).gain(0.33)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A@16 B@7 A@9 C@15 A C@15 A B@7 A@2 B@7 A B@6 A@2 C@15 A B@7 A@2 B@7 A B@6 A@2 C@15 A B@7 A@2 B@7 A B@7 A D ~
>`.pickRestart({
  A: "x ~ x ~ x ~ x!3 ~ x!2 ~ x ~@2", B: "x!16", C: "x!8", D: "x",
})).gain(0.33)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@16 A@16 ~@7 A@9 ~@15 A ~@15 A ~@7 A@2 ~@7 A ~@6 A@2 ~@15 A ~@7 A@2 ~@7 A ~@6 A@2 ~@15 A ~@7 A@2 ~@7 A ~@7 A ~@2
>`.pickRestart({
  A: "~ x ~ x ~ x ~@3 x ~@2 x ~ x!2",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@30 A B ~@7 A ~@7 B ~@15 B ~@15 B ~@7 A B ~@7 B ~@6 A C ~@15 B ~@7 A B ~@7 D ~@6 A C ~@15 B ~@7 A B ~@7 D ~@7 D ~@2
>`.pickRestart({
  A: "x!16", B: "x!7 ~ x ~ x!6", C: "x!7 ~ x ~ x ~@5", D: "x!7 ~ x ~ x ~ x!4",
})).gain(0.2)
// … 56 more lines