Strudelify
Stairway To Heaven cover art

1971 · Led Zeppelin IV

Stairway To Heaven

Led Zeppelin

KeyA minorTempo83 bpm
0:00/0:00
// Stairway To Heaven — Led Zeppelin
// 83 bpm, 4/4, key A minor. 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 (4/4 at bar 1, 7/8 at bar 112, 4/4 at bar 112) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 152 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar 2, Solo Guitar 2.
// note: The whole transcription plays 13 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(83/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.

// bass · fretless bass · "Bass"
const bass = note("<~@82 A B@2 C@4 D@3 E@4 F@6 G@4 H@3 I J@8 K@8 L@8 M@2 N@2 O@2 P@5 Q@4 ~@3>".pickRestart({
  A: "c2@15 ~ b1@16", B: "[a1@25 ~@2 b1@4 c2@15 ~ b1@9 ~@3 f1@4 ~]/2",
  C: "[~@3 a1@24 b1@4 c2@15 b1@16 a1@20 ~@4 a1@4 b1@4 c2@16 b1@10 ~ f1@3 ~@4]/4",
  D: "[~ a1@24 b1@4 c2@16 b1@16 a1@16 a2@4 e2@6 ~@2 d2@6 ~]/3",
  E: "[~ a2@6 ~@2 d3@4 f#2@4 d2@2 g2@4 d2@2 a2@4 a1@9 ~@3 e2@4 a2@4 e2@6 ~@2 d2@2 a2@2 d3@10 ~@2 d3@2 a2@2 d2@9 ~@3 a2@2 e2@2 a1@10 ~@2 a2@7 ~ e2@8 d2@7]/4",
  F: "[~ a1@4 d2@9 ~@3 d2@2 g2@4 d2@2 a2@4 a1@10 ~@2 a1@8 e2@8 d2@2 a2@2 d3@10 ~@2 d3@2 a2@2 d2@10 ~@2 e2@2 d2@2 c2@15 ~ b1@16 a1@14 ~@2 a2@4 e2@4 a1@4 b1@4 c2@16 b1@11 ~ f1@2 ~@5, ~@61 c3 ~@130]/6",
  G: "[~ a1@18 ~@2 a1@4 b1@4 c2@16 b1@16 a1@16 a2@4 e2@4 a1@4 b1@4 c2@16 b1@11 ~ f1@2 ~@5]/4",
  H: "[~ a1@20 ~@2 a1 ~ a1@2 b1@2 c2@16 b1@17 d2@30 d2 ~ d2 ~]/3", I: "d2@11 ~@2 d2 ~ d2 ~ d2@10 ~@3 d2 ~",
  J: "[d2 ~ d2@7 ~ d2@7 ~ d2@7 ~ c2@37 b1@31 ~ a1@16 g1 ~@3 g1@9 ~ g1@2 f1@2 ~@2 f1@5 ~ f1 ~ f1 ~ f1 ~ f1@2 f1@7 ~ f1 ~ f1 ~ g1 ~ a1@2 ~@2 a1@8 ~@2 a1@2 g1 ~@3 g1@8 ~@2 g1@2 f1@4 ~@2 f1@4 ~@2 f1@5 ~ f1@2 f1@2 f1 ~ f1 ~ f1@4 g1 ~ a1@2 ~@2 a1@8 ~@2 a1@2 g1 ~@3 g1@8 ~@2 g1@2 f1, ~@125 a1 ~@130]/8",
  K: "[~@3 f1 ~ f1 ~ f1@5 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1@2 f1 ~ f1@2 f1@2 g1 ~ a1@2 ~@2 a1@8 ~@2 a1@2 g1 ~@3 g1@8 ~@2 g1@2 f1@2 ~@2 f1 ~ f1 ~ f1@2 f1 ~ f1 ~ f1 ~ f1@2 f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ g1 ~ a1@2 ~@2 a1@6 ~@6 g1@2 ~@2 g1@5 ~@5 e1@2 f1@2 ~@2 f1 ~ f1@3 ~ f1 ~ f1@4 ~@2 f1 ~@3 f1 ~ f1@4 g1@4 a1@2 ~@2 a1@3 ~@9 g1@2 ~@2 g1@4 ~@6 e1@2 f1@2 ~@2 f1 ~ f1@3 ~ f1 ~ f1@4 ~@2 f1 ~@3 f1 ~ f1@4 g1@4 a1@2 ~@2 a1@3 ~@9 g1@2 ~@2 g1@4 ~@6 e1@2 f1]/8",
  L: "[~@3 f1 ~ f1@3 ~ f1 ~ f1@4 ~@2 f1 ~@3 f1 ~ f1@4 g1@4 a1@2 ~@2 a1@3 ~@9 g1@2 ~@2 g1@4 ~@6 e1@2 f1@2 ~@2 f1 ~ f1@3 ~ f1 ~ f1@3 ~@3 f1@2 ~@2 f1 ~ f1@4 g1@4 a1@2 ~@2 a1@3 ~@9 g1@2 ~@2 g1@4 ~@6 e1@2 f1@2 ~@2 f1 ~ f1@3 ~ f1 ~ f1@4 ~@2 f1 ~@3 f1 ~ f1@4 g1@4 a1@2 ~@2 a1@3 ~@9 g1@2 ~@2 g1@4 ~@6 e1@2 f1@2 ~@2 f1 ~ f1@3 ~ f1 ~ f1@3 ~@3 f1@2 ~@2 f1 ~ f1@4 g1@4 a1@2 ~@2 a1@3 ~@9 g1@2 ~@2 g1@4 ~@6 e1@2 f1]/8",
  M: "[~@3 f1 ~ f1@3 ~ f1 ~ f1@4 ~@2 f1 ~@3 f1 ~ f1@4 g1@4 a1@2 ~@2 a1@3 ~@7 f1@2 g1@2 ~@2 g1@4 ~@4 f1@5]/2",
  N: "[~@3 f1@2 ~@2 f1@4 ~@2 e1@2 f1@2 e1@2 f1@3 ~@3 f1 ~ f1@2 g1@2 a1@2 ~@2 a1@4 ~@8 g1@2 ~@2 g1@4 ~@4 f1@5]/2",
  O: "[~@3 e1@3 ~ f1@5 ~ a1@2 c2@2 f2@2 d2@2 c2@2 a1@2 g1 ~ f1@2 g1@2 a1@6 ~@2 a1@3 ~@3 a1@2 g1@2 ~@2 g1@4 d2@3 ~ f1@5]/2",
  P: "[~@3 f1@2 ~@2 f1@5 ~ f1 ~ f1 ~ f1 ~ f1@6 e1@2 g1@2 e1@2 a1@4 ~@2 e1@2 a1@4 ~@2 a1@2 g1@2 ~@2 g1@3 ~ d2@2 g1@2 f1@8 f1@2 ~@2 f1@6 a1@2 c2@2 f2@4 c2@2 f2 ~ f2@2 f1@2 g1@2 a1@3 ~ e1@4 a1@4 ~@2 a1@2 g1@2 ~@2 g1@4 d2@2 g1@2 f1@2 ~@2 f1@2 ~@2 f1@2 ~@2 f1@3 ~@3 a1@2 c2@2 f2 ~ f2@2 c2 ~ c2@2 f2@2 f1@2 g1@2 a1]/5",
  Q: "[~@3 a1 ~@3 a1@9 g1 ~@4 g1@2 ~@3 g1@9 ~ f1@81 ~@11]/4",
})).s("gm_fretless_bass").gain(0.57)

