Strudelify
Love Hurts cover art

Hair of the Dog

Love Hurts

Nazareth

KeyD majorTempo70 bpm
0:00/0:00
// Love Hurts — Nazareth
// 70 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 6/4 at bar 34, 4/4 at bar 35, 2/4 at bar 42, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/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 · epiano2 · "El-Piano"
const epiano2 = note(`<
  A B@2 C D E@2 F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE ~ AF@2 AG AH AI@2 AJ AK AL AM AN@2 AO AP AQ AP
  AQ AP AR AS AT ~@9 AU AV AW AV AW AV AW AV AW AV AX AY AZ BA BB@3
>`.pickRestart({
  A: "~@6 f#4@2 e4@6 c#4 d4, g2!2, f#4@3 ~@5, ~ b3@6 ~, ~ b4 ~@2",
  B: "[~@3 c#4 [a3,b3]@3 ~ [b3,e4]@8, f#2 [b2,d4] ~@2, e4@6 ~@9 a3@17, ~ a3@3 ~@3 e3@9, ~ a4 ~@6]/2", // Asus2 E5 Bm
  C: "[b3,d4]@2 e4!2, a3, ~ c#4", D: "~@3 e4, d4@3 ~, ~ a2@2 f#2@2 d3@3, ~ d3 a2 ~",
  E: "[~@11 [f#2,f#3] ~@2 g4 f#4, d4@6 e4@2 ~@3 d4@3 ~@2, ~ b2@2 f#3@2 d3@2 f#3@2 b2@2 ~ e2@4, ~ d3 b2 ~ [g2,d4] d3 e3 ~, ~@13 b3@2 ~]/2", // F# G5
  F: "[d4,e4] ~ e4!2, a2, ~@4 a3@9 ~@3, ~@3 d4@4 ~", // Dsus2
  G: "~@5 a3 [b2,a3,c#4,e4]@2, d3@3 ~, d4 a3 f#3 ~, ~ f#3@2 d4@2 ~@3", // A
  H: "f#3 ~@5 e4@2, b2@3 ~, [b3,d4] b3 d4 ~, ~ f#3@2 c#4@2 f#3@3", // Bm
  I: "~@2 d4 [f#2,b3,d4,f#4] [e4,g4]@2 [d4,f#4]@2, g2@3 ~ [e2,b3]@4, [g3,d4] ~@3, ~ b3@2 ~@5", // Bm Em D E5 G5
  J: "a3!2 ~ a4!2 g4!2 f#4, [a2,e4] ~, d4!2 [d4,e4]!2", K: "[a3,d4]@2 ~ f#4!2 e4!2 d4, f#4@3 ~ c#4@3 ~, ~ a3 a#3@2",
  L: "[b3,d4,f#4]@3 f#4!2 e4!2 d4, ~ [a#3,c#4]", M: "d4 ~@3 [b3,e4,g4]@3 b3, [g3,a3] g3 ~@2, ~ d3@2 a3@2 ~@3",
  N: "a3 ~@2 e4 e4@2 e4@2, e4@3 ~@5, d4!2 ~@2, ~ a3@3 [a3,c#4]@4", // A
  O: "~@5 f#4 [a#3,d4,g4]@2, [a3,d4]@3 a3@3 ~@2, f#3 f#3@2 ~, ~ d3@4 ~@3, ~@2 d4 ~", // Gm D5
  P: "a3 ~@4 c4 [c4,e4,g4]@2, [c4,f4] f3@2 ~, ~ c3@5 ~@2, ~@3 g3@3 ~@2, ~@2 a3 ~", // C F5
  Q: "a3 ~@3 f4@2 [c4,e4,g4]@2, [d4,f4] d4@2 ~, ~ a3@5 ~@2, ~@3 e4@3 ~@2", // C Dm
  R: "[a#3,d4,f4]@3 [c4,f4] [a#3,f4]@2 [a#3,f4]@2", S: "g3!2, [c4,e4]",
  T: "~@5 c4 [c4,e4,g4]@2, [a3,c4,f4] f3@2 ~, ~ c3@5 ~@2, ~@3 g3@3 ~@2, ~@2 a3 ~", // C F
  U: "a3 ~@3 d4@2 [c4,e4,g4]@2, [d4,f4] ~, ~ a2@5 ~@2, ~ d3@2 ~, ~@3 a3@3 ~@2", // C Dm
  V: "[a#3,d4,f4]@3 [a3,f4] [g3,f4]@2 c4 f4", W: "[c4,d4,g4] [e4,g4,c5]",
  X: "a3 ~@2 f4 [c#4,e4,g4]@4, f4@3 ~@5, c4!2 ~@2, ~ a3@3 ~@4", // C#dim
  Y: "~@3 d4 [a3,c#4,g4]@4, f4 ~, d4@3 ~@5, a3!2 ~@2, ~ f3@3 ~@4", Z: "a#3!2 d4 [a3,f4] [g3,f4]@4, f4@3 ~@5, d4 ~@3",
  AA: "[c4,d4,f4]@4 g3 ~@2 e4, ~@4 e4@3 ~, ~@2 c4!2, ~@5 g3@3", AB: "[a3,c4,f4] [g3,a#3,d#4]",
  AC: "[f3,a#3,d4] [f3,a3,c4]", AD: "[a#3,d4,g4] [a3,c4,f4]@3 [g3,a#3,d#4]@4", AE: "[f3,a#3,d4] [g#3,c#4,f4]",
  AF: "[~@4 [f4,g#4,c5] [a#4,c#5] [c5,d#5] [c#5,f5]@5 ~@4]/2", AG: "~@2 [a3,c4,f4]!2",
  AH: "[a3,c4,f4]!2 [a#3,c#4,f4]!2", // F A#m
  AI: "[[a3,c4,f4]@2 [a3,c4,f4]@2 [a#3,c#4,f4]@3 [a3,c4,f4]@2 ~@2 f4 d4@2 d4 [g3,a#3,d#4], ~@9 a3@3 [f3,a3]@3 ~, ~@5 c4 ~@2]/2", // F A#m F D# F
  AJ: "~@3 a#2 d#3 [f3,a#3,d4] [g3,a#3,d#4] [f3,a#3,d4], [g3,a#3,d#4] ~", // A# D# A# D#
  AK: "[g3,a#3,d#4]@3 [f3,a3,c4] d4@3 d4, ~ [g3,a#3]", AL: "[a#3,d#4,g4]@3 f4@2 f4 [d4,f4,a#4]@2, ~@3 [a#3,d4]@3 ~@2",
  AM: "[a#3,d#4,g4]@3 [d4,f4,a#4]@3 [d4,f4,a#4]@2", // D# A#
  AN: "[[a#3,d4,g4]@3 [c4,d#4,g#4] g#4@4 g#4 g4@2 f4 [a#3,c4,f4]@3 [a#3,c4,f4], ~@4 [c4,d#4]@5 [a#3,d#4]@3 ~@4]/2", // Gm G# A#sus2 Cm D#5
  AO: "[a3,c4,f4]@2 [a#3,d4,g4]!2", AP: "[a3,c4,f4]!4", AQ: "[a#3,d4,g4]!4",
  AR: "[a#3,d4,g4]@2 [a#3,d4,g4]@2 [d#3,g3,a#3]@3 [f3,a3,c4]", // Gm D# F
  AS: "[g3,a#3,d4]@4 [g3,a#3,d#4]@4 [a#3,d4]@6 c5 d5, ~@2 f3 ~", AT: "[f4,a4,c5] [g4,b4,d5] ~@2",
  AU: "~@2 [d4,f4,a4]!2", AV: "[c4,e4,g4]!4", AW: "[a3,d4,f4]!2 [d4,f4,a4]!2", AX: "[a3,d4,f4]!2 ~@2",
  AY: "[c4,f4,g4] [c4,e4,g4] [a3,c4,f4]@2", AZ: "[a#3,d#4,g4]@2 [a#3,d4,f4] [a#3,d4,d5]",
  BA: "~ c3 f3 g3 a3 c4 f4 a4, [a3,c4,f4] ~", BB: "[[a#3,d#4,g4]@9 [a#3,d4,f4]@9 [f3,a3,c4,f4]@20 ~@10]/3",
})).s("gm_epiano2").gain(0.35).pan(0.8)

