Strudelify
The Battle Of Evermore cover art

1971 · Led Zeppelin IV

The Battle Of Evermore

Led Zeppelin

KeyA minorTempo148 bpm
0:00/0:00
// The Battle Of Evermore — Led Zeppelin
// 148 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 203 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(148/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 · acoustic guitar nylon · "Mandolin 1"
const acoustic_guitar_nylon = note(`<
  A@16 B@3 C D C E F G H I H I H J@2 K@2 L M N O J@2 P@2 Q R I R S@2 T@2 I R U V W X Y Z AA AB AC AB AD AE AD AE AD AE
  AD AE AF AG AH@2 AD AE AD AE AI@2 AJ@2 AD AE AD AE AK AL AM AN AD AE AD AE W X Y Z AA AB AC AB AD AE AD AE AD AE AD AE
  AO@2 AP@2 AD AE AD AE AQ@2 AH@2 AD AE AD AE AK AL AR AS AT AE AD AE W X Y Z AA AB AC AB A@16 AU AV@6 AW AD AE AD AE AD
  AE AD AE AX AY AZ BA AD AE AD AE BB BC BD BE AD AE AD AE BF@4 BG@8 ~
>`.pickRestart({
  A: "[a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5!2, ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3, ~@3 e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~ e5@3 ~@2]/8",
  B: "[a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ a4 ~ e5 ~ c5!3 c5@2 a4 [b4,e5]@2, ~ c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~@8, ~@3 e5@3 ~ e5@3 ~ e5@3 ~ e5@4 ~@5]/3", // E5
  C: "[c5,e5]!5 a4 [b4,e5]@2", D: "c5 [c5,e5]!3 [c5,e5]@2 [b4,e5]@2", E: "f#5 f#5@2 f#5@2 e5 g5 e5, a4@3 a4@3 b4@2",
  F: "f#5 f#5@2 f#5@2 e5 c5 e5, a4@3 a4@3 e4@2", G: "f#5@2 e5 [a4,f#5]@2 e5 [b4,g5]@2, a4@3 ~@5",
  H: "a4!3 [a4,f#5]@2 e5 c5 e5, f#5@3 ~@3 e4@2", I: "a4!3 [a4,f#5]@2 e5 g5 e5, f#5@3 ~@3 b4@2",
  J: "[~@2 [f#4,a4,a5]@4 [f#4,a4,a5]@3 g5 f#5 e5 f#5 g5 f#5 e5]/2", // F#m
  K: "[~@2 [f#4,a4,a5]@4 [f#4,a4,a5]@3 g5 f#5 e5 c5 e5 [c5,e5] [b4,e5]]/2", // F#m C E5
  L: "[a4,f#5] [a4,e5] a4 a4@2 e5 g5 e5, ~@2 e5@3 a4@3", M: "f#5 e5!2 f#5@2 e5 c5 e5, a4@3 a4@3 e4@2",
  N: "f#5 e5!2 f#5@2 e5 g5 e5", O: "[a4,f#5]@3 f#5@2 e5 [e4,c5]@2, ~@3 a4@3 ~@2",
  P: "[~@2 [f#4,a4,a5]@4 [f#4,a4,a5]@3 g5 f#5 e5 c5 b4 a4@2]/2", // F#m
  Q: "a4!2 [a4,e5] [a4,f#5]@2 [a4,e5] [b4,g5] [a4,e5], f#5 ~@3", R: "f#5 e5!2 f#5@2 e5 [e4,c5]@2, a4@3 a4@3 ~@2",
  S: "[~@2 [f#4,a4,a5]@4 [f#4,a4,a5]@3 g5 f#5 e5 g5 f#5 a4!2, ~@9 a4@2 a4@3 e5@2]/2", // F#m
  T: "[~ e5 ~ e5 f#5 ~@2 e5@2 a5 g5 f#5 [c5,e5]!3 [a4,e5], ~ [f#4,c5] c5 [f#4,c5] ~@4, ~@5 e5@2 ~@9]/2", // C A5 F#dim
  U: "a4!2 [a4,e5] [a4,f#5] [a4,e5]!2 [b4,g5] [a4,e5], f#5 ~@3", V: "f#5 e5!2 f#5@2 d5 c5 e5, a4@3 a4@3 e4@2",
  W: "[g4,c5,e5]!8", X: "[f#4,a4,a5]!3 [f#4,a4,a5]@2 [f#4,a4,a5] [f#4,a4,a5]@2",
  Y: "[g4,c5,e5]!3 [g4,c5,e5]@2 [g4,c5,e5]!3", Z: "[g4,c5,e5] [f#4,a4,a5]!2 [f#4,a4,a5]@2 [f#4,a4,a5]!2 [c5,e5]",
  AA: "[c5,e5] [f4,b4,g5]@2 [f4,b4,g5]@2 [f4,b4,g5]!3", AB: "[f4,b4,g5] [e4,c5,e5]!2 [e4,c5,e5]@2 [e4,c5,e5]!3",
  AC: "[f4,b4,g5]!8", AD: "f#5@2 [a4,e5] [a4,f#5] [a4,e5]!2 [b4,g5] [a4,e5], a4 ~@7",
  AE: "[a4,f#5] [a4,e5]!2 [a4,f#5] [a4,e5]!2 c5 e5, ~@3 e4", AF: "~ [f#4,a4,a5]@2 [f#4,a4,a5]",
  AG: "a5 g5 f#5 e5 f#5 g5!2 a5, a4!2", AH: "[~@2 [f#4,a4,a5]@4 [f#4,a4,a5]@3 g5 f#5 e5 c5 e5 c5 a4]/2",
  AI: "[~@2 [f#4,a4,a5]@4 [f#4,a4,a5]@3 g5 f#5 e5 c5 e5 a4@2]/2", // F#m
  AJ: "[~@2 [f#4,a4,a5]@3 [f#4,a4,a5] [f#4,a4,a5]@3 g5 f#5 e5 c5 e5 a4 g4]/2", // F#m
  AK: "~@2 [f#4,a4,a5]@3 [f#4,a4,a5] [f#4,a4,a5]@2", AL: "a5 g5 f#5 e5 c5 b4 a4 a5", AM: "a5 g5!2 f#5!2 e5 c5 e5",
  AN: "e5 b4 e5!3 c5 a5!2", AO: "[~@2 [f#4,a4,a5]@4 [f#4,a4,a5]@3 g5 f#5 e5 f#5 g5 a5!2]/2",
  AP: "[~@2 [f#4,a4,a5]@4 [f#4,a4,a5]@3 g5 f#5 e5 c5 e5 [c5,e5]!2]/2", // F#m C
  AQ: "[~@2 [f#4,a4,a5]@4 [f#4,a4,a5]@3 g5 f#5 e5 c5 e5 [c5,e5]@2]/2", AR: "a5 g5!2 f#5!2 e5@2 c5",
  AS: "b4 a4 f#5 e5 c5 b4 a4 a5", AT: "f#5 e5@2 f#5 e5@2 g5 e5, a4@3 a4@3 c5@2", AU: "~@2 [b4,e5]!6", AV: "[b4,e5]!8",
  AW: "[b4,e5]!3 a5 f#5 e5 c5 e5", AX: "~ [f#4,a4,a5]!7", AY: "a5 g5 f#5 e5 c5 e5 b4 [a4,a5]",
  AZ: "g5 f#5 e5 c5!2 e5 f#5 e5", BA: "c5 e5 f#5 a5@2 e5 c5 e5", BB: "~ [f#4,a4,a5]!3 [f#4,a4,a5]@2 [f#4,a4,a5]!2",
  BC: "[a4,a5] g5 f#5 e5@2 a5 g5 f#5", BD: "c5@2 f#5 e5 c5 f#5 e5 c5",
  BE: "[f#4,a4,a5]@3 [a4,f#5]@2 ~@2 e5, ~@5 [a3,e4,c5]@3", // F#m D Am
  BF: "[~ [c5,f#5]@2 [c5,f#5]@2 [b4,g5]@2 [b4,g5]@2 [a4,f#5]@2 [a4,f#5]@2 [e4,c5]@2 [e4,c5]@2 [c5,f#5]@2 [c5,f#5]@2 [b4,g5]@2 [b4,g5]@2 [a4,f#5]@2 [a4,f#5]@2 [e4,c5]@2 [e4,c5]]/4", // Cdim Em D C Cdim Em D C
  BG: "[[a4,f#5] [a4,f#5]@2 [a4,f#5] [b4,g5] [b4,g5]@2 [a4,f#5]@2 [a4,f#5]@2 [e4,c5]@2 [e4,c5,e5]@2 [a4,f#5]]/2", // D Em D C D
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.1)

// chords · acoustic guitar nylon · "Mandolin 2"
const acoustic_guitar_nylon_2 = note(`<
  ~@6 A B C@2 D@8 E@4 F G H I J G H G K@4 F G F G K@4 F G F G K@4 F G F G L M L M N O N O P Q P Q R S R S T@4 U V U W
  T@4 X Y X G T@4 X Z G Z L M L M N O N O X Y P Y P Y P Y T@4 U V U AA AB@4 U AA U AC AD@4 P AE AF AG L M L M N O N O
  ~@16 AH@7 AI AJ AK AJ AK AJ AK AJ AK T@4 AJ AK AJ AK T@4 AJ AK AJ AK AJ AL@4 AM AN AO ~@5
>`.pickRestart({
  A: "~@5 [a4,c5] [a4,c5]@2", B: "a4 [a4,c5] ~@2 a4 ~@3", C: "a4 [a4,c5] ~@2 a4 [a4,c5] [a4,c5]@2",
  D: "a4 [a4,c5] [a4,c5]@2 a4 [a4,c5] [a4,c5]@2", E: "[e4,c5,e5]!3 [e4,c5,e5]@2 [d4,b4,e5]!3", F: "a4!3 a4@2 a4 b4@2",
  G: "a4!3 a4@2 g4 e4 g4", H: "a4 a4@2 a4@2 a4 b4@2", I: "a4!3 e4@2 a4 c4 d4", J: "a4!4 g4@4",
  K: "[~@2 a4 a4@3 a4 a4@2 a4!2 a4@2 a4!3]/2", L: "~ [c4,g4]!2 [c4,g4]@2 [c4,g4]!3",
  M: "~ [a3,f#4]!2 [a3,f#4]@2 [a3,f#4] [a3,f#4]@2", N: "~ [g3,f4]!2 [g3,f4]@2 [g3,f4]!3",
  O: "[g3,f4] [g3,e4]!2 [g3,e4]@2 [g3,e4]!3", P: "a4 a4@2 a4@2 g4 b4 g4", Q: "a4 a4@2 a4@2 g4 c5 g4",
  R: "a4!5 g4 b4 g4", S: "a4!5 g4 e4 g4",
  T: "[~ [a3,f#4,a4]@2 [a3,f#4,a4]@2 [a3,f#4,a4]@2 [a3,f#4,a4]@2 [a3,f#4,a4]@2 [a3,f#4,a4]@2 [a3,f#4,a4]@2 [a3,f#4,a4]]/4", // D
  U: "a4!3 a4@2 g4 b4 g4", V: "a4!3 a4@2 g4 e4@2", W: "a4!3 a4@2 a4 c5@2", X: "a4 a4@2 a4@2 g4 b4@2",
  Y: "a4 a4@2 a4@2 g4 e4@2", Z: "a4 a4@2 a4@2 g4 c5@2", AA: "a4!3 a4@2 g4 c5@2",
  AB: "[~@2 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@3 [a3,f#4,a4] [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@2]/4", // D
  AC: "a4!3 a4@2 g4 c5 b4",
  AD: "[a4@2 [a3,f#4,a4]@3 [a3,f#4,a4] [a3,f#4,a4]@3 [a3,f#4,a4] [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@2]/4", // D
  AE: "a4 a4@2 a4@2 g4 e4 g4", AF: "a4!3 e4@2 b4 e4@2", AG: "a4!2 e4 a4!2 g4 e4@2",
  AH: "[~@2 b4!2 b4@3 b4@2 d5@2 d5@2 c5@2 b4@2 ~@2 b4@2 d5@2 c5@2 g4@2 b4@2 d5@2 c5@2 b4@2 g4@2 d5@2 c5@2 b4@2 g4@2 d5@2 c5@2 b4@2 g4@2 d5@2 c5]/7",
  AI: "b4 a4!5 c5 a4", AJ: "a4!3 e4@2 g4 b4 a4", AK: "a4!3 e4@2 g4 c5 a4",
  AL: "[~ g4!2 a4 g4 e4@2 e4@2 a4@2 a4@2 b4@2 b4@2 g4!2 a4 g4 e4@2 e4@2 e4@2 a4 b4 b4@2 b4]/4",
  AM: "e4 a4@2 a4 e4 a4@2 [e4,a4]", AN: "~ e4@2 a4 b4 b4@2 b4", AO: "e4 a4@2 a4 e4 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.9)

// chords · acoustic guitar nylon · "Mandolin 2" · soft notes
const acoustic_guitar_nylon_3 = note("<A@6 B C D@2 ~@187 E F G F G ~>".pickRestart({
  A: "a4 [a4,c5] [a4,c5]@2 a4 [a4,c5] [a4,c5]@2", B: "a4 [a4,c5] [a4,c5]@2 a4 ~@3",
  C: "~@2 [a4,c5]@2 ~ [a4,c5] [a4,c5]@2", D: "~ [a4,c5] ~@2", E: "~@5 a4@2 [e4,a4]", F: "~ e4@2 a4 b4 b4@2 b4",
  G: "e4 a4@2 a4 e4 a4@2 [e4,a4]", // A5
})).s("gm_acoustic_guitar_nylon").gain(0.1).pan(0.9)

// other · acoustic guitar nylon · "Mandolin 3"
const acoustic_guitar_nylon_4 = note(`<
  ~@6 A@2 B@2 C@2 B@2 A@2 B@2 ~@126 D@2 E@2 F@2 D@2 F@2 E@2 F@2 ~@45
>`.pickRestart({
  A: "[d4 d4@15]/2", B: "[d#4 d#4@15]/2", C: "[e4 e4@15]/2", D: "e4/2", E: "d4/2", F: "d#4/2",
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.4)

// other · acoustic guitar nylon · "Mandolin 3" · soft notes
const acoustic_guitar_nylon_5 = note("<~@2 A@2 B@2 ~@197>".pickRestart({
  A: "[e4 e4@15]/2", B: "[d#4 d#4@15]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.13).pan(0.4)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  ~@19 A B C D E D E D E D E F G H G D E D E G@2 H G D E D E F G H G D E D E I J K J L M L N D E D E D E D E O@2 P Q D E
  D E P Q R Q D E D E O@2 P Q D E D E I J K J L M L N D E D E D E D E O@2 P Q D E D E P Q P Q D E D E O@2 P Q D E D E I
  J K J L M L N S T@7 U@8 V@8 D E D E D E D E O@2 P Q D E D E O@2 P Q D E D E D E D E D E D E D E D E ~
>`.pickRestart({
  A: "g3!3 g3@2 g3 g3@2", B: "~ g3!2 g3@2 g3@3", C: "~@4 g4 g4@3", D: "[a3,e4]!3 [a3,e4]@2 [a3,e4] [b3,d4]!2",
  E: "[a3,e4]!3 [a3,e4]@2 [a3,e4] [c4,e4,g4]!2", F: "[d4,a4,d5,f#5] [a3,d4,a4,d5,f#5]", G: "[d4,a4,d5,f#5]!2",
  H: "[a3,d4,a4,d5,f#5] [d4,a4,d5,f#5]", I: "~@2 [e4,g4,c5,e5] [e4,g4,c5,e5]@2 [e4,g4,c5,e5]!3, ~@2 a3@3 a3@3",
  J: "~ [f#4,a4,d5,f#5]!2 [f#4,a4,d5,f#5]@2 [f#4,a4,d5,f#5]!3, a3@3 a3@5", // D
  K: "~ [e4,g4,c5,e5]!3 ~ [e4,g4,c5,e5]!3, a3!2", L: "~ [d4,g4,b4]!2 [d4,g4,d5]@2 [d4,g4,b4]!3, b3",
  M: "~ [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!3, c4", N: "[c4,e4,g4,c5,e5]@2 [c4,e4,g4,c5,e5]@3 [c4,e4,g4,c5,e5]!3",
  O: "[~@2 [d4,a4,d5,f#5] [d4,a4,d5,f#5]@3 [d4,a4,d5,f#5] [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]!2 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]!3]/2", // D
  P: "[a3,d4,a4]@2 [d4,a4,d5,f#5] [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]!3", // D5 D
  Q: "~ [d4,a4,d5,f#5]!2 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]!3", R: "[d4,a4,d5,f#5]!3 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]!3",
  S: "~ a3", T: "a3!2", U: "~ [e4,a4,c5] c5 a4 ~ [e4,a4,c5] c5 a4, a3!2",
  V: "~ [e4,g4,b4] b4 g4 ~ [e4,g4,b4] b4 g4, e3!2", // Em
})).s("gm_acoustic_guitar_steel").gain(0.17).pan(0.7)

stack(
  acoustic_guitar_nylon, acoustic_guitar_nylon_2, acoustic_guitar_nylon_3, acoustic_guitar_nylon_4,
  acoustic_guitar_nylon_5, acoustic_guitar_steel
)

More by Led Zeppelin