// chords · epiano1 · "Keyboard 1"
const epiano1 = note(`<
  ~@40 A@3 B C@3 D E F G H I J K L M A@3 B C@3 D E F G H I J K L M A@3 B C@3 D E N@2 O@4 P@8 Q@5 R@4 S@4 ~@42
>`.pickRestart({
  A: "[[a3,c4,e4,g4]@5 ~ g4 ~ [a3,c4,e4,g4]@3 ~ [a3,c4,e4,g4]@5 ~@3 [a3,c4,e4]@5 ~@3 [a3,d4,g4]@5 ~@3 [d3,a3]@4 ~@4 d3@6 ~@14 [c4,g4]@5 ~ g4 ~ [c4,e4,g4]@2 ~@2 [c4,e4,g4]@4 ~@4 [a3,c4,e4]@4 g2 ~@3 [e4,g4,b4]@4, a1@28 d2@36 a1@25 ~@7, ~@36 [d4,f#4]@21 ~@3 a2@26 ~@2 a2@8, ~@20 a3@8 a3@4 [a3,e4]@3 ~ a3@2 a3@4 ~@6, ~@52 d3@35 ~@9]/3", // Am7 Am Dsus4 D5 C5 C Am Em …
  B: "~@4 [d4,f#4,a4]@5 ~@3 a2@2 ~@6 [d4,f#4,a4]@8 a2@4, d3@12 [c4,e4,g4]@5 ~@15, ~@14 d2@15 ~@3", // D C
  C: "[[a3,c4,e4,g4]@5 ~ g4 ~ [a3,c4,e4,g4]@3 ~ [a3,c4,e4,g4]@4 ~@4 [a3,c4,e4]@5 ~@3 [a3,d4,g4]@5 ~@7 d3@3 ~@9 g3@2 a3@10 [a1,c4,g4]@4 a1@2 g4 ~ [a3,c4,e4,g4]@2 ~@2 [a1,a3,c4,e4,g4]@4 a1@4 [a3,c4,e4]@4 a1@4 ~@2 a2@2, a1@14 ~@2 a1@12 d2@33 ~@35, ~@36 [d4,f#4]@21 ~@7 e4@3 ~@25 [e4,g4,b4]@4, ~@18 a3@9 ~@5 a3@4 ~@12, ~@44 d3@23 ~@29]/3", // Am7 Am Dsus4 Am7 Am D Em
  D: "~@4 [d4,f#4,a4]@5 ~@5 a2@2 ~@4 [d4,f#4,a4]@9 ~@3, d3@12 [c4,e4,g4]@4 d2@15 ~", // D C
  E: "~ c3@15 [b2,b3,d4,g4]@16, [c4,e4,g4]@7 ~@9", F: "c4@7 b2, e4@13 ~ g4 ~, a2@11 ~@5",
  G: "[c3,g4]@16 [b2,b3,d4,g4]@12 [f2,a3,c4,f4]@3 ~, [c4,e4]@13 ~@19", H: "~@4 [a2,a3,c4,e4]@21 ~@3 b2@4",
  I: "[c3,c4,e4,g4] [b2,b3,d4,g4]", J: "e4@7 ~@2 a4@2 ~ a4@2 [b2,g4]@2, [a2,a3,c4]@14 [b3,d4] ~, ~@16 e4@13 ~@3",
  K: "~@4 g4@3 ~ [b2,b3,d4,g4]@6 [a3,c4,f4]@2, [c3,c4,e4]@16 ~@12 f2 ~@3", // G F C
  L: "~@4 [a2,a3,c4,e4]@21 ~@3 [b2,b3,d4]@4, ~@14 g4 ~", M: "[c3,g4]@16 b2@11 ~ a2@4, [c4,e4]@13 ~@3 [b3,d4,g4]@16",
  N: "[c4@27 b2@4 [c3,g4]@16 [b2,b3,d4,g4]@11 ~ [f2,a3,c4,f4]@3 ~@2, e4@25 ~@2 g4@2 ~@2 [c4,e4]@13 ~@20, a2@11 ~@21]/2", // C5 G F C
  O: "[~@3 [a2,a3,c4,e4]@20 ~@3 b2@4 ~ [c4,e4,g4]@14 ~ [b2,d4,g4]@16 e4@14 ~@4 a4@4 ~@2 a4@4 [b2,g4]@3 ~@9 g4@5 ~@3 [b3,d4,g4]@10 ~ f2 [a3,c4,f4]@3 ~@3, ~@30 c3@16 b3@13 ~@3 [a2,a3,c4]@28 [b3,d4]@2 ~ c3@16 b2@12 ~@7, ~@78 e4@13 ~@3 [c4,e4]@14 ~@20]/4", // Am C G Em G F Am Bm …
  P: "[~ [a2,a3,c4,e4]@21 ~@3 [b2,b3,d4]@4 [c3,c4,e4,g4]@15 ~ b2@11 ~ a2@4 [a3,c4,e4,g4]@5 ~ g4 ~ [a3,c4,e4,g4]@3 ~ [a3,c4,e4,g4]@5 ~@3 [a3,c4,e4]@5 ~@3 [a3,d4,g4]@5 ~@3 [d3,a3]@4 ~@4 d3@6 ~@14 [c4,g4]@5 ~ g4 ~ [c4,e4,g4]@2 ~@2 [c4,e4,g4]@4 ~@4 [a3,c4,e4]@4 g2 ~@3 [e4,g4,b4]@4 ~@4 [d4,f#4,a4]@5 ~@3 a2@2 ~@6 [d4,f#4,a4]@8 a2@4 [a3,c4,e4,g4]@5 ~ g4 ~ [a3,c4,e4,g4]@3 ~ [a3,c4,e4,g4]@4 ~@4 [a3,c4,e4]@5 ~@3 [a3,d4,g4]@5 ~@7 d3@3 ~@9 g3@2 a3@10 [a1,a3,c4,e4,g4]@3, ~@25 g4@2 ~@18 [b3,d4,g4]@16 a1@28 d2@36 a1@25 ~@21 d2@15 ~@3 a1@14 ~@2 a1@12 d2@33 ~@6, ~@97 [d4,f#4]@21 ~@3 a2@26 ~@2 a2@8 ~@76 d3@23, ~@101 a3@16 a3@8 [a3,e4]@6 ~@2 a3@4 a3@8 ~@24 [c4,e4,g4]@5 ~@51 [d4,f#4]@21 ~@10, ~@113 d3@35 ~@9 d3@12 ~@56 a3@18 ~@13]/8", // Am Bm C Am7 Am Dsus4 D5 C5 …
  Q: "[~ a1@2 g4 ~ [a3,c4,e4,g4]@2 ~@2 [a1,a3,c4,e4,g4]@4 a1@4 [a3,c4,e4]@4 a1@4 ~@2 a2@2 ~@4 [d4,f#4,a4]@5 ~@5 a2@2 ~@4 [d4,f#4,a4]@9 ~@3 [c3,c4,e4,g4]@15 ~ [b2,b3,d4,g4]@16 c4@28 b2@4 [c3,g4]@16 [b2,b3,d4,g4]@12 [f2,a3,c4,f4]@3 ~@4, ~@25 [e4,g4,b4]@4 d3@12 [c4,e4,g4]@4 d2@15 ~@33 e4@26 ~@2 g4@2 ~@2 [c4,e4]@13 ~@22, ~@93 a2@22 ~@45]/5", // Am7 Am D C G C5 G F …
  R: "[~ [a2,a3,c4,e4]@21 ~@2 b2@4 ~ [c4,e4,g4]@14 ~@2 g4@14 ~@2 e4@14 ~@4 a4@4 ~@6 [b3,d4,g4]@3 ~@9 g4@6 ~@2 [b3,d4,g4]@10 ~@2 [a3,c4,f4]@4 ~@3, ~@28 c3@16 [b2,b3,d4]@16 a2@28 b2@4 c3@16 b2@12 ~ f2 ~@6, ~@61 [a3,c4]@28 ~@4 [c4,e4]@14 ~@21, ~@77 e4@13 ~@38, ~@85 a4@5 ~@38]/4", // Am C G F Bm Am C
  S: "[~ [a2,a3,c4,e4]@21 ~@3 [b2,b3,d4]@4 [c3,g4]@16 b2@11 ~ a2@4 ~ [d3,a3,d4,f#4]@45 ~@21, ~@25 g4@2 ~@2 [c4,e4]@13 ~@3 [b3,d4,g4]@17 ~@66]/4", // Am Bm C5 D C G
})).s("gm_epiano1").gain(0.46).pan(0.3)

