Strudelify

Custard Pie

Led Zeppelin

KeyA majorTempo92 bpm
0:00/0:00
// Custard Pie — Led Zeppelin
// 92 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 15/16 at bar 47, 4/4 at bar 47) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(92/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · harmonica
const harmonica = note("<~@62 A@3 B@8 C>".pickRestart({
  A: "[~@15 e5@16 e5@2 d5@13 e5 d5]/3",
  B: "[e5@8 ~@6 a4 e5@12 ~@4 [a4,c#5]@2 [a4,c#5] [a4,c#5]@2 [a4,c#5] [a4,c#5]@2 ~ [a4,c#5] [a4,c#5]@2 [a4,c#5]@2 ~@2 [a4,c#5]@2 [a4,c#5] [a4,c#5]@2 [a4,c#5] [a4,c#5]@2 ~ [a4,c#5] [a4,c#5]@2 [a4,c#5]@2 ~@2 [a4,c#5]@2 [a4,c#5] [a4,c#5]@2 [a4,c#5] [a4,c#5]@2 ~ [a4,c#5] [a4,c#5]@2 [a4,c#5]@2 ~ a4 e5@12 ~@4 [a4,c#5]@2 [a4,c#5] [a4,c#5]@2 [a4,c#5] [a4,c#5]@2 ~ [a4,c#5] [a4,c#5]@2 [a4,c#5]@2 ~@2 [a4,c#5]@2 [a4,c#5] [a4,c#5]@2 [a4,c#5] [a4,c#5]@2 ~ [a4,c#5] [a4,c#5]@2 [a4,c#5]@2 ~@2 [a4,c#5]]/8", // A
  C: "~ [a4,c#5] [a4,c#5]@2 [a4,c#5] [a4,c#5]@2 ~ [a4,c#5] [a4,c#5]@2 [a4,c#5]@2 ~ a4 ~", // A
})).s("gm_harmonica").gain(0.64)

// chords · distortion guitar · "g1"
const distortion_guitar = note("<~@38 A@2 B C@2 D E F G H@2 I@4 ~@14 J@4 K@2 L>".pickRestart({
  A: "[e4,g4]@3 [e4,g4]@3 [e4,g4]@10", B: "[e4,g4]@3 [e4,g4]@3 [e4,g4]@4 [e4,g4] [c4,d4,e4,f#4] [d4,f#4] [c4,e4] a3 c4",
  C: "[e4,g4]@3 [e4,g4]@3 [d4,f#4] [e4,g4] [d4,f#4] [e4,g4] [e4,f#4,g4] [c4,d4,e4] [d4,f#4] [c4,e4] a3 c4", // Em D Em D Em C D C
  D: "d4 e4 a4 e4@2 d4 [c4,d4] a3 c4 d4 c4 a3 c#4@2 a3 c#4", E: "f#4!4 e4 d4 b3 d4 c4 a3 f3 d3 f#3 d3 f3 ~",
  F: "~ g3 f#3 f3@5 g3 f#3 f3@5 e3", G: "g3 g#3 a3 c4 ~ d4 b3 c4 d4 c4 ~ c4 c#4 a3 e3 f#4",
  H: "[a4 b4 a4@3 f#4 a4 c#5@2 c#5@2 c#5 [a4,b4] b4 f#4 c5@2 ~ c5@2 ~ c5@2 c5@2 b4 a4 f#4 a4 e4@2 f3]/2", // Asus2
  I: "[a3 f4 a4@2 g4 f#4 a4@2 c5 e5@2 c5 d5 c5@2 g5@2 e5 d5 c5 d5 c5@2 g5 e5@2 d5 c5@2 ~@2 g5@2 e5 d5 c5 d5 c5@2 g5@2 e5 d5 c5 d5 c5@2 g4@4 ~@13]/4",
  J: "[~@15 [e4,g4]@3 [e4,g4]@3 [e4,g4]@4 [e4,g4] [c4,d4,e4,f#4] [d4,f#4] [c4,e4] a3 c4 [e4,g4]@3 [e4,g4]@3 [d4,f#4] [e4,g4] [d4,f#4] [e4,g4] [e4,f#4,g4] [c4,d4,e4] [d4,f#4] [c4,e4] a3 c4 [e4,g4]@3 [e4,g4]@3 [d4,f#4] [e4,g4] [d4,f#4] [e4,g4] [e4,f#4,g4] [c4,d4,e4] [d4,f#4] [c4,e4] a3 c4 d4]/4", // Em D7 D C Em D Em D …
  K: "[e4 a4 e4@2 d4 [c4,d4] a3 c4 d4 c4 a3 c#4@2 a3 c#4 [e4,g4]@3 [e4,g4]@3 [d4,f#4] [e4,g4] [d4,f#4] [e4,g4] [e4,f#4,g4] [c4,d4,e4] [d4,f#4] [c4,e4] a3 c4 d4]/2", // Csus2 Em D Em D Em C D …
  L: "e4 a4 e4@2 d4 [c4,d4] a3 c4 d4 c4 a3 c#4@2 a3 c#4 ~", // Csus2
})).s("gm_distortion_guitar").gain(0.36)

