Strudelify

Royal Orleans

Led Zeppelin

KeyA majorTempo110 bpm
0:00/0:00
// Royal Orleans — Led Zeppelin
// 110 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 60, 4/4 at bar 61) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 4 "Electric Guitar II" distortion guitar (copy of ch 3 "Electric Guitar I" distortion guitar); ch 6 "Electric Guitar IV" overdriven guitar (copy of ch 5 "Electric Guitar III" overdriven guitar); ch 11 "Bass Guitar II" fretless bass (copy of ch 7 "Bass Guitar I" slap bass 1); ch 8 "Electric Guitar V" distortion guitar (copy of ch 9 "Electric Guitar VI" distortion guitar, 0.083 beats early)
// note: Full arrangement: all 80 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 III.
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.

// chords · distortion guitar · "Electric Guitar I"
const distortion_guitar = note(`<
  A B A B C@2 D C D C D C A E A E F G F G F G F G A E A E A E A E H I F I F I F I J K J K J K J K L E A M N O N O N O N
  P Q R S R T R S R T R S R T R S R U V W V
>`.pickRestart({
  A: "e3 f#3 g3 a3@3 e3 f#3 g3 a3@3 e3 f#3 g3 a3", B: "b4@2 a4@2 f#4 e4 c#4 a3 ~@8",
  C: "[b3,e4,g#4]!2 [a3,d4,f#4] ~ [b3,e4,g#4]!3 [a3,d4,f#4] ~@8", // E D E D
  D: "[b3,e4,g#4]!2 [a3,d4,f#4] ~ [b3,e4,g#4]!3 [a3,d4,f#4] ~@7 [a3,d4,f#4]", E: "b4@2 a4@2 f#4 e4 c#4 a4 ~@8",
  F: "[b3,e4,g#4,b4]!2 [a3,d4,f#4,a4] ~ [b3,e4,g#4,b4]!3 [a3,d4,f#4,a4] ~ [d4,d5] ~ [d4,d5]!3 ~@2", // E D E D
  G: "[b3,e4,g#4,b4]!2 [a3,d4,f#4,a4] ~ [b3,e4,g#4,b4]!3 [a3,d4,f#4,a4] ~ [d4,d5] ~ [d4,d5] [d4,d5]@2 ~@2", // E D E D
  H: "[b3,e4,g#4,b4]!2 [a3,d4,f#4,a4] ~ [b3,e4,g#4,b4]!3 [a3,d4,f#4,a4] ~ [d4,d5] ~ [d4,d5]!4 ~", // E D E D
  I: "[b3,e4,g#4,b4]!2 [a3,d4,f#4,a4] ~ [b3,e4,g#4,b4]!3 [a3,d4,f#4,a4] ~ [d4,d5] ~ [d4,d5]!2 ~@3", // E D E D
  J: "[c#4,f#4,a#4]!2 [b3,e4,g#4] ~ [c#4,f#4,a#4]!3 [b3,e4,g#4] ~ [e4,e5] ~ [e4,e5]!3 ~@2", // F# E F# E
  K: "[c#4,f#4,a#4]!2 [b3,e4,g#4] ~ [c#4,f#4,a#4]!3 [b3,e4,g#4] ~ [e4,e5] ~ [e4,e5]!2 ~@3", // F# E F# E
  L: "e3 f#3 g3 a3@3 e3 f#3 g3 a3@3 e3 f#3 g3!2", M: "b3@2 a3@2 f#3 e3 c#3 a2 ~@4 e2 f#2 a2 d3",
  N: "f#3@2 e3@2 e2 f#2 a2 [a3,d4,f#4] ~ [a3,d4,f#4]@3 e2 f#2 a2 d3", // D
  O: "f#3@2 e3@2 e2 f#2 a2 [a3,d4,f#4] ~@4 e2 f#2 a2 d3", P: "f#3@2 e3@2 e2 f#2 a2 [a3,d4,f#4] ~@8",
  Q: "~@8 [b3,e4,g#4,b4]!2 [a3,d4,f#4,a4] ~ [b3,e4,g#4,b4]!3 [a3,d4,f#4,a4]", // E D E D
  R: "~ [d4,d5] ~ [d4,d5]!3 ~@2 [b3,e4,g#4,b4]!2 [a3,d4,f#4,a4] ~ [b3,e4,g#4,b4]!3 [a3,d4,f#4,a4]", // D E D E D
  S: "~ [d4,d5] ~ [d4,d5]!2 ~@3 [b3,e4,g#4,b4]!2 [a3,d4,f#4,a4] ~ [b3,e4,g#4,b4]!3 [a3,d4,f#4,a4]", // D E D E D
  T: "~ [d4,d5]!7 [b3,e4,g#4,b4]!2 [a3,d4,f#4,a4] ~ [b3,e4,g#4,b4]!3 [a3,d4,f#4,a4]", // D E D E D
  U: "~ [d4,d5]!7 e3 f#3 g3 a3@3 e3 f#3", V: "g3 a3@3 e3 f#3 g3 a3 b4@2 a4@2 f#4 e4 c#4 a4",
  W: "~@8 e3 f#3 g3 a3@3 e3 f#3",
})).s("gm_distortion_guitar").gain(0.39).pan(0.1)

