Strudelify

That's the Way

Led Zeppelin

KeyG majorTempo85 bpm
0:00/0:00
// That's the Way — Led Zeppelin
// 85 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 6 "Electric Guitar I" named as a guitar, played on electric guitar clean (its pad bowed patch is not one); ch 7 "Electric Guitar II" named as a guitar, played on electric guitar clean (its pad metallic patch is not one)
// note: duplicate parts dropped: ch 3 "Acoustic Guitar II" acoustic guitar steel (copy of ch 2 "Acoustic Guitar I" acoustic guitar steel); ch 5 "Mandolin II" acoustic guitar nylon (copy of ch 4 "Mandolin I" acoustic guitar nylon)
// note: Full arrangement: all 125 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(85/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 steel · "Acoustic Guitar I"
const acoustic_guitar_steel = note(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D E F@2 D G H I J A B A B A B A
  B A B A B A B A B A B A B A B A B@2 A B A B A B A B A B A B C D E F@2 D G H K C L M@2 N O P@2 ~ Q R@2 Q R@2 Q R@2 Q
  R@2 Q R@2 Q R@2
>`.pickRestart({
  A: "[d3,g3,b3,d4] [g2,b2,d3,d4] [d3,g3,b3,d4] [g2,b2,d3,d4] [e3,g3,c4,e4]@2 [f#3,g3,d4,f#4]@4 [d3,f#3]@4 [b2,d3,g3,b3,f#4]@2", // G C Gmaj7 D Gmaj7
  B: "[f#3,g3,d4,f#4] [g2,d3,f#3,f#4] [f#3,g3,d4,f#4] [g2,d3,f#3,f#4] [e3,g3,c4,e4]@2 [g2,d3,g3,b3,d4]@4 [b3,d4]@2 [e3,g3,c4,e4] [g2,c3,e3,e4] [e3,g3,c4,e4] [g2,b2,d3,d4]", // Gmaj7 C G Bm C G
  C: "~ [b2,e3,a3,b3]@6 [b2,e3,b3]@2 a3@4 [b2,e3,a3,b3]@8 [b2,e3,a3,b3]@11", // Esus4 E5 Esus4
  D: "~ [f#3,a3,b3,e4]@6 [f#3,e4]@2 a3@4 [f#3,a3,b3,e4]@8 a3@4 [f#3,a3,b3,e4]@7", // F#m7 F#7 F#m7
  E: "~ [d3,g3,b3,d4]@2 [g2,b2,d3,d4]@2 [d3,g3,b3,d4]@2 [g2,b2,d3,d4]@2 [e3,g3,c4,e4]@3 ~ [f#3,g3,d4,f#4]@8 [d3,f#3]@7 ~ [b2,d3,g3,b3,f#4]@3", // G C Gmaj7 D Gmaj7
  F: "[~ [f#3,g3,d4,f#4]@2 [g2,d3,f#3,f#4]@2 [f#3,g3,d4,f#4]@2 [g2,d3,f#3,f#4]@2 [e3,g3,c4,e4]@3 ~ [g2,d3,g3,b3,d4]@8 [b3,d4]@3 ~ [e3,g3,c4,e4]@2 [g2,c3,e3,e4]@2 [e3,g3,c4,e4]@2 [g2,b2,d3,d4]@2 [b2,e3,a3,b3]@6 [b2,e3,b3]@2 a3@4 [b2,e3,a3,b3]@8 [b2,e3,a3,b3]@11]/2", // Gmaj7 C G Bm C G Esus4 E5 …
  G: "~ a3@2 c3@2 e3@2 a3@2 [b2,e3,f#3,b3]@4 [c3,e3,b3,c4]@8 [c3,e3,b3,c4]@7 ~ [b2,e3,f#3,b3]@3", // Bsus4 Cmaj7 Bsus4
  H: "~ [e3,a3,b3,e4]@7 ~ [e3,a3,b3,e4]@6 [b2,b3]@2 [e3,a3,b3,e4]@4 [e3,a3,b3,e4]@7 ~ [e3,a3,b3,e4]@3", // Esus4 B Esus4
  I: "[c3,g3,c4]@4 [c3,g3,c4]@7 ~ [c3,g3,c4]@8 [c3,e3,g3,c4]@7 ~ [c3,e3,g3,c4]@4", // C5 C
  J: "[c3,e3,g3,c4]@7 ~ [c3,e3,g3,c4]@4 [c3,e3,g3,c4]@8 [c3,e3,g3,c4]@7 ~ [c3,e3,g3,c4]@4", // C
  K: "~ b3@2 d3@2 f#3@2 a3@2 [c3,e3,g3,b3]@4 [c3,e3,g3,b3]@8 [c3,e3,g3,b3]@7 ~ [c3,f#3,a3]@3", // Cmaj7 F#dim
  L: "[f#3,c#4,f#4]@4 [f#3,c#4,f#4]@7 ~ [f#3,c#4,f#4]@6 a3@2 [c#4,f#4]@4 [g3,c4,e4]@4 [g#3,c#4,f4]@4", // F#5 C C#
  M: "[f#3,c#4,f#4]@4 [f#3,c#4,f#4]@7 ~ [f#3,c#4,f#4]@6 a3@2 [c#4,f#4]@4 [f#3,b3,d#4]@4 [g#3,c#4,f4]@4", // F#5 B C#
  N: "[f#3,c#4,f#4]@4 [f#3,c#4,f#4]@7 ~ [f#3,c#4,f#4]@8 [f#3,a#3,c#4,f#4]@7 ~ [g3,b3,d4,g4]@4", // F#5 F# G
  O: "[g3,b3,d4,g4]@7 ~ [f#3,a#3,c#4,f#4]@4 [f#3,a#3,c#4,f#4]@8 [f#3,a#3,c#4,f#4]@7 ~ [f#3,a#3,c#4,f#4]@4", // G F#
  P: "[[g3,b3,d4,g4]@7 ~ [f#3,a#3,c#4,f#4]@4 [f#3,a#3,c#4,f#4]@8 [f#3,a#3,c#4,f#4]@7 ~ [f#3,a#3,c#4,f#4]@12 ~@24]/2", // G F#
  Q: "~ [d3,g3,b3,d4]@8 [e3,g3,c4,d4]@8 [a#2,f3,g3,d4]@8 [g2,e3,g3,d4,g4]@7", // G C Gm7 Em7
  R: "~ [d3,f#3,a3,d4]@14 ~ [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]@3 ~ [d3,f#3,a3,d4]@5 ~@5", // D
})).s("gm_acoustic_guitar_steel").gain(0.24).pan(0)

// chords · acoustic guitar nylon · "Mandolin I"
const acoustic_guitar_nylon = note(`<
  ~@4 A B A B ~@8 C D@2 ~@8 E@2 D@2 ~@7 C E@2 D@2 ~@11 A B ~@8 C D@2 ~@8 F@3 ~@7 C E@2 D@2 ~@23 G H@2 ~@9
>`.pickRestart({
  A: "[d3,g3,b3,d4] [g2,b2,d3,d4] [d3,g3,b3,d4] [g2,b2,d3,d4] [e3,g3,c4,e4]@2 [f#3,g3,d4,f#4]@4 [d3,f#3]@4 [b2,d3,g3,b3,f#4]@2", // G C Gmaj7 D Gmaj7
  B: "[f#3,g3,d4,f#4] [g2,d3,f#3,f#4] [f#3,g3,d4,f#4] [g2,d3,f#3,f#4] [e3,g3,c4,e4]@2 [g2,d3,g3,b3,d4]@4 [b3,d4]@2 [e3,g3,c4,e4] [g2,c3,e3,e4] [e3,g3,c4,e4] [g2,b2,d3,d4]", // Gmaj7 C G Bm C G
  C: "~ d4@2 d3@2 d4@2 d3@2 e4@3 ~ f#4@8 f#3@7 ~ f#4@3",
  D: "[~ f#4@2 f#3@2 f#4@2 f#3@2 e4@3 ~ d4@8 d4@3 ~ e4@2 e3@2 e4@2 d4@2 ~@31]/2",
  E: "[~ f#4@2 f#3@2 f#4@2 f#3@2 e4@3 ~ d4@8 d4@3 ~ e4@2 e3@2 e4@2 d4@2 d4@2 d3@2 d4@2 d3@2 e4@3 ~ f#4@8 f#3@7 ~ f#4@3]/2",
  F: "[~ f#4@2 f#3@2 f#4@2 f#3@2 e4@3 ~ d4@8 d4@3 ~ e4@2 e3@2 e4@2 d4@2 f#4@2 f#3@2 f#4@2 f#3@2 e4@3 ~ d4@8 d4@3 ~ e4@2 e3@2 e4@2 d4@2 ~@31]/3",
  G: "~ d4@4 e4@4 f4@4 g4@3", H: "~@2 f#4@14 ~ f#4@5 ~ f#4@5 ~@4",
})).s("gm_acoustic_guitar_nylon").gain(0.16).pan(0.3)

// chords · electric guitar clean · "Electric Guitar I"
const electric_guitar_clean = note(`<
  ~@9 A@3 B@7 C@2 D@2 E@7 ~ A@3 B@7 ~ F G H I J@8 ~@3 A@3 B@7 C@2 D@2 K@6 ~ A@3 B@7 ~ F G H I L@8 M@2 N@2 ~@11 O@2 P Q@2
  ~@4
>`.pickRestart({
  A: "[~@67 d5@29, ~@7 g5@10 g5@10 g5@5 g5@40 ~@24, ~@6 f#5@5 f#5@20 ~@17, ~@30 d5@17 d5@10 d5@10 ~@29, ~@16 e5@10 e5@5 e5@17]/3",
  B: "[~@111 d5@5 ~@70 e5@38, ~@12 [a4,d5]@39 g5@10 g5@10 g5@5 g5@40 ~@15 g5@5 f#5@5 g5@10 g5@5 g5@40 ~@28, ~@41 b4@35 e5@20 e5@10 e5@40 f#5@40 ~@38, ~@56 f#5@10 f#5@40 ~@15 b4@35 e5@20 e5@10 ~@38, ~@74 d5@17 d5@10 d5@10 ~@5 [a4,d5]@38 d5@17 d5@10 d5@40 ~@3]/7", // D5
  C: "[~@7 d5@5 ~@5 b4@40 ~@7, ~@3 [a4,d5]@10 ~@3]/2", // D5
  D: "[~@25 [d5,f#5]@39, ~@10 d5@15 ~@39, ~@3 e5@2 e5@10 ~, ~@15 g5@40 ~@9]/2", // D
  E: "[~@40 d5@20 ~@15 d5@29 d5@5 ~@35 d5 ~@35 g5@4 ~ [e5,g5]@39, ~@23 [e5,g5]@12 g5@30 g5@40 ~@55 g5@10 g5@10 ~@4 d5@40, ~@24 [d5,f#5]@16 f#5@35 f#5@40 ~@50 f#5@10 f#5@40 ~@9, ~@35 e5@25 d5@15 ~@34 [a4,d5]@36 [a4,d5]@40 ~@39, ~@31 e5@4 e5@20 ~@2 b4@18 b4@20 ~@17]/7", // Em D D5
  F: "f#6@4 f#6@4 f#6@4 e6@19 ~", G: "f#6@7 ~ f#6@4 e6@4 d6@2 c6@2 b5@2 c6@2 d6@8", H: "b5@23 ~ b5@7 ~",
  I: "b5@15 ~@17",
  J: "[b6@4 a6@4 g6@7 ~ g6@4 f#6@4 f#6@4 d6@8 d6@4 d6@4 d6@4 d6@29 ~@3 d6@11 ~ d6@19 ~@13 d6@8 b5@7 ~ d6@15 ~ b5@11 ~ b5@57 ~@31]/8",
  K: "[~@40 d5@20 ~@15 d5@29 d5@5 ~@35 d5 ~@5 b4@40 ~@2, ~@23 [e5,g5]@12 g5@30 g5@40 ~@87, ~@24 [d5,f#5]@16 f#5@35 f#5@40 ~@77, ~@35 e5@25 d5@15 ~@34 [a4,d5]@36 [a4,d5]@40 ~@7, ~@31 e5@4 e5@20 ~@2 b4@18 ~@21]/6", // Em D D5
  L: "[b6@4 a6@4 g6@7 ~ g6@4 f#6@4 f#6@4 d6@8 d6@4 d6@4 d6@4 d6@29 ~@3 d6@11 ~ d6@19 ~@13 d6@8 b5@7 ~ d6@15 ~ b5@11 ~@25 d6@29 ~@3 d6@11 ~ d6@19 ~, ~@168 b5@57 ~@31]/8",
  M: "~@12 d6@19 ~", N: "[d6@61 ~@3]/2",
  O: "[~@3 [d4,g4,b4,d5]@8 [e4,g4,c5,d5]@8 [a#3,f4,g4,d5]@8 [g3,e4,g4,d5,g5]@8 [d4,f#4,d5]@14 ~@15, ~@35 a4@27 ~@2]/2", // G C Gm7 Em7 D
  P: "~@3 [d4,f#4,d5]@14 ~@15, ~@3 a4@26 ~@3", // D
  Q: "[~@3 [d4,g4,b4,d5]@8 [e4,g4,c5,d5]@8 [a#3,f4,g4,d5]@8 [g3,e4,g4,d5,g5]@8 ~@29]/2", // G C Gm7 Em7
})).s("gm_electric_guitar_clean").gain(0.16).pan(0.1)

// chords · electric guitar clean · "Electric Guitar I" · soft notes
const electric_guitar_clean_2 = note("<~@120 A@2 B@2 A>".pickRestart({
  A: "~@3 [d4,f#4,d5]@14 ~@15, ~@3 a4@27 ~@2", // D
  B: "[~@3 [d4,g4,b4,d5]@8 [e4,g4,c5,d5]@8 [a#3,f4,g4,d5]@8 [g3,e4,g4,d5,g5]@8 [d4,f#4,d5]@14 ~@15, ~@35 a4@27 ~@2]/2", // G C Gm7 Em7 D
})).s("gm_electric_guitar_clean").gain(0.06).pan(0.1)

// chords · electric guitar clean · "Electric Guitar II"
const electric_guitar_clean_3 = note(`<
  ~@9 A@3 B@7 C@2 D@2 E@7 ~ A@3 B@7 ~ F G H I J@8 ~@3 A@3 B@7 C@2 D@2 K@6 ~ A@3 B@7 ~ F G H I L@8 M@2 N@2 ~@11 O@2 P Q@2
  ~@4
>`.pickRestart({
  A: "[~@67 d5@29, ~@7 g5@10 g5@10 g5@5 g5@40 ~@24, ~@6 f#5@5 f#5@20 ~@17, ~@30 d5@17 d5@10 d5@10 ~@29, ~@16 e5@10 e5@5 e5@17]/3",
  B: "[~@111 d5@5 ~@70 e5@38, ~@12 [a4,d5]@39 g5@10 g5@10 g5@5 g5@40 ~@15 g5@5 f#5@5 g5@10 g5@5 g5@40 ~@28, ~@41 b4@35 e5@20 e5@10 e5@40 f#5@40 ~@38, ~@56 f#5@10 f#5@40 ~@15 b4@35 e5@20 e5@10 ~@38, ~@74 d5@17 d5@10 d5@10 ~@5 [a4,d5]@38 d5@17 d5@10 d5@40 ~@3]/7", // D5
  C: "[~@7 d5@5 ~@5 b4@40 ~@7, ~@3 [a4,d5]@10 ~@3]/2", // D5
  D: "[~@25 [d5,f#5]@39, ~@10 d5@15 ~@39, ~@3 e5@2 e5@10 ~, ~@15 g5@40 ~@9]/2", // D
  E: "[~@40 d5@20 ~@15 d5@29 d5@5 ~@35 d5 ~@35 g5@4 ~ [e5,g5]@39, ~@23 [e5,g5]@12 g5@30 g5@40 ~@55 g5@10 g5@10 ~@4 d5@40, ~@24 [d5,f#5]@16 f#5@35 f#5@40 ~@50 f#5@10 f#5@40 ~@9, ~@35 e5@25 d5@15 ~@34 [a4,d5]@36 [a4,d5]@40 ~@39, ~@31 e5@4 e5@20 ~@2 b4@18 b4@20 ~@17]/7", // Em D D5
  F: "f#5@4 f#5@4 f#5@4 e5@19 ~", G: "f#5@7 ~ f#5@4 e5@4 d5@2 c5@2 b4@2 c5@2 d5@8", H: "b4@23 ~ b4@7 ~",
  I: "b4@15 ~@17",
  J: "[b5@4 a5@4 g5@7 ~ g5@4 f#5@4 f#5@4 d5@8 d5@4 d5@4 d5@4 d5@29 ~@3 d5@11 ~ d5@19 ~@13 d5@8 b4@7 ~ d5@15 ~ b4@11 ~ b4@57 ~@31]/8",
  K: "[~@40 d5@20 ~@15 d5@29 d5@5 ~@35 d5 ~@5 b4@40 ~@2, ~@23 [e5,g5]@12 g5@30 g5@40 ~@87, ~@24 [d5,f#5]@16 f#5@35 f#5@40 ~@77, ~@35 e5@25 d5@15 ~@34 [a4,d5]@36 [a4,d5]@40 ~@7, ~@31 e5@4 e5@20 ~@2 b4@18 ~@21]/6", // Em D D5
  L: "[b5@4 a5@4 g5@7 ~ g5@4 f#5@4 f#5@4 d5@8 d5@4 d5@4 d5@4 d5@29 ~@3 d5@11 ~ d5@19 ~@13 d5@8 b4@7 ~ d5@15 ~ b4@11 ~@25 d6@29 ~@3 d6@11 ~ d6@19 ~, ~@168 b4@57 ~@31]/8",
  M: "~@12 d6@19 ~", N: "[d6@61 ~@3]/2",
  O: "[~@2 [d4,g4,b4,d5]@4 [e4,g4,c5,d5]@4 [a#3,f4,g4,d5]@4 [g3,e4,g4,d5,g5]@4 [d4,f#4,d5]@7 ~@7, ~@36 a4@27 ~]/2", // G C Gm7 Em7 D
  P: "~@2 [d4,f#4,d5]@7 ~@7, ~@2 a4@13 ~", // D
  Q: "[~ [d4,g4,b4,d5]@2 [e4,g4,c5,d5]@2 [a#3,f4,g4,d5]@2 [g3,e4,g4,d5,g5]@2 ~@7]/2", // G C Gm7 Em7
})).s("gm_electric_guitar_clean").gain(0.16).pan(0.9)

// chords · electric guitar clean · "Electric Guitar II" · soft notes
const electric_guitar_clean_4 = note("<~@120 A@2 B@2 A>".pickRestart({
  A: "~@2 [d4,f#4,d5]@7 ~@7, ~@4 a4@27 ~", // D
  B: "[~@2 [d4,g4,b4,d5]@4 [e4,g4,c5,d5]@4 [a#3,f4,g4,d5]@4 [g3,e4,g4,d5,g5]@4 [d4,f#4,d5]@7 ~@7, ~@36 a4@27 ~]/2", // G C Gm7 Em7 D
})).s("gm_electric_guitar_clean").gain(0.06).pan(0.9)

// bass · fretless bass · "Bass Guitar"
const bass = note(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D E@2 F@2 E@2 F@2 G@2 A B A B A B A
  B A B A B A B A B A B A B A B A B@2 A B A B A B A B A B C D E@2 F@2 E@2 F@2 G@2 H@3 I J K@2 ~@4 L@2 M N O@2 N O@2 N
  O@2 N O@2
>`.pickRestart({
  A: "g1@7 ~ g1@3 ~ g1@8 f#2@7 ~ d2@3 ~", B: "g1@7 ~ g1@3 ~ g1@8 b1@7 ~ g1@4", C: "g2@7 ~ g2@3 ~ g2@8 f#3@7 ~ d3@3 ~",
  D: "g2@7 ~ g2@3 ~ g2@8 b2@7 ~ g2@4", E: "~ e2@7 ~ e2@7 ~ e2@7 ~ e2@7", F: "~ g1@15 ~ g1@15",
  G: "~ g1@7 ~ g1@7 ~ g1@7 ~ g1@7", H: "d2@7 ~ d2@7 ~ d2@7 ~ c2@4 c#2@4", I: "d2@7 ~ d2@7 ~ d2@7 ~ d2@7 ~",
  J: "g1@7 ~ g1@7 ~ g1@7 ~ g1@7 ~", K: "[g1@7 ~ g1@7 ~ g1@7 ~ g1@16 ~@24]/2",
  L: "[~@3 d2@8 e2@8 f2@8 g2@8 f#2@14 f#2@5 ~ f#2@5 ~@4]/2", M: "~@3 f#2@14 f#2@5 ~ f#2@5 ~@4",
  N: "~ d2@4 e2@4 f2@4 g2@3", O: "~@2 f#2@14 ~ f#2@5 ~ f#2@5 ~@4",
})).s("gm_fretless_bass").gain(0.45).pan(0.6)

stack(
  acoustic_guitar_steel, acoustic_guitar_nylon, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_clean_3,
  electric_guitar_clean_4, bass
)

More by Led Zeppelin