Strudelify
Thank You cover art

1969 · Led Zeppelin II

Thank You

Led Zeppelin

KeyD majorTempo80 bpm
0:00/0:00
// Thank You — Led Zeppelin
// 80 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "acoustic embellishment" named as a mallet, played on tubular bells (its acoustic guitar steel patch is not one)
// note: 27 stray notes after a silence of more than 6 bars (from bar 1004) are dropped
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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, A@4 for four bars: edit a riff to change every repeat.

// other · tubular bells · "acoustic embellishment"
const tubular_bells = note("<A@2 B C D B A E ~@55 F G@2 H I J K L@2 ~@14>".pickRestart({
  A: "~@4 e4 d4 c4!2 d4@2 ~ d4 c4@2 d4@2", B: "~@4 e4 d4 c4!2 d4@2 ~ d4 c4@2 ~ d4", C: "[d3,d4]@13 ~@3",
  D: "~@4 e4 d4 c4!2 d4@2 ~ d4 c4@2 d4 ~", E: "[d3,a3,d4,f#4]@13 ~@3",
  F: "~ e4@2 f#4 e4@2 d4 b3 g4 e4@2 f#4 e4@2 d4 b3, a4 ~@7",
  G: "[c3@2 ~@2 e3@2 ~@2 g3@2 ~@2 g4@2 ~@2 a2 b2 d3 e3 d3@2 a2@2 a2 b2 d3 e3 d3@2 b2@2, ~@7 e4@3 ~@6]/2",
  H: "d3 ~ a3@2 a4@2 f#4@2 g4 f#4 d4@2 d4 ~ a3 b3", I: "a3 g3 f#3@2 e3 d3 ~ b2 d3 e3 d3 b2 d3@2 b2@2, ~@3 a2@4 ~",
  J: "c3@13 ~@3", K: "b2@13 ~@3", L: "[[d3,a3]@13 ~@3]/2",
})).s("gm_tubular_bells").gain(0.51)