// chords · overdriven guitar · "g2"
const overdriven_guitar = note(`<
  ~@2 A B A@4 C D A@2 E@2 A@6 C D A@2 E@2 A@6 C D A@2 E@2 A@6 C F@8 G@4 H@8 I@8 J
>`.pickRestart({
  A: "[a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~", // A7 A5 Em A5
  B: "[a3,c#4,g4]@3 [a3,c#4,g4]@2 [a3,c#4,g4]@3 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~", C: "[d3,a3,d4]",
  D: "~ [d3,a3,d4] [c#3,a3,c#4] [c3,g3,c4]@6 [c3,g3,c4] [b2,f#3,b3] [a#2,f3,a#3]@5", // D5 F#m C5 B5 A#5
  E: "[[e3,b3]@7 [g3,d4]@5 ~ [f3,c4] ~ [g3,d4]]/2", // E5 G5 F5 G5
  F: "[~ [d3,a3,d4] [c#3,a3,c#4] [c3,g3,c4]@6 [c3,g3,c4] [b2,f#3,b3] [a#2,f3,a#3]@4 [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [e3,b3]@14 [g3,d4]@10 ~@2 [f3,c4]@2 ~@2 [g3,d4]@2 [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]]/8", // D5 F#m C5 B5 A#5 A7 A5 Em …
  G: "[~@2 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [d3,a3,d4]@16 ~]/4", // A7 A5 Em A5 A7 A5 Em A5 …
  H: "[[d3,a3,d4] [c#3,a3,c#4] [c3,g3,c4]@6 [c3,g3,c4] [b2,f#3,b3] [a#2,f3,a#3]@5 [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [e3,b3]@14 [g3,d4]@10 ~@2 [f3,c4]@2 ~@2 [g3,d4]@2 [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]]/8", // D5 F#m C5 B5 A#5 A7 A5 Em …
  I: "[~@2 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]@3 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~ [a3,c#4,g4]]/8", // A7 A5 Em A5 A7 A5 Em A5 …
  J: "~@2 [a3,c#4,g4]@3 [a3,c#4,g4]@2 ~@2 [e3,a3]@2 [e3,g3] [e3,a3]@2 ~@2", // A7 A5 Em A5
})).s("gm_overdriven_guitar").gain(0.19).pan(0.9)

// chords · overdriven guitar · "g3"
const overdriven_guitar_2 = note(`<
  A@8 B C A@2 D@2 A@6 B C A@2 D@2 A@6 B C A@2 D@2 A@6 B E F G@3 F@5 H@2 I F G@3 F@11 J
>`.pickRestart({
  A: "[a2,e3]!3 [a2,f#3]!3 [a2,g3]@2 ~@2 [a2,e3,a3]@2 [g2,d3,g3] [a2,e3,a3]@2 ~", B: "[d3,a3,d4]",
  C: "~ [d3,a3,d4] [c#3,a3,c#4] [c3,g3,c4]@6 [c3,g3,c4] [b2,f#3,b3] [a#2,f3,a#3]@5", // D5 F#m C5 B5 A#5
  D: "[[e3,b3]@7 [g3,d4,f4]@5 ~ [f3,c4] ~ [g3,d4]]/2", // E5 G7 F5 G5
  E: "~ [d3,a3,d4] [c#3,a3,c#4] [c3,g3,c4]@6 [c3,g3,c4] [b2,f#3,b3] [a#2,f3,a#3]@4 [a2,e3]", // D5 F#m C5 B5 A#5 A5
  F: "[a2,e3]!2 [a2,f#3]!3 [a2,g3]@2 ~@2 [a2,e3,a3]@2 [g2,d3,g3] [a2,e3,a3]@2 ~ [a2,e3]", // A5 D A7 A5 G5 A5
  G: "[[a2,e3]!2 [a2,f#3]!3 [a2,g3]@2 ~@2 [a2,e3,a3]@2 [g2,d3,g3] [a2,e3,a3]@2 ~ [e3,b3]@14 [g3,d4,f4]@10 ~@2 [f3,c4]@2 ~@2 [g3,d4]@2 [a2,e3]]/3", // A5 D A7 A5 G5 A5 E5 G7 …
  H: "[[a2,e3]!2 [a2,f#3]!3 [a2,g3]@2 ~@2 [a2,e3,a3]@2 [g2,d3,g3] [a2,e3,a3]@2 ~ [d3,a3,d4]@16 ~]/2", // A5 D A7 A5 G5 A5 D5
  I: "[d3,a3,d4] [c#3,a3,c#4] [c3,g3,c4]@6 [c3,g3,c4] [b2,f#3,b3] [a#2,f3,a#3]@5 [a2,e3]", // D5 F#m C5 B5 A#5 A5
  J: "[a2,e3]!2 [a2,f#3]!3 [a2,g3]@2 ~@2 [a2,e3,a3]@2 [g2,d3,g3] [a2,e3,a3]@2 ~@2", // A5 D A7 A5 G5 A5
})).s("gm_overdriven_guitar").gain(0.19).pan(1)

