Strudelify
Seek & Destroy cover art

Kill 'Em All

Seek & Destroy

Metallica

KeyG majorTempo140 bpm
0:00/0:00
// Seek & Destroy — Metallica
// 140 bpm, 4/4, key G 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, 5/4 at bar 236, 4/4 at bar 238) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "Guitar 2" electric guitar clean (copy of ch 2 "Guitar 1" electric guitar clean)
// note: Full arrangement: all 241 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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.

// other · electric guitar clean · "Guitar 1"
const electric_guitar_clean = note(`<
  A@16 B C D C D C D C D C D C D C D C D E F E F E F E F E F E F E F E F G@3 H G@3 B@2 I J E@2 I J E@2 I J E@2 I J C D C
  D C D C D E F E F E F E F G@3 H G@3 B@2 I J E@2 I J E@2 I J E@2 I J K L ~ M N O P Q R S T@2 U V W@2 X Y@2 Z@3 AA@2 AB
  AC AD AE AF AG AH AI AJ AK AL AM A@16 B C D C D C D C D E F E F E F E F G@3 H G@3 B@2 I J E@2 I J E@2 I J E@2 I J AN
  AO AP AQ AR AQ AP AQ AR AQ AP AQ AR AQ AP AQ AR AS AT AU AT AU AT AU AT AU AT AU AT AU AT AU AT AV AW AX@2 AY
>`.pickRestart({
  A: "[a2@2 a2@2 d4 d#4 d4@4 a2@2 a3 a#3 a3@4 a2@2 f3@2 e3@2 g3@2 e3@2 c4@2 a3@2]/2", B: "e4 d4 b3 d4 b3 a#3 a3 g3",
  C: "e2!4 [d3,g3] [e3,a3] [d3,g3] [e3,a3]", D: "e2!4 e3 d3 b2 a#2", E: "e2!8", F: "e2!4 b2 a#2 g3 e3",
  G: "[g3,c4] e2!3 [g3,c4] [a3,d4] [g3,c4]@2", H: "d4 c4 a3 g#3 g3 e3 d#3 d3", I: "[g3,d4]", J: "[f#3,c#4] [f3,c4]",
  K: "[e2,e3,b3,e4]", L: "[e3,b3,e4,g#4]@3 ~@13", M: "~@11 [a2,g3] [a2,a3] ~ a2 a3",
  N: "a2 ~ a2 a3 a2 ~ [g3,c4] a2 ~ a2 a3 a2 ~ a2 a3 a2", O: "~ [f#3,b3] a2!2 ~ a3 a2!2 ~ a3@2 c3 ~ b2 a2 f3",
  P: "~ e3 d3 c3 ~ a2 g3 a2 ~ a2 a3 ~ a2!2 a3 ~", Q: "a2 [g3,c4] a2 ~ a2 a3 a2 ~ a2 a3 a2 ~ [f#3,b3] a2!2 ~",
  R: "a3 a2!2 ~ a3@2 c3 ~ b2 a2 f3 ~ e3 d3 ~ c3", S: "a2 g3 ~ a2!2 a3 ~ a2!2 a3 ~ a2 [g3,c4] a2 ~ a2",
  T: "[a3 a2 ~ a2 a3 a2 ~ [f#3,b3] a2!2 ~ a3 a2!2 ~ a3@3 c3 b2 a2 ~ f3 e3 d3 ~ c3 a2 g3 ~ a2!2]/2", // B5
  U: "a3 ~ a2!2 a3 ~ a2 [g3,c4] a2 ~ a2 a3 a2 ~ a2 a3", V: "a2 ~ [f#3,b3] a2 ~ a2 a3 a2 ~ a2 a3@3 c3 b2 a2",
  W: "[~ f3 e3 d3 ~ c3 a2 [g3,d4]@11 [f#3,c#4]@5 ~ [f3,c4]@5 e2!2 ~]/2", X: "e2!3 ~ e2!3 ~ e2!3 ~ e2!3 ~",
  Y: "[e2!2 [g3,d4]@11 [f#3,c#4]@5 ~ [f3,c4]@5 e2!2 ~ e2!3 ~ e2]/2", // G5 F#5 F5
  Z: "[e2!2 ~ e2!3 ~ e2!3 ~ e2!2 ~ [g3,d4]@10 [f#3,c#4]@5 ~ [f3,c4]@5 e2!2 ~ e2!3 ~ e2!3 ~ e2!2]/3", // G5 F#5 F5
  AA: "[~ e2!3 ~ e2!3 ~ [g3,d4]@10 [f#3,c#4]@5 ~ [f3,c4]@5 d3 e3]/2", // G5 F#5 F5
  AB: "~ e2 e3 ~ e2!2 e3 ~ e2 [d3,g3] e2 ~ e2 e3 e2 ~", AC: "e2 e3 e2 ~ [c#3,f#3] e2!2 ~ e3 e2!2 ~ e3@2 g2 ~",
  AD: "f#2 e2 c3 ~ b2 a2 ~ g2 e2 d3 ~ e3 e2 e3 ~ e2", AE: "e2 e3 ~ e2 [d3,g3] e2 ~ e2 e3 e2 ~ e2 e3 e2 ~ [c#3,f#3]",
  AF: "e2!2 ~ e3 e2!2 ~ e3@3 g2 f#2 e2 ~ c3 b2", AG: "a2 ~ g2 e2 d3 ~ e3 e2 e3 ~ e2!2 e3 ~ e2 [d3,g3]",
  AH: "e2 ~ e2 e3 e2 ~ e2 e3 e2 ~ [c#3,f#3] e2 ~ e2 e3 e2", AI: "~ e2 e3@3 g2 f#2 e2 ~ c3 b2 a2 ~ g2 e2 d3",
  AJ: "~ e3 e2 e3 ~ e2!2 e3 ~ e2 [d3,g3] e2 ~ e2 e3 ~", AK: "e2!2 e3 ~ e2 [c#3,f#3] e2 ~ e2 e3 e2 ~ e2 e3@3",
  AL: "g2 f#2 e2 ~ c3 b2 a2 ~ g2 f#2 g2 ~ f#2 e2 c3 ~", AM: "b2 a2 ~ g2 f#2 [a2,e3,a3]@11", AN: "[e3,b3] e2!7",
  AO: "e2!7 [g3,d4]", AP: "[f#3,c#4] e2!2 [f#3,c#4] [f3,c4] e2!2 [f3,c4]", AQ: "[e2,b2] e2!6 [g3,d4]",
  AR: "[f#3,c#4] e2!2 [f#3,c#4] [d3,a3] e2!2 [d3,a3]", AS: "[e3,b3] e2!5 e3@2", AT: "e2!2 [e2,b2] e2!2 [g2,d3] e2!2",
  AU: "[f#2,c#3] e2!2 [g2,d3] e2!2 [a2,e3] [g2,d3]", AV: "[f#2,c#3,f#3] e2!5 [a2,e3,a3] [g2,d3,g3]",
  AW: "e2!2 e4 d4 b3 d4 b3 a#3", AX: "a3 g3 e4 d4 b3 d4 b3 a#3", AY: "a3 g3 e2!4 [e2,g3,d4,g4]@2",
})).s("gm_electric_guitar_clean").gain(0.49).pan(1)

