Strudelify
My Sharona cover art

Get The Knack

My Sharona

The Knack

KeyG minorTempo152 bpm
0:00/0:00
// My Sharona — The Knack
// 152 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 135, 4/4 at bar 136) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 electric guitar clean (copy of ch 5 distortion guitar)
// note: Full arrangement: all 155 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(152/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.

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@7 A@2 B@2 C ~@3 C ~@3 D@2 E@3 F@3 G H C ~@3 C ~@3 D@2 E@3 I@2 H G H J K@2 H J L@2 H J M@2 H J K@2 N O H B@2 A@2 B@2
  C ~@3 C ~@3 D@2 E@3 P@2 H J Q@2 H G H G H G H R@3 S@2 T@2 U@2 T@2 U@2 V@2 U@2 T@6 U@2 T@2 W@2 T@2 X@2 T@2 N Y Z AA AB
  AA AB AA AB AA AB AA AB AC AD AA AB AC AE AA AB AC AF
>`.pickRestart({
  A: "[[g3,c4,e4]@4 [g3,c4] ~ [g3,c4,e4]@2 [g3,c4,e4]@2 [f3,bb3,d4]@4 f2@4 g2@2 g3@2 g3@2 g2@2 ~@2 g3@2 ~@2]/2", // C C5 C Bb
  B: "[g2 ~ g3 ~ g2!2 g3 f2@2 g2 g3!2 g2 ~ g3 ~]/2",
  C: "[g3,c4,e4]@4 [g3,c4] ~ [g3,c4,e4]@2 [g3,c4,e4]@2 [f3,bb3,d4]@4 ~@2", // C C5 C Bb
  D: "[[g3,c4,e4]@4 [g3,c4] ~ [g3,c4,e4]@2 [g3,c4,e4]@2 [f3,bb3,d4]@4 f2@4 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2]/2", // C C5 C Bb G5
  E: "[[g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [f3,bb3,d4]@33 ~]/3", // G5 Bb
  F: "[[g3,c4,e4]@6 [g3,c4,e4]@4 [g3,c4] ~ [bb3,eb4,g4]@6 [bb3,eb4,g4]@4 [bb3,eb4] ~ [bb3,eb4,g4]@3 ~ f2@6 g2@2 g3@2 g3@2 g2@2 ~@2 g3@2 ~@2]/3", // C C5 Eb Eb5 Eb
  G: "g2 ~ g3 ~ g2!2 g3 f2", H: "g2!2 g3!2 g2 ~ g3 ~",
  I: "[[g3,c4,e4]@6 [g3,c4,e4]@4 [bb3,eb4,g4]@2 [bb3,eb4,g4]@6 [bb3,eb4,g4]@6 [bb3,eb4,g4]@3 ~ f2@4]/2", // C Eb
  J: "g2 ~ g3 ~ g2!2 g3 ~",
  K: "[[c4,f4]@6 [c4,e4]@2 ~@4 [bb3,f4]@6 [bb3,eb4]@3 ~@3 [c4,f4,a4]@2 [bb3,eb4,g4]@2 [c4,f4,a4]@2 [d4,e4,g4] [b3,c4,d4,e4,f4]]/2", // F5 C Bb5 Eb5 F Eb F Em7 …
  L: "[[c4,f4]@6 [c4,e4]@4 ~@2 [bb3,f4]@6 [bb3,eb4]@5 ~ [c4,f4,a4]@2 [bb3,eb4,g4]@2 [c4,f4,a4]@2 [d4,e4,g4] [b3,c4,d4,e4,f4]]/2", // F5 C Bb5 Eb5 F Eb F Em7 …
  M: "[[c4,f4]@6 [c4,e4]@2 ~@4 [bb3,f4]@6 [bb3,eb4]@5 ~ [c4,f4,a4]@2 [bb3,eb4,g4]@2 [c4,f4,a4]@2 [d4,e4,g4] [b3,c4,d4,e4,f4]]/2", // F5 C Bb5 Eb5 F Eb F Em7 …
  N: "[d3,a3,d4]!8", O: "[d3,a3,d4]!5 ~ f2@2",
  P: "[[g3,c4,e4]@6 [g3,c4,e4]@4 [g3,c4] ~ [bb3,eb4,g4]@6 [bb3,eb4,g4]@4 [bb3,eb4] ~ [bb3,eb4,g4]@3 ~ f2@4]/2", // C C5 Eb Eb5 Eb
  Q: "[[g3,c4,e4]@6 [g3,c4,e4]@4 ~@2 [bb3,eb4,g4]@6 [bb3,eb4,g4]@6 [bb3,eb4,g4]@3 ~ f2@4]/2", // C Eb
  R: "[g2@2 ~@2 g3@2 ~@2 g2@2 g2@2 g3@2 ~@3 e4@3 [c4,e4] ~ [b3,d4]@2 [b3,d4]@4 [b3,d4] ~ [c4,f4]@2 [c4,f4]@4 [c4,f4] ~ [c4,e4]@2 [c4,e4]@2 [c4,e4] ~ [b3,d4]@4, ~@15 c3@32 ~, ~ g3@2, ~@4 c4 ~@7]/3", // C Bm F5 C Bm
  S: "[~ e4@3 [c4,e4] ~ [b3,d4]@2 [b3,d4]@4 [b3,d4] ~ [c4,f4]@2 [c4,f4]@4 [c4,f4] ~ [c4,e4]@2 [c4,e4]@2 [c4,e4] ~ [b3,d4]@4, [c3,g3], c4 ~@7]/2", // C Bm F5 C Bm C5
  T: "[~ e4@3 [g3,c4,e4] ~@4 g4@3 [g3,b3,d4] ~@4 f4@3 [f3,a3,c4] ~@8 g4@2 [g3,d4], [c3,g3,c4]@2 ~ [g3,b3,d4] [g3,b3,d4]@2 ~ [f3,a3,c4] [f3,a3,c4]@2 ~ [f3,a3,c4]!2 [g3,b3,d4]!2 ~, ~@7 g4@2 ~@6 f4@2 ~@6 f4@2 f4@2 g4@2 ~@3]/2", // C G F G5 C5 G F G
  U: "[~ e4@3 [g3,c4,e4] ~@4 g4@3 [g3,b3,d4] ~@4 f4@3 [f3,a3,c4] ~@8 g4@2 ~, [c3,g3,c4]@2 ~ [g3,b3,d4] [g3,b3,d4]@2 ~ [f3,a3,c4] [f3,a3,c4]@2 ~ [f3,a3,c4]!2 [g3,b3,d4]!2 ~, ~@7 g4@2 ~@6 f4@2 ~@6 f4@2 f4@2 g4@2 ~@3]/2", // C G F C5 G F G
  V: "[~ e4@3 [g3,c4,e4] ~@4 g4@3 [g3,b3,d4] ~@4 f4@3 [f3,a3,c4] ~@4 f4 [f3,c4,f4]!2 ~ g4@2 ~, [c3,g3,c4]@2 ~ [g3,b3,d4] [g3,b3,d4]@2 ~ [f3,a3,c4] [f3,a3,c4]@2 ~ [f3,a3,c4]!2 ~ [g3,b3,d4] ~, ~@7 g4@2 ~@6 f4@2 ~@6 f4@2 ~@7]/2", // C G F F5 C5 G F G
  W: "[~ e4@3 [g3,c4,e4] ~@4 g4@3 [g3,b3,d4] ~@4 f4@15, [c3,g3,c4]@2 ~ [g3,b3,d4] [g3,b3,d4]@2 ~ [f3,a3,c4] [f3,a3,c4]@8, ~@7 g4@2 ~@6 f4@2 ~@15]/2", // C G C5 G F
  X: "[~ e4@3 [g3,c4,e4] ~@4 g4@3 [g3,b3,d4] ~@4 f4@3 [f3,a3,c4] ~@4 f4 [f3,c4,f4] ~@5, [c3,g3,c4]@2 ~ [g3,b3,d4] [g3,b3,d4]@2 ~ [f3,a3,c4] [f3,a3,c4]@2 ~ [f3,a3,c4]!2 ~@3, ~@7 g4@2 ~@6 f4@2 ~@6 f4@2 ~@7]/2", // C G F F5 C5 G F
  Y: "[d3,a3,d4]!5 ~@3", Z: "~@2 f2@2 g2!2 g3!2", AA: "g2 ~ g3 ~ g2 ~ g3 ~", AB: "g2!2 g3 f2 g2!2 g3!2",
  AC: "g2@2 ~@2 g3@2 ~@2 [g3,c4,e4]@4 [g3,c4] ~ [g3,c4,e4]@2", AD: "[g3,c4,e4] [f3,bb3,d4]@2 f2@2 g2 g3!2",
  AE: "[g3,c4,e4] [f3,bb3,d4] ~ f2@2 g2 g3!2", AF: "[g3,c4,e4] [f3,bb3,d4]@3 ~@4",
})).s("gm_distortion_guitar").gain(0.35).pan(0.3)

// bass · electric bass pick
const bass = note(`<
  ~@3 A B C D E D C D E D C D E D C D E F G@2 H I@2 B C B E D C D E D C D E F G@2 H I@2 D C D C J@2 D K J@2 B K J@2 B K
  J@2 L M D C D E D C D E D C D E D C D E F G@2 H I@2 B C J@2 D C D C D C D C N@2 O@2 P Q P Q P Q P Q R S T U T U T V R
  W T X R W R Y P Q P Z P Q L AA AB AC AD AC AD AC AD AC AE AC AE AF AG AC AE AF AG AC AE AF AH
