Strudelify
Through the Never cover art

1991 · Metallica

Through the Never

Metallica

KeyA majorTempo188 bpm
0:00/0:00
// Through the Never — Metallica
// 188 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 64, 4/4 at bar 64, 3/4 at bar 71, ...) 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" distortion guitar)
// note: Full arrangement: all 191 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(188/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 · distortion guitar · "Guitar 1"
const distortion_guitar = note(`<
  A@12 B C@3 D C@3 B C@3 D C@3 E F G H I J K H I J K H K H@3 I G H L@2 M N O P C@4 Q@4 R@2 S T@3 U T@2 V W X H Y@2 Z H
  Y@2 Z H AA H@3 AB@2 H AC L AD AE@3 AF AG@3 AH AI@3 AJ AK AL AM AN AO@3 AP AO@2 AQ AR AO@3 AP AO@2 AS AT AU@3 AV ~@11
  AW AX AY AX AY AX AY AX AY AX AY AX AY AX AY AX AY AX AY AX AY AX AY AX AY AX AY AX AY AX AZ BA BB BC@2 BD@3 BE BF@4
  AK BF@2 AK BG BH AG@2 BI
>`.pickRestart({
  A: "e2 f#2 c#3 f#2 e2 f#2 c#3 f#2", B: "[e2,b2]!2 ~@4 [g#2,d3]@2", C: "e2 f#2 c#3 f#2 e2 f#2 c3 f#2",
  D: "e2 f#2 c#3 f#2 e2 f#2 [g2,d3]@2", E: "[e2,b2]!2 ~@6",
  F: "[e3,a3] [f3,a#3] [e3,a3] [d3,g3] [c3,f3] [b2,e3] [a2,d3] [c3,f3]", G: "[e2,b2,e3]@2 e2!6", H: "e2!8",
  I: "e2 [e3,a3]@3 ~ [f3,a#3]@3", J: "a3 a#3 a3 g3 f3 e3 d3 e3", K: "f3 e3 e2!6", L: "g2!8", M: "f#2!8",
  N: "f#2!3 [f#2,c3]@5", O: "~ [e3,a3]@3 ~ [f3,a#3]@3", P: "a3 a#3 a3 g3 f3 e3 d3 f#3",
  Q: "[e2,b2] [f#2,c#3] f#2!2 [f#2,c#3]@2 f#2!2", R: "[e2,b2] [f#2,c#3] ~@2 [e2,b2] [f#2,c#3] ~@2",
  S: "~@2 [g2,d3]@2 e2 f#2 c#3 f#2", T: "e2 f#2 c3 f#2 e2 f#2 c#3 f#2", U: "e2 f#2 [g2,d3]@2 e2 f#2 c#3 f#2",
  V: "e2 f#2 c3 f#2 [e2,b2]!2 ~@2", W: "~@2 a3 a#3 a3 g3 f3 e3", X: "d3 f#3 [e2,b2,e3]@2 e2!4",
  Y: "[e2!3 [e3,a3]@3 ~ [f3,a#3]@3 a3 a#3 a3 g3 f3 e3]/2", Z: "d3 e3 f3 e3 e2!4", AA: "e2!2 f3 e3 e2!4",
  AB: "[e2!3 [e3,a3]@3 ~ [f3,a#3]@3 [e2,b2,e3]@2 e2!4]/2", AC: "e2!2 g2!6", AD: "g2!2 f#2!6",
  AE: "[f#2!5 [f#2,c3]@5 ~ [e3,a3]@3 ~ [f3,a#3]@3 a3 a#3 a3 g3 f3 e3]/3", AF: "d3 f#3 e2 f#2 c#3 f#2 e2 f#2",
  AG: "c3 f#2 e2 f#2 c#3 f#2 e2 f#2", AH: "c3 f#2 [e2,b2] [f#2,c#3] f#2!2 [f#2,c#3]@2",
  AI: "f#2!2 [e2,b2] [f#2,c#3] f#2!2 [f#2,c#3]@2", AJ: "f#2!2 [e2,b2] [f#2,c#3] ~@2 [e2,b2] [f#2,c#3]",
  AK: "~@2 [e2,b2] [f#2,c#3] ~@2 [e2,b2] [f#2,c#3]", AL: "~@4 a3 a#3 a3 g3",
  AM: "f3 e3 d3@2 [e2,b2] [f2,c3] ~ [f#2,c#3]", AN: "~ [g2,d3] ~ [g#2,d3] a2 b2!3", AO: "a2 b2!3 a2 b2!3",
  AP: "a2 b2 [c3,g3]@2 a2 b2!3", AQ: "a2 b2!3 [a2,e3]!2 ~ [a2,e3]", AR: "~ [c3,g3] ~ [c3,g3] a2 b2!3",
  AS: "a2 b2!3 [g2,d3]!2 ~ [g2,d3]", AT: "~ [c3,g3] ~ [c3,g3] g2 a2!3", AU: "g2 a2!3 g2 a2!3",
  AV: "g2 a2 [a#2,f3]@2 ~@4", AW: "~@3 [e2,b2]", AX: "e2!2 [g2,d3]@2 e2!2 a#2@2", AY: "d3@4 d3 e3 ~ d3 a#2@4 [e2,b2]@4",
  AZ: "d3@4 d3 e3 ~ d3 a#2@4 [e2,b2,e3]@2 [e2,b2,e3]@2", BA: "~@2 [e2,b2,e3]!2 ~@2 [e2,b2,e3]!2",
  BB: "~@2 [e2,b2,e3]!2 ~@2 e2 f#2", BC: "c3 f#2 e2 f#2 c3 f#2 e2 f#2", BD: "c#3 f#2 e2 f#2 c3 f#2 e2 f#2",
  BE: "c#3 f#2 e2 f#2 c3 f#2 [e2,b2] [f#2,c#3]", BF: "f#2!2 [f#2,c#3]@2 f#2!2 [e2,b2] [f#2,c#3]",
  BG: "~@2 [e2,b2] [f#2,c#3] ~@4", BH: "[g2,d3]@2 e2 f#2 c#3 f#2 e2 f#2", BI: "c3 f#2 [e2,b2]!2 ~@4",
})).s("gm_distortion_guitar").gain(0.4)

