Strudelify

Wearing and Tearing

Led Zeppelin

KeyA majorTempo215 bpm
0:00/0:00
// Wearing and Tearing — Led Zeppelin
// 215 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 47, 4/4 at bar 48, 3/4 at bar 95, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 7 "Electric Guitar IV" distortion guitar (copy of ch 3 "Electric Guitar I" distortion guitar); ch 6 "Electric Guitar III" distortion guitar (copy of ch 4 "Electric Guitar II" distortion guitar)
// note: Full arrangement: all 307 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Electric Guitar II.
setcpm(215/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 · distortion guitar · "Electric Guitar I"
const distortion_guitar = note(`<
  A B@6 C@8 D@8 E@4 F@12 G A B@6 H@6 I@8 J@8 K@2 L M N O P M N O P M N O P M N O Q R S R S R S R T@6 U@8 V@8 W@3 X Y Z
  AA X Y Z AA X Y Z AA X Y Z AB AC AD AC AD AC AD AC AE@2 AF@4 AG@4 AF@4 AH@8 AI@2 AJ AK AL AM AN AK AL AM AN AK AL AM
  AN AK AL AO@2 AP AQ AP AQ AP AQ AP AR@2 AS@2 AT@2 AS@2 AT@2 AS@2 AT@2 AS@2 AU AK AL AM AN AK AL AM AN AK AL AM AN AK
  AL AV@6 AP AQ AP AQ AP AQ AP AW@4 AX@4 AW@4 AX@4 AY@4 AZ@7 F@12 G BA BB BC BD BE@2 BF@2 BG@16 A B@6 BH
>`.pickRestart({
  A: "[a2,e3]@3 ~ [a2,e3]@2 [a2,e3]@2 [a2,e3]@3 ~ [a2,e3]@2 [a2,e3]@2", // A5
  B: "[[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 ~@4 [a2,e3]@7 ~ [a2,e3]@2 [a2,e3]@2 [a2,e3]@3 ~ [a2,e3]@2 [a2,e3]@2]/2", // A5
  C: "[[a2,e3]!4 ~@2 [f#2,c#3]@15 e2 f#2 [a2,e3]@10 c3 b2 a2 b2 a2!2 [f#2,c#3]@14 e2 f#2 [a2,e3]@9]/8", // A5 F#5 A5 F#5 A5
  D: "[~ c3 b2 a2 b2 a2!2 [f#2,c#3]@14 e2 f#2 [a2,e3]@10 c3 b2 a2 b2 a2!2 [f#2,c#3]@14 e2 f#2 [a2,e3]@9]/8", // F#5 A5 F#5 A5
  E: "[~ c3 b2 a2 b2 a2!2 f#2@2 f#3 e3 f3 f#3!2 ~ f#3@2 f#3 e3 f3 f#3!2 ~ a3@2 a3 g3 g#3 a3!2 d3 d#3]/4",
  F: "[e3!2 g3 g#3 a3!3 f#3@2 f#3 e3 f3 f#3!2 ~ f#3@2 f#3 e3 f3 f#3!2 ~ a3@2 a3 g3 g#3 a3!2 d3 d#3]/4",
  G: "e3@2 e3@2 g3@2 g#3@2 a3@2 a2@5 ~",
  H: "[[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 ~@4 [d3,a3,d4,f#4]@27 ~ [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@33 ~ [a2,e3,a3,c#4]@20]/6", // A5 D A
  I: "[~@8 [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@33 ~ [d3,a3,d4,f#4]@27 ~ [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@33 ~ [a2,e3,a3,c#4]@20]/8", // D A D A
  J: "[~@8 [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@33 ~ [d3,a3,d4,f#4]@31 ~ [d3,a3,d4,f#4]@31 ~ [a2,e3,a3,c#4]@20]/8", // D A D A
  K: "[~@8 [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@21 ~]/2", // D A
  L: "[d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@5 ~ [a2,e3,a3,c#4]@2 f#3@4 f#3@2", M: "e3 f3 f#3!2 ~ f#3@2 f#3",
  N: "e3 f3 f#3!2 ~ a3@2 a3", O: "g3 g#3 a3!2 d3 d#3 e3!2", P: "g3 g#3 a3!3 f#3@2 f#3",
  Q: "g3@2 g#3@2 a3@2 a2@5 ~ [a2,e3]@3 ~", R: "[a2,e3]@2 [a2,e3]@2 [a2,e3]@3 ~ [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2",
  S: "[a2,e3]@2 [a2,e3]@2 ~@4 [a2,e3]@7 ~", // A5
  T: "[[a2,e3]@2 [a2,e3]@2 ~@4 [d3,a3,d4,f#4]@27 ~ [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@33 ~ [a2,e3,a3,c#4]@24]/6", // A5 D A
  U: "[~@4 [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@33 ~ [d3,a3,d4,f#4]@27 ~ [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@33 ~ [a2,e3,a3,c#4]@24]/8", // D A D A
  V: "[~@4 [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@33 ~ [d3,a3,d4,f#4]@31 ~ [d3,a3,d4,f#4]@31 ~ [a2,e3,a3,c#4]@24]/8", // D A D A
  W: "[~@4 [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@21 ~ [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@5 ~ [a2,e3,a3,c#4]@2 f#3@4 f#3@2 e3@2 f3@2]/3", // D A D A
  X: "f#3!2 ~ f#3@2 f#3 e3 f3", Y: "f#3!2 ~ a3@2 a3 g3 g#3", Z: "a3!2 d3 d#3 e3!2 g3 g#3", AA: "a3!3 f#3@2 f#3 e3 f3",
  AB: "a3@2 a2@5 ~ [a2,e3]@3 ~ [a2,e3]@2 [a2,e3]@2", // A5
  AC: "[a2,e3]@3 ~ [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2", // A5
  AD: "~@4 [a2,e3]@7 ~ [a2,e3]@2 [a2,e3]@2", AE: "[~@4 [d3,a3,d4,f#4]@27 ~]/2",
  AF: "[[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@33 ~ [a2,e3,a3,c#4]@27 ~]/4", // D A
  AG: "[[d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@33 ~ [d3,a3,d4,f#4]@27 ~]/4", // D A D
  AH: "[[d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@33 ~ [d3,a3,d4,f#4]@31 ~ [d3,a3,d4,f#4]@31 ~ [a2,e3,a3,c#4]@27 ~]/8", // D A D A
  AI: "[[d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@21 ~ [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@5 ~]/2", // D A D A
  AJ: "[a2,e3,a3,c#4] f#3@2 f#3 e3 f3 f#3!2", AK: "~ f#3@2 f#3 e3 f3 f#3!2", AL: "~ a3@2 a3 g3 g#3 a3!2",
  AM: "d3 d#3 e3!2 g3 g#3 a3!2", AN: "a3 f#3@2 f#3 e3 f3 f#3!2",
  AO: "[d3@2 d#3@2 e3@2 e3@2 g3@2 g#3@2 a3@2 a2@5 ~ [a2,e3]@3 ~ [a2,e3]@2 [a2,e3]@2 [a2,e3]@3 ~]/2", // A5
  AP: "[a2,e3]!6 ~@2", AQ: "[a2,e3]@7 ~ [a2,e3]@2 [a2,e3]@2 [a2,e3]@3 ~", AR: "[[f#2,c#3]@15 e2]/2",
  AS: "[f#2 [a2,e3]@10 c3 b2 a2 b2 a2]/2", AT: "[a2 [f#2,c#3]@14 e2]/2", AU: "a2 f#2@2 f#3 e3 f3 f#3!2",
  AV: "[d3@2 d#3@2 e3@2 e3@2 g3@2 g#3@2 a3@2 a2@5 ~ b4@5 ~ a4@25 ~ b4@5 ~ a4@25 ~ [a2,e3]@3 ~ [a2,e3]@2 [a2,e3]@2 [a2,e3]@3 ~, ~@20 e4@31 ~ e4@31 ~@13]/6", // A5
  AW: "[[d3,a3,d4,f#4]@27 ~ [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@33 ~]/4", // D
  AX: "[[a2,e3,a3,c#4]@27 ~ [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@33 ~]/4", AY: "[[d3,a3,d4,f#4]@31 ~]/2",
  AZ: "[[a2,e3,a3,c#4]@27 ~ [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@21 ~ [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4]@5 ~ [a2,e3,a3,c#4]@2 f#3@4 f#3@2 e3@2 f3@2 f#3@2 f#3@2 ~@2 f#3@4 f#3@2 e3@2 f3@2 f#3@2 f#3@2 ~@2 a3@4 a3@2 g3@2 g#3@2 a3@2 a3@2 d3@2 d#3@2]/7", // A D A D A
  BA: "b3!3 a3!3 g#3!2", BB: "g#3 f#3!3 e3!2 d3!2", BC: "e3!3 d3!3 c#3!2", BD: "c#3 b2!3 a2!2 g#2!2",
  BE: "[f#2@31 ~]/2", BF: "[e2@31 ~]/2", BG: "[f#2,c#3]@3 ~ [f#2,c#3]@2 [g#2,d3]@5 ~ [e2,b2]@3 ~", BH: "[a2,e3]!4 ~@4",
})).s("gm_distortion_guitar").gain(0.31).pan(0.1)

// other · distortion guitar · "Electric Guitar II"
const distortion_guitar_2 = note(`<
  A ~ B ~ B ~ B ~@32 C A ~ B ~ B ~ D E ~@17 F@3 ~@3 G ~@15 H I J I J I K L M ~@17 N@3 ~@3 O ~@15 P Q R Q R Q S T ~@18
  U@3 ~@3 V ~@15 W X Y X Y X Y X ~@32 Z AA AB AC AD X Y X Y X AE AF ~@17 AG@3 ~@3 AH ~@15 C AI@2 AJ@2 AK@2 AL@2 ~@16 A ~
  B ~ B ~ B ~
>`.pickRestart({
  A: "~@4 c#3!4", B: "~ a2 ~@2 c#3!4", C: "~@6 a3!2", D: "~ a3 ~@2 g3!4", E: "f#3!3 ~@5",
  F: "[~@8 [d3,a3]@2 [d3,a3]@33 ~@5]/3", G: "~@4 d3 ~@3", H: "~@4 a3!2 ~@2", I: "~@2 c#3!4 ~@2", J: "~@7 a2",
  K: "~@7 a3", L: "~@2 g3!4 f#3!2", M: "f#3 ~@7", N: "[~@4 [d3,a3]@2 [d3,a3]@33 ~@9]/3", O: "~@2 d3 ~@5",
  P: "~@2 a3!2 ~@4", Q: "c#3!4 ~@4", R: "~@5 a2 ~@2", S: "~@5 a3 ~@2", T: "g3!4 f#3!3 ~",
  U: "[[d3,a3]@2 [d3,a3]@33 ~@13]/3", V: "d3 ~@7", W: "a3!2 ~@4 c#3!2", X: "c#3!2 ~@6", Y: "~@3 a2 ~@2 c#3!2",
  Z: "a3@2 a3@2 g#4@5 ~ f#4@5 ~", AA: "e4@6 d4@5 ~ c#4@3 ~", AB: "b3@3 ~ a3@5 ~ g#3@5 ~",
  AC: "[g#3,b3]@6 [f#3,a3]@5 ~ [e3,g#3]@3 ~", AD: "[d3,f#3]@3 ~@9 c#3@2 c#3@2", AE: "~@3 a3 ~@2 g3!2",
  AF: "g3!2 f#3!3 ~@3", AG: "[~@12 [d3,a3]@2 [d3,a3]@33 ~]/3", AH: "~@6 d3 ~",
  AI: "[d5@5 ~ c#5@5 ~ b4@6 a4@5 ~ g#4@3 ~ f#4@3 ~]/2", AJ: "[g#4@5 ~ f#4@5 ~ e4@6 d4@5 ~ c#4@3 ~ b3@3 ~]/2",
  AK: "[c#4@3 ~ [f#3,c#4]@27 ~]/2", AL: "[g#2@31 ~]/2",
})).s("gm_distortion_guitar").gain(0.44).pan(0.9)

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

// drums · kick
const kick = s("bd").struct(`<
  A B C B C B C B C D E F G F H I F J K I J@2 A L M@2 C N M@2 C N M@2 C N M@2 C O A B C B C B C B ~ P ~ Q ~ P ~ Q ~ P ~
  Q ~ P ~ Q ~ P ~ Q ~ P ~ O R@2 S R@3 S R@3 S R@3 T U T V T V T V T W ~ X ~ Y ~ X ~ Y ~ X ~ Y ~ X ~ Y ~ X ~ Y ~ X Z X
  AA@2 AB AA@3 AB AA@3 AB AA@3 O AC N AD N AD N AD N AE ~ AF ~ AE ~ AF ~ AE ~ AF ~ AE ~ AF ~ AE ~ AF ~ AE ~ AF P AG AH@2
  AI AH@3 AI AH@3 AI AH@3 T AJ AK AL AK AL AK AL AK AL AM AJ AN AO AP AG AQ AP@2 AR AS AP AN AT AU AH@3 T AH@3 T AH@3 T
  AH@3 U AE ~@3 AJ AK AL AK AL AK AL AK AV Z ~@2 AV Z ~@2 AV Z ~@2 AV Z ~@2 AV Z ~@2 AV Z ~ T AW M C M@3 C M@3 C M@3 C O
  AV ~@3 AX O AX ~ AY AX@15 A B C B C B C ~
>`.pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x!2 ~ x ~@2 x ~", C: "~ x ~@2 x!2 ~@2", D: "x ~ x ~@2 x ~@2", E: "x ~@3 x!2 ~ x",
  F: "x ~@4 x!3", G: "~ x ~@2 x!4", H: "~@4 x!4", I: "x ~@3 x!4", J: "x ~@4 x ~ x", K: "~ x ~@3 x!2 ~",
  L: "x ~@3 x ~@2 x", M: "~ x ~@2 x!2 ~ x", N: "x!2 ~@2 x!2 ~ x", O: "x!2 ~@2 x!2 ~@2", P: "~@4 x!2 ~@2", Q: "~@3 x",
  R: "~@2 x!2 ~ x ~ x", S: "~@2 x!2 ~@3 x", T: "~@2 x!2 ~@2 x!2", U: "~@2 x!2 ~@2 x ~", V: "~ x ~@2 x ~@2 x",
  W: "~ x ~@2 x ~@3", X: "~@2 x!2 ~@4", Y: "~ x", Z: "~@6 x!2", AA: "x!2 ~ x ~ x ~@2", AB: "x!2 ~@3 x ~@2",
  AC: "x!2 ~@2 x ~@3", AD: "~@2 x ~@2 x ~@2", AE: "~ x ~@2", AF: "x!2 ~@6", AG: "x!2 ~@4 x!2", AH: "~ x ~ x ~@2 x!2",
  AI: "~@3 x ~@2 x!2", AJ: "~@2 x ~@3 x!2", AK: "~@2 x!2 ~ x ~@2", AL: "x ~@2 x ~@2 x!2", AM: "~@2 x ~ x ~@2 x",
  AN: "~ x!2 ~@4 x", AO: "x!2 ~ x ~@2 x!2", AP: "x!3 ~@4 x", AQ: "x!3 ~@3 x!2", AR: "~ x ~ x ~@3 x",
  AS: "x ~ x ~@3 x!2", AT: "~ x!2 ~@3 x!2", AU: "~ x ~ x", AV: "x", AW: "~@4 x!2 ~ x", AX: "x ~@2 x ~ x ~@2",
  AY: "~@3 x ~ x ~@2",
})).gain(0.63)

