Strudelify
When the Levee Breaks cover art

1971 · Led Zeppelin IV

When the Levee Breaks

Led Zeppelin

KeyF majorTempo70 bpm
0:00/0:00
// When the Levee Breaks — Led Zeppelin
// 70 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/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.

// chords · overdriven guitar · "Guitar 1"
const overdriven_guitar = note(`<
  ~@3 A@18 B C B D@2 E F E F E F@2 G F G F G F@2 H I H I J K J K J K J K J K J K E F E F E F@2 G F G F G F@2 H I H I ~ E
  F E F E F@2 G F G F G F@2 H I H I J K J K J K J K J K J K F G F G F G F G F G F G F G F G F G F G F G F G@2 L M
>`.pickRestart({
  A: "ab3 f3!2 c4 ~@4 ab3 f3!2 eb4 [c4,g4] ~ [f4,bb4] ~", // C5 Bb5
  B: "[db4,ab4,db5]!4 [db4,ab4,db5]@2 [db4,ab4,db5]!2 [d4,ab4,d5] [eb4,bb4,eb5]!3 [eb4,bb4,eb5]@4", // Db5 Ddim Eb5
  C: "f4 [ab3,eb4]@3 f4 [f3,c4]@3 f4 [ab3,eb4]@3 f4 [f3,c4]@3", // Ab5 F5 Ab5 F5
  D: "[f4 [ab3,eb4]@3 f4 [f3,c4]@3 f4 [ab3,eb4]@3 f4 [f3,c4]@18 ~]/2", // Ab5 F5 Ab5 F5
  E: "ab3 f3!2 c4 [c4,g4]@2 [c4,g4]!2 ab3 f3!2 c4 [c4,f4]@2 [c4,f4]!2", // C5 F5
  F: "ab3 f3!2 c4 [c4,f4]@2 [c4,f4]!2 ab3 f3!2 c4 [c4,f4]@2 [f4,bb4]!2", // F5 Bb5
  G: "ab3 f3!2 c4 [c4,f4]@2 [c4,f4]!2 ab3 f3!2 c4 [c4,f4]@2 [c4,f4]!2", // F5
  H: "[db3,ab3,db4]!4 [db3,ab3,db4]@2 [db3,ab3,db4]!2 [d3,ab3,d4] [eb3,bb3,eb4]!3 [eb3,bb3,eb4]@4", // Db5 Ddim Eb5
  I: "f3 [ab2,eb3]@3 f3 [f2,c3]@3 f3 [ab2,eb3]@3 f3 [f2,c3]@3", // Ab5 F5 Ab5 F5
  J: "[f3,c4]@3 [a4,c5] [a4,c5]@4 [f3,c4]@3 [e4,g4] [e4,g4]@4", // F5 Am F5 Em
  K: "[f3,c4]@3 [f3,d4,f4] [f3,d4,f4]@2 [f3,e4,g4]@2 [f3,g4,bb4]@2 [f3,a4,c5]@6", L: "f4 [ab4,eb5]@14 ~",
  M: "c5 [c4,f4] [f4,c5] [c4,ab4] ~@12", // F5 Fm
})).s("gm_overdriven_guitar").gain(0.44).pan(0.2)

// bass · electric bass finger · "Bass Guitar"
const bass = note(`<
  ~@3 A B A B C D C D C D B C D C@3 D@2 E F G H@2 A B A B C D C D C D B C D C I F G J@3 K L M N O P Q R S T U D U D U D
  V C D C@3 D W X Y G Z ~ A B A B C D C D C D B C D C I F G Z AA AB AC AD AE AF AE AG AE AH AE AH AI AJ AI AJ AI AJ AI
  AJ AI AJ AI AJ AI AJ AI AJ AI AJ AI AJ AI AJ AI AJ AK AL ~
>`.pickRestart({
  A: "ab1 f1 f1@2 f1@2 f1@2 ab1 f1 f1@2 f1@2 bb1@2", B: "ab1 f1 f1@2 f1@2 f1@2 ab1 f1!2 ab1 f1!2 bb1@2",
  C: "ab1 f1 f1@2 f1@2 e1@2 f1@2 f1@2 f1@2 e1@2", D: "f1@2 f1@2 f1@2 f1@2 ab1 f1!2 ab1 f1!2 bb1@2",
  E: "ab1!5 ~ bb1!6 db2 db2@2 eb2", F: "eb1 ab1@3 eb1 f1@3 eb1 ab1@3 eb1 f1 bb1 ab1",
  G: "ab1!4 db2 ab1@2 bb1!5 ~ bb1 c2 eb2", H: "[eb1 ab1@3 eb1 f1@3 eb1 ab1@3 eb1 f1@19]/2",
  I: "ab1@2 ab1@2 ~@3 bb1!5 db2 db2@2 eb2", J: "[eb1 ab1@3 eb1 f1@3 eb1 ab1@3 eb1 f1@35]/3", K: "f2@3 f2 f2@4 c2@8",
  L: "bb1@3 bb1 bb1@2 c2@2 eb2@2 f2@3 f2!2 eb2", M: "f2!4 f2@2 f2@2 c2!4 c2@2 c2 eb2",
  N: "f2@2 bb1!2 f2@2 c2@2 eb2@2 c2!4 eb2@2", O: "f2!4 f2@2 f2@2 c2!4 c2@3 eb2", P: "bb1!4 bb1@2 c2@2 bb1@2 c2@4 eb2@2",
  Q: "f2 c2!3 c2@2 f2@2 c2!4 c2@4", R: "bb1!4 bb1@2 c2@2 eb2@2 c2@3 bb1 c2!2", S: "c2!2 f2@2 c2@2 ~@2 c2!2 c2@2 c2@4",
  T: "bb1!4 bb1@2 c2@2 eb2@2 c2@5 e2", U: "ab1 f1!3 f1@2 e1@2 f1@2 f1@2 f1@2 e1@2",
  V: "ab1 f1 f1@2 f1@2 f1@2 ab1 f1!2 ab1 f1!2 ab1@2", W: "ab1 f1 f1@2 f1@2 f1@2 ab1 f1!2 ab1 f1!2 e1@2",
  X: "ab1@2 ab1@2 ~@2 ab1!2 bb1!2 bb0!2 bb0@2 bb0 c1", Y: "eb1!2 ~@2 eb1 f1@3 eb1 ab1@3 eb1 f1 bb1 ab1",
  Z: "eb1 ab1@3 eb1 f1@3 eb1 ab1@3 eb1 f1@3", AA: "a2 f2!3 f2@3 f2!5 f2@3 f2", AB: "f2@2 f2!2 f2@12",
  AC: "f2!4 f2@2 f2@2 c2!4 c2@2 c2@2", AD: "bb1@2 bb1!2 bb1@2 c2@2 eb2@2 f2@3 eb2 c2 eb2", AE: "c2!4 c2@4 c2!4 c2@4",
  AF: "bb1!4 bb1@2 c2@2 eb2@2 c2@6", AG: "bb1!4 bb1@2 c2@2 eb2@2 c2@3 bb1!2 b1", AH: "bb1!4 bb1@2 c2@2 bb1@2 c2@6",
  AI: "ab1 f1!3 f1@2 f1!2 ab1 f1!3 f1@2 f1!2", AJ: "ab1 f1!3 f1@2 f1!2 ab1 f1!2 ab1 f1!2 bb1@2",
  AK: "ab0 f0!3 f0@2 f0@2 ab0 f0!2 ab0 f0@2 bb0@2", AL: "f0",
})).s("gm_electric_bass_finger").gain(0.52)