>`.pickRestart({
  A: "~@3 d2", B: "g1@2 g1 ~ g2@2 g2@2 g1@2 ~@2 g2@2 ~@2", C: "g1 ~ g2 ~ g1!2 g2 f1",
  D: "g1@2 g1 ~ g2@2 g2 ~ g1@2 ~@2 g2@2 ~@2", E: "c2@5 ~ bb1@2 c2@2 bb1@3 ~ gb1@2", F: "g1!2 g2!2 g1!2 g2!2",
  G: "[g1!2 g2!2 g1!2 g2 bb1@2 bb1 bb2!2 bb1!2 bb2!2]/2", H: "bb1!2 bb2!2 bb1!2 bb2!2",
  I: "[c2@6 c2@6 eb2@6 eb2@6 eb2@3 ~ f1@4]/2", J: "[c2@3 c2@3 eb2@3 eb2@3 f2 eb2 f2@2]/2", K: "g1 ~ g2 ~ g1!2 g2@2",
  L: "d2!8", M: "d2!5 ~ f1@2", N: "[c2@7 g2]/2", O: "[c3@18 db3 d3@2 db3 d3@2 db3 d3@2 c3@3 g2@2]/2",
  P: "c2@2 ~ g1 g1@2 ~ f1", Q: "f1@5 ~ f1@2 f1@4 g1@3 ~", R: "c2@5 ~ g1@2 g1@5 ~ f1@2",
  S: "f1@5 ~ e1@2 f1@2 g1@2 a1@2 b1@2", T: "c2@3 g1 g1@3 f1", U: "f1@3 e1 f1 g1 a1 b1", V: "f1 e1 f1 e1 f1 g1 a1 b1",
  W: "f1@5 ~ f1@2 f1@2 g1@2 a1@2 b1@2", X: "f1@3 f1!2 g1 a1 b1", Y: "f1@5 ~ f1@2 c3@3 ~ c3@3 ~, ~@8 b2 ~@3 b2 ~@3",
  Z: "f1@5 ~ f1@2 f1@4 ~@4", AA: "d2!5 ~@3", AB: "~@4 d2@4 g1@2 g1 ~ g2@2 g2 ~", AC: "g1 ~ g2 ~ g1 ~ g2 ~",
  AD: "g1@2 g1@2 g2@2 f1@2 g1@2 g1 ~ g2@2 g2@2", AE: "g1@2 g1@2 g2@2 f1@2 g1@2 g1 ~ g2@2 g2 ~",
  AF: "g1@2 ~@2 g2@2 ~@2 c2@5 ~ bb1@2", AG: "c2@2 bb1@3 ~ gb1@2 g1@2 g1 ~ g2@2 g2 ~", AH: "c2 bb1@3 ~@4",
})).s("gm_electric_bass_pick").gain(0.18)

// other · lead 4 chiff
const lead_4_chiff = note(`<
  ~@11 A@2 B C D E B F G H I J K L@2 M N ~ O@2 P Q R@2 S@2 D T U V W X Y M Z M N ~@23 AA AB AC AD AE AF P AD AG@2 AH AI
  AJ AK Y ~ AL AM AN M AO M AP M AQ M AR ~@44 AS@4 AT AU@3 AT AV@3 AW
