Strudelify
Harvester of Sorrow cover art

…And Justice for All

Harvester of Sorrow

Metallica

KeyG majorTempo84 bpm
0:00/0:00
// Harvester of Sorrow — Metallica
// 84 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 5/4 at bar 108, 4/4 at bar 110) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 134 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar 2.
setcpm(84/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 · "Guitar 1"
const distortion_guitar = note(`<
  A B ~@6 C@2 D E D E D E D F G H G H G I ~@6 J K@3 L K L M@3 N M@3 N ~ J O M ~@2 G H G H G I ~ P Q K@2 L M@3 N M@3 N ~
  J O M ~@2 G H G H G I ~@3 R M@3 N M@2 S T U V W X W Y Z AA Z AB Z AB ~ AC AD AE AF@2 AG AH ~ AI AJ AK AJ AK AJ AK AL@9
  AM ~
>`.pickRestart({
  A: "~@8 [g2,d3] [f#2,c#3] e2 [b2,f#3] [a#2,f3] a2 [g2,d3] [f#2,c#3]", // G5 F#5 B5 A#5 G5 F#5
  B: "[e2,b2,e3,b3]@8 [g2,d3] [f#2,c#3] e2 [b2,f#3] [a#2,f3] a2 [g2,d3] [f#2,c#3]", C: "[e2,b2,e3,b3]/2",
  D: "e2@2 b2@2 f3@2 e3@2 e2 b2 g3@2 f3@2 e3@2", E: "e2@2 b2@2 f3@2 d3@2 g2 a2 d3@2 f2@2 d3@2",
  F: "e2@2 b2@2 f3@2 d3@2 [g2,d3] [f#2,c#3] e2 [b2,f#3] [a#2,f#3] a2 [g2,d3] [f#2,c#3]", // G5 F#5 B5 D#m G5 F#5
  G: "[e2,b2,e3]@2 [e2,b2,e3]!2 [e2,b2,e3]@2 [e2,b2,e3]!2 [g2,d3] [f#2,c#3] g2 [b2,f#3] [b2,f3] e2 [g2,d3] [f#2,c#3]", // E5 G5 F#5 B5 Bdim G5 F#5
  H: "[f2,c3,f3]@2 [f2,c3,f3]!2 [f2,c3,f3]@2 [f2,c3,f3] e2 [g2,d3] [f#2,c#3] e2 [b2,f#3] [a#2,f3] e2 [g2,d3] [f#2,c3]", // F5 G5 F#5 B5 A#5 G5 F#dim
  I: "[f2,c3,f3]@2 [f2,c3,f3]!2 [f2,c3,f3]@2 [f2,c3,f3] e2 [g2,d3] [f#2,c#3] e2 [a#2,f3]!4 [g2,d3]", J: "~@14 e2 f2",
  K: "f#2@2 a#2@2 e2@2 [e2,b2,e3,g#3,b3]@2 ~@2 [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]@2 e2 f2", // E
  L: "f#2@2 d3@2 [g2,d3]@2 [g2,d3,g3,b3]@2 ~@2 [g2,d3,g3,b3]@2 [g2,d3,g3,b3]@2 e2 f2", // G5 G
  M: "f#2@2 [e2,b2,e3,g#3,b3]@2 ~@2 [e2,b2,e3,g#3,b3]@2 ~@2 [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]@2 e2 f2", // E
  N: "f#2@2 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 e2 f2", // G
  O: "f#2@2 [e2,b2,e3,g#3,b3]@2 ~@2 e2 f2 f#2@2 [e2,b2,e3,g#3,b3]@2 ~@2 e2 f2", P: "~@12 [f2,c3] ~ e2 f2",
  Q: "f#2@2 a#2@2 e2@2 [e2,b2,e3,b3]@2 ~@2 [e2,b2,e3,b3]@2 [e2,b2,e3,b3]@2 e2 f2", R: "~@12 [g2,d3] ~ e2 f#2",
  S: "f#2@2 a2@12 f#2 f2", T: "e2@14 e2 f2", U: "f#2@2 a#2@12 e2 f2",
  V: "f#2@2 [e2,b2,e3,g#3,b3]@2 ~@2 [e2,b2,e3,g#3,b3]@2 ~@2 [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]@2 e2 f#2", // E
  W: "[e2,b2,e3]@2 a2 [a2,a#2] c3@2 d3@2 e3@2 f3!2 g3 a3 a#3@2", // E5 A#maj7
  X: "[e2,b2]@2 [e2,b2]!2 [e2,b2]@2 [e2,b2]!2 [g2,d3] [f#2,c#3] g2 [b2,f#3] [b2,f3] e2 [g2,d3] [f#2,c#3]", // E5 G5 F#5 B5 Bdim G5 F#5
  Y: "[f2,c3]@2 [f2,c3]!2 [f2,c3]@2 [f2,c3] e2 [g2,d3] [f#2,c#3] e2 [b2,f#3] [a#2,f3] e2 [g2,d3] [f#2,c3]", // F5 G5 F#5 B5 A#5 G5 F#dim
  Z: "f#3 [d3,e3] e3 f#3 e3 d3 c3 [a2,b2] [e2,b2]@2 [e2,b2]!2 [e2,b2]@2 [e2,b2]!2", // Dsus2 Asus2 E5
  AA: "f3 [d3,e3] e3 f3 g3 f3!2 [d3,e3] [f2,c3]@2 [f2,c3]!2 [f2,c3]@2 [f2,c3] e2", // Dsus2 F5
  AB: "f3 [d3,e3] e3 f3 g3 f3!2 [d3,e3] f2 [f2,c3,f3,a3]@2 f2!2 [f2,c3,f3,a3]@3", AC: "~@12 f2 [f2,c3]@2 f2",
  AD: "[f2,c3]!2 ~@2 a#3 [g3,a3] a3 b3 a3 g3 f3 [d3,e3] f2 [f2,c3,f3,a3]@2 f2", // F5 Gsus2 Dsus2 F
  AE: "f2 [f2,c3,f3,a3]@3 ~@4 [e2,b2,e3,g#3]@2 [e2,b2,e3,g#3]@2 ~@2 [e2,b2,e3,g#3]!2", // F E
  AF: "[e2,b2,e3,g#3]@2 e2 f2 f#2@2 [e2,b2,e3,g#3]@2 ~@2 [e2,b2,e3,g#3]@2 ~@2 [e2,b2,e3,g#3]@2", // E
  AG: "[e2,b2,e3,g#3]@2 e2 f2 f#2@2 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@2", // E G
  AH: "[g2,d3,g3,b3,d4]@2 e2 f2 ~@12", // G
  AI: "~@4 [e2,b2,e3]@2 [e2,b2,e3]!2 [e2,b2,e3]@2 [e2,b2,e3]!2 [g2,d3] [f#2,c#3] g2 [b2,f#3]", // E5 G5 F#5 B5
  AJ: "[b2,f3] e2 [g2,d3] [f#2,c#3] [f2,c3,f3]@2 [f2,c3,f3]!2 [f2,c3,f3]@2 [f2,c3,f3] e2 [g2,d3] [f#2,c#3] e2 [b2,f#3]", // Bdim G5 F#5 F5 G5 F#5 B5
  AK: "[a#2,f3] e2 [g2,d3] [f#2,c3] [e2,b2,e3]@2 [e2,b2,e3]!2 [e2,b2,e3]@2 [e2,b2,e3]!2 [g2,d3] [f#2,c#3] g2 [b2,f#3]", // A#5 G5 F#dim E5 G5 F#5 B5
  AL: "[b2,f3] e2 [g2,d3] [f#2,c#3] [e2,b2,e3]@2 [e2,b2,e3]!2 [e2,b2,e3]@2 [e2,b2,e3]!2 [g2,d3] [f#2,c#3] g2 [b2,f#3]", // Bdim G5 F#5 E5 G5 F#5 B5
  AM: "[b2,f3] e2 [g2,d3] [f#2,c#3] [e2,b2,e3,b3]@2 [e2,b2,e3,b3]!2 [e2,b2,e3,b3]@2 [e2,b2,e3,b3]!2 ~@4", // Bdim G5 F#5 E5
})).s("gm_distortion_guitar").gain(0.5)

// chords · electric guitar clean · "Guitar 2"
const electric_guitar_clean = note(`<
  ~@2 A B A B A B C B ~@14 D E F G H I J ~@14 K L ~@2 K M ~@6 K N ~@12 K L ~@2 K M ~@6 K@3 N ~@20 K O P ~@4 Q R S ~@17
>`.pickRestart({
  A: "e2@2 b2@2 f#3@2 e3@3 b2 g3@2 f#3@2 e3@2", B: "e2@2 b2@2 f#3@2 b2@2 g2 a2 d3@2 f2@2 d3@2",
  C: "~@2 b2@2 f#3@2 e3@3 b2 g3@2 f#3@2 e3@2", D: "[e2,b2,e3,b3]@14 e2 f2", E: "f#2@2 a2@12 e2 f2",
  F: "f#2@2 a2@12 f#2 f2", G: "e2@14 e2 f2", H: "f#2@2 a#2@12 f#2 f2", I: "e2@14 f2!2",
  J: "f#2 [e2,b2,e3,b3] ~ [e2,b2,e3,b3] ~ [e2,b2,e3,b3]!2 ~", K: "e2@2 b2@2 f3@2 e3@2 e2 b2 g3@2 f3@2 e3@2",
  L: "e2@2 b2@2 f3@2 d3@2 g2 a2 d3@2 f2@2 ~@2", M: "e2@2 b2@2 f3@2 d3@2 g2 a2 d3@2 f2@2 d3@2",
  N: "e2@2 b2@2 f3@2 d3@2 g2 a2 d3@2 ~@4", O: "e2@2 b2@2 f3@2 d3@2 g2 a2 d3@2 ~ a3@2 ~",
  P: "~ a3 ~@2 f#3 [d3,e3] e3 f#3 e3 d3 c3 [a2,b2] ~@4", Q: "~@4 e2@2 b2@2 f3@2 e3@2 e2 b2 g3@2",
  R: "f3@2 e3@2 e2@2 b2@2 f3@2 d3@2 g2 a2 d3@2", S: "f2 d3 ~@6",
})).s("gm_electric_guitar_clean").gain(0.5)

// other · overdriven guitar · "Guitar Solo"
const overdriven_guitar = note("<~@87 A@2 B C D E F G@2 H I J I K L M L N L N ~@15 O P@9 Q ~>".pickRestart({
  A: "[d5@2 d5@3 d5@2 d5@3 e5 d5@2 d5@2 a4]/2", B: "a5@4 a5@4 g5 [e5,f#5]!2 [d5,e5] d5 [b4,c#5] c#5 [a4,b4]",
  C: "b4 a4 b4 a4 b4 a4 b4 a4 b4@4 g4@2 a4@2", D: "f#4 [f#4,g4] b3@2 ~@2 b3 c4 e4@7 e4",
  E: "a4 [b4,c#5] d5 [e5,f#5] b5@8 a5@2 g5@2, ~@4 g5 ~@11", F: "[g5,a5] f#5@8 ~ e5 g5 f#5@2 d5@2, ~ g5 ~@14", G: "e5/2",
  H: "f#2@2 [e2,b2,e3,g#3,b3]@2 ~@2 [e2,b2,e3,g#3,b3]@2 ~@2 [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]@2 e2 f#2", // E
  I: "[e2,b2,e3]@2 a2 [a2,a#2] c3@2 d3@2 e3@2 f3!2 g3 a3 a#3@2", // E5 A#maj7
  J: "[e2,b2]@2 [e2,b2]!2 [e2,b2]@2 [e2,b2]!2 [g2,d3] [f#2,c#3] g2 [b2,f#3] [b2,f3] e2 [g2,d3] [f#2,c#3]", // E5 G5 F#5 B5 Bdim G5 F#5
  K: "[f2,c3]@2 [f2,c3]!2 [f2,c3]@2 [f2,c3] e2 [g2,d3] [f#2,c#3] e2 [b2,f#3] [a#2,f3] e2 [g2,d3] [f#2,c3]", // F5 G5 F#5 B5 A#5 G5 F#dim
  L: "a#3 [g3,a3] a3 b3 a3 g3 f3 [d3,e3] [e2,b2]@2 [e2,b2]!2 [e2,b2]@2 [e2,b2]!2", // Gsus2 Dsus2 E5
  M: "a#3 [g3,a3] a3 b3 c4 b3!2 [g3,a3] [f2,c3]@2 [f2,c3]!2 [f2,c3]@2 [f2,c3] e2", // Gsus2 F5
  N: "a#3 [g3,a3] a3 b3 c4 b3!2 [g3,a3] f2 [f2,c3,f3,a3]@2 f2!2 [f2,c3,f3,a3]@3", // Gsus2 F
  O: "~@4 e2@2 b2@2 f3@2 e3@2 e2 b2 g3@2", P: "f3@2 e3@2 e2@2 b2@2 f3@2 e3@2 e2 b2 g3@2", Q: "f3 e3 e2 b2 f3 e3 ~@2",
})).s("gm_overdriven_guitar").gain(0.8)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B C@4 D@4 E F E F E F E G H I H I H J D@2 ~@4 K L@3 M L M N@3 O P N@2 O Q@2 P N D@2 H I H I H J R@2 L@3 M N@3 O P
  N@2 O Q@2 P N D@2 H I H I H J S@2 T@2 P N P O P N U@4 V H V I V W V X V X Y@2 Z AA AB AC AD AE@3 AF AG AF AG AF AG@10
  AH ~
>`.pickRestart({
  A: "~@8 g1 f#1 e1 b1 a#1 a1 g1 f#1", B: "e1@8 g1 f#1 e1 b1 a#1 a1 g1 f#1", C: "e1/4", D: "e1/2",
  E: "e1@4 e2@4 e1 a1 b1@2 f1@2 f1@2", F: "e1@4 e2@4 e1 g1 d2@2 f1@2 f1@2", G: "e1@4 e2@4 g1 f#1 e1 b1 a#1 a1 g1 f#1",
  H: "e1@2 e1!2 e1@2 e1!2 g1 f#1 e1 b1 a#1 a1 g1 f#1", I: "f1@2 f1!2 f1@2 f1!2 g1 f#1 e1 b1 a#1 a1 g1 f#1",
  J: "f1@2 f1!2 f1@2 f1!2 g1 f#1 e1 a1!3 g1 f#1", K: "~@14 e1 f1", L: "f#1@2 a#1@2 e1@2 e2@2 e1@2 e2@2 e2@2 e1 f1",
  M: "f#1@2 d2@2 e1@2 g1@2 ~@2 g1@2 g1@2 e1 f1", N: "f#1@2 e1@2 ~@2 e1@2 ~@2 e1@2 e1@2 e1 f1",
  O: "f#1@2 g1@2 ~@2 g1@2 ~@2 g1@2 g1@2 e1 f1", P: "f#1@2 e1@2 ~@2 e1 f1 f#1@2 e1@2 ~@2 e1 f1", Q: "[e1@30 e1 f1]/2",
  R: "[e1@28 f1 ~ e1 f#1]/2", S: "e1", T: "[e1@28 f1 ~ e1 f1]/2", U: "[e1@62 e1 f1]/4",
  V: "e1@2 e1!2 e1@2 e1!2 e1@2 e1!2 e1@2 e1!2", W: "e1@2 e1!2 e1@2 e1!2 f1@2 f1!2 f1@2 f1!2",
  X: "e1@2 e1!2 e1@2 e1!2 f1 f1@2 f1!2 f1@3", Y: "[e1@28 f1 f1@2 f1]/2", Z: "f1!2 ~@10 f1 f1@2 f1",
  AA: "f1!2 ~@6 e1@2 e1@2 ~@2 e1@2", AB: "e1!2 f1@2 f#1@2 e1@2 ~@2 e1@2 ~@2 e1@2",
  AC: "e1@2 e1 f1 f#1@2 e1@2 ~@2 e1@2 ~@2 e1@2", AD: "e1@2 e1 f1 f#1@2 g1@2 ~@2 g1@2 ~@2 g1@2",
  AE: "[g1@2 e1 f1 e1@32 e1@2 e1!2 e1@2 e1!2 g1 f#1 e1 b1]/3", AF: "a#1 a1 g1 f#1 f1@2 f1!2 f1@2 f1!2 g1 f#1 e1 b1",
  AG: "a#1 a1 g1 f#1 e1@2 e1!2 e1@2 e1!2 g1 f#1 e1 b1", AH: "a#1 a1 g1 f#1 e1@2 e1!6 ~@4",
})).s("gm_electric_bass_pick").gain(0.5)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@2 ~@3 A ~@3 B C@6 ~ D E F E G H D F I@2 F@2 J K@3 L K L K@3 A M N K O P Q R S A T R N R U@2 N A V K@3 L K@3 H R N
  K O P W R S A T R N R@3 N ~ X L Y Z AA@2 AB AA AC F@3 A K AD K AD L AE@2 AF L AF AG AH AI AJ AK AL AM AN AO AP AQ AR@2
  AS AT AU AV AS AW AX ~ AK AY AZ BA BB ~
>`.pickRestart({
  A: "x", B: "x ~@6 x", C: "~@7 x", D: "x ~ x!2 ~@3 x ~ x ~ x ~ x ~ x", E: "x ~@2 x ~@3 x ~ x ~ x!5",
  F: "x ~@2 x ~@3 x ~ x ~ x ~ x ~ x", G: "x!4 ~@3 x ~ x ~ x ~ x ~ x", H: "x ~@2 x ~@3 x ~@8",
  I: "x ~@2 x ~ x ~ x ~ x ~ x ~ x ~ x", J: "x ~@2 x ~@3 x ~@3 x ~@4", K: "x ~@7 x ~ x!2 ~ x ~@2", L: "x!2",
  M: "~@8 x ~ x!2 ~@4", N: "x ~ x!2 ~@3 x ~@8", O: "x ~@7 x ~ x!2 ~ x ~ x", P: "x ~@6 x!2 ~@6 x", Q: "~ x ~ x ~@12",
  R: "x ~ x!2 ~@4 x ~ x!2 ~@4", S: "x ~ x!2 ~@4 x ~ x!2 ~@3 x", T: "~@14 x!2", U: "x ~ x!2 ~@4 x ~ x!2 ~ x ~@2",
  V: "~@3 x", W: "~ x ~ x ~@3 x ~@8", X: "~@7 x ~@8", Y: "~ x ~ x ~@2 x ~", Z: "x ~@7 x!2 ~@6", AA: "x!2 ~@6 x!2 ~@6",
  AB: "x!2 ~@5 x!2 ~@2 x!2 ~@3", AC: "x!2 ~@6 x!2 ~@5 x", AD: "x ~@6 x ~ x!3 ~ x ~@2", AE: "x ~ x!2 ~ x ~@2 x ~@7",
  AF: "x ~ x!2 ~ x ~@3 x ~@3 x ~@2", AG: "~ x", AH: "x ~@3 x ~@8 x ~@2", AI: "~ x ~@11 x ~@2", AJ: "~ x ~@10 x ~ x!2",
  AK: "~@4 x ~@7 x ~ x!2", AL: "~ x ~@2 x ~@4 x ~@2 x!2 ~ x", AM: "~ x ~@2 x ~@7 x ~ x!2", AN: "~ x ~ x!2 ~@7 x ~@3",
  AO: "~ x ~ x ~@4", AP: "~@2 x!3 ~ x!2 ~@4 x ~ x!2", AQ: "~@4 x ~ x!2 ~@3 x ~@4", AR: "~@4 x ~ x!2 ~@4 x ~ x!2",
  AS: "~@4 x ~ x!2 ~@4 x ~@2 x", AT: "~ x ~@2 x ~@2 x!2 ~@2 x ~ x ~@2", AU: "x!2 ~@2 x ~@7 x ~@2 x", AV: "~@3 x ~@4",
  AW: "~@4 x ~ x!2 ~@3 x ~ x ~@2", AX: "x!2 ~@2 x ~@2 x ~@8", AY: "~@4 x ~@2 x ~@6 x ~",
  AZ: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", BA: "~@4 x ~ x!2 ~@8", BB: "~@11 x ~@4",
})).gain(0.5)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@49 A B ~@6 A C ~@16 A B ~@8 A C ~@20 A C ~@5 D E ~@18>".pickRestart({
  A: "~@8 x!8", B: "x!3 ~@13", C: "x", D: "~@12 x!4", E: "x!7 ~@9",
})).gain(0.25)

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