// bass · fretless bass · "Bas"
const bass = note(`<
  ~@2 A B ~@7 C D E F G H I J K L M J K L N O P Q R S T U@2 V@2 W@2 X@2 Y Z AA AB AC AD AE AF AG AH AI AH AJ AK AL AM AN
  AO AP AQ AR AS AT AU AV AW AX AY AZ AW BA AY AZ AY BB BC BD BE BF@3
>`.pickRestart({
  A: "e1@6 b1@2 e2@7 b1", B: "a1 c#2", C: "~ g2", D: "d2 c#2", E: "b1 a#1", F: "g1@6 f#1@2 e1@7 b1", G: "a1 e2",
  H: "d2@3 c2", I: "f2@3 f2 f2@2 a2@2", J: "d2@3 d2 d2@2 c2@2", K: "a#1@3 a1 g1@3 g1", L: "c2@3 c2 e2@3 e2",
  M: "f2@6 f2@2 f2@3 ~ c3@4, ~@12 b2 ~@3", N: "f2@3 f2 e2@3 e2", O: "d2@3 d2 c#2@4", P: "a#1@3 a1 g1@3 d2",
  Q: "c2@3 c2 e2@4", R: "f2@2 g2 d2", S: "f2", T: "g2 f2@3 g2@4", U: "[d2 c#2@2 c2]/2",
  V: "[f2@8 a#1@6 a#2@9 a#2 g#2@8]/2", W: "[d#2 f2@2 f2]/2", X: "[f2@4 a#2 c3 c#3 f2@5 d2@3 d#2]/2",
  Y: "d#2@13 d#2!2 a#1", Z: "d#2@3 f2 g2@4", AA: "c2@3 d2@4 d2", AB: "d#2@3 f2@4 f2", AC: "g2 d2 g2 g#2 g#2@3 g#2",
  AD: "g#2@3 g#2 f2@3 f2", AE: "f2@4 d#2@3 d#2", AF: "d#2@4 d2@3 d2", AG: "g2@2 g2@2 d#2@3 d#2",
  AH: "d#2@7 d#2 d2@6 d2@2", AI: "g2 a#2 a2 g2 d#2@3 a#1", AJ: "g2@3 g2 c2@3 d2", AK: "d#2@2 f2@2 a#1@3 a#1",
  AL: "g1@2 b1@2 c2@3 c2", AM: "c2@6 g1 a1 c2@6 c2@2", AN: "c2@4 a#1@3 a#1", AO: "c2@6 f1 g1 a1@6 a#1@2",
  AP: "a#1@8 a#1 a#1@3 a#1@2 f1@2", AQ: "a#1@3 c2 d2@3 d2", AR: "g1@3 a1@4 a1", AS: "a#1@3 c2@4 c2",
  AT: "d2@3 d#2 d#2@4", AU: "d#2@4 c2@3 c2", AV: "c2@2 c2@2 a#1@3 a#1", AW: "a#1@7 a#1 a1@6 a1@2",
  AX: "d2@4 d2@2 f1 a1 a#1@6 a#1@2", AY: "a#1@6 c2 a#1 a1@6 a1@2", AZ: "d2@6 d2 c2 a#1@6 a#1@2",
  BA: "d2@4 d2 a1 f1 g#1 a#1@6 a#1@2", BB: "d2@8 g1@2 a#1 a1 g1@4", BC: "c2!2 f1@2", BD: "d#2 d2", BE: "f1@3 f1 f1@4",
  BF: "[d#2@9 d2@9 f1@20 ~@10]/3",
})).s("gm_fretless_bass").gain(0.4)

