Strudelify

In the Light

Led Zeppelin

KeyA majorTempo128 bpm
0:00/0:00
// In the Light — Led Zeppelin
// 128 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2, 2/4 at bar 108, 4/4 at bar 108) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 13 "Synth Echo 1" reed organ (copy of ch 8 "Synth" accordion); ch 14 "Synth Echo 2" synth strings 2 (copy of ch 8 "Synth" accordion)
// note: Full arrangement: all 271 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 · distortion guitar · "Guitar 1"
const distortion_guitar = note(`<
  ~@106 A@8 B C D C D C D C D C D C D C E@2 ~ F C D C D C D C D C D C G@8 H ~@8 I J K@2 I J K@2 I J K@2 I J L@2 ~@39 M@3
  N@12 O@8 P ~@7 Q@6 R@16 S@3
>`.pickRestart({
  A: "[~@6 a3 g#3@3 g3 e3@3 d#3 d3@3 c3 a2@3 a3 g#3@3 g3 e3@3 d#3 d3@3 c3 a2@3 a3 g#3@3 g3 e3@3 d#3 d3@3 c3 a2@3 a3 g#3@3 g3 e3@3 d#3 d3]/8",
  B: "~@2 c3 a2@3 a2@2", C: "a2@2 a3@4 g3 a3", D: "f#3 f3 d4 f3 e3 g3 a2@2",
  E: "[f#3 f3 d4 f3 e3 g3 a3 g#3@3 g3 e3@3 ~@2]/2", F: "~@3 a2",
  G: "[f#3 f3 d4 f3 e3 g3 a3 g#3@3 g3 e3@3 d#3 d3@3 c3 a2@3 a3 g#3@3 g3 e3@3 d#3 d3@3 c3 a2@3 a3 g#3@3 g3 e3@3 d#3 d3@3 c3 a2@3 a3 g#3@3 g3 e3@3 d#3 d3]/8",
  H: "~@2 c3 a2@3 ~@2", I: "a2@2 c#3 d3 e3@2 f#3 g#3", J: "a3@2 c#4 d4 e4@2 f#4 g#4", K: "[a4@3 ~]/2",
  L: "[a4@25 ~@7]/2", M: "[~@5 a3 g#3@3 g3 e3@3 a2@2 a2@2 a3@4 g3 a3 f#3]/3",
  N: "[f3 d4 f3 e3 g3 a2@2 a2@2 a3@4 g3 a3 f#3]/2",
  O: "[f3 d4 f3 e3 g3 a3 g#3@3 g3 e3@3 d#3 d3@3 c3 a2@3 a3 g#3@3 g3 e3@3 d#3 d3@3 c3 a2@3 a3 g#3@3 g3 e3@3 d#3 d3@3 c3 a2@3 a3 g#3@3 g3 e3@3 d#3 d3@2]/8",
  P: "~ c3 a2@3 ~@3",
  Q: "[~@7 a2@2 c#3 d3 e3@2 f#3 g#3 a3@2 c#4 d4 e4@2 f#4 g#4 a4@12 ~@4 a2@2 c#3 d3 e3@2 f#3 g#3 a3]/6",
  R: "[~ c#4 d4 e4@2 f#4 g#4 a4@12 ~@4 a2@2 c#3 d3 e3@2 f#3 g#3 a3@2 c#4 d4 e4@2 f#4 g#4 a4@12 ~@4 a2@2 c#3 d3 e3@2 f#3 g#3 a3]/8",
  S: "[~ c#4 d4 e4@2 f#4 g#4 a4@12 ~@5]/3",
})).s("gm_distortion_guitar").gain(0.35).pan(0.3)

