Strudelify

Night Flight

Led Zeppelin

KeyA majorTempo100 bpm
0:00/0:00
// Night Flight — Led Zeppelin
// 100 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 45, 4/4 at bar 46) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · overdriven guitar · "Guitar 1 through Leslie speaker"
const overdriven_guitar = note("<~ A@6 B@2 C ~@7 D@8 E F@6 G H ~@25 I J I J ~@28>".pickRestart({
  A: "[~@8 [a3,d4,a4]@16 [a3,c#4,a4]@16 [a3,d4,a4]@16 [a3,c#4,a4]@16 ~@10 a4!2 a3@2 a3@2 a4@4 a3@4, ~@9 a4 ~@2, ~@19 a3@2 ~@3]/6", // D5 A D5 A
  B: "[a3 a4 a3 a4!2 d4 a3@3 a4 a3 a4!2 c#4 a3 c#4]/2", C: "a4 ~@7",
  D: "[~@4 [a3,c#4,a4]@8 [a3,d4,a4]@8 [a3,c#4,a4]@8 [a3,d4,a4]@8 a4@2 a3@3 a4 c#4 a3 a4 c#4 a3@3 a4@2 a3 a4@2 a3@3 [a3,a4]@2 [a3,a4] a4@2 a3@2]/8", // A D5 A D5 A
  E: "[a3,a4] ~@3 a4@2 a3@2", F: "e3 a3 e3 a3 a4@2 a3@2", G: "e3 a3 e3 a3 a4 c#4 a3 c#4", H: "[c#4,a4] ~@7",
  I: "[a3,c#4,a4]", J: "[a3,d4,a4]",
})).s("gm_overdriven_guitar").gain(0.41)

// chords · overdriven guitar · "Guitar 2 through Leslie"
const overdriven_guitar_2 = note("<~ A@5 B C D@2 ~@7 E@8 F@8 ~@26 G H G H@2 I H I H I J K ~@20>".pickRestart({
  A: "[~ [a2,f#3,a3,d4,e4]@2 [a2,e3,a3,c#4]@2 [a2,f#3,a3,d4,e4]@2 [a2,e3,a3,c#4]@2 [a2,e3,a3,d4]]/5", // D A D A Asus4
  B: "~ c#4 [a2,e3,a3,c#4]@2 ~ c#4 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@8, [a2,e3,a3,d4] ~ [a2,e3,a3,d4] ~@5", // A Asus4
  C: "~ c#4 [a2,e3,a3,c#4]@2 ~ c#4 [a2,e3,a3,c#4]@2 [a2,e3,a3,d4]@8, [a2,e3,a3,d4] ~ [a2,e3,a3,d4] ~@5", // A Asus4
  D: "[~ c#4 [a2,e3,a3,c#4]@2 ~ c#4 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@16 ~@8, [a2,e3,a3,d4] ~ [a2,e3,a3,d4] ~@13]/2", // A Asus4
  E: "[~@8 [a2,e3,a3,c#4]@16 [a2,f#3,a3,d4,e4]@16 [a2,e3,a3,c#4]@16 [a2,f#3,a3,d4,e4]@16 [a3,c#4]@2 a3@4 a3 c#4 d4 c#4 a3 c#4 d4 c#4 a3 c#4 [a3,c#4]@2 a3@4 a3 c#4 d4 c#4 a3 c#4 d4 c#4 a3 c#4 [a3,c#4]@2 a3@4 a3 c#4 d4 c#4 a3 c#4 d4 c#4 a3 c#4 [a2,e3,a3,d4]@4 [a2,e3,a3,d4]@3 [a2,e3,a3,d4], ~@9 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 ~]/8", // A D A D A Asus4 A5
  F: "[[a2,e3,a3,d4]@2 ~@6 [a2,f#3,a3,d4,e4]@16 [a3,c#4]@2 a3@4 a3 c#4 d4 c#4 a3 c#4 d4 c#4 a3 c#4 [a2,f#3,a3,d4,e4]@16 [a3,c#4]@2 a3@4 a3 c#4 d4 c#4 a3 c#4 d4 c#4 a3 c#4 [a2,f#3,a3,d4,e4]@16 [a3,c#4]@2 a3@4 a3 c#4 d4 c#4 a3 c#4 d4 c#4 a3 c#4 [a2,f#3,a3,d4,e4]@16 [a2,e3,a3,c#4]@8, ~@3 [a2,e3]@2 ~@2 [a2,e3]@2 ~@2 [a2,e3]@2 ~@3]/8", // Asus4 D A D A D A D …
  G: "[a2,e3,a3,c#4]", H: "[a2,f#3,a3,d4,e4]", I: "[a3,c#4]@2 a3@4 a3 c#4 d4 c#4 a3 c#4 d4 c#4 a3 c#4, [a2,e3]",
  J: "[a2,e3,a3,d4]", K: "[a2,e3,a3,c#4]!3 ~",
})).s("gm_overdriven_guitar").gain(0.41)

