Strudelify

Symphony of Destruction

Megadeth

KeyE minorTempo140 bpm
0:00/0:00
// Symphony of Destruction — Megadeth
// 140 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "DISTORTION" distortion guitar (copy of ch 1 "DISTORTION" distortion guitar)
// note: Full arrangement: all 134 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): OVERDRIVE.
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.

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  A B C D ~ D E D ~ B F B ~ B E G H I@2 J K I@2 L M@2 N O P Q R S T B C D ~ D E D ~ B F B ~ B E G H I@2 J K I@2 L M@2 N
  O P Q R S T U N O P U N O P S V I@2 J K I@4 J K I@4 J W B C D ~ D E D ~ B F B ~ B E G H I@2 J K I@2 L M@2 N O P Q R S
  T U N O P U N O P S X Y
>`.pickRestart({
  A: "~@10 e2 ~ f2 ~ e2 ~", B: "[f2,c3,f3]@2 [e2,b2,e3] ~@3 [e2,b2,e3]@2 ~@8",
  C: "[f2,c3,f3]@2 [e2,b2,e3]@2 ~@2 [e2,b2,e3]@2 ~@2 e2 ~ f2 ~ e2 ~", D: "[f2,c3,f3] [e2,b2,e3] ~ [e2,b2,e3] ~@4",
  E: "[f2,c3,f3]@2 [e2,b2,e3] ~@3 [e2,b2,e3]@2 ~@2 e2 ~ f2 ~ e2 ~", // F5 E5
  F: "[f2,c3,f3]@2 [e2,b2,e3] ~@3 [e2,b2,e3] ~@3 e2 ~ f2 ~ e2 ~", G: "[f2,c3,f3]@2 [e2,b2,e3] ~@3 [e2,b2,e3] ~@9",
  H: "~@10 [e2,b2,e3]@2 [e2,b2,e3] ~ [a2,e3,a3]@2", // E5 A5
  I: "~@2 [g#2,d#3,g#3]@2 ~@2 [g2,d3,g3]@2 ~@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [a2,e3,a3]@2", // G#5 G5 E5 A5
  J: "~@2 [g#2,d#3,g#3,c#4]@2 ~@2 [g2,d3,g3]@2 ~@2 [e2,b2,e3]@2 [e2,b2,e3] ~ [a2,e3,a3]@2", // G#sus4 G5 E5 A5
  K: "~@2 [g#2,d#3,g#3]@2 ~@2 [g2,d3,g3]@2 ~@2 [e2,b2,e3]@2 b2 ~ [a2,e3,a3]@2", // G#5 G5 E5 A5
  L: "~ [g#2,d#3,g#3] ~ [g2,d3,g3] ~ [e2,b2,e3]!2 ~", // G#5 G5 E5
  M: "[~@2 [a#2,f3,a#3] ~ [a2,e3,a3] ~ [g#2,d#3,g#3] ~ [g2,d3,g3] ~ [f#2,c#3,f#3] ~ [f2,c3,f3] ~ [e2,b2,e3]@8 [e2,b2,e3]@4 [e2,a#2,e3]@5 ~]/2", // A#5 A5 G#5 G5 F#5 F5 E5 Edim
  N: "[e3,a3]@6 [e3,g#3]@6 [a2,e3,g#3]@3 ~", O: "[c3,g3]@6 [c3,g3,c4]@6 [c3,f#3]@3 ~",
  P: "[d3,a3,d4]@6 g3@4 d3@2 b2@3 g#2", Q: "[e2,b2,e3]@6 [e2,b2,e3]@6 [e2,a#2,e3]@3 ~",
  R: "[a2,e3,a3]@3 [a2,e3,g#3]@3 [a2,e3,g#3]@2", S: "[c3,g3]@6 [c3,g3]@4 [c3,f#3,c4]@5 ~, c4@5 ~@3",
  T: "[d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@4 g#3 [c#3,g3] [b2,c3,f#3] ~", // D5 C#dim B
  U: "[e2,b2,e3]@6 [e2,b2,e3]@4 [e2,a#2,e3]@5 ~", // E5 Edim
  V: "[d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@4 g#3 [c#3,g3] [a2,e3,a3]@2, ~@14 c3 ~", // D5 C#dim A5
  W: "~@2 [g#2,d#3,g#3]@2 ~@2 [g2,d3,g3]@2 ~@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3] ~", // G#5 G5 E5
  X: "[d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@4 g#3 [c#3,g3] c3 ~", // D5 C#dim
  Y: "[e2,b2,e3] ~ [e2,b2,e3]@2 ~@2 [e2,b2,e3]@2 ~@8", // E5
})).s("gm_distortion_guitar").gain(0.4).pan(0)

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  A B C B D B C B D B C B D B C B D@3 E F G H I@3 J G K L J G M B C B D B C B D B C B D B C B D@3 E F G H I@3 J G K L J
  G M N O P Q N R S T G U D@2 E F G H V W D@2 E F G H X Y B C B D B C B D B C B D B C B D@3 E F G H I@3 J G K L J G M N
  O P Q N R S T G U Z
>`.pickRestart({
  A: "~@5 f1 g1 f1", B: "f1 e1!7", C: "f1 e1!4 f1 g1 f1", D: "e1!8", E: "g1!8", F: "g1!7 c2", G: "c2!8", H: "c2!7 a1",
  I: "[a1!5 e1!2 d2@2 a#1 a1 g#1 g1 f#1 f1 e1@2 e1!4 f1 g1 e1]/3", J: "a1!3 g1 a1 g1 a1 b1", K: "d2!3 g2@2 d2 b1@2",
  L: "e1!5 f1 g1 e1", M: "d2@2 d2@2 d2@2 d2@2 d2@5 ~@3", N: "e1@3 e1!2 f1 g1 e1", O: "g1@3 g#1@2 a1 a#1 b1",
  P: "c2@3 c2!5", Q: "d2 d2@2 g2@2 d2 b1@2", R: "g1@3 g#1@2 e1 a1 b1", S: "c2@2 c2!2 c2@2 c2!2", T: "d2@3 g2@2 d2 b1@2",
  U: "d2!5 e1!3", V: "a1!8", W: "a1!7 e1", X: "a1!4 d2 e2 g2 a1", Y: "a1!2 g1!2 a1 g#1 g1 f#1", Z: "e1!2 ~ e1 ~@4",
})).s("gm_synth_bass_2").gain(0.49)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@14 A ~@2 B@2 C B@2 C D@2 E F G H I F J ~@14 A ~@2 B@2 C B@2 C D@2 E F G H I F J ~ E F G H E F G H J ~@30 A ~@2 B@2 C
  B@2 C D@2 E F G H I F J ~ E F G H E F G H J ~@2