// drums · snare
const snare = s("sd").struct(`<
  A B A B A B A B A C A B A@5 B A@5 D A@17 B A B A B A B ~@24 E@17 F E F E F E F ~@23 G A@17 G A G A G A ~@24 H E@17 H E
  H E H E H I E@2 H E@5 H E@4 J E@15 K L ~@3 H E H E H E H E ~@24 A@16 F ~@3 A@3 M A@17 B A B A B@2 N
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~ x ~@4 x ~", D: "~ x!3", E: "x!2", F: "x", G: "~@3 x", H: "~ x", I: "x ~@2 x ~@4",
  J: "x ~ x!2", K: "x ~@3 x ~@2 x", L: "x!3 ~@5", M: "~@2 x!2 ~ x!3", N: "x!4 ~@4",
})).gain(0.63)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A B C B C B C B C@3 B A C@5 A C@4 B D@2 A B D@2 A B D@2 A B D@2 A C A B C B C B C B E@23 ~ F@2 C F@3 C F@3 C F@3 C B C
  G C G C G C F H@23 I J@2 C J@3 C J@3 C J@3 C G C K C K C K C J I@22 ~ L@3 C L@3 C L@3 C L@3 C K C A C A C A C A C@3 L
  C@5 K C@5 L@3 C L@3 C L@3 C L@3 C ~@4 L C A C A C A C M@23 ~ D@2 A B D@2 A B D@2 A B D@2 A C ~@4 A C@2 H A C@15 A B C
  B C B@2 ~
>`.pickRestart({
  A: "~ x!3", B: "x!3 ~", C: "x!4", D: "~ x!2 ~", E: "~ x ~@2", F: "x!2 ~@2", G: "x!2 ~ x", H: "x", I: "~@3 x",
  J: "x ~@2 x", K: "x ~ x!2", L: "~@2 x!2", M: "~ x",
})).gain(0.63)

// drums · high tom
const high_tom = s("ht").struct("<~@11 A ~@5 A ~@176 B C ~@4 B C ~@80 D ~@22 E ~>".pickRestart({
  A: "~@5 x!2 ~", B: "~@7 x", C: "x", D: "~ x", E: "~@6 x!2",
})).gain(0.63)

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

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@194 A ~@5 A ~@81 B ~@22 C ~>".pickRestart({
  A: "~@7 x", B: "~ x", C: "~@6 x!2",
})).gain(7.43)

stack(distortion_guitar, distortion_guitar_2, bass, kick, snare, pedal_hat, high_tom, crash, vibraslap)

More by Led Zeppelin