// chords · acoustic guitar nylon · "main acoustic"
const acoustic_guitar_nylon = note(`<
  A B C D A B C D E ~@4 F G H I J K L ~ M N O P Q R S T J U V@2 A B C W X Y Z AA AB Z AC C AD ~@3 AE AF AG AH I J K L
  ~@6 AI AJ ~@5 AK@2 ~@14
>`.pickRestart({
  A: "[d3,d4]@2 a3@2 [a3,d4,g4] [a3,f#4] [a3,d4,e4]!2 [a3,d4,f#4]@2 ~ [a3,d4,f#4] [a3,d4,e4]@2 [a3,d4,f#4]@2", // D Dsus4 D Asus4 D Asus4 D
  B: "b3 ~ e4 g3 [a3,d4,g4] [a3,f#4] [a3,d4,e4]!2 [a3,d4,f#4]@2 ~ [a3,d4,f#4] [a3,d4,e4]@2 [a3,d4,f#4] ~, ~ [c3,c4]@4 ~@11", // Dsus4 D Asus4 D Asus4 D C
  C: "a3 ~ d4 g4 [a3,d4,g4] [a3,f#4] [a3,d4,e4]!2 [a3,d4,f#4]@2 ~ [a3,d4,f#4] [a3,d4,e4]@2 [a3,d4,f#4]@2, ~ b3@5 ~@10", // Dsus4 D Asus4 D Asus4 D
  D: "[a2,d3,a3]@3 ~ [d3,a3,f#4] ~@3 [d3,a3,d4,f#4] [d3,a3,d4,f#4]@2 [d3,a3,d4,g4]!5, ~@4 d4@3 ~@9", // D5 D Dsus4
  E: "[d3,a3,d4,f#4]@9 ~@7", F: "c3@3 ~ g3@2 d4@2 g4@2 e3@2 g4@2 d4@2", G: "a3 b3@2 ~ d3@2 g3@2 g4@2 d4@2 g4@2 d4@2",
  H: "d4 ~ a4@2 d5@2 f#5@2 g5@2 f#5@2 d5@2 a4@2",
  I: "[d3,a3,d4,f#4]@2 ~ [d3,a3,d4,f#4] [d3,a3,d4,f#4]@2 ~ [d3,a3,d4,f#4] [d3,a3,d4,f#4]@2 ~ [d3,a3,d4,f#4] [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!2", // D
  J: "[f#3,b3,d4,f#4]!8", // Bm
  K: "[e3,g#3,a3,e4]@2 [e3,g#3,a3,e4]@2 [e3,g#3,a3,e4]@2 ~ [e3,g#3,a3,e4]@2 [e3,g#3,a3,e4] [e3,g#3,a3,e4]@2 [e3,g#3,a3,e4]@2 [e3,g#3,a3,e4]@2", // Amaj7
  L: "[f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 ~ [f#3,b3,d4,f#4] [f#3,b3,d4,f#4]@3 ~ [f#3,b3,d4,f#4]@3 ~", // Bm
  M: "[c3,g3,b3,c4,e4]!8", // Cmaj7
  N: "[b2,d3,g3,d4,g4]@2 [b2,d3,g3,d4,g4]@2 [b2,d3,g3,d4,g4]@2 [b2,d3,g3,d4,g4]@2 [b2,d3,g3,d4,g4]@2 [b2,d3,g3,d4,g4]@2 [b2,d3,g3,d4,g4]@2 [b2,d3,g3,d4,g4]!2", // G
  O: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,g4]!2 [d3,a3,d4,g4]@2 [d3,a3,d4,g4]!4", // D Dsus4
  P: "[d3,a3,d4,f#4]@3 ~ [d3,a3,d4,f#4]@2 ~ [d3,a3,d4,f#4]!3 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!2 [d3,a3,d4,f#4]@2", // D
  Q: "[c3,g3,b3,c4,e4]@2 [c3,g3,b3,c4,e4]!2 [c3,g3,b3,c4,e4]@2 [c3,g3,b3,c4,e4]!2 [c3,g3,b3,c4,e4]@2 [c3,g3,b3,c4,e4]!2 [c3,g3,b3,c4,e4]@2 [c3,g3,b3,c4,e4]!2", // Cmaj7
  R: "[b2,d3,g3,d4,g4]@2 [b2,d3,g3,d4,g4]!2 [b2,d3,g3,d4,g4]@2 ~ [b2,d3,g3,d4,g4] [b2,d3,g3,d4,g4]@2 ~ [b2,d3,g3,d4,g4] [b2,d3,g3,d4,g4]@2 ~ [b2,d3,g3,d4,g4]", // G
  S: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!2 [d3,a3,d4,g4]!2 [d3,a3,d4,g4]@2 [d3,a3,d4,g4]!4", // D Dsus4
  T: "[d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]!3 ~ [d3,a3,d4,f#4]!4 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!4", // D
  U: "[f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]!2 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]!2 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2", // Bm
  V: "[[e3,g#3,a3,e4]@2 ~ [e3,g#3,a3,e4] [e3,g#3,a3,e4]@2 ~ [e3,g#3,a3,e4]!2 ~@2 [e3,g#3,a3,e4] [e3,g#3,a3,e4]@2 ~ [e3,g#3,a3,e4]@2 ~@15]/2", // Amaj7
  W: "[a2,d3,a3,d4,f#4]@3 ~ [a3,d4,g4] [a3,f#4] [a3,d4,e4]!2 [a3,d4,f#4]@2 ~ [a3,d4,f#4] [a3,d4,e4]@2 [a3,d4,f#4]@2", // D Dsus4 D Asus4 D Asus4 D
  X: "[a2,d3,a3,d4,f#4] ~ e4 g3 [a3,d4,g4] [a3,f#4] [a3,d4,e4]!2 [a3,d4,f#4]@2 ~ [a3,d4,f#4] [a3,d4,e4]@2 [a3,d4,f#4] ~", // D Dsus4 D Asus4 D Asus4 D
  Y: "b3 ~ g3 d4 [a3,d4,g4] [a3,f#4] [a3,d4,e4]!2 [a3,d4,f#4]@2 ~ [a3,d4,f#4] [a3,d4,e4]@2 [a3,d4,f#4]@2, ~ c4@5 ~@10", // Dsus4 D Asus4 D Asus4 D
  Z: "g3@2 a3@2 [a3,d4,g4] [a3,f#4] [a3,d4,e4]!2 [a3,d4,f#4]@2 ~ [a3,d4,f#4] [a3,d4,e4]@2 [a3,d4,f#4]@2", // Dsus4 D Asus4 D Asus4 D
  AA: "[a3,d4]@3 g3 [a3,d4,g4] [a3,f#4] [a3,d4,e4]!2 [a3,d4,f#4]@2 ~ [a3,d4,f#4] [a3,d4,e4]@2 [a3,d4,f#4] ~, d3 ~@15", // D5 Dsus4 D Asus4 D Asus4 D
  AB: "d4@2 d4 g4 [a3,d4,g4] [a3,f#4] [a3,d4,e4]!2 [a3,d4,f#4]@2 ~ [a3,d4,f#4] [a3,d4,e4]@2 [a3,d4,f#4]@2, d3@5 ~@11, a3 ~@15", // Dsus4 D Asus4 D Asus4 D
  AC: "[g3,d4] ~@3 [a3,d4,f#4] a3!3 [e3,a3,d4,f#4]@2 ~ [e3,a3,d4,f#4] ~ [d3,a3,d4,g4]!3, d3 ~@3", // G5 D Dsus4
  AD: "[a2,d3,f#3,d4,f#4,f#5]@13 ~@3", AE: "~@2 a4 e4 f#4 e4@2 a3 b3 d4 b3 a3@2 d3 b2 a2",
  AF: "c3@2 e3@2 g3@2 c4@2 g3@2 e4@2 e3 d3 c3 d3", AG: "e3 d3 b2@2 d3@2 g3@2 c4@2 a3 g3 e3 d3 a2 b2",
  AH: "d4 a4 d5 e5 f#5 a4 f#5 [d4,a4,d5,f#5]", AI: "~@2 a4 b4 a4 g4 f#4 e4 a3 b3 a3 g3 f#3 e3 c3 d3", AJ: "c3@13 ~@3",
  AK: "[[d2,d3,a3]@13 ~@3]/2", // D5
})).s("gm_acoustic_guitar_nylon").gain(0.51)