>`.pickRestart({
  A: "~@8 e1 ~@7", B: "~@5 g3@2 ~", C: "~@10 g3@3 ~@3", D: "[~@6 a3@5 ~@3 d3@5 ~ b2 ~@11]/2", E: "~@4 b3@5 ~@5 e3@2",
  F: "~@10 e3@2 b2@3 ~", G: "~@4 g3@6 f#3@3 ~@3", H: "~@5 f#3 ~@2", I: "~@4 b3@5 ~ a#3@4 e3@2", J: "~@2 g3@3 ~@3",
})).s("gm_overdriven_guitar").gain(0.32).pan(0.4)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_2 = note(`<
  ~@18 A@2 B@3 ~@27 A@2 B@3 ~@10 C D E F C D E F ~ G@5 H I@2 J K L M N O P Q R S ~@31 C D E F C T E F ~@3
>`.pickRestart({
  A: "~@5 b3@2 ~", B: "~@5 e4@2 ~", C: "~@4 d4@5 ~ c#4@4 g3@2", D: "c4@6 a#3@4 g#3@2 e3@3 ~", E: "e3@2 a#3@3 a3@2 ~",
  F: "c4@6 ~ b3@2 g#3@2 ~ d3@3 ~, ~@11 f#3@2 ~@3",
  G: "[~@14 d#4@16 d#4@11 ~ d4@2 b3 ~ c#4@12 e4@4 a#3@11 ~ g3 ~ a3 ~ g3 ~]/5", H: "a3@5 a3@2 a3",
  I: "[a3@4 e3@2 g3@2 e3@5 ~@2 c4@2 e4 f#4 ~ e4 f#4 a4 c5 ~ a4 c5 e5 f5 e5 c5 e5, ~@19 c4@2 ~@3 e5@2 ~@6]/2",
  J: "~ [c5,e5] a4 e5 b5@2 a5 [a5,c6] f#5@2 c5@5 ~, f#5@2 ~@8 e5 ~@5", // C Am
  K: "b4 a4 g4 a4 b4 a4 g4 a4 d5 a4 ~ d5 a4 g4 c#5 g4, ~@5 g4 ~@2",
  L: "e5 d5 b4 d5 e5 ~ b4 d5 g5 d5 b4 g5 d5 b4 ~ d5, ~@5 d5@2 ~@7 f#5@2",
  M: "g5 d5 b4 c6 ~ d5 b4 d5 d6 b5 g5 b5 g5 d5 b4 g4, ~@2 g5 ~@5", N: "b4 a4 g4 d4 e4 d4 c#4@2 a4@7 ~",
  O: "~ g4 e4 g4 a#4@2 c5 b4 ~ g4 e4 g4 a#4 b4 c5 ~, a#4 ~@3 a#4 ~@3",
  P: "c5 b4 ~ g4 e4 g4 a4 a#4 ~ e5 d5 b4 a#4 a4 ~ e4, ~ a#4 ~@2 b4 ~@3",
  Q: "g4@4 ~ e5 d5 b4 d#5@2 e5 d5 ~ e5 ~ b4, ~@6 b4 d5", R: "e5 d5 b4 a4 e5 d5 b4 a4 a5@7 ~", S: "[a4,d5,f5] ~@15",
  T: "c4@6 b3@4 g#3@2 e3@3 ~",
})).s("gm_overdriven_guitar").gain(0.49).pan(0.4)

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

// drums · snare
const snare = s("sd").struct(`<
  A B@15 C B@7 ~ B@3 D B@3 ~ B@15 C B@7 ~ B@3 D B@3 ~ E A@2 ~ E A E ~ B F B@4 E G B H B@4 E G B@17 C B@7 ~ B@3 D B@3 ~ E
  A@2 ~ E A E ~ B F ~
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "~@3 x ~@4", E: "~ x", F: "~@5 x!2 ~", G: "~@2 x!2",
  H: "~@4 x ~@6 x!2 ~@3",
})).gain(0.55)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@7 B ~@35 C ~@3 C ~ B ~@51 C ~@3 C ~ B D>".pickRestart({
  A: "~@6 x!2", B: "x!5 ~@3", C: "~@3 x!3 ~@2", D: "x!2 ~ x ~@4",
})).gain(0.55)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~ A B@3 A B@3 A B@3 A B@2 C A D A D A D E ~@9 A B@3 A B@3 A B@3 A B@2 C A D A D A D E ~@17 F ~ A B@2 C A B A B A B@2 C
  A@2 G B A B@3 A B@3 A B@3 A B@2 C A D A D A D E ~@17 F ~@2
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!7 ~", D: "x!5 ~ x ~", E: "~ x!4 ~ x ~", F: "~@2 x!6",
  G: "~ x ~@2 x ~ x ~ x ~ x ~ x ~ x ~",
})).gain(0.33)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A ~@3 B ~@3 C ~@35 D ~@3 D ~ C ~@51 D ~@3 D ~ C ~>".pickRestart({
  A: "~ x ~ x!3 ~@2", B: "~@4 x!3 ~", C: "x!5 ~@3", D: "~@3 x!3 ~@2",
})).gain(0.55)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@18 A ~ A ~ A@2 ~@26 A ~ A ~ A@2 ~@9 B C@2 D B C@2 D ~@35 A ~ A ~ A@2 ~@9 B C@2 D B C@2 D ~@3
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x!3", C: "x!4", D: "x!2 ~@2",
})).gain(0.44)