// other · overdriven guitar · "Guitar 2"
const overdriven_guitar = note(`<
  ~@108 A ~ A ~ A ~ A ~@3 B@8 C@4 D E@8 F@7 ~ A ~ A ~ G@3 ~@61 H@3 I@8 J@7 ~ K ~ K ~ L@4 ~@12 M@8 N@2 ~@7
>`.pickRestart({
  A: "~@3 [d4,g4]@3 ~@2", B: "[~@5 g3@16 g3@16 g3@16 g3@11]/8", C: "[~@5 g3@17 a3 g#3@3 g3 e3@3 a2@2]/4",
  D: "a2@2 a3@4 g3 a3", E: "[f#3 f3 d4 f3 e3 g3@16 g3@16 g3@16 g3@11]/8",
  F: "[~@5 g3@16 g3@17 a3 g#3@3 g3 e3@3 d#3 d3@3 c3 [d4,g4]@3 ~@2]/7", G: "[~@3 a4@17 ~@4]/3",
  H: "[~@5 a3 g#3@3 g3 e3@3 a2@2 a2@2 a3@4 g3 a3 f#3]/3", I: "[f3 d4 f3 e3 g3@16 g3@16 g3@16 g3@12]/8",
  J: "[~@4 g3@16 g3@17 a3 g#3@3 g3 e3@3 d#3 d3@3 c3 [d4,g4]@3 ~@3]/7", K: "~@2 [d4,g4]@3 ~@3", L: "[~@2 a4@23 ~@7]/4",
  M: "[~@7 a5@2 ~@2 a5@2 ~@2 a5@2 ~@2 a5@2 b4@2 a4@4 a4@6 ~@6 a5@2 ~@2 a5@2 ~@2 a5@2 ~@2 a5@2 b4@2 a4@4 a4@5, ~@9 e5@4 e5@4 e5@4 ~@20 e5@4 e5@4 e5@4 ~@11]/8",
  N: "[~@7 a5@2 ~@7]/2",
})).s("gm_overdriven_guitar").gain(0.43).pan(0.7)

// other · overdriven guitar · "Guitar 2" · soft notes
const overdriven_guitar_soft = note("<~@263 A@8>".pickRestart({
  A: "[~@3 a5@2 ~@2 a5@2 ~@2 a5@2 b4@2 a4@4 a4@6 ~@6 a5@2 ~@2 a5@2 ~@2 a5@2 ~@2 a5@2 b4@2 a4@4 a4@6 ~@7, ~ e5@4 e5@4 e5@4 ~@20 e5@4 e5@4 e5@4 ~@19]/8",
})).s("gm_overdriven_guitar").gain(0.14).pan(0.7)