// chords · drawbar organ · "hammond organ"
const drawbar_organ = note(`<
  ~@2 A@2 B@2 C D E F G H I J K L M N O N P Q R S@2 T U V W X Y Z P ~@2 AA@2 AB AC AD W AE@2 AF AG AH AI AJ AK AL AM AN
  AO AP Z Y Z AQ@2 ~ AR AS@3 AT@2 AU AV AW AX AY AZ BA BB BC BD@4 BE BF BG BH@2 BI BJ
>`.pickRestart({
  A: "[d5@15 ~]/2",
  B: "[~@2 [a4,f#5]@2 [b4,g5] [a4,f#5]!2 [g4,e5] [a4,f#5]@10 ~@2 [b4,g5] [a4,f#5]!2 [g4,e5] a4@2 d5@2 b4@2 d5@2, ~@24 f#5 ~@7]/2", // D Em D C D Em D C
  C: "~@4 g5 f#5!2 e5 f#5@2 ~ f#5!2 g5 b4 a5", D: "[d4,a4,d5,a5]@9 ~@2 [e4,g4]!2 [f#4,a4] [e4,g4]@2",
  E: "[d4,f#4]@13 ~@3", F: "[c4,e5]@3 ~ c5@2 ~ f#5 [c4,e5,g5]@3 ~ c5 a5 g5@2",
  G: "[b3,g5]@3 ~ [b4,d5]@2 ~ g5 [b3,f#5]@2 ~ g5 [b4,d5,a5]@2 ~ g5", // Em Bm B5 Bm7
  H: "[d4,a5]@3 ~ a4@3 ~ d5 f#5 a5@2 [a4,g5] f#5 e5 d5", I: "[d5,f#5] g5 f#5@2 a4@3 ~ d5@3 ~@2 e5 ~ d5, d4@6 a4 ~",
  J: "[c4,d5]@3 ~ g4@3 ~ c4@2 e5 g5 g4 e5@2 g5", K: "b3@3 ~ d5@3 ~ [g3,g4,g5] a5 b5@2 a5 g5@2 ~",
  L: "[d4,a5]@2 ~ e5 [a4,f#5,a5]@3 ~ a4@3 ~ g5 e5 c5 e5", M: "[f#5,a5]@3 ~ d4@3 ~", N: "[b4,d5,f#5,b5]@13 ~@3",
  O: "[e4,d5,e5,g#5,b5]@13 ~@3", P: "[e5,g#5,b5]@3 ~ [c#5,e5,a5]@10 ~@2", Q: "[c5,e5,g5]@13 ~@3",
  R: "[b4,d5,g5]@13 ~@3", S: "[f#5@3 ~ g5@3 ~@9, [a4,d5]@13 ~@3]/2", T: "[e4,g4,c5]@13 ~@3", U: "[d4,g4,b4]@13 ~@3",
  V: "f#4@3 ~ g4@3 ~, [d4,a4]@13 ~@3", W: "[d4,f#4,a4]@13 ~@3", X: "[b4,d5,b5]@13 ~@3", Y: "[d5,e5,g#5,b5]@13 ~@3",
  Z: "[d5,f#5,b5]@13 ~@3", AA: "[d5@13 ~@3]/2", AB: "~@4 d4@3 ~, [f#4,a4]@13 ~@3", AC: "~@2 c4@5 ~, [e4,g4]@13 ~@3",
  AD: "[b3,d4,g4]@13 ~@3", AE: "[[f#4,a4]@13 ~@11 c5@6 ~@2, d5@21 ~@11, ~@16 [e4,g4]@13 ~@3]/2",
  AF: "b4@3 ~ b3@3 ~, [d4,g4]@13 ~@3", AG: "[f#4,a4]@10 ~@2 [e4,g4]@3 ~, d4@3 ~", AH: "[d4,f#4,a4]@3 ~@5",
  AI: "[c4,e5]@3 ~ [c5,f#5]@2 g5@2 c4@2 f#5 e5 c5@3 ~", // C Cdim
  AJ: "[b3,b4,d5]@3 ~ [b4,g5]@3 ~ [b3,d5,f#5]@2 ~ g5 [b4,d5,a5]@2 ~ b5", // Bm Em Bm Bm7
  AK: "~@4 a4@3 ~@5 g5 f#5 e5 d5, a5@9 ~@3 a4@3 ~, d4@3 ~ d4@3 ~",
  AL: "d4@3 ~ a4@3 ~ d4@3 ~ a4@3 ~, d5@13 ~@3, f#5@3 ~ a5@3 ~", AM: "~@4 g4@5 ~ d4 f#4 g4 d4 e4 g4, [c4,g5]@13 ~@3",
  AN: "d4 e4 d4@2 [g4,d5]@3 ~ [d4,g5] a5 b5@2 [g4,a5] g5@2 ~", // G5 Gsus2
  AO: "[d4,a5]@2 ~ e5 a4@3 ~ d4@2 a4@2 d4@2 a4@2, ~@2 [f#5,a5]@5 ~", AP: "[d4,d5,f#5,a5]@13 ~@3",
  AQ: "[[b4,e5,g#5,b5]@3 ~ [e4,a4,c#5,e5]@17 ~@11]/2", AR: "c4@3 ~ [c5,e5] f#5 ~@2 c4@3 ~ [c5,e5]@3 ~, ~@3 g5@3 ~@2",
  AS: "[b3@2 b4@2 [b4,d5] f#5@2 g5 b3@2 f#5@2 b4@3 ~@10 a4 b4 ~ f#4@3 ~@17, ~@6 a5@13 ~@5, ~@8 d4@13 ~@3, ~@27 a4@2 ~@19]/3", // Bm
  AT: "[c4@3 ~ g4@3 ~ c4@3 ~ [g4,g5] f#5@2 ~ b3@2 f#5 ~ g4@3 ~ [b3,b4]@2 d5 ~ g4@2 f#5@2, ~@15 g5@2 ~@2 d5@2 ~@6 e5@2 ~@3]/2", // G B
  AU: "~@2 a4@3 ~ f#5@2 g5 f#5 e5 d5 ~ b4 d5 e5, d4, ~@4 a4@2 a4 ~", AV: "~@2 a5@5 ~, [d4,a4]@13 ~@3, f#5@5 ~@3",
  AW: "[c5,g6]@2 g5@2 [c5,e6] f#6 g5 ~ c5@2 g5 f#6 [c5,g6]@2 g5 e6, ~@7 g6@3 ~@6", // C5 C C5
  AX: "[c5,d6]@2 [g5,g6]@2 [c5,d6,g6]@2 [g5,a6]@2 [c5,a6] b6 g5@2 [c5,a6] ~ g5@2, ~@13 g6@3", // Csus2 G Csus2 Gsus2 F
  AY: "[d5,a6]@2 a5 e6 [d5,f#6] e6 [a5,d6]@2 d5@2 [a5,d6]@2 [g5,b5] d6 [a5,e6]@2", // D5 D D5 G A5
  AZ: "d5@2 a5@2 d5@2 a5@2 d5@2 a5@2 [d5,a5] ~ a5@2, d6@10 ~@3 b5@3", // D5
  BA: "[c5,c6]@2 g5 ~ c5@2 g5@2 [c5,a5] b5 g5 c6 [c5,c6] ~ g5@2, ~@3 b5@5 ~@5 d6@3", // C F C
  BB: "[b3,g5]@2 [g4,a5] ~ b3@2 g4@2 [g3,g5]@2 g4@2 [d4,a5] ~ g4@2, ~@3 b5@5 ~@5 g5@3", // Em Gsus2 G D5
  BC: "[d4,a5]@2 a4 e5 [d4,f#5] e5 a4@2 d4@2 a4@2 [d4,e5] f#5 [a4,g5] e5, ~@6 d5@5 ~@5", // D5 D Dsus2 A7
  BD: "[[d4,f#5]@2 a4@2 [d4,g5] f#5 [a4,g5] e5 [d4,g5] f#5 [a4,e5]@2 [d4,e5]@2 ~@2 c5@2 g5@2 [c5,d6] ~ g5@2 g4@2 g5@2 ~ e6 g5@2 b4@2 g5@2 [g4,d6]@2 [g5,a6] ~ g4 a6 [g5,g6]@2 d5 ~ g5@2 d5@2 [a5,d6]@2 [d5,e6] ~ a5@2 [d5,g6] d6 a5 ~ d5 ~ a5@2, ~@7 [a4,d5] ~@6 [d5,d6] ~@17, ~@15 e5@5 ~ c6@6 ~@3 g6@6 ~@3 b6@2 ~@4 a6@5 ~@3 f#6@3 ~@3 e6@2 g6@3]/4", // D G5 A7 G5 A5 Dsus2 Csus2 G5 …
  BE: "[d5,f#6]@2 a5 ~ d5@2 [a5,g6]@2 [d5,f#6] e6 a5 ~ d5 e6 [a5,d6]@2, ~@3 e6@3 ~@5 f#6@2 ~@3", // D A7 D D5
  BF: "[c5,g6]@2 g5 ~ c5 ~ g5@2 [c5,c6]@2 g5@2 [c5,d6] ~ g5@2, ~@3 e6@2 d6@3 ~@5 e6@3", // C5 C Csus2
  BG: "[b4,g6]@2 g5@2 [b4,d6] ~ g5@2 [b4,b5]@2 g5@2 [b4,a6] ~ g5@2, ~@5 c6@3 ~@5 b6@3", // Em Bm B B7
  BH: "[d5,a6]@2 a5 e6 [d5,f#6]@2 a5@2 [d5,g6] d6 a5 g6 [d5,d6]@2 [a5,f#6]@2", // D5 D G5 D
  BI: "[d5,a6]@2 a5 e6 [d5,f#6]@2 a5@2 [d5,g6] f#6 [a5,e6]@2 [d5,f#6]@2 [a5,a6]@2", BJ: "[d4,f#4,a4,d5,f#5]@13 ~@3",
})).s("gm_drawbar_organ").gain(0.5)