// chords · pad halo · "Keyboard 2"
const pad_halo = note("<~@112 A@8 ~@32>".pickRestart({
  A: "[~@31 a3@16 g3@15 ~ a3@31 ~ a3@16 g3@15 ~ a3@31 ~ a4@16 g4@15 ~ a4@31 ~ a4@16 g4@15 ~ a4, ~@31 [c4,e4]@128 [c5,e5]@97, ~@62 f3@33 ~@31 f3@33 ~@31 f4@33 ~@31 f4@2]/8", // C
})).s("gm_pad_halo").gain(0.28).pan(0.7)

// chords · acoustic guitar steel · "Guitar 1"
const acoustic_guitar_steel = note(`<
  A B C D E F G H I J K@2 I J L M A B C N A F G H I J O@2 I J L M A B C D P@3 Q R S T@2 R S U@2 V W@3 V X@3 V R S T@2 R
  S U@2 V W@3 V X@3 V R S T@2 R S U@2 Y Z@2 AA@4 AB@2 AC AD AE@2 AC AD AF@3 AG@2 AH@4 AI@3 AJ AK AL@7 AM@8 AN@7 AO@5
  AP@8 AQ@4 ~@2
>`.pickRestart({
  A: "~@3 a4 ~@3 b4, a3 g#3, ~ c4@4 e4@3, ~ e4 b4 c4",
  B: "~@6 c5 ~@7 f#4@2, g3@16 f#3@15 ~, c5@8 c4@8 f#4@11 ~@5, ~@2 e4@7 ~ d4@6, ~@3 a3",
  C: "~@6 [c4,e4]@4 ~@2 c4@2 a3 ~, f3, e4@11 ~@9 e4@11 ~, ~@4 c4@7 ~@21, ~ a3@2 ~", // C
  D: "[b2,g3,b3]@4 [a2,a3,c4] ~@3 a2@10 ~@2 a2@3 ~ f3@4 e3@4, ~ [a3,c4]@2 ~", // Em Am
  E: "~@3 a4 ~@3 b4, a2, ~ c4@4 e4@3, ~ e4 g#3@2, ~@2 b4 c4",
  F: "~@6 c5 ~@7 f#4@2, g3 f#3, c5 c4 f#4 a3, ~@4 e4@13 ~@3 d4@10 ~@2",
  G: "~@2 c4@2 ~@2 c4@4 ~@2 c4@2 a3 ~, f3@15 ~, e4@18 ~@2 e4@11 ~, ~ a3@2 ~",
  H: "[b2,g3,b3]@4 [a2,a3,c4] ~@3 [a3,c4]@13 ~@3 a2@4 b2@4, ~@4 a2@5 ~@7", // Em Am
  I: "~@2 g3 e4 ~ d4 ~ f#4, c3 d3, ~ e3@2 ~ f#4@2 a3@2",
  J: "e4@2 c4@2 ~@2 e4 ~ b3 ~@3 a2@2 b2@2, f3@16 a2@4 a3@9 ~@3, ~@8 a3@8 ~@2 c4@11 ~@3",
  K: "[~@12 c4@4 ~@12 g4@2 ~@4 f#4 ~ f#4@2 ~@2 [a3,d4,f#4]@15 ~ a2@4 b2@4, c3@16 g2@16 d3@5 ~@3 d3@8 ~@16, c4 e3@6 ~, ~@4 g3@12 g4@8 g3@33 ~@7, ~@20 b3@9 ~@3 g4 [a3,d4]@6 ~@25]/2", // D D5
  L: "~@28 f#4@3 ~, c3 d3, ~@4 e3@15 ~@13, ~@8 g3@11 ~ a3@11 ~, ~@12 c4@9 ~@3 d4@7 ~",
  M: "~ e4@3 [a3,c4,e4]@3 ~@2 e4@16 ~@7, [f3,a3,c4]@3 ~ f3 ~@3 [f3,a3,c4]@17 ~@7", // Am F
  N: "[b2,g3,b3]@4 [a2,a3,c4] ~@3 [a2,a3,c4]@16 ~@8", // Em Am
  O: "[~@12 c4@4 ~@12 g4@2 ~@4 f#4 ~ f#4@2 ~@2 [d3,a3,d4]@10 ~@6 a2@4 b2@4, c3@16 g2@16 d3@5 ~@27, c4 e3@6 ~, ~@4 g3@12 g4@8 g3@33 ~@7, ~@20 b3@9 ~@3 g4 [a3,d4]@6 ~ f#4@13 ~@11]/2", // D5
  P: "[a2 ~@5 a4@2 ~ e4 ~ e4 ~@3 g#3 ~@2 e4 ~@3 g3@2 ~@2 d4 ~@4 a3 ~@6 a3@2 ~@2 c4 ~@3 f3@2, ~@2 a2@26 c4@4 g3@10 c4@7 ~ a3@7 ~ a3@4 ~@4 a3@8 ~@8 a3@7 ~ a3@4 ~@2, ~@4 a3@44 f#3@11 ~ f#3@4 f3@13 ~@3 f3@10 ~@6, ~@8 c4@8 b4@4 c4@4 b4@10 ~@4 c5@12 ~@6 d4@12 c4@5 ~ c4@7 ~@7 c4@6 ~@2, ~@16 g#3@10 e4@8 c4@6 e4@10 ~@4 f#4@12 ~@4 e4@15 ~ e4@9 ~]/3",
  Q: "[b2,g3,b3]@3 ~ [a2,a3,c4]@2 ~@2 [a3,c4]@13 ~@4 d4@7, ~ a2@2 [b2,g3]", // Em Am Em
  R: "[e3,a3,c4,g4]@3 ~ [a3,g4] ~ [a3,c4,g4] ~ [e3,a3,c4,g4]@3 ~ [e3,a3,c4,g4]@5 ~@3 [e3,a3,c4,e4]@5 ~@3 [a3,d4,e4]@4", // Am7 A7 Am7 Am Asus4
  S: "~@16 d4@3 ~ d4@2 f#4@2 d4@4 [g3,b3] ~ [g3,b3] ~, ~ [a3,d4,f#4]@3 ~@4, ~@3 d3@5", // G D
  T: "[[e3,a3,c4,g4]@3 ~ [a3,g4] ~ [e3,a3,c4,g4] ~ [e3,a3,c4,g4]@2 ~@2 [e3,a3,c4,g4]@2 ~@2 [e3,a3,c4,g4]@3 ~ [e3,a3,c4,e4]@5 ~@3 [e4,g4,b4]@5 ~@3 [d4,f#4,a4]@5 ~@3 [e4,g4]@5 ~@11 [a2,d3]@3 ~, ~@7 d3@8 ~, ~@52 [d4,f#4,a4]@11 ~]/2", // Am7 A7 Am7 Am Em D Em D5 …
  U: "[[e3,a3,c4,g4]@3 ~ [a3,g4] ~ [e3,a3,c4,g4] ~ [e3,a3,c4,g4]@2 ~@2 [e3,a3,c4,e4]@2 ~@6 [e3,a3,c4,e4]@5 ~@3 [e4,g4,b4]@5 ~@3 [d4,f#4,a4]@5 ~@3 [e4,g4]@5 ~@11 a2@3 ~, ~@7 d3@8 ~, ~@52 [d4,f#4,a4]@11 ~]/2", // Am7 A7 Am7 Am Em D Em D
  V: "~@14 d4 ~, c3 b2, ~@4 e3@14 ~@2 d3@11 ~, ~@8 g3@12 ~@4 g3@7 ~, ~@3 c4@4 ~",
  W: "[c4@4 ~@20 a2@4 b2@4 ~@24 g3@3 ~ [c3,f3,a3,b3,e4]@7 ~ [e3,a3,c4,e4]@20 a2@4 b2@4, b3 ~@3 a3@11 ~ a3@17 ~@3 e3@14 ~@2 d3@7 ~@37, ~@8 a2@12 c4@17 ~@3 g3@13 ~@43, ~@12 e3@20 c3@16 b2@12 f2@4 ~@4 a2@17 ~@11, ~@11 c4@3 ~@10]/3", // Fmaj7 Am
  X: "[[a2,c4]@4 ~@20 a2@4 b2@4 ~@24 g3@3 ~ [f2,c3,f3,a3,b3,e4]@7 ~ [e3,a3,c4,e4]@20 a2@4 b2@4, b3 ~@3 a3@11 ~ a3@17 ~@3 e3@14 ~@2 d3@7 ~@37, ~@8 a2@12 c4@17 ~@3 g3@13 ~@43, ~@12 e3@20 c3@16 b2@12 ~@8 a2@17 ~@11, ~@11 c4@3 ~@10]/3", // Am Fmaj7 Am
  Y: "~@28 d4@2 ~ b3, c3@15 ~ b2@16, ~@4 e3@14 ~@2 d3@11 ~, ~@8 g3@12 ~@4 g3@7 ~, ~@3 c4@4 ~",
  Z: "[c4@4 ~@19 a2@4 b2@4 ~@24 g3@3 ~ [f2,c3,f3,a3,b3,e4]@5, ~@4 a3@10 ~ a3@17 ~@7 g3@12 ~@13, ~@8 a2@14 ~@9 c3@16 b2@12 ~@5, ~@11 e3@20 ~@4 e3@14 ~@2 d3@7 ~@6, ~@19 c4@16 ~@8 c4@12 ~@9]/2", // Fmaj7
  AA: "[~@3 [e3,a3,c4,e4]@20 a2@3 b2@4 ~@28 d4@2 ~@2 [a2,c4]@4 ~@20 a2@4 b2@4 ~@24 g3@3 [f2,c3,f3,a3,b3,e4]@7, ~@3 a2@17 ~@10 c3@16 b2@16 ~@8 a2@14 ~@10 c3@16 b2@12 ~@6, ~@35 e3@14 ~ d3@11 ~@13 e3@20 ~@4 e3@14 ~@2 d3@7 ~@7, ~@38 g3@12 ~@4 g3@7 ~@5 a3@10 ~@2 a3@17 ~@7 g3@12 ~@14, ~@42 c4@16 ~@4 b3 ~@19 c4@16 ~@8 c4@12 ~@10]/4", // Am Fmaj7
  AB: "[~ [e3,a3,c4,e4]@20 a2@4 b2@4 ~@28 d4@2 ~@2 [e3,a3,c4,g4]@3, ~ a2@17 ~@11 c3@16 b2@15 ~@4, ~@33 e3@14 ~@2 d3@11 ~@4, ~@37 g3@12 ~@4 g3@7 ~@4, ~@41 c4@16 ~@7]/2", // Am Am7
  AC: "~ [a3,g4] ~ [a3,c4,g4] ~ [e3,a3,c4,g4]@3 ~ [e3,a3,c4,g4]@5 ~@3 [e3,a3,c4,e4]@5 ~@3 [a3,d4,e4]@6 ~", // A7 Am7 Am Asus4
  AD: "~@13 d4@3 ~ d4@2 f#4@2 d4@4 [g3,b3] ~ [g3,b3] ~ [e3,a3,c4,g4]@3, ~ [a3,d4,f#4]@12 ~@19, ~@9 d3@22 ~", // G Am7 D
  AE: "[~ [a3,g4] ~ [e3,a3,c4,g4] ~ [e3,a3,c4,g4]@2 ~@2 [e3,a3,c4,g4]@2 ~@2 [e3,a3,c4,g4]@3 ~ [e3,a3,c4,e4]@5 ~@3 [e4,g4,b4]@5 ~@3 [d4,f#4,a4]@5 ~@3 [e4,g4]@5 ~@11 [a2,d3]@3 ~ [e3,a3,c4,g4]@3, ~@25 d3@32 ~@7, ~@49 [d4,f#4,a4]@11 ~@4]/2", // A7 Am7 Am Em D Em D5 Am7 …
  AF: "[~ [a3,g4] ~ [e3,a3,c4,g4] ~ [e3,a3,c4,g4]@2 ~@2 [e3,a3,c4,e4]@2 ~@6 [e3,a3,c4,e4]@5 ~@3 [e4,g4,b4]@5 ~@3 [d4,f#4,a4]@5 ~@3 [e4,g4]@5 ~@11 a2@3 ~@29 d4@2 ~ b3 c4@3, ~@25 d3@32 ~@4 c3@16 b2@17 ~@2, ~@49 [d4,f#4,a4]@11 ~@5 e3@14 ~@2 d3@11 ~@4, ~@69 g3@12 ~@4 g3@7 ~@4, ~@73 c4@16 ~@7]/3", // A7 Am7 Am Em D Em D
  AG: "[~@21 a2@4 b2@4 ~@24 g3@3 ~ [c3,f3,a3,b3,e4]@7, ~ a3@11 ~ a3@17 ~@3 e3@14 ~@2 d3@7 ~@8, ~@5 a2@12 c4@17 ~@3 g3@13 ~@14, ~@9 e3@20 c3@16 b2@12 f2@4 ~@3, ~@41 c4@12 ~@11]/2", // Fmaj7
  AH: "[~ [e3,a3,c4,e4]@20 a2@4 b2@4 ~@28 d4@2 ~ b3 [a2,c4]@4 ~@20 a2@4 b2@4 ~@24 g3@3 ~ [f2,c3,f3,a3,b3,e4]@7, ~ a2@17 ~@11 c3@16 b2@16 ~@8 a2@14 ~@10 c3@16 b2@12 ~@7, ~@33 e3@14 ~@2 d3@11 ~@13 e3@20 ~@4 e3@14 ~@2 d3@7 ~@8, ~@37 g3@12 ~@4 g3@7 ~@5 a3@11 ~ a3@17 ~@7 g3@13 ~@14, ~@41 c4@16 ~@24 c4@17 ~@7 c4@12 ~@11]/4", // Am Fmaj7
  AI: "[~ [e3,a3,c4,e4]@20 a2@4 b2@4 ~@28 d4@2 ~@3 [d3,a3,d4,f#4]@30 [d3,e4]@2 [d3,a3,d4,f#4] ~, ~ a2@17 ~@11 c3@16 b2@16 ~@35, ~@33 e3@14 ~@2 d3@12 ~@35, ~@37 g3@13 ~@3 g3@8 ~@35, ~@41 c4@17 ~@38]/3", // Am D Dsus2 D
  AJ: "[d3,a3,d4,g4]@9 ~@4 [d3,a3,e4] ~ [d3,a3,d4,f#4] ~ [d3,a3,d4,g4]@9 ~@4 [d3,a3,d4,e4] ~", // Dsus4 Dsus2 D Dsus4 Dsus2
  AK: "[d3,a3,d4,f#4] ~ [d3,a3,d4,g4]@6 ~@2 [d3,a3,d4,g4]@7 ~ [d3,a3,d4,f#4]@7 ~ [c3,e3,g3,c4,e4]@6", // D Dsus4 D C
  AL: "[~@2 [g3,c4,e4] ~@3 [g3,c4,f#4]@5 ~@2 [g3,c4,f#4] ~ [g3,c4,f#4] ~@3 g3@4 g3@2 ~@2 g3@4 ~@20 d4@4 b3@2 a3@2 g3@4 [e3,a3,c4,e4]@7 ~ [e3,a3,c4,e4]@7 ~ [e3,g3,c4,e4]@7 ~ [e3,g3,c4,e4]@7 ~ [f3,a3,c4,e4]@6 ~@2 [f3,a3,c4,e4]@5 ~ [f3,a3,c4,e4]@5 ~ [f3,a3,c4,e4]@2 ~@2 [f3,a3,c4,e4]@6 ~@2 [e3,a3,c4,e4]@7 ~ [e3,a3,c4,e4]@7 ~ [e3,g3,c4,e4]@7 ~ [e3,g3,c4,e4]@7 ~ [f3,a3,c4,e4]@6 ~@2 [f3,a3,c4,e4]@5 ~ [f3,a3,c4,e4]@5 ~ [f3,a3,c4,e4]@2 ~@2 [f3,a3,c4,e4]@6 ~@2 [e3,a3,c4,e4]@7 ~ [e3,a3,c4,e4]@7 ~ [e3,g3,c4,e4]@7 ~ [e3,g3,c4,e4]@7 ~ [f3,a3,c4,e4], ~@18 [c4,e4]@2 ~@3 [c4,e4]@8 b2@25 ~@168, ~@39 d3@17 ~@168, ~@43 d4@7 ~@174, ~@47 g4@9 ~@168]/7", // C Am C Fmaj7 Am C Fmaj7 Am …
  AM: "[~@7 [f3,a3,c4,e4]@5 ~ [f3,a3,c4,e4]@5 ~ [f3,a3,c4,e4]@2 ~@2 [f3,a3,c4,e4]@6 ~@2 [e3,a3,c4,e4]@7 ~ [e3,a3,c4,e4]@7 ~ [e3,g3,c4,e4]@7 ~ [e3,g3,c4,e4]@6 ~@2 [f3,a3,c4,e4]@8 [f3,a3,c4,e4]@5 ~ [f3,a3,c4,e4]@5 ~ [f3,a3,c4,e4]@3 ~ [f3,a3,c4,e4]@2 ~@2 [f3,a3,c4,e4]@4 [a2,e3,a3,c4,e4]@2 ~@2 [a2,e3,a3,c4,e4]@3 ~@9 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@3 ~@9 [f2,c3,f3,a3,c4]@2 ~@4 [f2,c3,f3,a3,c4]@2 ~@4 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4] ~@3 [g2,d3,g3,b3,d4]@2 ~@2 [a2,b2,e3,a3,c4,e4]@2 ~@2 [a2,e3,a3,c4,e4]@3 ~@9 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@3 ~@9 [f2,c3,f3,a3,c4]@2 ~@4 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@2 ~@2 [g2,d3,g3,b3,d4]@2 ~@2 [a2,e3,a3,c4,e4]@2 ~@2 [a2,e3,a3,c4,e4]@3 ~@9 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@3 ~@9 [f2,c3,f3,a3,c4]]/8", // Fmaj7 Am C Fmaj7 Am G F G …
  AN: "[~@5 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4] ~@3 [g2,d3,g3,b3,d4]@2 ~@2 [a2,e3,a3,c4,e4]@2 ~@2 [a2,e3,a3,c4,e4]@3 ~@9 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@3 ~@9 [f2,c3,f3,a3,c4]@2 ~@4 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@2 ~@2 [g2,d3,g3,b3,d4]@2 ~@2 [a2,e3,a3,c4,e4]@2 ~@2 [a2,e3,a3,c4,e4]@3 ~@9 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@3 ~@9 [f2,c3,f3,a3,c4]@2 ~@4 [f2,c3,f3,a3,c4]@2 ~@4 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4] ~@3 [g2,d3,g3,b3,d4]@2 ~@2 [a2,e3,a3,c4,e4]@2 ~@2 [a2,e3,a3,c4,e4]@3 ~@9 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@3 ~@9 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@2 ~@4 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@3 ~@3 [f2,c3,f3,a3,c4]@2 ~@2 [g2,d3,g3,b3,d4] ~@3 [a2,e3,a3,c4,e4]]/7", // F G Am G F G Am G …
  AO: "[~@3 [a2,e3,a3,c4,e4]@5 ~@7 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@4 ~@8 [f2,c3,f3,a3,c4]@4 ~@2 [f2,c3,f3,a3,c4]@4 ~@2 [f2,c3,f3,a3,c4]@4 ~@2 [f2,c3,f3,a3,c4]@4 ~@2 [f2,c3,f3,a3,c4] ~@3 [g2,d3,g3,b3,d4]@2 ~@2 [a2,e3,a3,c4,e4]@2 ~@2 [a2,e3,a3,c4,e4]@4 ~@8 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@2 ~@6 [f2,c3,a3,c4,e4]@10 ~@2 [f2,c3,a3,c4,e4]@8 ~@4 [f2,c3,a3,c4,e4] ~@3 [f2,c3,a3,c4,e4]@2 ~@2 [f2,c3,a3,c4,e4]@2 ~@2 [a2,e3,a3,c4,e4]@2 ~@2 [a2,e3,a3,c4,e4]@3 ~@9 [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4]@2 ~@6 [f2,c3,a3,c4,e4]@5]/5", // Am G F G Am G Fmaj7 Am …
  AP: "[~@3 [f2,c3,a3,c4,e4]@2 ~@2 [f2,c3,a3,c4,e4]@2 ~@2 [f2,c3,a3,c4,e4]@2 ~@2 [f2,c3,a3,c4,e4]@2 ~@2 [f2,c3,a3,c4,e4] ~ [f2,c3,a3,c4,e4]@2 [f2,c3,a3,c4,e4] ~ [f2,c3,a3,c4,e4] ~ [f2,c3,a3,c4,e4] ~@3 [e3,a3,c4,e4]@7 ~ [e3,a3,c4,e4]@4 ~@2 [e3,a3,c4,e4] ~ [e3,g3,c4,e4]@3 ~ [e3,g3,c4,e4]@2 ~@2 [e3,g3,c4,e4]@3 ~ [e3,g3,c4,e4] ~ [e3,g3,c4,e4] ~ [f3,a3,c4,e4]@6 ~@2 [f3,a3,c4,e4]@13 ~@3 [f3,a3,c4,e4]@5 ~@3 [e3,a3,c4,e4]@7 ~ [e3,a3,c4,e4]@6 ~@2 [e3,g3,c4,e4]@6 ~@2 [e3,g3,c4,e4]@5 ~@3 [c4,e4]@4 ~@8 c4@7 ~ [f3,a3,c4,e4]@2 ~@2 [f3,a3,c4,e4]@7 ~ [e3,a3,c4,e4]@2 ~@2 [e3,a3,c4,e4]@2 ~@2 [e3,a3,c4,e4]@6 ~@2 [e3,g3,c4,e4]@3 ~ [e3,g3,c4,e4]@2 ~@2 [e3,g3,c4,e4]@3 ~ [e3,g3,c4,e4]@2 ~@2 [f3,a3,c4,e4]@2 ~@2 [f3,a3,c4,e4]@2 ~@2 [f3,a3,c4,e4]@10 ~@2 [f3,a3,e4]@3 ~ [f3,a3,c4,e4]@3 ~ [f3,g3,a3,c4,e4]@2 ~@2 [e3,a3,c4,e4]@7 ~ [e3,a3,c4,e4]@7 ~@2 [e3,g3,c4,e4]@7 ~@3 [e3,g3,c4,e4]@6, ~@31 f4 ~@95 a3@19 ~@65 c4 ~@44, ~@127 f3@3 ~ f3@15 ~@110, ~@135 e4@11 ~@110]/8", // Fmaj7 Am C Fmaj7 Am C Fmaj7 Am …
  AQ: "[~@4 [f3,a3,c4,e4]@101 ~@23]/4", // Fmaj7
})).s("gm_acoustic_guitar_steel").gain(0.32)