// drums · high tom
const high_tom = s("ht").struct("<~@24 [~ x!2 ~@5] ~@109>").gain(0.55)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@3 A ~@2 B ~ B ~ B ~ B@3 C ~@2 D A ~@2 E A ~@3 A ~@3 A ~@3 A ~@2 B ~ B ~ B ~ B@3 C ~@2 D A ~@2 E A
  ~@2 D A ~@2 D A F ~@3 B@3 ~ B ~@3 B@3 ~@2 A ~@3 A ~@3 A ~@3 A ~@2 B ~ B ~ B ~ B@3 C ~@2 D A ~@2 E A ~@2 D A ~@2 D A F
  G
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~ x ~@2", D: "~@3 x", E: "~ x", F: "~@4 x ~@2 x", G: "x ~ x ~@2 x ~@10",
})).gain(0.27)

// drums · ride
const ride = s("rd").struct("<~@25 A B@2 C D B@2 ~@25 A B@2 E D B@2 ~@51 A B@2 E D B@2 ~@12>".pickRestart({
  A: "~ x ~ x!5", B: "x!8", C: "x!4 ~@3 x", D: "~ x!7", E: "x!6 ~ x",
})).gain(0.44)

stack(
  distortion_guitar, bass, overdriven_guitar, overdriven_guitar_2, kick, snare, low_tom, pedal_hat, mid_tom, open_hat,
  high_tom, crash, ride
)

More by Megadeth