Strudelify
Whiplash cover art

Kill 'Em All

Whiplash

Metallica

KeyG majorTempo160 bpm
0:00/0:00
// Whiplash — Metallica
// 160 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, 3/4 at bar 5, 4/4 at bar 6, 7/8 at bar 134, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 "Guitar 2" overdriven guitar (copy of ch 1 "Guitar 1" distortion guitar)
// note: Full arrangement: all 162 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 B C D E@8 F@4 G@2 F@2 H I H I H I H J K J K J K J K J L M L M L M L M L M L M L M L M N O N O N O ~ K J K J K J K J
  L M L M L M L M N O N O N O ~ K J K J K J K J L M L M L M L M N O N O N O ~@3 P@24 ~ Q L R L R L R L S L T L T L T L
  U@2 V@4 W@2 X@3 Y@2 Z
>`.pickRestart({
  A: "~@3 [e3,b3,e4]!2 ~ [e3,b3,e4] [e3,b3,e4]@4 ~@5", B: "~@2 [e3,b3,e4] ~ [e3,b3,e4]!2 [e3,b3,e4]@4 ~@6",
  C: "~@2 [e3,b3,e4]!3 [e3,b3,e4]@4 ~@7", D: "~ [e3,b3,e4]!3 ~ [e3,b3,e4]@4 ~@7", E: "[g3,d4]/8", F: "[e2,e3,b3,e4]/2",
  G: "[[e2,e3,b3,e4] [e2,e3,b3,e4]@15]/2", H: "e2@2 e2!14", I: "e2!8 [e3,a3]@3 [d#3,g#3]@3 d3 a2",
  J: "e2!8 [e3,a3]@3 [d#3,g#3]@3 [d3,g3]@2", K: "[e2,b2]@2 e2!14", L: "e2!16", M: "e2!14 [d3,g3]@2",
  N: "[c3,g3]@8 [c3,g3]@3 [b2,f#3]@2 [a2,e3]@3", // C5 B5 A5
  O: "e2 f#2 [f#2,c#3]!2 [f#2,c#3]@2 [f#2,c#3]!2 [f#2,c#3]@2 [f#2,c#3]!2 e2@4", // F#5
  P: "e3 d3 b2 [d3,g3]@2 b2 [d3,g3]@2 e2@2 e2@2 e2@2 e2@2", Q: "~@7 [e2,b2]",
  R: "e2!6 [e3,a3]@3 [d#3,g#3]@3 [d3,g3]@2 [e2,b2]@2", S: "e2!6 [e3,a3]@3 [d#3,g#3]@3 [d3,g3]@2 e2!2",
  T: "e2!12 [d3,g3]@2 e2!2", U: "[e2!12 [d3,g3]@2 [c3,g3]@8 [c3,g3]@3 [b2,f#3]@2 [a2,e3]@3 e2 f#2]/2",
  V: "[[f#2,c#3]!2 [f#2,c#3]@2 [f#2,c#3]!2 [f#2,c#3]@2 [f#2,c#3]!2 e2@4 [c3,g3]@8 [c3,g3]@3 [b2,f#3]@2 [a2,e3]@3 e2 f#2]/2", // F#5 C5 B5 A5
  W: "[[f#2,c#3]!2 [f#2,c#3]@2 [f#2,c#3]!2 [f#2,c#3]@2 [f#2,c#3]!2 e2@4 [c3,g3]@8 [b2,f#3]@3 [b2,f#3]@2 [a2,e3]@3 [e2,b2]@2]/2", // F#5 C5 B5 A5 E5
  X: "[f#2,c#3]!4 [e2,b2]!2 [f#2,c#3]@2 [e2,b2]@2 ~@4 [e2,b2]@2", // F#5 E5 F#5 E5
  Y: "[[f#2,c#3]!4 [e2,b2]!2 [f#2,c#3]@2 [e2,b2]@22 [e2,b2]@2]/2", // F#5 E5 F#5 E5
  Z: "[f#2,c#3]!2 [f#2,c#3]@2 [e2,b2]@2 [f#2,c#3]@2 [f#2,c#3]@2 ~@6", // F#5 E5 F#5
})).s("gm_distortion_guitar").gain(0.32)

// other · overdriven guitar · "Guitar 3"
const overdriven_guitar = note("<~@115 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z@2 ~@20>".pickRestart({
  A: "g5 [e5,f#5] d5 e5 g5 [e5,f#5] d5 e5 a5 [e5,g5] d5 e5 a5 [e5,g5] d5 e5", // Esus2 Em
  B: "a5 [e5,g5] d5 e5 a5 [e5,g5] b4 e5 a5 [e5,g5] e5!2 a5 [e5,g5] d5 e5", // Em
  C: "a5 [e5,g5] a#4 e5 a5 [e5,g5] a#4 e5 a5 [e5,g5] a#4 e5 a5 [e5,g5] a#4 e5", D: "a5@3 d5@5 ~ a4@3 d4@3 ~",
  E: "e4 [g4,b4]@2 e4 [g4,b4]@2 e4 [g4,b4]@2 e4 [a4,c#5]@2 [g4,b4]@2 e4 g4", // G A G
  F: "a4 b4 d5 b4 e5 [e5,g5] [a4,b4,d5] a4 b4 d5 b4 a4 g4@4", G: "a3!2", H: "a3@7 g3 e3@4 e3@2 g3@2",
  I: "a3 g3 a3 g3 b3 g3 b3 g3 c4 g3 c4 g3 b3 g3 b3 g3", J: "c4 g3 c4 g3 d4 g3 d4 g3 e4 g3 e4 g3 d4 g3 d4 g3",
  K: "e4 g3 e4 g3 f4 g3 f4 g3 g4 g3 g4 g3 f4 g3 f4 g3", L: "e4 g3 e4 g3 d4 g3 d4 g3 e4@4 e4@2 e4 d4",
  M: "a4 f#4 e4 f#4 a4 f#4 d5 b4 a4 [f#4,b4] e4 [f#4,b4] a4 f#4 e4 d4", // B5
  N: "d4!2 e4 d4 b3 a3 f#3 a3 b3 a3 f#3 e3 d3 b2 b2@2", O: "f#3 a3!3 b3 d4 [d4,g4] d4 e4 d4 b3 [d4,g4] e4 g4 a4 b4",
  P: "a4 [b4,e5] g5 e5 d5 b4 a4 b4 d5 b4 a4 b4 d5 b4 a4 b4", Q: "d5@7 [g3,b3]", R: "d5@3 ~@4 [d5,e5]",
  S: "e5 [d5,e5]@2 e5 d5@2 e5!2 ~ e5 d5 e5!4 d5", T: "~ e5 [d5,e5]@2 e5@2 a4 e5 [d5,e5]@2 e5 d5 ~ e5 g5 e5",
  U: "d5 e5 g5 e5 d5 e5 g5 e5 d5 b4!3 d5 b4 a4 g4", V: "e4 g4 a4 g4 e4 g4 a4 g4 e4 g4 a4 g4@3 g4 [e4,f4]",
  W: "g4 [e4,f4] g4 [e4,f4] a4 [e4,g4] a#4 [e4,g#4] a#4 [e4,g#4] b4 [e4,a4] c5 [e4,a#4] c5 [e4,a#4]", // Fmaj7 Em E A5 Edim
  X: "c#5 [e4,b4] d5 [e4,b4] d#5 [e4,c5] e5 [e4,c#5] e5 [e4,c#5] f#5 [e4,d#5] g5 [e4,e5] g5 [e4,e5]", // E5 C C#m Emaj7 E
  Y: "g#5 [e4,f5] a5 [e4,f5] a5 [e4,f#5] a#5 [e4,g5] b5 [e4,g#5] c6 [e4,a5] c#6 [e4,a#5] c#6 [e4,a#5]", // Fmaj7 Esus2 Em E A5 Edim
  Z: "[d6 b5 d6 b5 d6 b5 d6@4 d6@4 d6@8 ~@10]/2",
})).s("gm_overdriven_guitar").gain(0.8)

// bass · electric bass finger · "Bass Guitar"
const bass = note(`<
  ~@4 A@8 B@4 C@2 B@2 ~ D ~ D ~ D ~ E F E F E F E F E ~ G ~ G ~ G ~ G ~ G ~ G ~ G ~ G H I H I H I ~ F E F E F E F E ~ G
  ~ G ~ G ~ G H I H I H I ~ F E F E F E F E ~ G ~ G ~ G ~ G H I H I H I ~@2 J K@24 L M ~ N ~ N ~ N ~ O ~ P ~ P ~ P ~ Q@8
  R@3 S@2 T