// chords · acoustic guitar steel · "Guitar 2"
const acoustic_guitar_steel_2 = note("<~@83 A ~ B C ~ D ~@12 E F ~@2 E G ~@2 H ~ I ~@40>".pickRestart({
  A: "~@7 a3@14 ~@11, ~@3 a4@10 ~@19", B: "~@11 a3@2 ~@3", C: "~ e4@7 ~@8",
  D: "~@21 g4@3 ~@8, ~@13 b3@12 ~@7, ~@17 d4@7 ~@8", E: "~@24 f4@7 ~", F: "[a4,e5]@5 a3 b3 ~", G: "[a4,e5]@5 ~@3",
  H: "~@12 e5 ~@16 [d4,a4,e5] ~@2", I: "~@12 [g4,c5,f#5] ~ [g4,c5,f#5] ~@3 g4@4 [c5,e5]@9 ~",
})).s("gm_acoustic_guitar_steel").gain(0.32).pan(0.6)

// chords · electric guitar muted · "Guitar 4"
const electric_guitar_muted = note("<~@121 A B A B A B A B A B A B A B ~@17>".pickRestart({
  A: "~@7 [d3,e3,f3] ~ [b2,c3,d3] ~ [e3,f3,g3] ~ [b2,c3,d3] ~@9 [e3,f3,g3] ~ [c3,d3] ~ [e3,f3,g3] ~ [b2,c3,d3] ~@2", // Dm Bm Em Bm Em Csus2 Em Bm
  B: "~@3 [e3,f3,g3] ~@3 [e3,f3,g3] ~ [c3,d3] ~@3 [e3,f3,g3] ~ [c3,d3,e3] ~@3 [e3,f3,g3] ~ [c3,d3,e3] ~@10", // Em Csus2 Em C Em C
})).s("gm_electric_guitar_muted").gain(0.17).pan(0.4)