// other · string ensemble 1 · "String"
const string_ensemble_1 = note(`<
  ~@2 A ~@13 B ~@17 C@2 ~@10 D E F E F E G H I ~@3 J K L M N O@2 P Q R S R T U S R V W X Y Z@2 ~
>`.pickRestart({
  A: "b4 a4 b4 g5@2 f#5@3", B: "~@3 [g4,g5]", C: "[~@4 g#4 a#4 c5 c#5@5 f5@4]/2",
  D: "~@7 b5 d6@4 g6@2 d6@2, ~@8 c6 ~@7", E: "c6@4 c6@2 f6 c6", F: "a#5@3 c6 d6@2 g6 d6", G: "a#5 g5 d5 g5 g4@3 d4",
  H: "g4 a#4", I: "c5 d5 ~@2", J: "~@8 a#4 c5 d5@2 d5@2 c5@2", K: "d5@3 c5 a4@2 g4 a4", L: "a#4 a4 g4 c5@2 f5 a4 c5",
  M: "d5@2 f5 c5@4 a4", N: "f4@3 g5@5", O: "[d#6@2 d6@4 c6 a#5 c6@12 [c5,e5,c6]@4 a5@4 d6@2 a5@2]/2",
  P: "g5@2 e5 c5 c5@2 c6 g5", Q: "a5@2 f5 g5 a5@2 d6 a5", R: "g5@6 c6 g5", S: "f5@2 f5 g5 a5@2 d6 a5",
  T: "f5 e5 d5 c5 a5!2 d6 a5", U: "g5@2 f5 g5 c6@4", V: "f5 d4", W: "e4 f4", X: "d#5 d5", Y: "c5 ~", Z: "[a#4@9 ~@7]/2",
})).s("gm_string_ensemble_1").gain(0.39).pan(0.2)