// chords · overdriven guitar · "electric guitar" · E A E A
const overdriven_guitar = note(`<
  ~@20
  [[e3,g#3,b3]@3 ~ [a2,c#3,e3,a3]@10 ~@2]
  ~@11
  [[e3,g#3,b3]@3 ~ [a2,c#3,e3,a3]@10 ~@2]
  ~@53
>`).s("gm_overdriven_guitar").gain(0.51)

// other · electric guitar jazz · "solo"
const electric_guitar_jazz = note("<~@36 A B@2 C D E F G H ~@25 I@2 ~@2 I@2 ~@2 J ~@3 J ~@2 K>".pickRestart({
  A: "~@4 f#3 g3 a3@2 ~ b3 c#4 d4 a3@2 d4 e4",
  B: "[f#4 g4 a4 b4 a4 g4 f#4 e4 g4 e4 d4 c#4 d4 e4 f#4 g4@2 ~ b4 a4!2 g4 g4@3 ~ f#4 g4 a4 b4@2 ~]/2",
  C: "~ c#4 a4 b4 c#4@2 a4 b4 a4 b4@2 a4 g4 f#4@2 g4", D: "~ g4!3 f#4@8 ~@2 d4@2",
  E: "d4 a3 g3@2 d4 c#4 d4 c#4 b3 c#4 a3 b3 g3 a3 f#3 g3", F: "g3 e3 f#3 e3 d3@4 ~ c#3 d3 e3 f#3 g3 a3@2",
  G: "~@2 a3 b3 c#4 d4 e4 f#4 g4 b4 a4 g4 f#4 e4 f#4 g4", H: "g4 f#4 f#4@2 f#4@3 ~ g4 f#4 f#4@2 g4 f#4 f#4@2",
  I: "[[a2,d3]@13 ~@3]/2", J: "[a2,d3]@13 ~@3", K: "[a2,d3,f#3]@13 ~@3",
})).s("gm_electric_guitar_jazz").gain(0.51)

// drums · kick
const kick = s("bd").struct("<~@20 x ~@65>").gain(0.51)

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

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@12 B ~@3 C ~ D ~@3 E ~@3 D@2 ~@4 C ~ F ~@47>".pickRestart({
  A: "~@6 x ~@6 x!2 ~", B: "~@3 x ~@8 x ~@3", C: "~@13 x!2 ~", D: "~@14 x!2", E: "~@7 x", F: "~@11 x ~ x!2 ~",
})).gain(0.51)

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

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

stack(
  tubular_bells, acoustic_guitar_nylon, drawbar_organ, overdriven_guitar, electric_guitar_jazz, kick, rim, snare, hihat,
  low_tom, mid_tom, crash
)

More by Led Zeppelin