// other · overdriven guitar · "Solo Guitar 1"
const overdriven_guitar = note("<~@112 A@4 B@6 ~@16 C@5 D@5 ~@4>".pickRestart({
  A: "[~@31 e4@12 ~@4 a4@2 g4@2 e4@2 d4@2 c4@2 a3 ~ d4@2 c4@2 a3@2 g3@2 f3@6 ~@10 a4@4 c5@2 ~@2 c5@2 ~@2 c5@7 ~ c5@4 a4@2 ~@2 a4@7 ~ c5@4 ~@2 c5@3]/4",
  B: "[~ g4@4 f4@2 g4@7 ~@7 e4@2 a4@2 g4@2 e4@2 d4@2 c4@2 a3 ~ c4@4 a3@2 g3@2 e3@2 g3@2 a3@4 c4@2 a3@2 c4@3 ~ c4@4 g3@2 ~@2 a4@2 g4@2 e4@2 d4@2 c4@2 a3 ~ d4@2 c4@2 a3@2 g3@2 f3@5 ~@3 a3@3 ~ c4@2 e4 ~ d4@2 c4@2 a3@2 c4@2 d4@2 e4@2 g4@2 e4@2 g4@2 a4 ~ c5@4 e5@4 d5@2 c5@2 d5@2 c5 ~ c5 ~ g5@5 ~ g5@2 e5 ~ e5@2 d5@2 c5@2 a4 ~ c5@16 ~@17]/6",
  C: "[~@31 a4@20 c5@2 ~@2 d5@2 a4@4 ~@2 a4@5 ~@3 a4@14 ~@2 d4@8 e4@16 g4@8 a4@3 ~@5 c5@21 ~@3 b4@9]/5",
  D: "[~@3 c5@12 b4@12 c5@12 b4@12 c5@8 d5@12 c5@9 b4@10 d5@10 c5@44 ~@16]/5",
})).s("gm_overdriven_guitar").gain(0.48).pan(1)