// chords · clavinet · "Clavinet 1"
const clavinet = note(`<
  ~@106 A@8 B ~@13 C@2 ~@13 A@8 D@3 E@4 F@2 G@3 H I@2 J@2 K@3 L M@4 ~@39 N@2 ~@21 O@8 P@2 Q@12 R@4 ~@7
>`.pickRestart({
  A: "[~@6 [a2,a3,a4] [g#3,g#4]@3 [g3,g4] [e3,e4]@3 [d#3,d#4] [d3,d4]@3 [c3,c4] [a2,a3]@3 [a2,a3,a4] [g#3,g#4]@3 [g3,g4] [e3,e4]@3 [d#3,d#4] [d3,d4]@3 [c3,c4] [a2,a3]@3 [a2,a3,a4] [g#3,g#4]@3 [g3,g4] [e3,e4]@3 [d#3,d#4] [d3,d4]@3 [c3,c4] [a2,a3]@3 [a2,a3,a4] [g#3,g#4]@3 [g3,g4] [e3,e4]@3 [d#3,d#4] [d3,d4]]/8", // A G# G E D# D C A …
  B: "~@2 [c3,c4] [a2,a3]@3 ~@2", C: "[~@6 [a2,a3,a4] [g#3,g#4]@3 [g3,g4] [e3,e4]@3 ~@2]/2",
  D: "[~@2 [c3,c4] [a2,a3]@3 [a1,a3,c#4]@4 [g#3,c#4,e4]@4 [f#3,c#4,e4]@4 b3 c#4@3 [d3,g3]@2, ~@9 [e3,a3]@2 ~]/3", // C A C#m F#7 G5 A5
  E: "[[d3,g3]@4 [d3,f#3]@3 ~ [d3,f#3]@2 g3 f#3 e3 d3 ~@2 [a3,c#4]@2 c#4 e4@3 [c#4,e4]@3 [c#4,e4] [a3,b3,e4] ~@2 e2 [d2,d3,g3]@2, ~@7 d2@7 ~@12 e2@3 ~@3, ~@10 d3@3 ~ a2@4 [g#2,g#3]@4 f#2@4 ~ [a3,c#4,e4]@3 ~@2]/4", // G5 D A C#m Asus2 G5 G# A
  F: "[d3@3 d3 [d2,d3,g3]@2 [d3,g3]@3 [g3,a3]@2 f#3 e3 d3 a2@2, [d2,g3]@2 ~ d2@4 ~, ~@9 d3@4 ~@3]/2", // G5 Gsus2 G5
  G: "[[a2,a3,c#4]@3 [g#2,g#3,e4]@3 [f#2,a3,c#4]@3 [e2,c#4,e4]@2 e2 f#2 e2 [d3,g3]@2 ~@2 d2@3 a2 [a2,d3,f#3] [a2,d3,g3], ~@9 a3@5 d2@4 ~@6, ~@11 [c#4,e4]@3 ~@2 [d3,g3]@6 ~@2]/3", // A C#m F#m C#m G5 D Dsus4 C#m …
  H: "[a2,d3,f#3] [a2,d3,g3] g3 f#3@2 d3 a2@2, ~ a2@2 ~, ~@2 d3@3 ~@3", // D Dsus4
  I: "[[a2,c#4,e4]@3 [g#2,b3,d4]@3 [f#2,a3,c#4,e4]@3 [e2,c#4,e4] [b3,d4] c#4@2 [e2,b3] [d2,d3,g3]@2, ~@9 a3@5 ~@2, ~@10 e2@3 ~@3]/2", // A G#dim F#m7 C#m Bm E5 G5
  J: "[[d2,f#3,d4]@2 ~@4 [g3,e4]@3 [g#3,f4] ~@3 e3 a2@2, ~@2 d3@3 d3@8 ~@3, ~@3 [f#3,d4]@3 ~@4 [a3,f#4]@4 ~@2]/2", // D C C# D
  K: "[[a2,c#4,e4]@6 [g#2,b3,d4]@6 [f#2,f#3]@6 [e2,d3]@2 e3@2 f#3@2 a3@2 [e2,f#3]@2 [d3,g3]@4 ~@4 a2@4 a2@3 f#3 [d3,g3,a3]@2 [d3,f#3]@2, ~@10 e2@3 ~ d2@4 ~@6, ~@32 [d3,f#3]@11 ~@5]/3", // A G#dim F# E7 Esus2 G5 Dsus4 D
  L: "[d3,g3,a3] [d3,f#3] [g3,a3] ~ d3 a2 a2@2, ~ d3 ~@2, ~@3 f#3@3 ~@2", // Dsus4 D Gsus2
  M: "[[a2,c#4,e4]@3 [g#2,b3,d4]@3 [a3,c#4]@3 e4 [c#4,e4]@3 a3 g3@2 ~@4 e3@2 f#3@2 a3@2 d4@2 ~@4, ~@12 f#2@8 e2@8 d2@33 ~@3, ~@28 d3@8 d3@25 ~@3, ~@4 f#3 ~@3]/4", // A G#dim A C#m
  N: "[~@5 [a2,a3,a4] [g#3,g#4]@3 [g3,g4] [e3,e4]@3 ~@3]/2", // A G# G E
  O: "[~@5 [a3,c#4]@4 [g#3,e4]@4 [f#3,c#4,e4]@4 b3 c#4@3 [d3,g3,d4]@2 [d3,g3,d4]@4 f#3@3 g3 a3 g3 a3 f#3 a3@2 [a2,a3,c#4]@4 b3 c#4@3 [f#2,a3,c#4]@4 b3 c#4@3 [d2,d3,g3]@2 [d2,d3,g3]@4 [d2,d3]@3 d3 [d2,d3,f#3], ~@17 [e3,a3]@4 ~@6 [d3,d4]@10 e4@8 e4@8 ~@6 f#3@4 ~, ~@41 [g#2,g#3]@4 ~@4 [e2,g#3]@4 ~@11]/8", // A C#m F#7 G5 A F#m G5 D …
  P: "[d3 [d2,d3,f#3]@3 d3 a2@2 [a2,c#4,e4]@3 [g#2,b3,d4]@3 [f#2,a3,c#4]@3]/2", // D A G#dim F#m
  Q: "[[c#4,e4]@2 ~@2 a2 [d2,d3,g3]@2 [d3,f#3]@4 ~@2 d2 [d2,d3,f#3]@3 [d2,d3,f#3,b3]@2 [d2,d3,f#3,b3]@2 a2@2 [a2,c#4,e4]@3 [g#2,b3,d4]@3 [f#2,a3,c#4]@3, a3@5 ~@6 [d3,f#3]@3 ~@18, e2@4 ~@3 d2@6 ~@19, ~@2 [c#4,e4]@3 ~@27]/4", // C#m G5 D Bm A G#dim F#m D …
  R: "[[c#4,e4]@2 ~@2 a2 [d2,d3,g3]@2 [d3,f#3]@4 ~@2 d2 [d2,d3,f#3]@3 [d2,d3,f#3,b3]@2 [d2,d3,f#3,b3]@2 a2@2 [a2,c#4,e4]@3 [g#2,b3,d4]@3 ~@3, a3@5 ~@6 [d3,f#3]@3 ~@18, e2@4 ~@3 d2@6 ~@19, ~@2 [c#4,e4]@3 ~@27]/4", // C#m G5 D Bm A G#dim D C#m
})).s("gm_clavinet").gain(0.28).pan(0.4)