// other · overdriven guitar · "Guitar 3"
const overdriven_guitar = note(`<
  ~@55 A B ~@40 C D E ~@7 F G H I@4 J K@3 L@3 M@3 N O@3 P Q R S T U@7 ~@35 V W X ~@13
>`.pickRestart({
  A: "f#4@2 c#4 ~ c4@2 b3 ~", B: "f#3@2 c#3 ~ c3@2 b2 ~", C: "~@2 f#4@2 c#4 ~ c4@2", D: "b3 ~ f#3@2 c#3 ~ c3@2",
  E: "b2 ~@7", F: "~@8 f#5@2 e5 d5 e5@2 f#5@2", G: "e5 d5!2 e5 f#5@2 e5 d5 e5@2 f#5@2 e5 d5 e5@2",
  H: "f#5@2 a5@2 f#5 a5 f#5 e5 a5 f#5 e5@2 f#5@2 e5@2",
  I: "[d5@2 b4@2 d5@2 e5@2 e5@4 d5@2 b4@10 b3@2 d4@2 e4@2 e4@6 e4@4 e4@4 d4@2 b3@6 b3@2 d4@2 e4@2 d4@2 e4@3 d4]/4",
  J: "b3 d4 e4 a4@5", K: "[d4 ~ b3 a3 b3 a3 b3 [d4,f#4]@2 b3 a3 f#3 a3 b3 a3 [d4,f#4]@2 b3 a3 f#3 a3 b3 e4 b3]/3",
  L: "[d4@2 e4@2 b3 a3 f#3@2 a3@2 f#3@2 e3@2 d3@6 ~@2 e3@2 f3@2 e3@2 d3@2 e3@4 d3@2 e3@4 d3@2 e3@4 d3@2]/3",
  M: "[f#3@24 d3@2 b2@4 b2@4 ~@6 e5 g5 e5 d5 e5 g5 e5 d5]/3", N: "e5 g5 e5 d5 e5 g5 e5 d5 e5 g5 e5 d5 e5 g5 e5 d5",
  O: "[e5 g5 e5 d5 e5 g5 e5 d5 e5 g5 e5@2 g#5@8 g5 e5 d5@2 e5@2 g5@2 e5@2 c#6@6 g3@4 b3@2 [c#4,f#4]@2 ~@4]/3", // F#5
  P: "f#4@8 b3@2 [c#4,f#4]@2 b3 a3 f#3@2", Q: "a3 f#3 ~@2 b3 [c#4,f#4] e4 b3", R: "a3 f#3 a3 b3 b3@4",
  S: "a3 f#3@5 f#3@2 ~@2 [b4,c#5]@6", T: "~ [c#5,d#5]@3 ~ [d5,e5]@3",
  U: "[~@2 a2@98 d3 e3 ~ d3 a#2@4 ~@4, ~ f#4@13 ~@42]/7", V: "~@3 f#4", W: "c#4 ~ c4@2 b3 ~ f#3@2",
  X: "c#3 ~ c3@2 b2 ~@3",
})).s("gm_overdriven_guitar").gain(0.4)

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

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

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@106 A B ~@6 A B ~@6 A B ~@9 C D E@2 F G H I H G H I H G H I H G@2 J C G K I H L H M ~ N K C@2 G H J ~@22
>`.pickRestart({
  A: "~@4 x!2 ~ x", B: "~ x ~ x ~@4", C: "~@3 x", D: "x!3 ~ x!4", E: "x!8", F: "x!7 ~", G: "x ~@2 x", H: "x!2 ~ x",
  I: "x!4", J: "x", K: "~ x ~ x", L: "x ~ x!2", M: "~ x", N: "~@2 x!2",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@10 A ~@41 B ~@18 C ~@22 C ~@10 D E ~@26 F G@3 H ~@15 I ~@7 D ~@29>".pickRestart({
  A: "~@2 x!6", B: "~@2 x!2 ~@4", C: "~@4 x!2 ~@2", D: "~@6 x!2", E: "x!2 ~@6", F: "~@3 x", G: "~ x ~ x", H: "~ x ~@2",
  I: "x",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@34 A B@3 A B A B A B ~@2 B ~@29 C B@3 D B D B D B E ~ A E ~@49 F ~ F ~ F ~ F ~ F ~ F ~ F ~@3 F ~ F ~ F ~@3 F ~@3 F
  ~@23
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "~@2 x!2", D: "x ~ x!2", E: "x", F: "~ x",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@11 A ~@40 B ~@18 C ~@22 C ~@11 D ~@46 B ~@8 E ~@28>".pickRestart({
  A: "x!8", B: "~@4 x!2 ~@2", C: "~@6 x!2", D: "~ x ~@2", E: "x",
})).gain(0.4)

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

stack(distortion_guitar, overdriven_guitar, bass, kick, snare, hihat, low_tom, mid_tom, open_hat, high_tom, crash)

More by Metallica