// other · recorder · "Recorder 1"
const recorder = note(`<
  ~@3 A B C D E F G H I F J F K B C L M B C L N O P Q M F G F R B C R M B C D S ~@112
>`.pickRestart({
  A: "g3@2 a3 ~ a3@11 ~", B: "a3 g#3", C: "g3 f#3", D: "f3", E: "a3@5 ~@3 a3@24", F: "c4 d4", G: "f4@4 a3@3 b3",
  H: "c4 b3", I: "d4@3 ~ d4@8 ~@4", J: "f4@3 g4 a4@4", K: "f3 ~", L: "f3@7 ~", M: "g3@4 a3 ~@3 a3@16 ~@8",
  N: "g3@4 a3@2 ~@3 a3@15 ~@8", O: "c4@8 d4@7 ~", P: "d4@2 c4 b3 c4@3 d4", Q: "e4@15 ~ d4@16", R: "f3@3 ~",
  S: "g3@5 a3 ~@3 a3@16 ~@7",
})).s("gm_recorder").gain(0.24).pan(0.9)

// other · recorder · "Recorder 2"
const recorder_2 = note("<~@4 A@2 B C D E F G H I J K ~@4 A@2 L C ~@4 M N D O A@2 B C P@2 B Q ~@112>".pickRestart({
  A: "[e4@3 d4]/2", B: "c4@7 ~", C: "g4@4 a4 ~@3 a4@15 ~@9", D: "g4@15 ~ a4@16", E: "c5@8 a4@5 ~@3 a4@12 g4@3 ~",
  F: "g4@15 ~ g4@16", G: "b4@4 a4 ~@3 a4@16 ~@8", H: "g4@8 c5@4 b4@2 ~@2 b4@4 a4@2 ~ a4 g4@5 ~ g4@2", I: "c5 d5 e5@2",
  J: "c5 a4", K: "e4@4 f4 ~@3 f4@16 ~@8", L: "c4@31 ~", M: "g4@4 c5@2 b4 ~ b4@2 a4@2 g4@2 f#4@2", N: "a4@2 b4@2 c5@3 ~",
  O: "b4@4 c5 ~@3 c5@21 ~@3", P: "[e4@47 d4@17]/2", Q: "g4@4 a4 ~@4 a4@14 ~@9",
})).s("gm_recorder").gain(0.19).pan(0.7)