// other · overdriven guitar · "Guitar Solo"
const overdriven_guitar = note("<~@126 A B@2 C D@2 E F G H I J K L@2 M N O P Q ~@95>".pickRestart({
  A: "~@9 b4 d5 e5@2 g5 [b4,e5] e5", // E5
  B: "[[e5,g5] a5 [e5,g5] e5 [d5,e5] g5 [e5,a5] e5 [e5,g5] d5 e5 ~ d5 e5 d5@12 ~@6]/2", // Em Dsus2 A5 Em
  C: "~@8 b4@2 b4 [b4,d5] a4 b4 ~ [f#4,a4]", D: "[a4 [e4,f#4] ~ d4 b3 d4 ~ e4@2 b3@15 ~@8, ~@9 d4 ~@22]/2",
  E: "~@3 a5@4 a#4 [d5,g#5] ~ g5 f#5 d5 ~ c#5 b4", F: "~ g4 d5@13 ~", G: "~@11 a#5 ~ c6 d#6 [a#5,c6]",
  H: "d6 b5 [b5,c#6] c#6 [g5,a5] b5 [f#5,g#5] f#5 [e5,f#5,a5] g#5 [d#5,e5] f#5 [d#5,e5] c#5 [b4,d5] b4", // Bsus2 Gsus2 F#sus2 F#m7 Emaj7 Bm
  I: "[a4,b4] d5 [a4,b4] f#4 [f#4,a4] e4 d4 ~ e4 f#4 e4 ~ e4@2 [d4,e4] ~", // Asus2 F#m Dsus2
  J: "d4 b3 d4@4 ~ a2!2 b2 ~ d3 f#3 a3 ~ [a3,b3]", K: "f#3 a3 b3!2 d4 e4 ~ e4@2 [d4,e4] ~ d4@2 b3 ~ d4",
  L: "[e4!2 ~ f#4 a4 [e4,f#4] ~ d4 b3 ~ d4 e4@3 d4 e4@3 a4 b4 [d5,e5] ~ e5 d5 [a4,b4] b4 [d5,e5] e5 d5 b4 [b4,d5] [d5,e5]]/2", // Esus2 Dsus2 Asus2 Dsus2 Bm Dsus2
  M: "e5 ~ [b4,d5] d5!2 e5!2 d5 e5 ~ g5 e5 d5 [a4,b4] b4 d5", N: "b4 a4 g4 e4 g4 a4 [e4,g4] d4 b3 a3 g3@3 g3 a3 b3",
  O: "a3 b3 d4 b3 d4 e4 d4 [e4,g4] e4 g4 a4 g4 a4 b4 a4 b4", // Em
  P: "[b4,d5] d5 e5 d5 e5 g5 e5 d5 b4 [a#4,b4] d5 b4 a4 g4@3", Q: "e4@3 ~@13",
})).s("gm_overdriven_guitar").gain(0.49)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@6 A B C@8 D E ~@3 F G H I J I J I J I J I K L K M N L O P K L K M N L O P Q R S T Q R S U V W X K Y W X K Z W X K Y
  W X J I J AA J I J I K L K M N L O P Q R S T Q R S U V W X K Y W X K Z W X K Y W X E AB ~@6 AC AD AE AF AG AH AI@2 AJ
  AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BD BE BD ~ A BF C@8 D J I J AA J I J BG K L K M N L O P
  Q R S T Q R S U V W X K Y W X K BH W X K Y W X BI BJ BK BL BM BN BK BL BM BN BK BL BM BN BK BL BM BO BP BQ BP BQ BP BQ
  BP BQ BP BQ BP BQ BP BQ BP BQ BR BS@2 BT