// chords · clavinet · "Clavinet 1" · soft notes
const clavinet_soft = note("<~@263 A B@4 C@3>".pickRestart({
  A: "~@5 [f#2,a3,c#4]@3", // F#m
  B: "[[c#4,e4]@2 ~@2 a2 [d2,d3,g3]@2 [d3,f#3]@4 ~@2 d2 [d2,d3,f#3]@3 [d2,d3,f#3,b3]@2 [d2,d3,f#3,b3]@2 a2@2 [a2,c#4,e4]@3 [g#2,b3,d4]@3 [f#2,a3,c#4]@3, a3@5 ~@6 [d3,f#3]@3 ~@18, e2@4 ~@3 d2@6 ~@19, ~@2 [c#4,e4]@3 ~@27]/4", // C#m G5 D Bm A G#dim F#m D …
  C: "[[c#4,e4]@2 ~@2 a2 [d2,d3,g3]@2 [d3,f#3]@4 ~@2 d2 [d2,d3,f#3]@3 [d2,d3,f#3,b3]@2 [d2,d3,f#3,b3]@2 ~@3, a3@5 ~@6 [d3,f#3]@3 ~@10, e2@4 ~@3 d2@6 ~@11, ~@2 [c#4,e4]@3 ~@19]/3", // C#m G5 D Bm D C#m
})).s("gm_clavinet").gain(0.12).pan(0.4)

// bass · harpsichord · "Clavinet 2"
const bass = note(`<
  ~@72 A@2 ~ B@4 C@3 ~ D@4 E@7 ~ F G@3 H I J@2 K L@2 M ~@93 N O@2 ~ P Q@2 ~ N O@2 ~ P R@2 S ~@55
>`.pickRestart({
  A: "[e1@3 a1@2 b1@2 c2@2 d2@2 e2@2 f2@2 g2@2 a2@15]/2",
  B: "[~@7 e1@2 a1@2 b1@2 c2@2 d2@2 e2@2 f2@2 g2@2 g#2@2 a2@24 ~@15]/4",
  C: "[~@15 e1@2 a1@2 b1@2 c2@2 d2@2 e2@2 f2@2 g2@2 g#2@2 a2@15]/3",
  D: "[~@7 e1@2 a1@2 g1@2 a1@2 b1@2 c2@2 d2@2 e2@2 f2@2 g2@2 a2@22 ~@15]/4",
  E: "[~@15 e1@2 a1@2 g1@2 a1@2 b1@2 c2@2 d2@2 e2@2 f2@2 g2@2 a2@30 ~@4 e1@2 a1@2 b1@2 c2@2 d2@2 e2@2 f2@2 g2@2 g#2@2 a2@18 ~@7]/7",
  F: "~@5 e1 a1 g1", G: "[a1 b1 c2 d2 e2 f2 g2 a2@11 ~@6]/3", H: "~@7 e1", I: "a1 b1 c2 d2 e2 f2 g2 g#2",
  J: "[a2@5 ~@3]/2", K: "~@3 e1 a1 g1 a1 b1", L: "[c2 d2 e2 d2 e2 g2 a2@4 ~@5 a1]/2", M: "b1 c2 d2 e2 f2 g#2 ~@2",
  N: "~@4 e1 a1 b1 c2", O: "[d2 e2 f2 g2 g#2 a2@8 ~@3]/2", P: "~@2 e1 a1 g1 a1 b1 c2", Q: "[d2 e2 f2 g2 a2@9 ~@3]/2",
  R: "[d2 e2 f2 g2 a2@8 e1 a1 g#1 a1]/2", S: "b1 c2 d2 e2 g2 ~@3",
})).s("gm_harpsichord").gain(0.42).pan(0.7)