// other · recorder · "Recorder 3"
const recorder_3 = note("<~@4 A B@2 C D E F G H I J K ~@4 A B@2 C ~@6 F L A B@2 C A B@2 C ~@112>".pickRestart({
  A: "c5", B: "a4@31 ~", C: "b4@4 c5 ~@3 c5@16 ~@8", D: "c5@15 d5@16 ~", E: "f5@2 d5@2 c5@3 d5", F: "e5 d5",
  G: "g5@4 f#5 ~@3 f#5@15 ~@9", H: "~ c5@7 e5@8 d5@8 a4@8, e5 ~@3", I: "f5@3 g5 a5@4", J: "g5 f#5", K: "c5@25 ~@7",
  L: "e5@25 ~@7",
})).s("gm_recorder").gain(0.16)

// other · recorder · "Recorder 4"
const recorder_4 = note("<~@4 A B C D E F G@2 H I J K ~@3 L@2 B C D ~@6 M K A B@2 D N@2 B D ~@112>".pickRestart({
  A: "e5", B: "c5@31 ~", C: "c5@29 ~@3", D: "d5@4 e5 ~@3 e5@16 ~@8", E: "e5 f#5", F: "a5@8 g5@3 f5@5 e5@12 g5 ~@3",
  G: "[g5@15 ~ g5@13 ~@2 g5@4 ~ a5 ~@3 a5@15 ~@9]/2", H: "e5@8 a5@4 g5 ~@3 g5@4 f#5@4 e5@4 a5@3 ~",
  I: "a5@9 c6@3 b5@2 ~@2 c6@12 d6@4", J: "e6 d6", K: "g5@3 ~ a5 ~@3 a5@16 ~@8", L: "[~@31 e5@32 ~]/2", M: "g5 f#5",
  N: "[e5@31 c5@31 ~@2]/2",
})).s("gm_recorder").gain(0.14).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@81 A B C D E F@2 G H I J K L M N K N O P Q R S T U V S W ~@2 X Y Z AA AB AC AD AC@3 AE Y AF Y AF Y AF Y AF Y AF Y AF
  AG AH AI AJ AI AK AA@2 AL AM AA AN AO AP ~@5