>`.pickRestart({
  A: "[~@14 f4@4 f4@2 f4 ~ f4 ~ f4@2 f4@2 g3@2 ~@2]/2", B: "~@4 f4 ~ f4@2 g3@2 ~@4 f4@2",
  C: "~@2 f4 ~ f4 ~ f4 ~ f4@2 f4 ~ f4@3 ~", D: "g4@5 ~ g4@2 g4@2 f4@3 ~ f4@2",
  E: "~@2 f4 ~ f4@2 f4 ~ f4 ~ f4@2 g3@2 ~@2", F: "~@2 f4 ~ f4 ~ f4 ~ f4@2 f4@2 f4@3 ~",
  G: "g4@4 ~@2 g4@2 g4@2 f4@3 ~ f4@2", H: "~@2 f4 ~ f4 ~ f4@2 g3@2 ~@2 f4@2 f4@2",
  I: "g3@2 ~@2 f4@2 f4 ~ f4@2 f4 ~ f4 ~ f4@2", J: "~@2 f4 ~ f4@2 f4@2 g3@2 ~@2 f4@2 f4 ~",
  K: "g3@2 ~@2 f4@2 f4 ~ f4 ~ f4 ~ f4@2 ~@2, a3 ~@15", L: "[g4@5 ~ g4@4 ~@2 g4@6 g4@5 ~ g4@2 d4 ~ bb4@4]/2",
  M: "~@10 f4 ~ f4 ~ f4 ~", N: "f4@5 ~ f4@2 f4@2 g3@2 ~@4", O: "[~@14 f4@4 f4 ~ f4 ~ f4 ~ f4 ~ f4@2 g3@2 ~@2]/2",
  P: "~@2 f4!2 g3 ~@2 f4", Q: "~@2 f4 ~ f4@2 f4@2 f4@2 f4 ~ f4@2 ~@2",
  R: "[g4@5 ~ g4@2 g4@2 f4@3 ~ f4@4 f4 ~ f4 ~ f4 ~ f4 ~ f4@2 g3@2 ~@2]/2",
  S: "[~@4 f4@2 f4@2 g3@2 ~@4 f4@4 f4 ~ f4 ~ f4@2 f4@2 f4 ~ f4@2 ~@2]/2", T: "~ f4!3 g3 ~ f4!2",
  U: "g3@2 ~@2 f4@2 f4@2 f4 ~ f4@2 f4 ~ f4@2", V: "~@2 f4@2 f4 ~ f4@2 g3@2 ~@2 f4 ~ f4@2",
  W: "g3@2 ~@2 f4@2 f4 ~ f4 ~ f4 ~ f4@2 ~@2", X: "g4@6 g4@3 ~@3 g4@4", Y: "~@2 g4@5 ~ g4@2 ~@2 bb4@4",
  Z: "f4@2 ~ f4!2 g3 ~@2", AA: "~@7 f4", AB: "~@2 f4 ~ f4 ~ f4 ~ f4 ~ f4@2 g3@2 ~@2", AC: "~@4 f4@2 f4 ~ g3@2 ~@4 f4@2",
  AD: "~@2 f4 ~ f4@2 f4 ~ f4 ~ f4 ~ f4@2 ~@2", AE: "g4@5 ~ g4 ~ g4@2 f4@3 ~ f4@2",
  AF: "~@2 f4 ~ f4@2 f4 ~ f4@2 f4@2 g3@2 ~@2", AG: "[g4@5 ~ g4 ~ g4@2 f4@3 ~ f4@4 f4 ~ f4 ~ f4@2 g3 ~@3 f4@2 f4@2]/2",
  AH: "g3 ~@3 f4@2 f4 ~ f4@2 f4 ~ f4 ~ f4@2", AI: "~@2 f4 ~ f4 ~ f4 ~ g3@2 ~@2 f4@2 f4 ~",
  AJ: "g3@2 ~@2 f4@2 f4 ~ f4@2 f4 ~ f4@3 ~", AK: "g4@3 g4@2 ~ g4@2", AL: "~@2 f4 ~ f4 ~ f4 ~ f4 ~ f4 ~ f4 ~ f4 ~",
  AM: "g4@5 ~ g4@3 ~@3 g4@4", AN: "~@2 g4@5 ~ g4@2 ~@2 bb4@3 ~", AO: "f4@5 ~ f4 ~ f4@2 bb3 ~@5",
  AP: "f4@6 ~ f4 f4@2 g3 ~@5", AQ: "f4@5 ~ f4 ~ f4@2 g3 ~@5", AR: "f4@5 ~ f4 ~ f4@2 g3@2 ~@4",
  AS: "[~@6 f4@30 ~@2 f4@15 ~@3 g4@5 ~ g4@2]/4", AT: "g4@2 f4@5 ~@9", AU: "[f4@21 ~ f4@14 ~@5 g4@5 g4@2]/3",
  AV: "[f4@21 ~ f4@15 ~@3 g4@5 ~ g4@2]/3", AW: "g4@2 f4@7 ~@7",
})).s("gm_lead_4_chiff").gain(0.31)

// chords · alto sax
const alto_sax = note(`<
  ~@15 A ~@3 B ~@4 C D@2 E ~@5 F ~@3 A ~@4 G H I J K L ~@27 A ~@3 A ~@4 G M ~@2 N@2 O P I Q R J I S ~@45 T@3 U V@3 W X@3
  Y
