Strudelify

The Rover

Led Zeppelin

KeyA majorTempo102 bpm
0:00/0:00
// The Rover — Led Zeppelin
// 102 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 142 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(102/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 · "Guitar 1"
const distortion_guitar = note(`<
  ~ A B C@3 B D@2 E F G H G H G H G I@2 J@2 I@2 K@2 L M N F G H G H G H G I@2 J@2 I@2 K@2 L M N F G H G H G H G I@2 J@2
  I@2 K@2 L M O@2 P Q P Q P Q P Q P Q R Q P Q S@3 K@2 I@2 T@2 L M U F G H G H G H G I@2 J@2 I@2 K@2 L M N F G H G V W X
  Y@5 Z AA AB AC AD AE AF AG AF AG AH AI AH AI AH AI ~
>`.pickRestart({
  A: "~@14 e2 e3", B: "e2@13 ~@3",
  C: "[[g2,g3]@2 [g2,g3]@2 [a2,a3]@2 [a2,a3]@2 [g2,g3]@2 [a2,a3]@2 [g2,g3]@2 d3 e3@21 ~@4 [f#4,a4] [e4,g#4] b3 [e4,g#4] [f#4,a4] [e4,g#4] [e4,g#4]@2]/3", // G A G A G F#m E F#m …
  D: "[[g2,g3]@2 [g2,g3]@2 [a2,a3]@2 [a2,a3]@2 [g2,g3]@2 [a2,a3]@2 [g2,g3]@2 d3 e3@15 ~@2]/2", // G A G A G
  E: "~@8 [f#4,a4] [e4,g#4]@2 [d3,g#3]@2 d3 e3 d3", F: "~@2 g#3 e3 b3 f#3 g#3 e3, e2@13 ~@3",
  G: "~ e3 d3 ~ d3 e3 g#2 e2", H: "~ e2 g#3 e3 b3 f#3 g#3 e3",
  I: "[[f#3,c#4]@3 ~ [f#3,c#4]@2 [f#3,c#4]@2 [e3,b3]@2 [e3,b3]@2 ~@2 [d3,a3]@13 ~ [d3,a3]@2 [g3,d4]@2]/2", // F#5 E5 D5 G5
  J: "[[f#3,c#4]@2 ~@2 [f#3,c#4]@2 [f#3,c#4]@2 [a3,e4]@2 [a3,e4]@2 ~@2 [e3,b3]@13 ~ [e3,b3]@2 [g3,d4]@2]/2", // F#5 A5 E5 G5
  K: "[[f#3,c#4]@3 ~ [f#3,c#4]@2 [f#3,c#4]@2 [a3,e4]@2 [a3,e4]@2 ~@2 [e3,b3]@13 ~ [e3,b3]@2 [g3,d4]@2]/2", // F#5 A5 E5 G5
  L: "[f#3,c#4]@3 ~ [f#3,c#4]@2 [f#3,c#4]@2 [e3,b3]@2 [e3,b3]@2 ~@2 [d3,a3]@2", M: "~ [d3,a3]!3 [c#3,g#3]!2 ~ [b2,f#3]",
  N: "~@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [a2,e3,b3,e4]!2 g#2@2 [a2,e3,b3,e4]@2 g#2@2", // B5 Asus2
  O: "[~@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [a2,e3,b3,e4]!2 g#2@2 [a2,e3,b3,e4]@2 g#2@5 ~ [a3,d4,f#4,c#5]@2 ~@2 [a3,d4,f#4,c#5]@2 [a3,d4,f#4,c#5]@2 ~@2 [a3,d4,f#4,c#5]@2]/2", // B5 Asus2 Dmaj7
  P: "~ [b3,e4,g#4] [b3,e4,g#4]@4 ~ e2", Q: "~@2 [a3,d4,f#4,c#5] ~ [a3,d4,f#4,c#5]!2 ~ [a3,d4,f#4,c#5]",
  R: "~@2 [b3,e4,g#4]@2 [b3,e4,g#4]@6 f#3 g#3 [c#4,e4] d4 e4@2", // E C#m
  S: "[~@2 [b3,e4,g#4]@2 [b3,e4,g#4]@3 ~ f#3 g#3 ~ c#4 e4@2 f#4@5 ~ f#4 ~ e4@2 [e3,b3]@2 [e3,b3]@2 ~@2 [d3,a3]@11 ~ [d3,a3]@2 [d3,a3]@2 [g3,d4]@2, ~@10 b3@5 ~@33]/3", // E E5 D5 G5
  T: "[[f#3,c#4]@3 ~ [f#3,c#4]@2 [f#3,c#4]@2 [a3,e4]@2 [a3,e4]@2 ~@2 [e3,b3]@5 ~ f#3 g#3 [b3,e4] c#4 [b3,e4]@2 g#3@2 [b3,e4] c#4 [b3,e4]@2]/2", // F#5 A5 E5
  U: "~ [b2,f#3]!3 [a2,e3] g#2 e3 g#2", V: "~ e3 g3 e3 b3 f#3 g3 e3", W: "~ e3 d3 b2 d3 e3 g#2 e2",
  X: "~@2 e2@2 f#3@2 e3@2 b3@2 b3@3 ~ f#3@2",
  Y: "[g3@2 g#3@2 e3@2 e3@2 g3@2 g#3@2 a3@2 g3 g#3@5 ~@4 g3@2 g#3@2 a3@2 g3 g#3@2 ~ e2@2 f#3@2 ~@2 g3@2 g#3@2 a3@2 [d3,g3] ~ e2@3 ~ g3@2 ~@2 g3@2 g3@2 a3@2 [d3,g3] ~ e4@2 e2@2 e4@2 e2@2 b2 c#3 e3!2 e3@2 f#3 e3, ~@47 [e3,g#3]@5 ~@11 [e3,g#3]@9 ~@8]/5", // G5 E
  Z: "e2@2 e2@2 d3@2 e2 d3 e2@2 d3 e3 e2@2 e3@2", AA: "e2@2 d3@2 ~ d3@2 e2 d3@2 g3@2 d3 e3@2 ~, ~@2 e2 ~@5",
  AB: "e2!2 g3 e2 ~ g3 e3@2 g3 e3 ~@2 d3 e3@2 ~, ~@2 e2@5 ~", AC: "e3@2 g3 a3@2 g3 a3@2 g3@2 e3@2 d3 e3@2 ~",
  AD: "~@2 g3 a3@2 g3 a3@2 ~@2 e3!2 ~ e3@2 ~, ~@4 g3@2 g3 ~",
  AE: "e2@2 g3 a3 ~ g3 a3@2 g3@2 e3@2 d3 ~ e2@2, ~@13 e3@2 ~",
  AF: "~@2 d3 e3 g3 g3@2 d3 e3 g3!3 ~ g3 e3@2, ~@12 a3@3 ~", AG: "e2@2 d3 e3 g3 g3@2 g3 d3 e3 g3!3 ~ e2@2, ~@13 a3@2 ~",
  AH: "~@2 d4 e4 [g4,b4] [d4,g4,b4]@2 [d4,g4,b4] d4 e4!2 [g4,b4] [a4,c#5] [g4,b4] e4@2", // G A G
  AI: "~@2 d4 e4 [g4,b4] [g4,b4]@2 [g4,b4] d4 e4 [g4,b4]!2 [a4,c#5] [g4,b4] e4@2", // G A G
})).s("gm_distortion_guitar").gain(0.51)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A B@2 C D E F G H I J K J K J K L M N O P Q R S T U V W I J K J K J K L M N O P Q R S T U V W I J K J K J K L M N O
  P Q R S T U V W I J K J X J K J Y J Z J Z J Z AA M N O P Q R S T U V W I J K J K J K L M N O P Q R S T U V W I J K J Z
  J Z AB Z J Z AC Z AD Z AD Z AD AE AF AE AF AE AF AE AG AE AH ~