>`.pickRestart({
  A: "a1!8", B: "a1!4 a2!3 a1", C: "[a1!2 a2@2 a1!2 a2 a1@2 a1 f2 e2 g2 e2 c3 a2, ~@4 g2 ~@7 g2 ~@19]/2",
  D: "e1 ~@2 e2", E: "e1", F: "~@2 e1!2 ~@2 e1@2", G: "~@2 e1!2 ~@2 e1!2", H: "e1!4 e2!4", I: "e1!4 e2 d2 b1 a#1",
  J: "e1!4 g1 a1 g1 a1", K: "e1!8", L: "e1!4 b1 a#1 g2 e2", M: "e1!4 b1 a#1 g1 e1", N: "e1!2 e2 e1!5",
  O: "e1!2 e2 e1!3 e2 e1", P: "e1!2 e2 e1 b1 a#1 g1 e1", Q: "c2 a1!3 c2 d2 c2@2", R: "c2 a1!2 e2 g2 e2 a2@2",
  S: "a1!4 c2 d2 c2@2", T: "d3 c3 a2 g#2 g2 e2 d#2 d2", U: "e3 d3 b2 d3 b2 a#2 a2 g2", V: "e2 d2 b1 d2 b1 a#1 a1 g1",
  W: "g1@2 g1@2 g1@2 g1@2 g1@2 g1!2 g2@4", X: "f#1!2 f1!2", Y: "e1@2 a1 b1 d2@2 e1@2 e2@2 e1@2 e2@2 e1@2",
  Z: "e2 d2 b1 a#1 a1 b1 a#1 a1", AA: "e1 g1 a1 a#1 b1 d2 d#2 e2", AB: "e1@3 ~@13",
  AC: "~@6 c2 ~ b1 a1 f2 ~ e2 d2 ~ c2", AD: "a1 g1 ~ a1!2 a2 ~ a1!2 a2 ~ a1!3 ~ a1",
  AE: "a2 a1 ~ a1 a2 a1 ~ a1!3 ~ a2 a1!2 ~ a2", AF: "a1 ~ c2 b1 a1 ~ f2 e2 d2 ~ c2 a1 g1 ~ a1!2",
  AG: "a2 ~ a1!2 a2 ~ a1!3 ~ a1 a2 a1 ~ a1 a2", AH: "a1 ~ a1!2 ~ a1 a2 a1 ~ a1 a2 a1 ~ c2 b1 a1",
  AI: "[~ f2 e2 d2 ~ c2 a1 g1@3 g1@3 g1!2 g1@3 f#1@3 f#1@3 f1@2 f1@3 e1!2 ~]/2",
  AJ: "e2!2 e1 ~ e1 e2!2 ~ e1!2 e2 ~ e2 e1!2 ~", AK: "e2!2 g1@3 g1@3 g1!2 ~ g1@2 f#1@3",
  AL: "f#1@3 f1@2 f1@3 e1!2 ~ e2!2 e1 ~ e1", AM: "e2!2 ~ e1!2 e2 ~ e2 e1!2 ~ e2!2 ~ g1@2",
  AN: "g1@3 g1!2 ~ g1@2 f#1@3 f#1@3 f1@2", AO: "f1@3 e1!2 ~ e2!2 e1 ~ e1 e2!2 ~ e1!2",
  AP: "~ e2!2 e1 ~ e1 e2!2 ~ g1@2 g1@3 g1!2", AQ: "~ g1@2 f#1@3 f#1@3 f1@2 f1@3 d2 e2",
  AR: "~ e1 e2 ~ e1!2 e2 ~ e1 d2 e2 ~ e1 e2 e1 ~", AS: "e1 e2 e1 ~ c#2 e2 e1 ~ e2 e1!2 ~ e2 e1 g1 ~",
  AT: "f#1 e1 c2 ~ b1 a1 ~ g1 e1 d2 ~ e2 e1 e2 ~ e1", AU: "e1 e2 ~ e1 d2 e2 ~ e1 e2 e1 ~ e1 e2 e1 ~ c#2",
  AV: "e2 e1 ~ e2 e1!2 ~ e2 e1 ~ g1 f#1 e1 ~ c2 b1", AW: "a1 ~ g1 e1 d2 ~ e2 e1 e2 ~ e1!2 e2 ~ e1 d2",
  AX: "e2 ~ e1 e2 e1 ~ e1 e2 e1 ~ c#2 e2 ~ e1 e2 e1", AY: "~ e1 e2 e1 ~ g1 f#1 e1 ~ c2 b1 a1 ~ g1 e1 d2",
  AZ: "~ e2 e1 e2 ~ e1!2 e2 ~ e1 d2 e2 ~ e1 e2 ~", BA: "e1!2 e2 ~ e1 c#2 e2 ~ e1 e2 e1 ~ e1 e2 e1 ~",
  BB: "g1 f#1 e1 ~ c2 b1 a1 ~ g1 f#1 g1 ~ f#1 e1 c2 ~", BC: "b1 a1 ~ g1 f#1 a1@11", BD: "a1 ~@3", BE: "~@6 a1!2",
  BF: "a1!2 a2 a1 a2!2 a1!2", BG: "e1@2 a1 b1 d2@2 b1@2 e2@2 d2@2 b1@2 a#1@2", BH: "e2 d2 b1 a1 a#1 a1 b1 a1",
  BI: "g1!8", BJ: "g1!7 g2", BK: "f#2 e1!2 f#2 f2 e1!2 f2", BL: "e2 e1!6 g2", BM: "f#2 e1!2 f#2 d2 e1!2 d2",
  BN: "e2 e1 d2 e1 e2!3 g2", BO: "e2 e1 d2 e1 e2!2 e2@2", BP: "e1!5 g1 e1!2", BQ: "f#1 e1!2 g1 e1!2 a1 g1",
  BR: "e1!2 e1@2 ~@4", BS: "~ e1 ~@2", BT: "~@2 e1!4 e2@2",
})).s("gm_electric_bass_finger").gain(0.49)

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

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@167 [~@6 x!2] ~@73>").gain(0.49)

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

// drums · high tom
const high_tom = s("ht").struct("<~@75 A ~@49 B ~@41 C ~@52 D ~@20>".pickRestart({
  A: "~@4 x!4", B: "~@5 x!3 ~@8", C: "~@2 x!2", D: "~@8 x!3 ~ x ~@3",
})).gain(0.49)

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

// drums · ride
const ride = s("rd").struct("<~@49 A@3 B A@3 ~@32 A@3 B A@3 ~@85 A@3 B A@3 ~@54>".pickRestart({
  A: "~ x!4 ~@3", B: "~ x!5 ~@2",
})).gain(0.49)

// … 1 more lines

More by Metallica