Strudelify

Metal Militia

Metallica

KeyG majorTempo168 bpm
0:00/0:00
// Metal Militia — Metallica
// 168 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 26, 4/4 at bar 26, 2/4 at bar 79, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "Bass Guitar" electric bass finger (copy of ch 2 "Guitar 2" distortion guitar)
// note: Full arrangement: all 223 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar 1.
setcpm(168/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 · electric guitar clean · "Guitar 1"
const electric_guitar_clean = note("<A@5 B@4 ~@15 C@2 ~@4 D@3 ~@85 E@2 ~@6 F ~@9 G ~@86>".pickRestart({
  A: "[~@2 [g#2,d#3]@10 [a#2,f3]@3 [a2,e3]@2 [g2,d3]@3 e2!11 [g2,d3]@3 [a2,e3]@2 e2!11 [a#2,f3]@3 [a2,e3]@2 e2!11 [g2,d3]@3 [a2,e3]@2 e2!8 ~@4]/5", // G#5 A#5 A5 G5 A5 A#5 A5 G5 …
  B: "[~@4 e2!11 [g2,d3]@3 [a2,e3]@2 e2!11 [a#2,f3]@3 [a2,e3]@2 e2!11 [g2,d3]@3 [a2,e3]@2 e2!8 ~@4]/4", // G5 A5 A#5 A5 G5 A5
  C: "[~@4 e2!8 [a#2,f3]@3 [a2,e3]@2 [g2,d3]@3 [a#2,f3]@3 [a2,e3]@2 [g2,d3]@3 ~@4]/2", D: "~@3 e3",
  E: "[~@4 c5@5 c5@2 ~@5]/2", F: "~@3 f#5 ~@4", G: "[a2,e3] ~@3",
})).s("gm_electric_guitar_clean").gain(0.41)

// other · distortion guitar · "Guitar 2"
const distortion_guitar = note(`<
  ~@4 A@2 ~@2 B@8 C@8 D E@2 F@2 G@2 F@2 G@2 F@2 G@2 F@2 G@2 F@2 G@2 F@2 G@2 F@2 G@2 F@2 H@6 I J I K I J I K I J I K I J
  I L@6 M@20 N@2 O@8 P@4 Q R S R T R S R T R S R T R S R U V ~@2 W@2 X@4 Y@4 Z AA AB@2 AC AD AE AF@3 AG AF@3 AG AF@3 AG
  AF@3 AG AF@3 AG AF@3 AG AH AI AJ AK AL AM AL AN AL AM AL AN AL AM AL AN AL AM AL AN AL AM AL AN AL AM AL AN AL AM AL
  AN AL AM AL AN AL AM AL AN AL AM AL AN
>`.pickRestart({
  A: "[~@12 [a#2,f3]@3 [a2,e3]@2 [g2,d3]@3 ~@12]/2", // A#5 A5 G5
  B: "[~@12 [a#2,f3]@3 [a2,e3]@2 [g2,d3]@3 e2!11 [g2,d3]@3 [a2,e3]@2 e2!11 [a#2,f3]@3 [a2,e3]@2 e2!11 [g2,d3]@3 [a2,e3]@2 e2!8 [a#2,f3]@3 [a2,e3]@2 [g2,d3]@3 e2!11 [g2,d3]@3 [a2,e3]@2 e2!11 [a#2,f3]@3 [a2,e3]@2 e2!11 [g2,d3]]/8", // A#5 A5 G5 A5 A#5 A5 G5 A5 …
  C: "[~@2 [a2,e3]@2 e2!8 [a#2,f3]@3 [a2,e3]@2 [g2,d3]@3 e2!11 [g2,d3]@3 [a2,e3]@2 e2!11 [a#2,f3]@3 [a2,e3]@2 e2!11 [g2,d3]@3 [a2,e3]@2 e2!8 [a#2,f3]@3 [a2,e3]@2 [g2,d3]@3 e2!11 [g2,d3]@3 [a2,e3]@2 e2!11 [a#2,f3]@3 [a2,e3]@2 e2!11 [g2,d3]]/8", // A5 A#5 A5 G5 A5 A#5 A5 G5 …
  D: "~ [a2,e3] ~@6", E: "[~@6 [a2,e3]@6 f#3@2 a2 a3]/2", F: "a2 g3@2 a2 e3@2 a2 d#3@3 d3@2 a2@2 a3@2",
  G: "[a2 g3@2 a2 e3@2 a2 d#3@3 d3@2 [d#3,a#3]@3 [a#2,f3]@2 [c3,g3]@5 [g2,d3]@2 [a2,e3]@2 [a#2,f3]@2 a2@2 a3@2]/2", // D#5 A#5 C5 G5 A5 A#5
  H: "[a2 g3@2 a2 e3@2 a2 d#3@3 d3@2 [d#3,a#3]@3 [a#2,f3]@2 [c3,g3]@5 [g2,d3]@2 [a2,e3]@2 [a#2,f3]@2 [d3,a3]@2 [d3,a3]@14 [c3,g3]@8 [b2,f#3]@4 [a2,e3]@2 [a2,e3]@2 [d3,a3]@16 [c3,g3]@8 [b2,f#3]@3 [c3,g3]@5 a2!4]/6", // D#5 A#5 C5 G5 A5 A#5 D5 C5 …
  I: "a2!7 [c3,g3]@3 [d3,a3]@2 a2!4", J: "a2!7 [d#3,a#3]@3 [d3,a3]@2 a2!4",
  K: "a2!4 [d#3,a#3]@3 [d3,a3]@2 [c3,g3]@3 a2!4", // D#5 D5 C5
  L: "[a2!4 [d#3,a#3]@3 [d3,a3]@2 [c3,g3]@3 [d#3,a#3]@3 [d3,a3]@2 [c3,g3]@3 [d3,a3]@16 a2@2 a3@2 a2 g3@2 a2 e3@2 a2 d#3@3 d3@2 a2@2 a3@2 a2 g3@2 a2 e3@2 a2 d#3@3 d3@2 a2@2 a3@2 a2 g3@2 a2 e3@2 a2 d#3@3 d3@2 [d#3,a#3]@3 [a#2,f3]@2 [c3,g3]@5 [g2,d3]@2]/6", // D#5 D5 C5 D#5 D5 C5 D5 D#5 …
  M: "[[a2,e3]@2 [a#2,f3]@2 a2@2 a3@2 a2 g3@2 a2 e3@2 a2 d#3@3 d3@2 a2@2 a3@2 a2 g3@2 a2 e3@2 a2 d#3@3 d3@2 a2@2 a3@2 a2 g3@2 a2 e3@2 a2 d#3@3 d3@2 [d#3,a#3]@3 [a#2,f3]@2 [c3,g3]@5 [g2,d3]@2]/4", // A5 A#5 D#5 A#5 C5 G5
  N: "[[a2,e3] [a#2,f3] [d3,a3] [d3,a3]@7 [c3,g3]@4 [b2,f#3]@2]/2", // A5 A#5 D5 C5 B5
  O: "[[a2,e3]@2 [a2,e3]@2 [d3,a3]@16 [c3,g3]@8 [b2,f#3]@3 [c3,g3]@5 a2!11 [c3,g3]@3 [d3,a3]@2 a2!11 [d#3,a#3]@3 [d3,a3]@2 a2!11 [c3,g3]@3 [d3,a3]@2 a2!8 [d#3,a#3]@3 [d3,a3]@2 [c3,g3]@3 a2!11 [c3,g3]@3 [d3,a3]@2 a2!11 [d#3,a#3]]/8", // A5 D5 C5 B5 C5 D5 D#5 D5 …
  P: "[~@2 [d3,a3]@2 a2!11 [c3,g3]@3 [d3,a3]@2 a2!8 [d#3,a#3]@3 [d3,a3]@2 [c3,g3]@3 [d#3,a#3]@3 [d3,a3]@2 [c3,g3]@3 [d3,a3]@16 ~@4]/4", // D5 C5 D5 D#5 D5 C5 D#5 D5 …
  Q: "~@8 b2!8", R: "b2!3 [d3,a3]@3 [e3,b3]@2 b2!8", S: "b2!3 [f3,c4]@3 [e3,b3]@2 b2!8",
  T: "[f3,c4]@3 [e3,b3]@2 [d3,a3]@3 b2!8", U: "[f3,c4]@3 [e3,b3]@2 [d3,a3]@3 [f3,c4]@3 [e3,b3]@2 [d3,a3]@3",
  V: "[e3,b3]", W: "a2!16", X: "[d#3,a#3]@3 [a#2,f3]@3 [c3,g3]@3 [g2,d3] [g2,d3]@2 [a2,e3]@2 [f2,c3]@2",
  Y: "[f3,c4]@3 [c3,g3]@3 [d3,a3]@3 [a2,e3] [a2,e3]@2 [b2,f#3]@2 [g2,d3]@2", // F5 C5 D5 A5 B5 G5
  Z: "[f#3,c#4]@3 [c#3,g#3]@3 [d#3,a#3]@3 [a#2,f3] [a#2,f3]@2 [c3,g3]@2 [g#2,d#3]@2", // F#5 C#5 D#5 A#5 C5 G#5
  AA: "[f#3,c#4]@3 [c#3,g#3]@3 [d#3,a#3]@3 [a#2,f3] [a#2,f3]@2 [c3,g3]@2 [g2,d3]@2", // F#5 C#5 D#5 A#5 C5 G5
  AB: "[g3,d4]@3 [d3,a3]@3 [e3,b3]@3 [b2,f#3] [b2,f#3]@2 [c#3,g#3]@2 [a2,e3]@2", // G5 D5 E5 B5 C#5 A5
  AC: "e3 e3@2 d3 d3@2 c3 c3@2 b2 b2@2 a2 b2 c3@2", AD: "c3 c3@2 b2 b2@2 a2 a2@2 g2 g2@2 f#2 g2 a2@2", AE: "[e2,b2]",
  AF: "a2@2 a3@2 a2 g3@2 a2 e3@2 a2 d#3@3 d3@2", AG: "[d#3,a#3]@3 [a#2,f3]@2 [c3,g3]@5 [g2,d3]@2 [a2,e3]@2 [a#2,f3]@2",
  AH: "[d3,a3] [d3,a3]@7", AI: "[c3,g3]@4 [b2,f#3]@2 [a2,e3]!2", AJ: "[d3,a3]", AK: "[c3,g3]@8 [b2,f#3]@3 [c3,g3]@5",
  AL: "a2!11 [c3,g3]@3 [d3,a3]@2", AM: "a2!11 [d#3,a#3]@3 [d3,a3]@2", AN: "a2!8 [d#3,a#3]@3 [d3,a3]@2 [c3,g3]@3",
})).s("gm_distortion_guitar").gain(0.4)

// other · electric guitar clean · "Guitar 3"
const electric_guitar_clean_2 = note("<~@117 A B@2 C D E F G H I J K L M N O P Q R ~@87>".pickRestart({
  A: "~@12 b3 f4 ~ b4", B: "[d#4 e4 ~ a4 a3 d#4 ~ g#4 g4@10 g4@4 ~ b4 d5 b4 a4 b4 d5 b4 a4 f#4]/2",
  C: "f#4!2 a4 f#4 e4 d4 b3 d4 e4 d4 b3 d4 e4 d4 b3 a3", D: "b3 a3 f#3 a3 b3 a3 f#3@2 f#3@2 d3@2 e3 d3 b2@2",
  E: "g3@8 a2 b2 d3 f3@3 ~ a3", F: "b3 a3 f#3 a3 b3 d4 e4@2 e4 d4 b3 d4 e4 f#4 a4 f#4",
  G: "d5 b4 a4 f#4 f4 f#4 a4 f#4 d5 b4 a4 f#4 f4 f#4 a4 f#4", H: "e4 d4 b3 e4@3 e4@2",
  I: "e4@7 b4 c#5 b4!2 c#5 d5!2 c#5 d5", J: "e5!2 d5 e5 f#5!2 [e5,f5] g5!2 f#5!2 g5 a5@2 g#5 a5",
  K: "b5@2 a5 b5 c6@2 b5@2 d6@8", L: "d6!2 d6@2", M: "b5 d6 b5@4 b5!2 d6 b5 a5 b5 d6 b5 a5 f#5",
  N: "f5 f#5 a5 f#5 d6 b5 a5 f#5 f5 f#5 a5 f#5 d6 b5 a5 f#5",
  O: "f#5!2 a5 f#5 e5 f#5 a5 f#5 e5 f#5 a5 f#5 d6 b5 a5 f#5",
  P: "e5 f#5 a5 f#5 d6 b5 a5 f#5 e5 f#5 a5 f#5 e5 f#5 a5 f#5", Q: "a5@3 a5@2 a5@3 a5@3 a5@2 a5@3", R: "a5@3 ~",
})).s("gm_electric_guitar_clean").gain(0.51)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A B ~@6 A C ~@2 A C ~@2 A C ~@2 D E ~@8 F G@2 H I G@2 H I G@2 H I G@2 H I G@2 H I G@2 H J K@3 L G@14 M N B O G@2 P
  O G@2 P O G@2 P O G@2 P O G@2 P O G@2 P Q K@3 R G@6 S E ~ T G@3 T G@3 T G@3 T G@2 U ~@20 V G@3 W G@3 W G@3 W G@3 W G@3
  W G@3 W K@4 G@40
>`.pickRestart({
  A: "~@12 x ~@2 x", B: "~ x ~@2 x ~@11", C: "~ x ~@14", D: "~@4 x!9 ~@2 x", E: "~ x ~@2 x ~@2 x ~ x ~@2 x ~@3",
  F: "~@6 x!2", G: "x!8", H: "x!6 ~ x", I: "x!4 ~@2 x!2", J: "x!4 ~@2 x ~", K: "x!4", L: "x ~ x ~ x ~ x!2",
  M: "x ~ x ~ x ~ x ~ x ~ x ~ x!4", N: "x!5 ~@2 x ~ x ~@2 x ~@2 x", O: "~@2 x!6", P: "x!2 ~ x!5", Q: "~ x!3",
  R: "x ~ x!6", S: "x ~ x ~ x!9 ~@2 x", T: "~@4 x!4", U: "x ~ x ~ x ~ x ~ x!8", V: "x", W: "~ x!5 ~@2",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@13 A B@2 C A B@2 C A B@2 D ~@5 E@3 F G ~@2 E H ~@2 E H ~@2 E H ~@2 E H ~@2 E H ~@2 E H ~@24 I D ~@2 I D ~@2 I D ~@2
  I D ~@2 I D ~@2 I D ~@29 J K@2 ~ K ~ K@12 ~@6 L ~@3 L ~@3 L ~@3 L ~@3 L ~@3 L ~@27 M@17
>`.pickRestart({
  A: "~@2 x!6", B: "x!8", C: "x!6 ~@2", D: "x!2 ~@6", E: "~@3 x", F: "~@12 x ~@2 x", G: "~ x ~@4 x ~ x ~ x ~@5",
  H: "~@4 x!2 ~@2", I: "~ x ~@2", J: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", K: "x", L: "x ~@5 x!2", M: "x!2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A B ~@6 A C ~@2 A C ~@2 A C ~@2 A D ~@7 A C ~@2 E F ~@2 E F ~@2 E F ~@2 E F ~@2 E F ~@2 E F ~@19 G B ~@3 H I ~@2 H
  I ~@2 H I ~@2 H I ~@2 H I ~@2 H I ~@10 A D ~@17 J K@2 ~ K ~ K@15 ~@3 L ~@3 L ~@3 L ~@3 L ~@3 L ~@3 L ~@44
>`.pickRestart({
  A: "~@12 x ~@2 x", B: "~ x ~@2 x ~@11", C: "~ x ~@14", D: "~ x ~@2 x ~@2 x ~ x ~@2 x ~@3", E: "~@3 x",
  F: "~@4 x!2 ~@2", G: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", H: "~ x ~@2", I: "x!2 ~@6", J: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2",
  K: "x", L: "x ~@5 x!2",
})).gain(0.4)

stack(electric_guitar_clean, distortion_guitar, electric_guitar_clean_2, snare, low_tom, high_tom, crash)

More by Metallica