>`.pickRestart({
  A: "~@7 e2", B: "[e1@25 ~@5 e1@2]/2", C: "e1@8 ~@2 e1@3 ~ e2@2", D: "~@3 e2 ~ e1 e2 e1", E: "e1@13 ~@3",
  F: "~@6 e2@2 e2@2 e1@2 e1@2 e2!2", G: "e1@2 e2@2 e2@3 ~@3 e1@2 e1@2 e2@2", H: "~@2 e1@2 e2@3 ~ e2@2 e2@2 e2@2 e2@2",
  I: "e1 e2!7", J: "e2!7 e1", K: "e2!8", L: "~@2 e1@2 g#1@2 a1!2 b1@2 c#2@2 e2@2 f2@2",
  M: "f#2@2 f#2@2 f#2@2 ~ f#2 e2@2 e2@2 ~@2 d2@2", N: "~ e1 f#1@2 ~ g1@2 g1 a1@2 b1 a1 b1 a1 d2 e2",
  O: "f#2@3 ~ f#2@2 ~@2 a2@2 a2@2 ~@2 e2@2", P: "~@2 e2@2 e2@2 ~ e2 e3!2 e2!2 e3@2 ~ e2",
  Q: "f#2@3 ~@4 f2 e2@2 e2@2 ~ a1 d2@2", R: "~@2 f#1 f#1@2 g1@2 g1 a1@2 a1!2 ~@3 e2",
  S: "f#2@3 ~ f#2@2 ~@2 a2@2 a2@2 a2 b2 e1@2", T: "e2 e1 e2!5 c#2", U: "f#2@3 ~@3 f#2 f2 e2@2 e2@2 f#2 e2 d2@2",
  V: "d2@2 d2@2 d2 a1 d2!2 c#2@2 c#2!2 ~@2 b1@2", W: "~ b1 ~ b1 a1!2 g#1 f#1", X: "~@2 e2!6",
  Y: "~@2 e2@2 e2 ~ e2@2 e2@2 e2@2 e2@2 e2@2", Z: "~ e2!7", AA: "e2!5 ~ e1 f#2, ~@10 a1@5 ~", AB: "e1 e2!2 e1 e2!3 e1",
  AC: "e2@2 e2@2 e2@2 e2@2 ~@2 e2@2 ~ b1 e1@2, ~@4 b1 ~@3, ~@9 d2@5 ~@2",
  AD: "e2@2 e2@2 e2@2 e2@2 ~ d2 e2@2 ~ b1 e1@2, ~@4 b1 ~@3", AE: "~ e1!7",
  AF: "e2@2 e1@2 e1@2 e1@2 b1 d2 e2@2 ~ b1 e1@2", AG: "e1@2 e1@2 e1@2 e1@2 a1 a#1 b1 b1@2 b1 f#1@2",
  AH: "~@2 e1@2 e1@2 e1@2 ~ b1 e2@2 e2 b1 e1@2, ~@4 a1@3 ~",
})).s("gm_electric_bass_finger").gain(0.51)

// chords · electric guitar clean · "Guitar 2"
const electric_guitar_clean = note(`<
  ~@37 A B C D A B C D E@4 ~@7 A B C D A B C D E@4 ~@34 A B C D A B C D E@4 ~@28