// other · string ensemble 1 · "String" · soft notes
const string_ensemble_1_soft = note("<~@3 A ~@12 B C ~@11 D E F G@2 ~@2 H ~@42 I@2>".pickRestart({
  A: "e5", B: "~ [a3,a4] [d4,d5] ~", C: "[f4,f5]@5 ~@3", D: "~ [d#4,d#5]", E: "[d4,d5] [c4,c5]",
  F: "[g4,g5] [f4,f5]@3 [d#4,d#5]@4", G: "[[d4,d5]@2 f5@3 ~@3]/2", H: "d#5 ~", I: "[~ a4@10 ~@5]/2",
})).s("gm_string_ensemble_1").gain(0.19).pan(0.2)

// other · french horn · "Horn"
const french_horn = note("<~@2 A B ~@25 C D E F ~ G@2 ~@27 H@2 I J I J I J I J I K ~ L K ~@3>".pickRestart({
  A: "b3 a3 b3 g4@2 f#4@3", B: "e4@7 ~", C: "~ d#4", D: "d4 c4", E: "g4 f4@3 d#4@4", F: "d4 f4",
  G: "[~@4 c5 c#5 d#5 f5@5 ~@4]/2", H: "[d#5@2 d5@4 c5 a#4 c5@12 a#4@4 a4@8]/2", I: "g4", J: "f4 a4", K: "f4 ~",
  L: "g4 f4",
})).s("gm_french_horn").gain(0.4)

