Strudelify

Of Wolf and Man

Metallica

KeyG majorTempo116 bpm
0:00/0:00
// Of Wolf and Man — Metallica
// 116 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 35, 4/4 at bar 36, 2/4 at bar 58, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 130 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 program 30.
setcpm(116/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
const distortion_guitar = note(`<
  A@6 B@4 C@12 D@12 A E@4 F@2 G@2 H I J K J K J K J K J K J L M@2 N@2 O@2 P@2 Q R C@4 B@2 S@3 T S@3 T U@4 V D@2 W@4 S X
  S X S X S X S X S X Y@4 Z V E@4 F@2 AA@2 ~@4 AB J K J AC AD@2 AE
>`.pickRestart({
  A: "[e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~ [e2,b2,e3] ~", // E5
  B: "[e2@2 e2!2 [f2,c3]@2 [e2,b2]@2 e2@2 [b2,f#3]@2 e2@2 [a#2,f3]@18]/2", // F5 E5 B5 A#5
  C: "e2@2 e2!2 [f2,c3]@2 [e2,b2]@2 e2@2 e2!2 [b2,f#3]@2 [a#2,f3]@2", // F5 E5 B5 A#5
  D: "[e2@2 e2!2 [f2,c3]@2 [e2,b2]@2 e2@2 [b2,f#3]@2 e2@2 [a#2,f3]@4 a2 b2 d3 e3 d3 a2 e3@4 [d3,e3]@2 e3@2, ~@24 d3 ~@7]/2", // F5 E5 B5 A#5 Dsus2
  E: "[e2 [b2,f#3] e2 [a#2,f3]@9 [e2,b2]!2 [f2,c3] [e2,b2]]/2", // B5 A#5 E5 F5 E5
  F: "[e2 [c#3,g#3] e2 [c3,g3]@9 [f#2,c#3]!2 [g2,d3] [f#2,c#3]]/2", // C#5 C5 F#5 G5 F#5
  G: "[e2@2 [c3,g#3]@2 e2@2 [c3,g3]@18 f#2@2 f#2!2 [g2,d3]@2 [f#2,c#3]@2]/2", // Fm C5 G5 F#5
  H: "f#2@2 f#2!2 [g2,d3]@2 [f#2,c#3]@2 [f#2,c#3]@2 ~@2 [f#2,c#3]@2 ~@2", // G5 F#5
  I: "[f#2,c#3]@2 ~@2 f#3@4 e2@2 e2!2 [f2,c3]@2 [e2,b2]@2", J: "e2@2 [b2,f#3]@2 e2@2 [a#2,f3]@4 a2 b2 d3 e3 d3 a2",
  K: "e3@4 [d3,e3]@2 e3@2 e2@2 e2!2 [f2,c3]@2 [e2,b2]@2, d3 ~@15", // Dsus2 F5 E5
  L: "e3@2 [d3,e3] e3 [e2,b2,e3] ~ [e2,b2,e3] ~, d3 ~@15", M: "[[e2,b2,e3] ~ [e2,b2,e3] ~ e2 [b2,f#3] e2 [a#2,f3]@9]/2",
  N: "[[e2,b2]!2 [f2,c3] [e2,b2] e2 [b2,f#3] e2 [a#2,f3]@9]/2", // E5 F5 E5 B5 A#5
  O: "[[e2,b2]!2 [f2,c3] [e2,b2] e2 [c#3,g#3] e2 [c3,g3]@9]/2", // E5 F5 E5 C#5 C5
  P: "[[f#2,c#3]!2 [g2,d3] [f#2,c#3] e2 [c3,g#3] e2 [c3,g3]@9]/2", // F#5 G5 F#5 Fm C5
  Q: "f#2@2 f#2!2 [g2,d3]@2 [f#2,c#3]@2 f#2@2 f#2!2 [g2,d3]@2 [f#2,c#3]@2", // G5 F#5 G5 F#5
  R: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ f#3@2", S: "e2@2 e2!2 [f2,c3]@2 [e2,b2]@2 e2@2 e2!2 e2@2 e2!2",
  T: "[g2,d3] ~ [g2,d3]@3 [f2,c3] ~ [f2,c3]", // G5 F5
  U: "[[e2,b2]!2 [f2,c3] [e2,b2] e2 [b2,f#3] e2 [a#2,f3]@14 [c#3,g#3] ~ [c3,g3]@9]/4", // E5 F5 E5 B5 A#5 C#5 C5
  V: "[c3,g3] ~ [c#3,g#3] ~ [d3,a3] ~ [d#3,a#3] ~", // C5 C#5 D5 D#5
  W: "[e2@2 e2!2 [f2,c3]@2 [e2,b2]@2 e2@2 [b2,f#3]@2 e2@2 [a#2,f3]@4 a2 b2 d3 e3 d3 a2 e3@4 e3@12 [g2,d3]@2 e2@2 [g2,d3]!2 [f#2,c#3]@18, ~@24 d3 ~@3 d3 ~@35]/4", // F5 E5 B5 A#5 G5 F#5
  X: "e2@2 e2!2 e2@2 e2!2 e2@2 e2!2 e2@2 e2!2",
  Y: "f#2@2 f#2!2 [g2,d3]@2 [f#2,c#3]@2 f#2@2 f#2!2 [c#3,g#3]@2 [c3,g3]@2", // G5 F#5 C#5 C5
  Z: "[b2,f#3] ~ [c3,g3] ~ [c#3,g#3] ~ [d3,a3] ~", AA: "[e2 [c3,g#3] e2 [c3,g3]@9 ~@4]/2",
  AB: "~@8 e2@2 e2!2 [f2,c3]@2 [e2,b2]@2", AC: "e3 e3@3, d3 ~@3 d3 ~@11",
  AD: "[[g2,d3]@2 e2@2 [g2,d3]!2 [f#2,c#3]@18 [e2,b2,e3]@2 ~@2 [e2,b2,e3]@2 ~@2]/2", AE: "[e2,b2,e3] ~ [e2,b2,e3] ~@5",
})).s("gm_distortion_guitar").gain(0.41)

// chords · distortion guitar
const distortion_guitar_2 = note("<~@2 A B A C ~@28 A ~@21 D E ~@59 F G@4 H ~@5 I J>".pickRestart({
  A: "~ [e3,b3] ~ [f3,c4] ~ [f#3,c#4] ~ [g3,d4]", B: "~ [e3,b3] ~ [f3,c4] ~ [f#3,c#4] ~ [g#3,d#4]",
  C: "~ [e3,b3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3]", D: "~@5 [e3,b3] ~ [f3,c4]", E: "~ [f#3,c#4] ~ [g3,d4] ~@4",
  F: "~@8 f#2@2 f#2!2 [g2,d3]@2 [f#2,c#3]@2", // G5 F#5
  G: "[f#2@2 f#2!2 [g2,d3]@2 [f#2,c#3]@2 e2@2 [b2,f#3]@2 e2@2 [a#2,f3]@20 [c#3,g#3]@2 ~@2 [c3,g3]@18 [c3,g3]@2 ~@2 [c#3,g#3]@2 ~@2]/4", // G5 F#5 B5 A#5 C#5 C5 C#5
  H: "[d3,a3] ~ [d#3,a#3]@2 ~@4", I: "~@6 [f3,c4] ~", J: "[f#3,c#4] ~ [g3,d4] ~@5",
})).s("gm_distortion_guitar").gain(0.41)

// other · electric guitar clean
const electric_guitar_clean = note("<~@92 A@12 ~@26>".pickRestart({
  A: "[e3 e4 d4 g3@2 e4 d4 e3@2 e4 d4 g3 d4 e4 d4 g3]/2",
})).s("gm_electric_guitar_clean").gain(0.41)

// other · overdriven guitar
const overdriven_guitar = note("<~@73 A B C D E F G H I J K L M N@2 O@4 ~@2 P@3 Q@2 R@6 ~@3 S@3 ~@19>".pickRestart({
  A: "[a3,b3] [e3,g3] g3@4 [a3,b3] [e3,g3] g3@4 b3 [g3,a3] e3 d3", // Asus2 Em Asus2 Em Gsus2
  B: "b3 [g3,a3] f#3 [d3,e3] c#3 [a2,b2] [b3,f#4] [g3,a3] [b3,f#4] [g3,a3] f#3 [d3,e3] f#3 [d3,e3] c#3 [a2,b2]", // Gsus2 Dsus2 Asus2 B5 Gsus2 B5 Gsus2 Dsus2 …
  C: "b2 a2 c3 a2 c#3 a2 d3 a2 d#3 a2 e3 a2 f3 a2 f#3 a2", D: "f#3 a2 g3 a2 g#3 a2 a3 a2 a3 b3 d4 e4 g4 a4 a4@2",
  E: "g4 e4@3 e4 a4 b4 d5 a4 b4 d5 [a4,b4] [b4,d5] [a4,b4] [b4,d5] [a4,b4]", // Asus2 Bm Asus2 Bm Asus2
  F: "b4 [b4,d5] a4 [b4,d5] b4 [a4,b4] d5 [a4,b4] b4 [b4,d5] a4 [b4,d5] b4 [a4,b4] d5 b4", // Bm Asus2 Bm Asus2
  G: "d5@3 d5@5 e5 d5 b4 a4 b4 e5 d5 b4", H: "a4 e5!2 d5 b4 a4 b4 d5 b4 a4 g4 e4 g4 a4@3", I: "g4 e4@11 a#3@2 g4@2",
  J: "[a#4,d5]@2 [a#4,d5]!2 ~ [a#4,d5] [a#4,d5]@2 [c5,e5] [a#4,d5] g4 [a#4,d5] ~ [a#4,d5] [a#4,d5]@2", // A# C A#
  K: "[c5,e5] [a#4,d5] g4 a#4 c5 a#4 g4 a#4 c5 a#4 g4 f4 g4@2 b4@2", // C A#
  L: "c4 a#3 c4@2 d#4 c4 d#4@2 f4 e4 f4@2 g4 f4 g4@2", M: "a#4 c5 a#4 g4 f4 g4 a#4 g4 a#4@2 a#4!6",
  N: "[a#4@2 a#4 a#4@2 a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4@9 g4 e4@5 c4 e4]/2",
  O: "[[g4,a4] g4 e4 c#5 b4 e4 [g4,a4] g4 e4 c#5 b4 e4 [g4,a4] g4 e4 c5@2 e4 [g4,a4] g4 e4 c#5 b4 e4 [g4,a4] g4 e4 d4 e4@2 [g4,b4]@16 [g4,b4]@18]/4", // Gsus2 G
  P: "[~@3 d5@8 ~]/3", Q: "[~ a4@3]/2", R: "[g4@28 ~@2 d5@6 d5 b4 a4@2 g4@20 ~@2 a3@17 g3@9 ~@8]/6",
  S: "[~ [e3,a3]@4 ~]/3", // A5
})).s("gm_overdriven_guitar").gain(0.4)

// bass · electric bass pick
const bass = note(`<
  A B@5 C@8 D E@3 D E@2 F G@12 H I J I J K L K M N O P Q R S P Q P Q P Q P T U@2 V@2 W@2 X@2 Y Z AA@4 AB@2 AC@3 AD AC@3
  AD V@2 AE@2 AF AG@2 AH@4 AI@8 AJ E@3 AK@4 AL AM I J I J K L K M AN@2 AO@2 AP R S R AQ AR@2 AS
>`.pickRestart({
  A: "e1 ~@7", B: "~ e1 ~ e1 ~ e1 ~ e1", C: "e1/4", D: "e1@2 e1!2 e1@4 e1@4 ~@4", E: "~ e1 ~ e1",
  F: "e1@2 e1!2 f1@2 e1@2 e1@2 e1!2 b1@2 a#1@2",
  G: "[e1@2 e1!2 f1@2 e1@2 e1@2 b1@2 e1@2 a#1@4 e1@2 e1@2 e1@2 e1@2 e1@2 e1@2 e1@2]/2", H: "e1 ~ e1 ~ e1 ~ e1 ~",
  I: "e1 b1 e1 a#1@2 a#1!3", J: "a#1!4 e1!2 f1 e1", K: "e1 c#2 e1 c2@2 c2!3", L: "c2!3 e1 f#1!2 g1 f#1",
  M: "c2@2 c2@2 c2@2 e1@2 f#1@2 f#1!2 g1@2 f#1@2", N: "f#1@2 f#1!2 g1@2 f#1@2 f#1@2 ~@2 f#1@2 ~@2",
  O: "f#1@2 ~@2 e2@4 e1@2 e1!2 f1@2 e1@2", P: "e1 b1 e1 a#1@2 e1!3", Q: "e1@2 e1@2 e1@2 e1@2 e1@2 e1!2 f1@2 e1@2",
  R: "e1@2 b1@2 e1@2 a#1@4 e1@2 d2 e2 d2 b1", S: "e2@4 e2@4 e1@2 e1!2 f1@2 e1@2, d2 ~@3 d2 ~@11", T: "e1!5 ~ e1 ~",
  U: "[e1 ~ e1 ~ e1 b1 e1 a#1@2 a#1!7]/2", V: "[e1!2 f1 e1!2 b1 e1 a#1@2 a#1!7]/2",
  W: "[e1!2 f1 e1!2 c#2 e1 c2@2 c2!6 e1]/2", X: "[f#1!2 g1 f#1 e1 c#2 e1 c2@2 c2!6 e1]/2",
  Y: "f#1@2 f#1!2 g1@2 f#1@2 f#1@2 f#1!2 g1@2 f#1@2", Z: "f#1 ~ f#1 ~ f#1 ~ e2@2",
  AA: "[e1@2 e1!2 e1@4 ~@4 e2@8 e1@4 ~@4 e2@8 e1@4 ~@4 e2@8 e1@4 ~@4 e2@4]/4", AB: "e1/2",
  AC: "e1@2 e1!2 f1@2 e1@2 e1@2 e1!2 e1@2 e1!2", AD: "g1 ~ g1@3 f1 ~ f1", AE: "[a#1!5 c#2 a#1 c2@2 c2!5 c2@2]/2",
  AF: "c2 ~ c#2 ~ d2 ~ d#2@2",
  AG: "[e1@2 e1!2 f1@2 e1@2 e1@2 b1@2 e1@2 a#1@4 e1@2 d2 e2 d2 b1 e2@4 e2@4, ~@24 d2 ~@3 d2 ~@3]/2",
  AH: "[e1@2 e1!2 f1@2 e1@2 e1@2 b1@2 e1@2 a#1@4 e1@2 d2 e2 d2 b1 e2@4 e2@12 g1@2 e1@2 g1!2 f#1@18, ~@24 d2 ~@3 d2 ~@35]/4",
  AI: "e1/8", AJ: "e1@2 e1!2 e1@4 ~@4 e1@4", AK: "f#1@2 f#1!2 g1@2 f#1@2 f#1@2 f#1!2 c#2@2 c2@2",
  AL: "c2 ~ c#2 ~ d2 ~ d#2 ~", AM: "c#2 ~ d2 ~ d#2 ~ e2@2",
  AN: "[f#1@2 f#1!2 g1@2 f#1@2 e1@2 b1@2 e1@2 a#1@4 a#1@2 a#1@2 a#1@2 a#1@2 a#1@2 a#1@2 a#1@2]/2",
  AO: "[a#1 c#2 a#1 c2@7 c2@2 c2 ~ c#2 ~]/2", AP: "d2@2 ~@2 d#2@4 e1@2 e1!2 f1@2 e1@2", AQ: "e2 e2@3, d2 ~@3 d2 ~@11",
  AR: "[g1@2 e1@2 g1!2 f#1@18 e1@2 ~@2 e1@2 ~@2]/2", AS: "e1 ~ e1 ~@5",
})).s("gm_electric_bass_pick").gain(0.41)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A@5 B ~@15 C@12 A C@8 D E C@2 F G C@7 D E C@8 A ~@5 H C@3 I C@3 I C@4 A C@3 J K ~@13 J C@2 L A@2 C@9 J M D E C@3 ~ N
  O P
>`.pickRestart({
  A: "x!4", B: "x", C: "~ x ~ x", D: "~ x!3", E: "x!2 ~ x", F: "~@4 x ~@2 x!3 ~@2 x!2 ~@2", G: "x!4 ~@2 x!2 ~@4 x ~@3",
  H: "~@7 x!3 ~@2 x ~@3", I: "x ~ x ~@2 x ~ x", J: "~ x ~@2", K: "~@8 x ~@3 x!2 ~@2", L: "x!2 ~ x!3 ~ x!3 ~ x!2 ~@3",
  M: "~ x ~ x ~@4", N: "x ~@3 x!2 ~@10", O: "~@2 x!2", P: "x!2 ~@2",
})).gain(0.41)

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

// drums · low tom
const low_tom = s("lt").struct("<~ A@3 B A ~@28 C ~@8 D E ~@11 D E ~@8 C ~@41 A ~@19 D E>".pickRestart({
  A: "x!4", B: "~ x!3", C: "x!3 ~", D: "~@2 x!2", E: "x",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@47 [~@10 x!2 ~@2 x!2] ~@24 [~@10 x!2 ~@4] ~@57>").gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@48 [~@4 x!2 ~@10] ~@81>").gain(0.41)

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

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

More by Metallica