// chords · overdriven guitar · "Electric Guitar III"
const overdriven_guitar = note("<~@4 A@8 ~@4 A@8 ~@8 A@8 B@8 ~@4 C@8 D@4 E D@3 E D@3 E D@3 F ~@3>".pickRestart({
  A: "~@2 e2 ~@13", B: "~@2 f#2 ~@13", C: "e3 ~@7", D: "~@10 e2 ~@5", E: "~ a3 [c#3,g#3]!2 a3!2 [e3,b3]!2 ~@2 e2 ~@5",
  F: "~ a3 [c#3,g#3]!2 a3!2 [e3,b3]!2 ~@8", // C#5 E5
})).s("gm_overdriven_guitar").gain(0.39).pan(0)

// bass · slap bass 1 · "Bass Guitar I"
const bass = note(`<
  A B A B C D E F C D C D A B A B G H G I J K J K A B A B A B A B G K G D G K G L M N O P N Q N Q A B A R S T S T S T S
  D U V U W X Y@2 Z@2 Y@2 W X AA Y AB@2 AC AD AC
>`.pickRestart({
  A: "e1 f#1 g1 a1@3 e1 f#1 g1 a1@3 e1 f#1 g1 a1", B: "g2@2 f#2@2 e2 c2 c#2 a1 ~@8", C: "f#2@2 e2@3 e2!2 d2 ~@7 d2",
  D: "f#2@2 e2@2 e2!3 d2 ~@8", E: "f#2!2 e2@2 e2!3 d2 ~@7 d2", F: "f#2@2 e2@2 e2!2 ~ d2 ~@7 d2",
  G: "f#2@2 ~@2 e2!3 d2 ~@7 e2", H: "f#2@2 e2@3 e2!2 d2 ~@8, e2 ~@15", I: "f#2@2 e2@2 ~ e2!2 d2 ~@8",
  J: "f#2@2 e2@2 e2!3 d2 ~@7 e2", K: "f#2@2 e2@3 e2!2 d2 ~@8", L: "f#2@2 e2@2 e2!3 d2 ~ e2 d2 d#2 e2 f#2!3",
  M: "f#2@2 f#1@2 f#2!3 e2 ~@8", N: "g#2@2 f#1@2 f#2!3 e2 ~@7 f#2", O: "g#2@2 f#2@2 f#2!3 e2 ~@7 f#2",
  P: "g#2@2 f#2@2 f#2 c#2 d#2 e2 ~@7 f#2", Q: "g#2@2 f#2@3 c#2 d#2 e2 ~@8",
  R: "g2@2 f#2@2 e2 c2 c#2 a1 ~@4 e1 f#1 a1 d2", S: "f#2@2 e1@3 e2 ~ d2 ~ d2@2 d2 e1 f#1 a1 d2",
  T: "f#2@2 e2@2 e2!3 d2 ~@4 e1 f#1 a1 d2", U: "~@8 f#2@2 e1@2 e2!3 d2", V: "~@7 e2 f#2@2 e2@2 e2!2 c#2 d2, ~@8 e2 ~@7",
  W: "~@7 e2 f#2@2 e2@2 e2!2 c#2 d2", X: "~ d2 c#2!2 d2!2 e2!2 f#2@2 e1@2 e2!3 d2", Y: "~@7 e2 f#2@2 e1@2 e2!3 d2",
  Z: "[~@7 e2 f#2@2 e1@2 e2!3 d2@2 d2 c#2!2 d2!2 e2!2 f#2@2 e1@2 e2!3 d2]/2", AA: "~@7 e2 f#2@2 e1@2 e2!2 c#2 d2",
  AB: "[~@7 e2 f#2@2 e1@2 e2!3 d2@2 d2 c#2!2 d2!2 e2!2 e1 f#1 g1 a1@3 e1 f#1, ~@8 e2 ~@23]/2",
  AC: "g1 a1@3 e1 f#1 g1 a1 g2@2 f#2@2 e2 c2 c#2 a1", AD: "~@8 e1 f#1 g1 a1@3 e1 f#1",
})).s("gm_slap_bass_1").gain(0.63)