// chords · distortion guitar · "Guitar 2"
const distortion_guitar = note(`<
  ~@9 A@2 B C D E F G H ~@15 A@2 B C D E F G I G H J G@3 K H ~ L M G N L M G O ~@12 P Q O R S M G T G T G T G T G T G T
  G U
>`.pickRestart({
  A: "[~@10 [e3,a3]@4 [e3,a3]@4 [e3,a3]@2 b2 c#3 e3 f#3 e2@2 [e2,b2]@2 ~@2 [e2,b2]@2, ~@4 e2@3 [e2,b2]@3 ~@6]/2", // A5 E5
  B: "~ [e2,b2]!2 [f#2,c#3] [g2,d3]!2 [g2,e3]!2", C: "[g2,d3]!2 [g2,e3] [g2,d3] [d3,a3]!2 [d3,b3]!2",
  D: "[d3,a3]!2 [d3,b3] e2 [f2,c3]!2 [f2,d3]!2", E: "[f2,c3]!4 [c3,g3]!2 [c3,a3]!2",
  F: "[c3,g3]!2 e2 [f#2,c#3] [g2,d3]!2 [g2,e3]!2", G: "[g2,d3]!2 [g2,e3]!2 [g2,d3]!2 [g2,e3]!2", H: "[g2,d3] ~@7",
  I: "[g2,d3] ~@2 [f#2,c#3] [g2,d3]!2 [g2,e3]!2", J: "~@7 [f#2,c#3]",
  K: "[g2,d3]!2 [g2,e3]!2 [g2,d3]!2 [g2,e3] [f#2,c#3]", L: "[c3,g3]!2 [c3,a3]!2 [c3,g3]!2 [c3,a3]!2",
  M: "[c3,g3]!2 [c3,a3]!2 [c3,g3]!2 e2 [f#2,c#3]", N: "[g2,d3]!2 [g2,e3]!2 [g2,d3]!4",
  O: "[g2,d3]!2 [g2,e3]!2 [g2,d3]!2 [g2,e3] [g2,d3]", // G5 C G5 C G5
  P: "~@2 [e3,a3]@4 [e3,a3]@4 [e3,a3]@2 b2 c#3 e3 f#3, e2@3 [e2,b2]@3 ~@2", // A5 E5
  Q: "e2 [e2,b2] ~ [e2,b2] ~ [e2,b2]!2 [f#2,c#3]", R: "[d3,a3]!2 [d3,b3]!2 [d3,a3]!2 [d3,b3] e2",
  S: "[f2,c3]!2 [f2,d3]!2 [f2,c3]!4", T: "[g2,d3]!2 [g2,e3]!2 [g2,d3] ~@2 [f#2,c#3]",
  U: "[g2,d3]!2 [g2,e3]!2 [g2,d3] ~@3", // G5 C G5
})).s("gm_distortion_guitar").gain(0.41)