// other · accordion · "Synth"
const accordion = note(`<
  ~@5 A@8 B@6 C@2 D E F G@2 ~ H@2 I J@2 ~ K@5 L M@3 N O P Q R D S@2 T U V@2 W X@4 Y Z@2 AA AB ~ AC@6 ~@107 AD AE@5 AF@3
  AG@3 AH@6 ~ AI@3 AJ ~@70
>`.pickRestart({
  A: "[~@2 a4@11 ~@3]/4", B: "[~@32 c#5@4 d5@4 e5@28 g5@4 d5@12 e5 d5 ~ c#5 d5@2 e5@2 g4@4, ~ a4@5 ~@6]/6",
  C: "[a5@3 g5@3 ~@2]/2", D: "~ a4 c#5 d5", E: "e5 g5 a5@2", F: "g5@4 g5 e5 a4 e5", G: "[b5 c#6@11 a5@8 g5@12]/2",
  H: "[~@3 e5@5]/2", I: "d5@6 e5 d5", J: "[c#5 e5 c#5@2 g5@12]/2",
  K: "[~@2 g5@4 a5@4 c#6 d6 c#6 a5 b5 g5@2 f#5@2 e5@7 f#5 g5 a5@8 ~@4]/5", L: "~ f5@2 c#6", M: "[e6 c#5 e5 a5@7 ~@2]/3",
  N: "~@4 a4@4 c#5@3 d5@2 e5@2 ~", O: "f#5 d#5", P: "d#5@4 c#6 d6 c#6 a5", Q: "b5@3 g5@2 a5@3 b5@3 g5@2 a5@3",
  R: "e5@4 d5@4 e5 d5 ~ c#5 ~@4", S: "[d5@4 b4@2 b4@4 g4@2 g4@10 f#4@2 e4@3 f#4@2 g4@3]/2", T: "a4",
  U: "~@8 e4@3 f#4@2 g4@3", V: "[a4@5 d5 c#5 a4]/2", W: "e5", X: "[f#5 d#5@2 a5@5]/4", Y: "d6",
  Z: "[b5@3 g5@2 a5@3 b5@3 g5@2 a5@13 ~ g5@2 f#5@3]/2", AA: "e5@3 f#5@2 g5@3 a5@4 c#5@4", AB: "d5 b4 g4@2",
  AC: "[~@2 f#4 g4 a4@44]/6", AD: "~@3 e4", AE: "[f#4@4 g4@3 a4@33 e4@4 f#4@3 g4@4 a4@29]/5",
  AF: "[c#5@4 d5@4 e5@3 g5@4 a5@15 c#6@3 d6@4 c#6@4 a5@3 g5@4]/3",
  AG: "[e5@4 d5@3 e5@2 d5@2 c#5@2 d5@2 e5@3 a5@29 g5]/3",
  AH: "[~@3 a5@4 g5@3 e5@26 g5@4 e5@3 c#5@4 e5@7 g5@4 a5@33 ~@5]/6",
  AI: "[~ e4@3 f#4@4 g4@4 a4@18 b4@4 c#5@3 d5@4 e5@4 g5@3]/3", AJ: "~ a5@4 ~@3",
})).s("gm_accordion").gain(0.3).pan(0.6)