>`.pickRestart({
  A: "~@7 x", B: "x!2", C: "x ~@15 x ~@3 x ~@6 x ~@3 x", D: "~@15 x ~@11 x ~@4", E: "~@3 x ~@15 x ~@7 x ~@3 x",
  F: "~@7 x ~ x ~@3 x ~ x", G: "~@14 x ~@10 x ~@6", H: "~ x ~@15 x ~@7 x ~@3 x ~@2", I: "~@13 x ~@15 x ~@2",
  J: "~@9 x ~@7 x ~@7 x ~@3 x ~@2", K: "~ x ~@11 x ~@5 x ~ x ~@7 x ~@2", L: "~@9 x ~@7 x ~@14",
  M: "~ x ~@7 x ~@15 x ~@3 x ~@2", N: "~@9 x ~@7 x ~@7 x ~@6", O: "~ x ~@7 x ~@19 x ~@2", P: "~ x ~@9 x ~ x ~@15 x ~@2",
  Q: "~@13 x ~@13 x ~ x ~@2", R: "~@13 x ~@11 x ~@6", S: "~ x ~@15 x ~@11 x ~@2", T: "~@13 x ~@3 x ~@7 x ~@3 x ~@2",
  U: "~@11 x ~ x ~@3 x ~@7 x ~@3 x ~@2", V: "~@11 x ~ x ~@11 x ~@6", W: "~ x ~@7 x ~@3 x ~@3 x ~@12 x ~",
  X: "~@13 x ~@2", Y: "~@3 x ~@11 x ~@3 x ~@11 x", Z: "~@27 x ~@3 x", AA: "~@15 x ~@3 x ~@9 x ~ x",
  AB: "~@11 x ~@3 x ~@5 x ~@3 x ~@5 x", AC: "~@3 x ~@9 x ~ x ~@3 x ~@9 x ~ x", AD: "~@3 x ~@11 x ~@5 x ~@5 x ~@3 x",
  AE: "~@3 x ~@5 x ~ x ~ x ~ x ~ x ~ x ~ x ~@3 x ~ x ~ x ~ x", AF: "~@5 x ~@5 x ~@5 x ~@5 x ~@3 x ~@3 x",
  AG: "~@3 x ~@11 x ~@3 x ~@12", AH: "~@3 x ~@5 x ~@5 x ~@5 x ~@9 x", AI: "~@3 x ~@11 x ~@3 x ~@7 x ~@4",
  AJ: "~@3 x ~@11 x ~@15 x", AK: "~@3 x ~@9 x ~ x ~@15 x", AL: "~@15 x ~@3 x ~@11 x",
  AM: "~@3 x ~@11 x ~@5 x ~@7 x ~ x", AN: "~@15 x ~@13 x ~ x", AO: "~@16 x ~@4 x ~@10", AP: "~ x ~@6",
})).gain(0.7)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@84 A ~@7 B ~@3 C ~@4 D ~@3 E ~@6 F ~@22 G A ~@15>".pickRestart({
// … 59 more lines

More by Led Zeppelin