// bass · clavinet
const bass = note(`<
  ~ A B C B C B C D E B C F@2 B C B C B C D E B C F@2 B C B C B C D E B C F@2 B C B C B C D G@7 H@5 I@7 J@8 K@2
>`.pickRestart({
  A: "~@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~", B: "a1@3 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~",
  C: "a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~", D: "d2", E: "~ d2 c#2 c2@6 c2 b1 a#1@5", F: "[e1@7 g1@5 ~ f1 ~ g1]/2",
  G: "[~ d2 c#2 c2@6 c2 b1 a#1@4 a1@3 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~ a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~ e1@14 g1@10 ~@2 f1@2 ~@2 g1@2 a1@3 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~ a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~ a1]/7",
  H: "[~@2 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~ a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~ a1@3 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~ a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~ d2@16 ~]/5",
  I: "[d2 c#2 c2@6 c2 b1 a#1@5 a1@3 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~ a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~ e1@14 g1@10 ~@2 f1@2 ~@2 g1@2 a1@3 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~ a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~ a1]/7",
  J: "[~@2 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~ a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~ a1@3 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~ a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~ a1@3 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~ a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~ a1@3 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~ a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~ a1]/8",
  K: "[~@2 a1@3 a1@2 ~@2 a1@2 g1 a1@2 ~ a1@6 c2 c#2 g2 c#2 g2@2 f#2 e2@2 ~@2]/2",
})).s("gm_clavinet").gain(0.57).pan(0)

// bass · electric bass finger · "bass"
const bass_2 = note(`<
  ~@4 A@3 B C D A E F@2 A@5 B C D A E F@2 A@5 B C D A E F@2 A@5 B C G@8 H@4 I@8 J@8 K
>`.pickRestart({
  A: "a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3", B: "a1@3 a1@3 a1@2 ~@2 a2@2 g2 a1 c2 c#2", C: "d2@3 d2 d2@12",
  D: "~ d2 c#2 c2@6 c2 b1 a#1@5", E: "a1@3 a1@3 a1@2 ~@2 a2@2 g2 a1 d2 d#2", F: "[e2@7 g2@5 ~ f1 ~ g1]/2",
  G: "[~ d2 c#2 c2@6 c2 b1 a#1@4 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a1 d2 d#2 e2@14 g2@10 ~@2 f1@2 ~@2 g1@2 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1]/8",
  H: "[~@2 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a1 c2 c#2 d2@3 d2 d2@12 ~]/4",
  I: "[d2 c#2 c2@6 c2 b1 a#1@5 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a1 d2 d#2 e2@14 g2@10 ~@2 f1@2 ~@2 g1@2 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1]/8",
  J: "[~@2 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1@3 a1@3 a1@2 ~@2 a2@2 g2 a2@3 a1]/8",
  K: "~@2 a1@3 a1@2 ~@2 a2@2 g2 a2@3 ~",
})).s("gm_electric_bass_finger").gain(0.36)

// other · pad sweep · "g1 wah-wah"
const pad_sweep = note("<~@38 A@2 B C@2 D E F G H@2 I@4 ~@21>".pickRestart({
  A: "[e4,g4]@3 [e4,g4]@3 [e4,g4]@10", B: "[e4,g4]@3 [e4,g4]@3 [e4,g4]@4 [e4,g4] [c4,d4,e4,f#4] [d4,f#4] [c4,e4] a3 c4",
  C: "[e4,g4]@3 [e4,g4]@3 [d4,f#4] [e4,g4] [d4,f#4] [e4,g4] [e4,f#4,g4] [c4,d4,e4] [d4,f#4] [c4,e4] a3 c4", // Em D Em D Em C D C
  D: "d4 e4 a4 e4@2 d4 [c4,d4] a3 c4 d4 c4 a3 c#4@2 a3 c#4", E: "f#4!4 e4 d4 b3 d4 c4 a3 f3 d3 f#3 d3 f3 ~",
  F: "~ g3 f#3 f3@5 g3 f#3 f3@5 e3", G: "g3 g#3 a3 c4 ~ d4 b3 c4 d4 c4 ~ c4 c#4 a3 e3 f#4",
  H: "[a4 b4 a4@3 f#4 a4 c#5@2 c#5@2 c#5 [a4,b4] b4 f#4 c5@2 ~ c5@2 ~ c5@2 c5@2 b4 a4 f#4 a4 e4@2 f3]/2", // Asus2
  I: "[a3 f4 a4@2 g4 f#4 a4@2 c5 e5@2 c5 d5 c5@2 g5@2 e5 d5 c5 d5 c5@2 g5 e5@2 d5 c5@2 ~@2 g5@2 e5 d5 c5 d5 c5@2 g5@2 e5 d5 c5 d5 c5@2 g4@4 ~@13]/4",
})).s("gm_pad_sweep").gain(0.64)

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

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

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

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

stack(
  harmonica, distortion_guitar, overdriven_guitar, overdriven_guitar_2, bass, bass_2, pad_sweep, kick, snare, hihat,
  crash
)

More by Led Zeppelin