// chords · string ensemble 2 · "String2"
const string_ensemble_2 = note(`<
  ~@2 A B C ~@6 D E@2 F G ~ H@2 I J K L M N O P Q R S T U V@2 W@2 X ~@4 Y Z@2 AA@3 AB AC AB AC AB AD AE AF@4 AG AH AI@2
  AJ@3 AK AL AK AL AK AL AK AL AK AM@2 AN AO AP@3
>`.pickRestart({
  A: "[e3,a3,b3]", B: "d4 c#4, [a3,e4]", C: "d4 ~", D: "~@3 a4!2 g4!2 f#4", E: "f#4@4 f#4 e4!2 d4", F: "d4!2",
  G: "[b3,d4] [c#4,e4], a3", H: "f4@3 g4", I: "f4 a#4, a#3@3 ~", J: "e4 [e4,g4], c4", K: "~ c5, [a3,c4,f4]",
  L: "f5 d5, [a3,d4]", M: "[d4,f4,a#4]", N: "[d4,f4] [e4,g4], c4", O: "c5 f5 [c#4,a4]@2, [c4,f4] ~",
  P: "[d4,f4] [c#4,e4], a4", Q: "f4@3 e4 d4@4, a#3", R: "a#3 e4, [c4,g4]", S: "[a3,c4,f4] [a#3,d#4,g4]",
  T: "[a#3,d4,f4] [a3,c4,f4]", U: "[a#3,d4,g4] [a3,c4,f4]@3 [a#3,d#4,g4]@4", V: "[[a#3,d4,f4]@2 [g#3,c#4,f4]@3 ~@3]/2",
  W: "[~@4 [d#4,g#4,c5] [f4,g#4,c#5] [g#4,c5,d#5] [a#4,c#5,f5]@5 [g#3,c#4,f4,f5]@4]/2", X: "[g3,a#3,d#4,d#5] ~",
  Y: "[d#4,g4,a#4]@3 [f4,a4,c5] [g4,a#4,d5]@4", Z: "[g4,a#4,d#5]@3 [f4,a#4,d5]@5",
  AA: "[[g4,a#4,d5]@3 [g#4,c5,d#5] [g#4,c5,d#5]@8 a#4@4 a4@4 [g4,a#4,d5]@4, ~@3 [c5,f5]@2 ~]/3", AB: "[f4,a4,c5]",
  AC: "[g4,a#4,d5]", AD: "[g4,a#4,d5]@4 [d#4,g4,a#4]@3 [f4,a4,c5]", AE: "[g4,a#4,d5] [g4,a#4,d#5] [f4,a#4,d5]@2",
  AF: "[[c4,c5]@2 [d4,d5]@2 [g3,c4,e4]@8 [g#3,c4,f4]@3 [g3,c4,e4]@5 [g#3,c4,f4]@3 [g3,c4,e4]@5 [a3,c4,e4]@3 [f3,a#3,d4]]/4", // C D C Fm C Fm C Am …
  AG: "[f3,a#3,d4] [a#3,d4,f4]", AH: "[a#3,d4,f4]@3 [c4,e4,g4] [d4,f4,a4]@4",
  AI: "[d4,f4,a#4]@3 [c4,f4,a4]@4 [c4,f4,a4]", // A# F
  AJ: "[[d4,f4,a4]@3 [d#4,g4,a#4] [d#4,g4,a#4]@8 [c4,f4,g4]@6 [c4,e4,g4]@2 [d4,f4,a4]@4]/3", AK: "[c4,e4,g4]",
  AL: "[a3,d4,f4] [d4,f4,a4]", AM: "[[a3,d4,f4]@4 a4 ~@3 f4@2 e4@2 [a3,c4,f4]@4, ~ [a#3,d4] c4 ~, ~@5 g4@7 ~@4]/2",
  AN: "[a#3,d#4,g4] [a#3,d4,f4]", AO: "[a3,c4,f4]", AP: "[[a#3,d#4,g4]@9 [a#3,d4,f4]@9 [a3,c4,f4]@20 ~@10]/3",
})).s("gm_string_ensemble_2").gain(0.3).pan(0.8)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note("<~@8 A B C@2 ~@5 D E F G H I J K L M N O ~ P Q ~@2 R@2 S ~@40 T ~@3>".pickRestart({
  A: "~@2 a3 ~@2 a3@2 ~, ~ e4 f#4 ~, ~@3 a3@2 ~@3", B: "~@5 f#3@3, ~ f#3@2 c#4@2 ~@3, ~ b3 d4 ~",
  C: "[~@6 [d4,f#4]@2 [b3,e4,g4]@3 ~ [d4,f#4]@3 ~ [d4,e4]@8 ~@8, ~@5 a3@3 ~@3 a3@4 a3@9 ~@8]/2", // D Em D Dsus2
  D: "~@3 g4, ~ c3@4 c4@2 ~, ~ f3@2 ~, ~@3 g3@3 ~@2, ~@2 a3 ~", E: "~@3 g4, ~ a3@3 f4@3 ~, ~@2 d4@3 a3@3, ~@3 e4@3 ~@2",
  F: "~@2 c4 [a3,c4] [g3,a#3]@2 f4@2, ~ f3@2 ~@5", G: "~@3 f3@2 g3@2 g3, e4 c3 ~@2, ~ g2@2 ~@5",
  H: "~@5 c4@2 ~, ~ c3@2 g3@2 ~@3, ~ f3 a3 ~", I: "~@5 f4@2 ~, ~ a2@2 a3@2 ~@3, ~ d3 d4 ~",
  J: "~@2 c4 [a3,c4] [g3,a#3]@2 ~ f4, ~ f3@2 ~@3 c4@2", K: "[c3,e3,g3] ~@3 [c4,e4]@4, ~ c3@2 g3@2 ~@3, ~ e3 ~@2",
  L: "~@3 c4 ~@3 e4, f4!2 a4 c#4, ~ c4@2 ~@2 a3@2 ~", M: "~@7 e4, d4!2 g4 c#4, ~ a3@2 a3@2 a3@2 ~",
  N: "~@2 d4 [d4,f4] a#3@3 a#3, f4@3 ~ d4@2 ~@2, ~ a#3@2 ~@5", O: "c4 ~@2 f4 [c4,e4]@4, ~ a#3@2 ~@5, ~ d4 ~@2",
  P: "~ c3 f3@2 ~@4", Q: "[a#3,d4,g4] [a3,c4,f4]@3 ~@4",
  R: "[~@4 [g#4,c5] [f4,a#4,c#5] [g#4,c5,d#5] [g#4,c#5,f5]@5 [c#4,f4,g#4]@4, ~@7 d#4@2 ~@23]/2", S: "[d#4,g4] ~",
  T: "~ c3 f3 g3 a3 c4 f4 a4",
})).s("gm_acoustic_guitar_steel").gain(0.3).pan(0.2)