// chords · pad poly · "Drone Polysynth 1"
const pad_poly = note("<A@8 ~@167 B@8 ~@88>".pickRestart({
  A: "[a2,e3]/8", B: "[~@13 [a2,e3]@115]/8",
})).s("gm_pad_poly").gain(0.31).pan(0.7)

// chords · pad poly · "Drone Polysynth 2"
const pad_poly_2 = note("<~@2 A@8 ~@166 B@8 ~@87>".pickRestart({
  A: "[~ [a2,e3]@15]/8", B: "[~ [a2,e3]@31]/8",
})).s("gm_pad_poly").gain(0.05).pan(0.8)

// chords · synth strings 1 · "Drone Synth Strings"
const synth_strings_1 = note("<A@8 ~@167 B@8 ~@88>".pickRestart({
  A: "[a1,e2]/8", B: "[~@13 [a1,e2]@115]/8",
})).s("gm_synth_strings_1").gain(0.31).pan(0.7)

// other · sitar · "Drone Bagpipe"
const sitar = note(`<
  ~@2 A B@3 ~ C@2 D E@2 C@2 F@2 G@3 C@2 D C@4 H@4 A I ~ D ~@4 J@4 K ~@4 K C@2 L@4 ~@3 D M@2 C@2 ~@2 C@2 ~@4 M@2 N O ~@5
  P@2 Q@2 ~ R ~@2 S ~@7 T ~ U V ~@2 W@2 ~@72 X Y@8 ~ Z@4 AA@5 ~ AB@3 AC@3 ~@70
>`.pickRestart({
  A: "a3", B: "[~ e4@2 a4@2 ~]/3", C: "[~ a4@2 ~]/2", D: "a4", E: "[~ e4@2 ~]/2", F: "[~ e4@2 ~, a3 ~]/2",
  G: "[~ a4@2 e5@2 ~]/3", H: "[~ e4@2 [a3,e4]@2 a4@2 ~]/4", I: "e5", J: "[~ e5@2 e4@2 a4@2 ~]/4", K: "e4",
  L: "[~ e4@2 e4@2 a4@2 ~]/4", M: "[~ a4@2 ~, e4 ~]/2", N: "a3@9 ~@7", O: "~@5 a4@8 ~@3", P: "[~@13 a4@8 ~@11]/2",
  Q: "[~@13 e4@8 ~@11]/2", R: "~ e5@8 ~@7", S: "~@9 a4@7", T: "a4 ~", U: "~ e4@2 ~", V: "~ a4@2 ~",
  W: "[~@3 a4@2 e4@2 ~]/2", X: "~@13 a3@3", Y: "[~@4 e4@15 e4@14 a4@15 ~@29 a4@15 ~@7 a4@15 ~@7 a4@7, ~ [a1,e2]@31]/8",
  Z: "[~@6 a4@15 ~@15 e4@15 ~@13, ~@28 a3@15 ~@21]/4",
  AA: "[~ a4@14 ~@15 e4@15 e4@14 a4@15 ~@6, ~@3 e4@3 ~@10, ~@23 a3@15 ~@42]/5", AB: "[~@7 a4@15 ~@7 a4@15 ~@4]/3",
  AC: "[~@3 a4@15 ~@11 a4@8 ~@11]/3",
})).s("gm_sitar").gain(0.28)