// other · distortion guitar · "Electric Guitar VI"
const distortion_guitar_2 = note("<~@39 A B C D E F@3 G ~@32>".pickRestart({
  A: "~@15 b4", B: "~@2 e5@7 b4 ~ b4 [b4,c#5] c#5@3, c#5@7 ~@3 c#5@2 ~@4", C: "e5 e5@3 b4 [b4,c#5]@2 a4@4 ~ a#4@2 ~@2",
  D: "c#5 e5 f5 f#5 a5 b5 ~ b5 ~ a5 ~ b5 ~@2 c#6 e6, ~@3 c#6 ~@4", E: "f#6@2 e6@2 f#6 e6@6 ~ f6@3 ~",
  F: "[f#6@2 a6@2 e6 f#6@6 a6@3 e6 [e6,f#6]@2 ~ [c6,c#6] b5 [a5,b5] ~ [a5,b5] ~ a#5 ~@5 a6 ~ a6 ~@2 a6 b6@2 a6@2 g#6 f#6 e6 f#6 e6 c#6 c6 b5, ~@31 b6@2 ~@15]/3", // Esus2 C#maj7 Asus2
  G: "a5 f#5 b5 f#5 a5 b5 a5 f#5 a5 f#5@3 e5 ~@3",
})).s("gm_distortion_guitar").gain(0.58).pan(0.7)

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

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

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

// drums · high tom
const high_tom = s("ht").struct("<~@39 [~@12 x!4] ~@28 [~@4 x!4 ~@8] ~@11>").gain(0.63)

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

// drums · bongos
const bongos = s("bongo:4").struct("<~@53 A B A ~ C A D ~@20>".pickRestart({
  A: "~@7 x ~ x ~@6", B: "~@9 x ~@6", C: "~@7 x ~ x ~ x ~@3 x", D: "x!2 ~@6",
})).gain(1.66)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@52 A B C B@2 D B E ~@20>".pickRestart({
  A: "~@7 x ~ x ~@6", B: "x ~@14 x", C: "x!3 ~@4 x ~@7 x", D: "x", E: "~@6 x!2 ~@8",
})).gain(1.66)

// drums · congas
const congas = s("conga:18").struct("<~@52 [~@3 x!2 ~@6 x!2 ~@3]!2 ~@2 [~@3 x!2 ~@11]!3 ~@21>").gain(2.02)

stack(
  distortion_guitar, overdriven_guitar, bass, distortion_guitar_2, kick, snare, hihat, high_tom, crash, bongos,
  bongos_2, congas
)

More by Led Zeppelin