>`.pickRestart({
  A: "[e3,b3,e4]/8", B: "[e2,e3,b3,e4]/2", C: "[[e2,e3,b3,e4] [e2,e3,b3,e4]@15]/2", D: "~@8 [e3,a3]@3 [d#3,g#3]@3 ~@2",
  E: "~@8 [e3,a3]@3 [d#3,g#3]@3 [d3,g3]@2", F: "[e2,b2] ~@7", G: "~@7 [d3,g3]", H: "[c3,g3]@8 ~@3 [b2,f#3]@3 [e3,a3]@2",
  I: "[f#2,c#3]@3 ~", J: "[d3,a3]@3 [c#3,g#3]@2 [c3,g3]@3 [a2,e3]@3 [g#2,d#3]@2 [g2,d3]@3",
  K: "e3 d3 b2 [d3,g3]@2 b2 [d3,g3]@2 e2@2 e2@2 e2@2 e2@2", L: "[e3,b3,e4]", M: "[e3,b3,e4]@3 ~@4 [e2,b2]",
  N: "~@6 [e3,a3]@3 [d#3,g#3]@3 [d3,g3]@2 [e2,b2]@2", O: "~@6 [e3,a3]@3 [d#3,g#3]@3 [d3,g3]@2 ~@2", P: "~@6 [d3,g3] ~",
  Q: "[~@12 [d3,g3]@2 [c3,g3]@8 ~@3 [b2,f#3]@3 [e3,a3]@2 [f#2,c#3]@12 ~@4 [c3,g3]@8 ~@3 [b2,f#3]@3 [e3,a3]@2 [f#2,c#3]@12 ~@4 [c3,g3]@8 ~@3 [b2,f#3]@3 [e3,a3]@2 [f#2,c#3]@12 ~@4 [c3,g3]@8 [b2,f#3]@3 [b2,f#3]@2 [a2,e3]@3 [e2,b2]@2]/8", // G5 C5 B5 A5 F#5 C5 B5 A5 …
  R: "[f#2,c#3]!4 [e2,b2]!2 [f#2,c#3]@2 [e2,b2]@2 ~@4 [e2,b2]@2", // F#5 E5 F#5 E5
  S: "[[f#2,c#3]!4 [e2,b2]!2 [f#2,c#3]@2 [e2,b2]@22 [e2,b2]@2]/2", // F#5 E5 F#5 E5
  T: "[f#2,c#3]!2 [f#2,c#3]@2 [e2,b2]@2 [f#2,c#3]@2 [f#2,c#3]@2 ~@6", // F#5 E5 F#5
})).s("gm_electric_bass_finger").gain(0.4)

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

// drums · low tom
const low_tom = s("lt").struct("<~@43 A ~@7 A B@6 ~@16 A B@6 ~@16 A B@6 ~@44 C D@5 E ~@7>".pickRestart({
  A: "~@15 x", B: "x!4", C: "~@13 x!2 ~", D: "~ x ~ x ~ x ~ x", E: "~ x ~ x ~ x ~@2",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A@15 B A@6 ~@17 C ~@7 C ~@6 A ~@15 C ~@6 A ~@15 C ~@7 D ~@42 E ~@13>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~@6", C: "~@12 x!3 ~", D: "~@2 x!2", E: "~@10 x!3 ~@3",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@4 A B A B A B A B A B A B A B A C A@6 ~ D A@2 E F A@2 E G E B A B A B A H A B A B A B A I ~@6 A@3 E F A@2 E G A B A
  B A B A I ~@6 A@3 E F A@2 E G A B A B A B A I ~@6 J K ~ L@24 ~ M N@3 O N P Q R N S N S N S T U ~@5 M T V@3 W ~@2
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x ~@2 x!2 ~ x!2", D: "~@8 x ~@2 x ~@2 x ~", E: "x!3 ~ x ~ x ~",
  F: "x ~@3 x ~@3 x ~@2 x ~@2 x ~", G: "x ~ x ~ x!4", H: "x ~@3 x ~@3 x!4 ~@4", I: "~@8 x!4 ~@4", J: "x!8",
  K: "x ~ x ~ x ~ x!2 ~ x!3 ~@4", L: "x!2", M: "~@7 x", N: "~ x ~ x ~ x ~ x", O: "~@2 x ~@3 x ~@2 x ~@2 x ~ x ~",
  P: "~@2 x ~@3 x ~@3 x ~@3 x!2", Q: "x!16", R: "x!7 ~@2 x ~@2 x ~ x ~", S: "~ x ~ x ~ x!3", T: "~ x ~ x ~ x ~@2",
  U: "~@6 x!4 ~@6", V: "~ x ~@3 x ~@2", W: "~ x ~ x!2 ~@3",
})).gain(0.4)

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

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

More by Metallica