// bass · electric bass finger · "Bass"
const bass_2 = note(`<
  ~@106 A@8 B C D C D C D C D C D C D C E@2 C D C D C D C D C D C D C F@8 G ~@7 H I@2 J K L@2 M N O@2 P Q R@2 S T@8 ~@32
  U@3 V@12 W@8 X ~@7 Y@2 Z@2 AA@2 Z@2 AA@2 Z@2 AA@2 Z@2 AB@2 ~@7
>`.pickRestart({
  A: "[~@6 a2 g#2@3 g2 e2@3 d#2 d2@3 c2 a1@3 a2 g#2@3 g2 e2@3 d#2 d2@3 c2 a1@3 a2 g#2@3 g2 e2@3 d#2 d2@3 c2 a1@3 a2 g#2@3 g2 e2@3 d#2 d2]/8",
  B: "~@2 c2 a1@3 a1@2", C: "a1@2 a2@4 g2 a2", D: "f#2 f2 d3 f2 e2 g2 a1@2",
  E: "[f#2 f2 d3 f2 e2 g2 a2 g#2@3 g2 e2@3 a1@2]/2",
  F: "[f#2 f2 d3 f2 e2 g2 a2 g#2@3 g2 e2@3 d#2 d2@3 c2 a1@3 a2 g#2@3 g2 e2@3 d#2 d2@3 c2 a1@3 a2 g#2@3 g2 e2@3 d#2 d2@3 c2 a1@3 a2 g#2@3 g2 e2@3 d#2 d2]/8",
  G: "~@2 c2 a1@3 ~@2", H: "~@3 a1", I: "[a2@3 g#2@3 f#2@3 d2 e2@2 f#2 a2 d2@2]/2", J: "d2@3 a1 c2 c#2 d2@2",
  K: "d2@2 ~ e1 f#1 g#1 a1@2", L: "[a2@3 g#2@3 f#2@3 d2 e2@3 f#2 d2 c2]/2", M: "d2@4 d2@2 d2 g2",
  N: "f#2 d2 a2 d3!2 e3 a2@2", O: "[a2@3 g#2@3 f#2@3 d2 e2 f#2 a2 f#2 d2@2]/2", P: "d2@3 d3 d2@2 e3 d2",
  Q: "e3 f3 d3 d2 f#2 g#2 a2@2", R: "[a2@3 g#2@3 f#2@4 e2@3 f#2 d2@2]/2", S: "d2", T: "[~@13 a1@115]/8",
  U: "[~@5 a2 g#2@3 g2 e2@3 a1@2 a1@2 a2@4 g2 a2 f#2]/3", V: "[f2 d3 f2 e2 g2 a1@2 a1@2 a2@4 g2 a2 f#2]/2",
  W: "[f2 d3 f2 e2 g2 a2 g#2@3 g2 e2@3 d#2 d2@3 c2 a1@3 a2 g#2@3 g2 e2@3 d#2 d2@3 c2 a1@3 a2 g#2@3 g2 e2@3 d#2 d2@3 c2 a1@3 a2 g#2@3 g2 e2@3 d#2 d2@2]/8",
  X: "~ c2 a1@3 ~@3", Y: "[~@2 f#2 e2!2 a1@2 a2@3 g#2@3 f#2@3]/2", Z: "[d2 e2@2 f#2 a2 d2@2 d2@5 f#2@2 a2!2]/2",
  AA: "[b2 a2 f#2 e2 b1 a1@2 a2@3 g#2@3 f#2@3]/2", AB: "[b2 a2 f#2 e2 b1 a1@2 a2@3 g#2@3 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.35)

// bass · electric bass finger · "Bass" · soft notes
const bass_soft = note("<~@263 A B@2 C@2 B@2 D>".pickRestart({
  A: "~@5 f#2@3", B: "[d2 e2@2 f#2 a2 d2@2 d2@5 f#2@2 a2!2]/2", C: "[b2 a2 f#2 e2 b1 a1@2 a2@3 g#2@3 f#2@3]/2",
  D: "b2 a2 f#2 e2 b1 ~@3",
})).s("gm_electric_bass_finger").gain(0.15)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@263
  [~@5 x ~@2]
  [x ~@4 x ~ x]
  [~@5 x ~ x]!2
  [~@5 x ~@2]
  [x ~@4 x ~ x]
  [~@5 x ~ x]
  ~
>`).gain(0.15)

// drums · snare
const snare = s("sd").struct(`<
  ~@106 A@4 ~ B@17 C ~ B@10 D B@2 C B@5 E B@2 ~@5 F E ~ B G B H B@3 I J B K ~ B@2 ~@41 F L@18 B L B L@2 ~@5 M F ~ L@3 N
  L@3 N L@3 N L@3 N L ~@7
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~ x ~ x", D: "~@3 x!2 ~@11", E: "~@3 x ~@4", F: "~@5 x ~@2", G: "~ x",
// … 62 more lines

More by Led Zeppelin