// other · rock organ · "Keyboard"
const rock_organ = note(`<
  ~@46
  [~@2 d4 e4 f#4@2 d4@2 f#4@2 d4@2 f#4@2 d4@2]
  ~@3
  [d4 e4 f#4@2 d4 e4 f#4@2 d4 e4 f#4@2 d4 e4 f#4@2]
  ~@40
>`).s("gm_rock_organ").gain(0.41)

// chords · drawbar organ · "Organ"
const drawbar_organ = note(`<
  ~ A@8 B@7 C D@8 E@8 F@8 G H ~@2 I@2 J K L ~ M@2 N O P Q@2 R S@4 T@8 U V W X Y Z AA@3 AB AC AD AE AF AG AF AG AD AH AI
>`.pickRestart({
  A: "[~ [a3,d4,f#4]@2 [a3,c#4,e4]@2 [a3,d4,f#4]@2 [a3,c#4,e4]@2 [a3,d4,f#4]@2 [a3,c#4,e4]@2 [a3,d4,f#4]@2 [a3,c#4,e4], ~ a4@15]/8", // D A D A D A D A
  B: "[~@2 [a3,e4]@4 [g#3,e4]@4 [g3,d4]@4 [f#3,d4]@3 ~ [f4,c5]@4 [g4,c5]@4 [b3,d4] [c4,e4]]/7", // A5 C#m G5 D F5 C5 Bm C
  C: "~@2 [d4,g4]@2 ~ a#3 b3@2 [d4,g4]@8", // G5
  D: "[~ [a3,c#4,e4]@2 [a3,d4,f#4]@2 [a3,c#4,e4]@2 [a3,d4,f#4]@2 [a3,c#4,e4]@2 [a3,d4,f#4]@2 [a3,c#4,e4]@2 [a3,d4,f#4], ~ a4@15]/8", // A D A D A D A D
  E: "[~@4 [a3,d4,f#4]@8 [a3,c#4,e4]@8 [a3,d4,f#4]@8 e4@4 f#4 e4@3 [a3,d4,f#4]@8 [a3,c#4,e4]@8 [a3,d4,f#4]@8 [a3,c#4,e4]@4, ~ a4@15, ~@7 [a3,c#4]@2 ~@7]/8", // D A D A D A
  F: "[~@4 [a3,e4]@8 ~ e4@4 ~@3 [d4,g4]@8 [d4,a4]@6 ~@2 [f4,a4,c5]@8 g4@8 [b3,d4]@2 [c4,e4]@2 [d4,f4]@2 [c4,e4]@2 [b3,d4]@2 [c4,e4]@2, ~@6 g#3@3 ~@13 c5@2 ~@2 g4@6]/8", // A5 G5 D5 F Bm C Dm C …
  G: "[b3,d4] ~@2 c#4 d4@2 e4@2", H: "g4", I: "[d4@2 e4@2 ~@2 [c4,e4] ~@5 [d4,f4] ~ [c4,e4] [a#3,e4], ~ g4@2 ~]/2",
  J: "[b3,d4]@2 [c4,e4] a#3 b3 g4@2 a#3", K: "b3 [b3,f4] [c4,e4] ~ b3@2 c4@2", L: "b3 ~@7",
  M: "[[g3,e4]@2 [a3,f4] [f#3,d#4] [g3,e4] [g4,c5] ~ [e4,g4,c5]@8 ~]/2", N: "~@5 [c4,f4] ~ [c4,e4], [d4,g4]@3 ~",
  O: "b3@2 ~@3 [a#3,e4]@2 ~@2 a#3 b3@2 [b3,d4]@2 [b3,d#4]@2, a#3 ~@8 d4@3 ~@4", // A#dim Bm B
  P: "[c4,e4] [e4,g4] [e4,a4] g4!2 a4@2 g4", Q: "[e4@3 ~@2 e4 d4@2 [b3,d4]@2 ~@2 [c4,e4] a#3@2 f#3, ~@3 g4@8 ~@5]/2",
  R: "g3 e3 d3 ~", S: "[[a3,c#4,e4]@4 [a3,d4,f#4]@4 [a3,c#4,e4]@4 [a3,d4,f#4]@3 ~, a4@15 ~]/4",
  T: "[[a3,d4,f#4]@8 [a3,c#4,e4]@8 [a3,d4,f#4]@8 ~@4 f#4 e4@3 [a3,d4,f#4]@8 [a3,c#4,e4]@8 [a3,d4,f#4]@8 [a3,c#4,e4]@8, a4@31 ~, ~@3 [a3,c#4] ~@4, ~@24 e4@5 ~@35]/8", // D A D A D A
  U: "[a3,e4]", V: "[g#3,e4]", W: "[g3,d4,g4]", X: "[d4,a4]", Y: "[f4,a4,c5]", Z: "~@7 e4, [c4,g4]",
  AA: "[[b3,d4]@4 [c4,e4]@4 [d4,f4]@4 [c4,e4]@2 [a#3,c#4]@2 [b3,d4]@4 [c4,e4]@4 [b3,d4]@4 ~@2 c#4@2 d4@4 [c4,e4]@4 [d4,f4]@4 [c4,e4]@3 a#3, g4@4 ~ g4@2 ~]/3", // Bm C Dm C A#m Bm C Bm …
  AB: "b3@2 d4 e4 [b3,d4] ~@2 a#3", AC: "b3@4 c4@3 a3 b3@2 [d4,g4]@4 a#3@2", AD: "b3@4 c4@3 a#3 b3@2 ~@4 a#3@2",
  AE: "b3@2 c4 a#3 b3 [d4,g4]@2 a#3", AF: "b3 c4@2 a#3 b3 ~@2 a#3", AG: "b3@4 c4@3 a#3 b3@2 [d4,g4]@4 a#3@2",
  AH: "b3@4 c4@3 a#3 b3@2 [d4,g4]@2 a#3@2 b3@2", AI: "d4!2 c4 a#3 b3 ~@3",
})).s("gm_drawbar_organ").gain(0.41)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A@5 B C D E F G H I J K L M@5 N@3 O P@2 Q R S@3 T U V W X Y Z AA AB AC AD ~ AE AF AE AG AH ~ AI AJ AK AL AM AN AO AP
  AQ AR AS AT P@3 AU AV S@2 AW AX AY W AZ BA BB BC BD BE BF BG BH BG BF BI BF BI BF BJ BK