>`.pickRestart({
  A: "[e4,g4]@5 ~ [e4,g4] ~ [e4,g4]@2 [d4,f4]@5 ~", B: "[e4,g4]@5 ~ [e4,g4] ~ [e4,g4]@2 ~ d4@4 ~, ~@5 f4@2 ~",
  C: "[e4,g4]@6 ~ g4@4 ~ [eb4,g4]@4, ~@3 e4@2 ~@3", // Em Eb
  D: "[~@2 [eb4,g4]@5 ~ [eb4,g4]@2 ~@3 [bb4,d5]@5 ~@8 d4 ~ [d4,f4] ~ [d4,f4] ~]/2", // Eb Bb Dm
  E: "[d4,f4]@5 ~ [d4,f4] e4 [d4,f4]@2 ~ g3@2 ~@3, ~@5 d4 ~@2", F: "[e4,g4]@5 ~ [e4,g4] ~ [e4,g4]@2 [d4,f4]@4 ~@2",
  G: "[e4,g4]@6 ~ [e4,g4]@4 ~ [eb4,g4]@4", H: "~@2 [eb4,g4]@5 ~ [eb4,g4]@3 ~ [bb4,d5]@4",
  I: "~@10 [d4,f4] ~ [d4,f4] ~ [d4,f4] ~", J: "[d4,f4]@5 ~ [d4,f4] ~ [d4,f4]@2 [g3,d4]@2 ~@4",
  K: "~@10 [d4,e4,f4] ~ [d4,f4] ~ [d4,f4] ~", L: "[d4,f4]@5 ~ [d4,f4] ~ [d4,f4]@2 [g3,d4]@4 ~@2",
  M: "~@2 [eb4,g4]@5 ~ [eb4,g4]@2 ~@2 [bb4,d5]@4", // Eb Bb
  N: "[[e4,g4]@6 ~ [e4,g4]@3 ~@3 [eb4,g4]@5 [eb4,g4]@5 ~ [eb4,g4]@2 ~@3 [bb4,d5]@3]/2", O: "~@11 [d4,f4]!2 ~ [d4,f4] ~",
  P: "[d4,f4]@5 ~ [d4,f4] ~ [d4,f4]@2 ~ g3@2 ~@3, ~@5 d4 ~@2", Q: "[d4,f4]@6 [d4,f4] ~ [d4,f4]@2 [g3,d4]@2 ~@4",
  R: "~@10 [d4,f4]@2 [d4,f4] ~ [d4,f4] ~", S: "[d4,f4]@5 ~ [d4,f4] ~ [d4,f4]@2 [g3,d4]@2 ~@4, ~@10 a3 ~@5",
  T: "[~@25 d4@15 ~ g4@5 ~ [e4,g4], ~@9 f4@31 e4@5 ~@3]/3", U: "~ [e4,g4]@2 [d4,f4]@5 ~@8",
  V: "[~@24 d4@15 ~@2 g4@5 e4 g4, ~@8 f4@31 ~ e4@5 ~@3]/3", W: "[e4,g4] [d4,f4]@3 ~@4",
  X: "[~@24 d4@15 ~ [e4,g4]@5 ~ [e4,g4] ~, ~@8 f4@31 ~@9]/3", Y: "[e4,g4]@2 [d4,f4]@7 ~@7",
})).s("gm_alto_sax").gain(0.13)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  ~@48 A@2 B C D@2 B C D@2 B C D@2 E F ~@46 G H G H ~@11 I J K L M N O P Q ~@21
>`.pickRestart({
  A: "[[c3,f3]@3 [c3,e3]@2 ~ [bb2,f3]@3 [bb2,eb3]@2 ~ [f3,a3] [eb3,g3] [f3,a3]@2]/2", B: "g2!2 g3!2 g2 ~ g3 ~",
  C: "g2@2 ~@2 g3@3 ~ g2@2 g2@2 g3@3 ~",
  D: "[[c4,f4]@6 [c4,e4]@6 [bb3,f4]@6 [bb3,eb4]@6 [c4,f4,a4]@2 [bb3,eb4,g4]@2 [c4,f4,a4]@2 [d4,e4,f4,g4] [c4,e4]]/2", // F5 C Bb5 Eb5 F Eb F Em7 …
  E: "[d3,a3,d4]!8", F: "[d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@3 ~ f2@4",
  G: "~@2 g4!2 ~@2 c5!2 ~@2 g4!2 ~@2 c5!2, ~ g4 c5 g4", H: "~@2 g4!2 ~@2 c5!2 c5@5 ~@3, c5@4 g4@5 ~@7",
  I: "c5@7 ~ f4@8", J: "~ e4@4 ~ d4@2 ~ d4@4 ~ g4@2", K: "~ g4@3 ~@2 e4@2 e4@2 ~@3 d4@2 ~",
  L: "~ e4@3 ~@2 d4@2 d4@3 ~@3 g4@2", M: "g4@3 ~@3 e4@2 ~ e4@7", N: "[c4,e4]@5 ~ [g3,d4]@2 [g3,d4]@4 ~@2 [f3,c4]@2",
  O: "~ c4@4 ~ [f3,c4]@2 [f3,c4]@4 [g3,d4]@3 ~, f3@3 ~@13", P: "~@6 gb4!2", Q: "gb4!5 ~@3",
})).s("gm_distortion_guitar").gain(0.1).pan(0.6)