// drums · low tom
const low_tom = s("lt").struct("<~@24 A B@5 C ~@5 D ~@25 D ~@37 E ~@31 F ~>".pickRestart({
  A: "~@2 x!6", B: "x!8", C: "~ x!6 ~", D: "~@5 x!2 ~", E: "~@2 x!2", F: "~@7 x!4 ~@5",
})).gain(0.5)

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

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@10 A@7 B C A@3 D B E F@5 E ~@62 G A@2 H ~@7 I ~ I ~ J K L ~@5 M N ~@10 O ~@5
>`.pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "~@2 x!6", D: "x!2 ~@2 x!4", E: "~ x!3", F: "x!4", G: "~ x!7", H: "~ x!6 ~",
  I: "~@8 x ~@2 x!2 ~@3", J: "~@12 x ~@2 x", K: "x ~@11 x ~@2 x", L: "x", M: "~@6 x!2", N: "~ x ~@2", O: "x!4 ~@12",
})).gain(0.5)

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

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@4 [~@12 x!4] [x!16] [x!5 ~@11] [~@4 x!12] [x!5 ~@11] ~@125>").gain(0.25)

stack(
  distortion_guitar, electric_guitar_clean, overdriven_guitar, bass, kick, snare, snare_soft, hihat, low_tom, mid_tom,
  high_tom, crash, crash_soft
)

More by Metallica