>`.pickRestart({
  A: "~@2 c#4@2 f#4@2 a4@3 ~@3 e4@2 [e4,g#4]@2, ~@10 b3@5 ~", B: "~@2 [a3,d4,f#4]@11 ~@3",
  C: "~@2 c#4@2 f#4@2 a4@3 ~@3 a4@2 [a4,c#5]@2, ~@10 e4@5 ~", D: "~@2 [b3,e4,g#4,b4]@11 ~@3",
  E: "[~ f#4 a4 c#4 ~ e4 b3 ~@2 d4 f#4 d4 ~ c#4 g#3 f#3@2 b3 d#4 b3 ~ a3 e3 e2@3 ~@6, c#4@5 ~@3 g#4@5 ~ a3@7 ~@3 e4@5 ~@11 c#4@5 ~@19]/4",
})).s("gm_electric_guitar_clean").gain(0.51)

// other · electric guitar jazz · "Solo"
const electric_guitar_jazz = note("<~@82 A B C D@2 E F G H I@3 J@2 ~@46>".pickRestart({
  A: "~@8 f#3 g#3 b3 c#4 e4@2 f#4@2", B: "~@2 f#2 g#2 b2 c#3 e3@2 f#3@2 a3@2 b3@2 c#4@2",
  C: "~@2 a3 [b3,c#4] a3@5 ~ c#4@2 e4@2 f#4@2", // Bsus2
  D: "[~@2 g#4 [g#4,a4] f#4 g#4 a4 b4 c#5@2 b4@2 a4 b4@5 a4@2 g#4 f#4 e4@7 ~ b3 c#4]/2", // Amaj7
  E: "e4 f#4@2 ~ f#4@2 b3 c#4 e4 ~ g#4 [g#4,a4] ~ g#4 a4 b4, ~@9 f#4@3 f#4@3 ~", // Amaj7
  F: "c#5 ~ g#4 [g#4,a4] f#4 g#4 f#4 e4 c#4 f#4 e4 c#4 e4 c#4 b3 a3, ~ b4@12 ~@3", // Amaj7
  G: "b3 a3 f#3@2 a3@2 f#3 a3@2 b3 c#4 e4!4 b3", H: "c#4 e4!3 ~ b3 c#4 e4!3 e4@4 ~@2, ~@4 e4@3 ~@9",
  I: "[b3 c#5!2 ~ f#5@2 f#5@3 ~ a5@2 f#5@2 f#5 e5@2 ~ c#5@2 a5@2 f#5 e5@2 ~ c#5@2 a5@2 f#5 e5@2 ~ c#5@2 a5@2 f#5 e5@2 ~ c#5@2 c#5 b4 a4 f#4]/3",
  J: "[e4@13 ~@3]/2",
})).s("gm_electric_guitar_jazz").gain(0.51)

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

// drums · rim
const rim = s("rim").struct("<~ A ~ B ~ C ~ D ~@9 E ~@18 E ~@18 E ~@12 F ~@3 F ~@3 F ~ F ~ F ~@20 E ~@40>".pickRestart({
  A: "~@14 x!2", B: "~@3 x", C: "~@3 x!4 ~", D: "~@5 x ~@2", E: "~@6 x ~@2 x!2 ~@5", F: "~@10 x!2 ~@4",
})).gain(0.51)

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

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

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

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

stack(distortion_guitar, bass, electric_guitar_clean, electric_guitar_jazz, kick, rim, snare, hihat, crash, ride)

More by Led Zeppelin