// drums · rim
const rim = s("rim").struct("<~@124 [~@13 x ~@2] ~@30>").gain(0.17)

// drums · kick
const kick = s("bd").struct(`<
  A B A C A B A D A B A D A B A D A B A D E F G E H I A B A D A B A D A B A D E F G E H I A B A C J K A C J K A C J K A
  C L K ~ M A B A D A B A D A B A D A B A D E F G E H I A C J K A B A B A B A B N@3 O C F E C@2 E C E B E B C E@3 C P
  Q@6 ~ R S T U V O ~@2 W E L E L E L E L E L F L E L F L E L F X
>`.pickRestart({
  A: "x!2 ~ x!2 ~@3", B: "x ~@3 x!2 ~ x", C: "x ~@3 x!2 ~@2", D: "x ~@2 x!3 ~ x", E: "x!2", F: "x ~@3 x ~@2 x",
  G: "~ x", H: "x ~@2 x ~@2 x ~", I: "~ x ~@2 x ~ x ~", J: "~@2 x ~@2 x ~ x", K: "x ~ x!2 ~ x!2 ~", L: "x!2 ~ x!3 ~ x",
  M: "~@3 x", N: "~ x ~ x", O: "~ x ~ x ~ x ~@2", P: "x ~ x!2 ~@2 x ~@3 x ~@3 x ~", Q: "~ x ~ x ~ x ~ x",
  R: "x ~@2 x!2 ~@2 x", S: "x ~@2 x!2 ~@3", T: "x!2 ~ x ~@2 x ~ x ~@5 x ~", U: "x ~@2 x!2 ~ x ~",
  V: "~ x ~ x ~@2 x ~@3 x ~@3 x ~", W: "~@2 x ~ x!2 ~ x", X: "x!2 ~@6",
})).gain(0.22)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  A@24 ~@2 A@16 ~@2 A@6 ~@2 A@2 ~@4 B C ~@4 A@20 ~@2 A@4 D A E A E A@3 ~@3 D A@31 F G A@19 H
>`.pickRestart({
  A: "x!4", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~@4", D: "~ x!3", E: "~ x ~@2 x ~@3 x ~@3 x ~@3", F: "x!3 ~",
  G: "~@2 x!2", H: "x!2 ~@2",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A B A C A B A C A B A C A B A C A B A C D@2 ~ E F G A B A H I B A C A B A C D@2 ~ E F G A B A J ~@4 K L ~@8 M N A B A
  C A B A C A B A C A B A C D@2 ~ E F G A J ~@2 A B A B A B A J ~@26 O P ~@6 M N Q D R D R D R D R D R J S D R J S D T U
  ~
>`.pickRestart({
  A: "x!2 ~ x!2 ~@3", B: "x ~@3 x!2 ~ x", C: "x ~@3 x!2 ~@2", D: "x!2", E: "~@6 x ~@5 x!3 ~", F: "x ~@2 x ~@2 x ~",
  G: "~ x ~@2 x ~@3", H: "x ~@4 x ~ x", I: "~ x ~ x!2 ~@3", J: "x", K: "~@4 x!2 ~@10", L: "x!2 ~@14", M: "x!8",
  N: "x!4 ~@4", O: "~@10 x!4 ~@2", P: "~@3 x!3 ~ x!2 ~@7", Q: "~@4 x!2 ~ x", R: "x!2 ~ x!3 ~ x", S: "~@3 x ~ x ~ x",
  T: "x ~ x ~@3 x ~@7 x!2", U: "x ~@3 x!3 ~@9",
})).gain(0.17)

// drums · open hat
const open_hat = s("oh").struct("<~@50 A@2 ~@2 A B ~@2 A B ~@31 C ~ C ~ C ~ D E F E ~@54>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "~@7 x", D: "~@15 x", E: "~@2 x!3 ~ x!3 ~ x!3 ~ x!2", F: "x ~ x!3 ~ x!3 ~ x!6",
})).gain(0.17)

// drums · high tom
const high_tom = s("ht").struct("<~@52 [~@2 x!2 ~@10 x!2] ~@72 [x!2 ~@14] ~@27 [~@2 x!2 ~@12] ~>").gain(0.15)

// drums · crash
const crash = s("cr").struct(`<
  ~@7 A ~@3 A ~@3 A ~@3 A@2 B C A ~ D ~@3 E ~@3 A ~@3 A@2 B C A ~ D ~@4 F G ~@2 F G ~@2 F G ~@2 F G ~ D ~@3 A ~@3 A ~@3
  A ~@3 A@2 B C A ~ D ~@2 F G ~@8 A ~ A ~ A ~@2 D A ~@2 A@2 ~@3 A ~@2 A H@6 ~ A I J I K H@2 ~@2 L ~@10 M N ~@2 M N ~@2 M
// … 16 more lines

More by The Knack