// chords · flute
const flute = note("<~@37 A@3 ~@41>".pickRestart({
  A: "[~@8 c#5@2 d#5@2 f5 ~ [f5,a5]@10 c#5@2 d#5@2 f5 ~ [f5,a5]@10 ~@8, ~@14 [e5,g#5] ~@15 [e5,g#5] ~@17]/3", // F E
})).s("gm_flute").gain(0.2).pan(0.2)

// other · timpani
const timpani = note("<~@29 [~@7 a2!2 ~@7] [~@15 g2] [g2 ~@14 g#2] [g#2 ~@15] ~@48>").s("gm_timpani").gain(0.4).pan(0.2)

// other · distortion guitar · "Distortion Giutar"
const distortion_guitar = note("<~@39 A B C D E F@3 G H G I G J K ~@3 L M N O ~@20>".pickRestart({
  A: "~@4 d3@3 d#3", B: "d#3", C: "d#3@3 f3 g3@4", D: "c3@3 d3@5", E: "d#3@3 f3@5", F: "[d3@3 d#3 d#3@8 f3@8 d4@4]/3",
  G: "c4", H: "a#3", I: "a#3 d4", J: "a#3@7 c4", K: "d4 d#4 d4@2", L: "~@7 a#3", M: "a#3!2", N: "a#3@3 c4 d4@3 d4",
  O: "a#3@3 c4@4 c4",
})).s("gm_distortion_guitar").gain(0.35).pan(0.8)

// other · electric guitar muted · "Guitar Mute"
const electric_guitar_muted = note(`<
  ~@54
  [~@10 c3 ~ g3 ~@3]
  [~@2 c3 ~ g3 ~ c3 ~@3 c3 ~ f3 ~@3]!2
  [~@2 c3 ~ g3 ~ c3 ~@3 a2 ~ e3 ~@3]
  [~@2 a#2 ~ f3 ~ a#2 ~@3 a#2 ~ f3 ~ a#2 ~]
  ~@22
>`).s("gm_electric_guitar_muted").gain(0.3).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A ~@9 A ~@3 B C@3 D C@8 E C F A ~ G H ~@3 G A C D I C D J K@5 J L J@4 M C@3 N O L K@5 J K@4 E@2 C P Q ~
>`.pickRestart({
  A: "x", B: "x ~@2 x", C: "x ~@2 x!2 ~@3", D: "x ~@2 x!2 ~@2 x", E: "x!2", F: "x!2 ~@2 x ~@3", G: "~@4 x ~@2 x",
  H: "~ x", I: "x ~@2 x ~@4", J: "x ~@3 x ~@2 x", K: "x ~@6 x!2 ~@5 x ~", L: "x ~ x ~ x ~@2 x",
  M: "x ~@7 x!2 ~@2 x ~@3", N: "x ~@5 x ~ x ~@6 x", O: "x!2 ~ x!2 ~@2 x", P: "x ~@8 x ~@6", Q: "~ x ~@6",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@17 A@12 B C B ~@9 C@5 ~@8 A@4 ~@23>".pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~ x ~ x",
})).gain(0.5)

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

// drums · low tom
const low_tom = s("lt").struct("<~@40 A ~@5 B ~@3 C ~@7 D ~@5 E ~@3 C ~@5 B F ~ G ~@3>".pickRestart({
  A: "~@12 x!3 ~", B: "~@6 x!2 ~@8", C: "~@3 x ~@4", D: "~@14 x!2", E: "~@5 x!2 ~@9", F: "~@15 x", G: "~@3 x",
})).gain(0.45)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@46 A ~@3 B ~@13 C ~@3 B ~@5 B ~@6>".pickRestart({
  A: "~@4 x!2 ~@10", B: "~@5 x ~@10", C: "~@3 x!2 ~@11",
})).gain(0.45)

// drums · open hat
// … 21 more lines

More by Nazareth