// other · overdriven guitar · "Guitar 2"
const overdriven_guitar_2 = note("<~@46 A B A B A B C D C D ~@37 E F E F G H G H I@2 J H ~@24 K L ~>".pickRestart({
  A: "c4 bb3 a3 c4@5 g3 f3 e3 g3@5", B: "f3 eb3 d3 f3@3 g3@2 bb3@2 c4@6", C: "c4 bb3 a3 f4@5 c4 bb3 a3 g3@5",
  D: "c4 bb3 a3 f4@3 eb4@2 eb4@2 f4@6", E: "c5 bb4 a4 c5@5 g4 f4 e4 g4@5", F: "f4 eb4 d4 f4@3 g4@2 bb4@2 c5@6",
  G: "c5 bb4 a4 f5@5 c5 bb4 a4 g4@5", H: "c5 bb4 a4 f5@3 eb5@2 eb5@2 f5@6", I: "c5 bb4 a4 c5 bb4 a4 c5@3 f5 eb5@2 f5@4",
  J: "c5 bb4 a4 f5 f5@4 c5 bb4 a4 g4@3 a4@2", K: "eb4 c4@2 c5 bb4@2 c5@2 eb4 c4!2 eb4 c4@2 f4@2",
  L: "eb4 c4@2 c5 bb4@2 eb5@9 ~",
})).s("gm_overdriven_guitar").gain(0.66).pan(0.8)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@131>").gain(0.52)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A@19 B A C A D ~ A@15 C A D ~@3 E A@5 F A G A@15 C A D ~ A@15 C A C A H A I A J A K A L A K A@25 M ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x ~ x!2", C: "x ~@3 x ~@3 x ~@3 x ~@2 x", D: "x!4", E: "~@6 x!2",
  F: "~@4 x ~@3 x!5 ~@3", G: "~@11 x ~@2 x!2", H: "~@4 x ~ x!6 ~@4", I: "~@4 x ~@4 x!2 ~@5", J: "~@2 x ~@3 x!2",
  K: "~@4 x ~@4 x ~@2 x ~ x ~", L: "~@4 x ~ x ~@5 x ~ x!2", M: "~ x ~@2",
})).gain(0.52)

// drums · low tom
const low_tom = s("lt").struct("<~@53 [~@13 x!3] ~@40 [~@14 x!2] x [~@7 x] ~@35>").gain(0.52)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@20 B ~ B ~@2 A@14 B ~ B ~@5 A@2 B C B D B E A@14 B ~ B ~@2 A@14 B ~ B ~ B F B G H A B A B A@28 I ~
>`.pickRestart({
  A: "x!8", B: "~@2 x!6", C: "x!6 ~@2", D: "x!4 ~@4", E: "x!7 ~", F: "x!2 ~@6", G: "~@3 x!5", H: "~ x!7", I: "x!3 ~@5",
})).gain(0.52)

// drums · mid tom
const mid_tom = s("mt").struct("<~@51 [~@14 x!2] ~@42 [~@11 x!4 ~] ~ [~@3 x] ~@35>").gain(0.52)

// drums · crash
const crash = s("cr").struct(`<
  ~@21 A B A B ~@15 A B A B ~@2 C D ~@2 A ~ A ~ A ~@15 A B A B ~@15 A B A B A ~ A@3 ~ A ~ A ~@30
>`.pickRestart({
  A: "x", B: "~ x ~@3 x ~@3 x ~@3 x ~@2", C: "x!2", D: "x ~@2 x!5",
})).gain(0.52)

stack(overdriven_guitar, bass, overdriven_guitar_2, rim, kick, snare, low_tom, hihat, mid_tom, crash)

More by Led Zeppelin