>`.pickRestart({
  A: "[~@8 a2@16 a2@2 a2@14 a2@2 a2@14 a2@2 a2@14 a2@2 a2@4 ~ a2]/5", B: "a2@2 a2@2 a2@4 a2@2 a2@4 ~ a2",
  C: "a2@2 a2@6 a2@2 a2@4 ~ a2", D: "a2 a2@3 a2@4", E: "~@2 c#2@2 d2@2 d#2@2 e2@7 e2", F: "e2@3 e2 e2@4",
  G: "e2!4 d2 d2@3", H: "d2 d2@3 d2 d2@3", I: "d2@2 d2@4 e2@2 f2@2 f2@2 f2 f2@2 f2", J: "f2!4 c2 c2@3",
  K: "c2!2 e2 f2 g2 g2@3", L: "d2 d2@3 g2!4",
  M: "[g2@4 ~@4 a2@16 a2@2 a2@14 a2@2 a2@14 a2@2 a2@13 a2 a2@2 a2@2 a2@3 a2]/5", N: "a2!4 a2@4 a2@2 a2@2 a2@3 a2",
  O: "a2@2 ~@2 a1!4", P: "a1!8", Q: "a1@2 a1@2 a1@2 a1@2 a1@2 a1!2 a1@2 a1!2", R: "a1!4 a1@2 a1 d2 a2!8", S: "a2!16",
  T: "a1@2 c#2 c#2@2 d2 d#2!2 e2@2 e2@2 e2@2 e2!2", U: "e2@2 e2@2 e2@2 c#2 d2 e2@2 e2@2 e2@2 e2@2",
  V: "e2!2 b1 e2 d2!4", W: "d2!8", X: "d2!4 c2!2 f2 c2", Y: "c2!3 b1 c2!4", Z: "e1 ~ e2 f2 g2 g2@2 g2",
  AA: "d2!2 e2!2 g2!4", AB: "g2 ~@3 g1!2 g1@2", AC: "f2 e2 d2 g1!5", AD: "g1 ~@3", AE: "g1!4 f2 e2 d2 b1",
  AF: "g1 f#1 g1!6", AG: "g1 f#1 g1!2 f2 e2 d2 b1", AH: "g1 ~@7", AI: "c2!2 ~ c2!2 e1 f1 g1",
  AJ: "c2 e1 a#1@2 c2 a1 c2 d2", AK: "g1!2 g2 g1!3 f2 g2", AL: "g1!4 f2 g2 a#1 b1", AM: "c2!2 ~ a#2@2 a2 g2 e2",
  AN: "c2 b1 c2 e1 a#1 a1 g1 e1", AO: "g1!5 f2 g2 g1", AP: "g1 f2 g2 g1!4 g#1", AQ: "a1", AR: "a1 a1@7",
  AS: "a1@2 a1@12 a1 e2", AT: "a2 e2 a2@12 a2 e2", AU: "a1@2 a1@2 a1@2 a1!2 a1@2 a1!2 c#2!2 e2!2",
  AV: "a2@2 a2@2 a2!12", AW: "a2!8 a1@2 a1 c#2@2 c#2 d2!2", AX: "e2!5 b1 c#2 e2", AY: "e1!4 g#1 b1 c#2 d2",
  AZ: "d2!7 b1", BA: "c2!2 f2 c2!3 f2 b1", BB: "c2 b1 c2!3 e2 f2 f#2", BC: "g2!8", BD: "g2!4 g2@2 ~ f#1", BE: "g1!8",
  BF: "g1!4 g1@2 ~ f#1", BG: "g1!3 f2 e2 d2 a#1 b1", BH: "g1!2 b1 d2 g2 ~@2 f#1",
  BI: "g1@2 g1@2 g1@2 f2@4 e2@2 d2@2 a#1 b1", BJ: "g1!2 g2 f2 e2@2 d2 b1", BK: "g1!4 g2@2 ~@2",
})).s("gm_acoustic_bass").gain(0.41)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B@3 C D E F G H I J G K G H A B@3 L D E M N K@2 O P K@2 Q R K@2 S B T U V G H ~@2 H@3 W ~ X H Y K O V K H K Z S@2
  AA K@3 AB@3 AC AD AC@2 AE AF H W AC AB AC AG H J AH J AC AI AC AI AC J
>`.pickRestart({
  A: "~ x", B: "~@4 x!2 ~@2", C: "~@8 x ~ x ~@3 x!2", D: "~ x!3 ~@3 x!2 ~ x ~@3 x!2", E: "~ x!3 ~@3 x!2 ~ x ~@4 x",
  F: "~ x!2 ~@2 x ~@10", G: "~@8 x ~ x ~@4 x", H: "x!2 ~@2 x!2 ~@2", I: "x ~ x!2 ~@4 x ~ x ~@5", J: "x!2 ~ x ~@4",
  K: "x ~ x ~@5 x ~ x ~@4 x", L: "~@7 x!2 ~ x ~@3 x!2", M: "~ x!2 ~@2 x ~@2 x ~ x ~@4 x", N: "~ x ~@6 x ~ x ~@4 x",
  O: "x ~ x ~@5 x ~ x!2 ~@3 x", P: "~@2 x!2 ~ x ~@2 x ~ x ~@4 x", Q: "x ~ x ~@4 x!2 ~@5 x ~",
  R: "~@2 x ~@3 x ~ x ~ x ~@4 x", S: "x!2 ~@6", T: "x!2 ~ x!3 ~@2", U: "x ~@7 x ~ x ~@4 x", V: "x ~ x ~@5 x ~ x!2 ~@4",
  W: "x!2 ~@2 x ~@3", X: "~@7 x", Y: "x ~ x ~@4 x!2 ~ x!2 ~@4", Z: "x", AA: "x ~ x ~@12 x",
  AB: "x ~ x ~@4 x!2 ~ x!2 ~@3 x", AC: "x ~ x ~@4 x!2 ~ x ~@5", AD: "x!2 ~ x ~@3 x", AE: "x ~ x ~@4 x!2 ~ x ~@3 x ~",
  AF: "~@2 x ~@2 x ~@2 x ~@2 x ~@4", AG: "x ~ x!2 ~@12", AH: "x ~ x ~@4 x!2 ~ x ~@4 x", AI: "x!2 ~ x!2 ~@3",
})).gain(0.41)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@9 A ~@2 B C ~@11 D ~@7 E ~@2 F G ~@4 H ~@2 I@3 ~@2 J ~@11 K ~@7 L ~@3 M ~@16
>`.pickRestart({
  A: "~@6 x!2 ~@8", B: "~@5 x ~@2", C: "x!3 ~@5", D: "~@3 x ~@12", E: "~ x ~@3 x ~@10", F: "~@5 x ~ x",
  G: "x ~@2 x ~@4", H: "~@3 x", I: "~@6 x!2", J: "~ x ~ x ~@3 x ~ x ~@3 x ~@2", K: "~@7 x!3 ~ x!3 ~@2",
  L: "~@3 x ~@3 x", M: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~ x",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C@3 D E@2 F G H@3 G H ~ I J C@3 D E@2 K L H@6 M N H@3 G H O ~@11 P H@7 Q C@2 R P H@6 S H@3 ~ P T H@3 S P S H S H T
  H T H S
>`.pickRestart({
  A: "~@8 x!8", B: "x!8 ~@2 x!6", C: "x!16", D: "x!12 ~ x!3", E: "x!4 ~ x!7 ~ x!3", F: "x!7 ~ x ~ x ~ x ~ x ~",
  G: "x!4 ~@2 x!2", H: "x!8", I: "~@7 x", J: "~@10 x!6", K: "x!7 ~ x!4 ~ x!3", L: "x ~@3 x!4", M: "x!7 ~", N: "~@6 x!2",
  O: "x", P: "~@2 x!6", Q: "~@2 x!14", R: "x!3 ~@13", S: "x!4 ~@4", T: "x!5 ~@3",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A B ~@2 C D ~@11 E ~@7 F ~@2 G F ~@12 H ~@23 I ~@16>".pickRestart({
  A: "~@3 x", B: "~@5 x ~@10", C: "~@8 x ~@2 x!2 ~ x!2", D: "~@3 x ~@2 x ~@9", E: "~ x ~ x ~@4", F: "~ x ~@3 x ~@10",
  G: "~@8 x ~@2 x ~@4", H: "~@11 x ~ x ~@2", I: "x ~@2 x ~@2 x ~@2 x ~@2 x!2 ~ x",
})).gain(0.41)

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

// drums · ride bell
const ride_bell = s("rd").struct("<~@45 [~@2 x!6] [x!8]!2 [x!6 ~@2] ~@42>").gain(0.41)

stack(
  overdriven_guitar, overdriven_guitar_2, distortion_guitar, rock_organ, drawbar_organ, bass, kick, snare, low_tom,
  hihat, mid_tom, china, ride_bell
)

More by Led Zeppelin