Strudelify

The Wanton Song

Led Zeppelin

KeyB♭ majorTempo110 bpm
0:00/0:00
// The Wanton Song — Led Zeppelin
// 110 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 9 "Electric Guitar VI" overdriven guitar (copy of ch 2 "Electric Guitar I" overdriven guitar, 0.083 beats late); ch 11 "Electric Guitar VII" overdriven guitar (copy of ch 2 "Electric Guitar I" overdriven guitar, 0.083 beats late); ch 12 overdriven guitar (copy of ch 3 "Electric Guitar II" overdriven guitar); ch 6 "Electric Guitar V" overdriven guitar (copy of ch 5 "Electric Guitar IV" overdriven guitar); ch 5 "Electric Guitar IV" overdriven guitar (copy of ch 7 "Bass Guitar I" slap bass 1)
// note: Full arrangement: all 90 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): Electric Guitar I.
setcpm(110/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.

// other · overdriven guitar · "Electric Guitar II"
const overdriven_guitar = note(`<
  ~@8 A ~@8 A ~@8 B C@3 D E F G@3 H I J ~@8 A ~@8 B C@3 D E F G@3 H I K ~@14 A@6 ~
>`.pickRestart({
  A: "~@4 db3 ~@2 c3 ~ bb2 bb2@4 ~@2", B: "~@4 db3 ~@2 c3 ~ bb2 bb2@2 bb2!4",
  C: "[[f3,ab3,c4,g4]@5 ~@3 [f3,ab3,c4,g4] ~ [f3,ab3,c4] ~@3 [f3,b3,d4]@7 ~@3 [f3,b3]@4 ~@2 [g3,bb3]@7 ~@3 bb3@4 ~@2 e4@2]/3", // Fm Bdim Fdim Gm
  D: "~@8 [g3,bb3]@3 ~@3 e4 ~", E: "e4 ~ f4 e4 a3 ~ g3@2 ~ a3 g3 e3 ~@4",
  F: "f3 ~ g3 f3 d3 ~ bb3!3 [f3,bb3] d3!2 [f3,bb3] ~ d3 ~", // Bb5
  G: "[[c4,a4]@4 ~@2 [c4,e4]@5 ~@3 [f3,bb3]@5 ~@9 c4 eb3 e3 [c4,a4]@5 ~@2 [c4,e4]@4 ~@2 [g3,c4] ~ a3 ~, ~@31 e4 ~@16]/3", // F C Bb5 F C C5
  H: "d3 ~@3", I: "e4 ~ f4 e4 a3 ~ g3@3 ~ a3 g3 e3 ~ d3@2", J: "~@4 d3@9 ~@3, ~@2 g3@9 ~@5, ~@3 f3@9 ~@4",
  K: "~@2 g3 f3 d3 ~@3 db3 d3 bb3 db3 d3 bb3 db3 d3",
})).s("gm_overdriven_guitar").gain(0.56).pan(0.3)

// other · overdriven guitar · "Electric Guitar III"
const overdriven_guitar_2 = note(`<
  A@3 B A@3 C D A@3 B A@3 C D A@3 B A@3 C D E@5 F G@2 H ~ I@2 A@3 B A@3 C D A@3 B A@3 C D E@5 F G@2 H ~ J@2 K@2 L M N O
  P ~ A@5 C D@5 Q@2
>`.pickRestart({
  A: "g2!2 g3 g2!2 [g2,g3] g3 g3@2 ~@7", B: "g2!2 g3 g2!2 g3!2 g3@2 ~ [f3,a3,c4]@2 ~ [gb3,bb3,db4]@2 ~",
  C: "g2 [g2,g3] g3 [g2,g3] g2 [g2,g3] g3!2 ~ c3 ~ db3 ~ d3 f3 d3", D: "d4 d3 ~ db4@2 ~ c4@2 ~@2 [f3,bb3]@4 ~@2",
  E: "[[c3,f3,ab3,c4,g4]@5 ~@3 [c3,f3,ab3,c4,g4] ~ [c3,f3,ab3,c4,g4] ~@3 [b2,f3,ab3,d4]@7 ~@3 d4 ~ eb4 ~@3 [g3,bb3,d4]@7 ~@5 f4 ~ [bb3,eb4,g4] ~ [g3,bb3,e4]@7 ~@3 e4 ~ f4 ~ g4 ~@5 f4 e4 a3 ~ g3@2 ~ a3 g3 e3 [g3,c4] ~ a3 ~, ~@20 eb4@2 ~@9 [c4,a4]@3 ~@6]/5", // Fm Bdim Gm Eb Edim C5 F
  F: "f3 ~ g3 f3 d3 ~ bb3!3 [f3,bb3] d3!2 [f3,bb3] ~ d3 ~", // Bb5
  G: "[e4 ~ f4 e4 a3 ~ g3@3 ~ a3 g3 e3 ~ d3@5 ~ d3 ~ db3 d3 bb3 db3 d3 e3 ~@4]/2",
  H: "e4 ~ f4 e4 a3 ~ g3@2 ~ a3 g3 e3 ~@4",
  I: "[[c4,a4]@4 ~@2 [c4,e4]@5 ~@3 bb3@5 ~ d3 ~@3 c3 d3 [f3,bb3]@4 ~@2, ~@14 f3 ~@17]/2", // F C Bb5
  J: "[[c4,a4]@4 ~@2 [c4,e4]@5 ~@3 bb3@5 ~@13, ~@14 f3 ~@17]/2", // F C
  K: "[[bb2,f3,bb3]@5 ~@3 [bb2,f3,bb3] ~ [bb2,f3,bb3] ~ [bb2,f3,bb3] ~ [c3,g3,c4]@5 ~ [c3,g3,c4]@3 ~ [c3,g3] ~ [d3,a3] ~ [c3,g3] ~ e2 ~]/2", // Bb5 C5 D5 C5
  L: "[f2,c3,f3]@3 ~ [f2,c3,f3]@3 ~ [f2,c3,f3] ~ [f2,c3,f3] ~ [a2,e3] ~ [g2,d3,g3]@2", // F5 A5 G5
  M: "~@2 [g2,d3,g3]!3 ~ g2!2 e2 ~ [g2,d3,g3] ~ [g2,d3,g3] ~ [a2,e3,a3] ~", // G5 A5
  N: "[bb2,f3,bb3]@3 ~ [bb2,f3,bb3]@3 ~ [bb2,f3,bb3] ~ [a2,e3,a3] ~ [bb2,f3,bb3] ~ [c3,g3,c4]@2", // Bb5 A5 Bb5 C5
  O: "~@2 [c3,g3,c4] ~ [c3,g3,c4] ~ [c3,g3,c4] ~ [c3,g3,c4] ~ [d3,a3] ~ [c3,g3] ~ [a2,e3] ~", // C5 D5 C5 A5
  P: "[f2,c3]@3 ~ [f2,c3]@3 ~ [f2,c3] ~ [e2,b2] ~ [f2,c3]@3 ~", Q: "[d4 d3 ~ db4@2 ~ c4@2 ~@2 [f3,bb3]@22]/2",
})).s("gm_overdriven_guitar").gain(0.39).pan(0)

// bass · slap bass 1 · "Bass Guitar I"
const bass = note(`<
  A@7 B C A@7 B C A@7 B C D E@2 F@2 G H@2 I G J@2 A@7 B C A@7 B C D E@2 F@2 G H@2 I G J@2 K@2 L M N O P ~ A@5 B C@6 ~
>`.pickRestart({
  A: "g0!2 g1 g0!3 g1 g1@2 ~@7", B: "g0!2 g1 g0!3 g1!2 ~ c1 ~ db1 ~ d1 f1 d1",
  C: "d2!2 ~ db2@2 ~ c2!2 ~ [bb0,bb1]@4 ~@3", D: "f0@3 ~ f0@3 ~ f0 ~ ab0 ~ bb0 ~ b0@2",
  E: "[~@2 b0!2 b0@3 ~@3 b0 ~ b0 ~ c1@7 ~@3 c1@4 ~@2 db1@2]/2",
  F: "[~@2 e1 ~ g1 ~ bb1 ~ db2@4 ~@2 d1@6 ~@2 a0@5 ~@3 a0 ~]/2", G: "g0@2 ~ g0!2 ~@4 bb0 ~ bb0 bb0@3 ~",
  H: "[d1@4 ~@2 a0@5 ~@3 g0@13 ~@5]/2", I: "d1@4 ~@2 a0@5 ~@3 a0 ~", J: "[d1@4 ~@2 a0@5 ~@3 g0@7 ~@11]/2",
  K: "[bb0@5 ~@3 bb0 ~ a0 ~ bb0 ~ c1@7 ~@3 c1 ~ d1 ~ c1 ~ e0 ~]/2", L: "f0@3 ~ f0@3 ~ f0 ~ e0 ~ f0 ~ g0@2",
  M: "~@2 g0 ~ g0@2 ~ g0!2 ~ g0 ~ g0 ~ a0 ~", N: "bb0@3 ~ bb0@3 ~ bb0 ~ a0 ~ bb0 ~ c1@2",
  O: "~@2 c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ a0 ~", P: "f0@3 ~ f0@3 ~ f0 ~ e0 ~ f0 ~ g0 ~",
})).s("gm_slap_bass_1").gain(0.39)

// bass · synth bass 2 · "Bass Guitar II"
const bass_2 = note(`<
  A@7 B C A@7 B C A@7 B C D E@2 F@2 G H@2 I G J@2 A@7 B C A@7 B C D E@2 F@2 G H@2 I G J@2 K@2 L M N O P ~ A@5 B C@6 ~
>`.pickRestart({
  A: "g1!2 g2 g1!3 g2 g2@2 ~@7", B: "g1!2 g2 g1!3 g2!2 ~ c2 ~ db2 ~ d2 f2 d2",
  C: "d3!2 ~ db3@2 ~ c3!2 ~ [bb1,bb2]@4 ~@3", D: "f1@3 ~ f1@3 ~ f1 ~ ab1 ~ bb1 ~ b1@2",
  E: "[~@2 b1!2 b1@3 ~@3 b1 ~ b1 ~ c2@7 ~@3 c2@4 ~@2 db2@2]/2",
  F: "[~@2 e2 ~ g2 ~ bb2 ~ db3@4 ~@2 d2@6 ~@2 a1@5 ~@3 a1 ~]/2", G: "g1@2 ~ g1!2 ~@4 bb1 ~ bb1 bb1@3 ~",
  H: "[d2@4 ~@2 a1@5 ~@3 g1@13 ~@5]/2", I: "d2@4 ~@2 a1@5 ~@3 a1 ~", J: "[d2@4 ~@2 a1@5 ~@3 g1@7 ~@11]/2",
  K: "[bb1@5 ~@3 bb1 ~ a1 ~ bb1 ~ c2@7 ~@3 c2 ~ d2 ~ c2 ~ e1 ~]/2", L: "f1@3 ~ f1@3 ~ f1 ~ e1 ~ f1 ~ g1@2",
  M: "~@2 g1 ~ g1@2 ~ g1!2 ~ g1 ~ g1 ~ a1 ~", N: "bb1@3 ~ bb1@3 ~ bb1 ~ a1 ~ bb1 ~ c2@2",
  O: "~@2 c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ a1 ~", P: "f1@3 ~ f1@3 ~ f1 ~ e1 ~ f1 ~ g1 ~",
})).s("gm_synth_bass_2").gain(0.56)

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

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

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

// drums · open hat
const open_hat = s("oh").struct("<~@69 [x!3 ~ x ~ x ~] [x!4]!2 [x!8] [x ~ x ~ x!3 ~] [x!3 ~ x ~ x ~] [x!3 ~ x!4] ~@14>")
  .gain(0.56)

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

stack(overdriven_guitar, overdriven_guitar_2, bass, bass_2, kick, snare, pedal_hat, open_hat, crash)

More by Led Zeppelin