0:00/0:00
// Hots On for Nowhere — Led Zeppelin
// 96 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 95, 4/4 at bar 95, 3/4 at bar 96, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 3 "Guitar 1" named as a guitar, played on electric guitar clean (its lead 5 charang patch is not one)
// note: Full arrangement: all 114 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): Guitar 3.
setcpm(96/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 · electric guitar clean · "Guitar 1"
const electric_guitar_clean = note("<~@54 A@2 B C D@2 E F G H I J ~ K ~@46>".pickRestart({
A: "[~@6 [e4,b4,e5,g#5] [d4,a4,d5,f#5] [e4,b4]@4 b4 d4@9 d4@2 e5 d5@5 g#4 [b4,c#5], ~ [e5,g#5] ~@2]/2", // E D E5 Bsus2 E
B: "e5@2 f#5@4 g5 g#5@2 f#5 g#5@4 g5 g#5", C: "a5@4 b5@3 b5 g#5 f#5 d5@4 ~@2",
D: "[~@2 a#5@4 b5 b5@2 a#5 g#5@2 e6@6 e5 g5 ~@3 a5 b5 b5@4 ~@2 b5, ~@25 a5 ~@6]/2",
E: "a5 g5@5 g#5 a5!2 a5@6 [g#5,a5]", F: "g5 e5!2 d5 e5 d5 e5 d5 e5 [e5,g#5] d5@4 d4@2",
G: "b4!2 e5 d5@2 e5@4 [e4,e5]@3 g5 e5@3", H: "g5 [d5,e5]@2 g5@2 d5 e5@3 e5 d5 a4@3 ~ b4",
I: "~ b5 ~ a5 g#5 a5 ~ g5 a5@3 a5 g5@2 g#5@2", J: "g#5@2 a4 [b4,d5] g5 [g5,b5]@2 [g5,b5] ~@8",
K: "~@9 [f#5,g#5,a5,b5] [g#5,b5] [f#5,g#5,a5,b5]!2 [f#5,a5] [g#5,b5] ~", // G#m7 G#m G#m7 F#m G#m
})).s("gm_electric_guitar_clean").gain(0.54).pan(0.8)
// other · overdriven guitar · "Guitar 2" · A5 A
const overdriven_guitar = note(`<
~@93
[~ [e5,a5] c#5 e5 [e5,a5] g5 f#5 e5 b5 a5 g5 f#5 e5 c5 c#5 e5]
[a5 g5 f#5 e5 c5 c#5 [a4,c#5,e5]@2 ~ [a4,c#5,e5,a5]@2 [a4,c#5,e5,a5]@3 ~@2]
~@19
>`).s("gm_overdriven_guitar").gain(0.4)
// other · distortion guitar · "Guitar 3"
const distortion_guitar = note("<~@93 [~ c4 ~@2 b4 ~@11] ~@20>").s("gm_distortion_guitar").gain(0.4).pan(0.8)
// chords · overdriven guitar · "Guitar 4"
const overdriven_guitar_2 = note(`<
~@15 A B C D ~@11 A B C D ~@11 E@2 F@2 G@4 H ~@11 I J K L M@12 N O@2 P@8 Q ~@2 R S@2 T U T U T U T U T U T V W X Y Z
>`.pickRestart({
A: "~@11 [g#4,b4]!3 [f#4,a4] [e4,g#4,b4]", // G#m F#m E
B: "~ g4 [e4,g#4]!2 [d4,f#4] c#4@2 [g#4,b4]!3 [f#4,a4] [e4,g#4,b4] ~ [e4,g#4] e4 [e4,g#4]", // E D G#m F#m E
C: "[d4,f#4] d4 c4 c#4 a3@2 [g#4,b4]!2 [f#4,a4] [e4,g#4,b4] ~ g#4 [e4,g#4]!2 [d4,f#4] c#4", // D G#m F#m E D
D: "~ g4 [g#4,b4]!2 [f#4,a4] [e4,g#4] ~ g#4 [e4,g#4]!2 [d4,f#4] d4 c4 c#4 a3!2", // G#m F#m E D
E: "[~@15 e3@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@3 [c#5,e5]@2 ~ [f4,a4] [f#4,a4] [a4,d5,f#5]@3 [b4,d5,f#5]@2]/2", // G G#m E C#m F F#m D Bm
F: "[~ [c4,e4] [c#4,e4] [e4,a4]@2 [e4,a4] f#4 e4 e4@2 f#4@2 [e4,a4] [f#4,b4] e3 e3@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@3 [c#5,e5]@2 ~ [f4,a4] [f#4,a4] [a4,d5,f#5]@3 [b4,d5,f#5]@2]/2", // C C#m A5 B5 G G#m E C#m …
G: "[~ [c4,e4] [c#4,e4] [e4,a4]@2 [e4,a4] f#4 e4 e4@2 f#4@2 [e4,a4] [f#4,b4] a3 e3@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@3 [c#5,e5]@2 ~ [f4,a4] [f#4,a4] [a4,d5,f#5]@3 [b4,d5,f#5]@2]/2", // C C#m A5 B5 G G#m E C#m …
H: "~ [c4,e4] [c#4,e4] [e4,a4]@2 [e4,a4] f#4 e4 e4@2 f#4@2 [e4,a4] [f#4,b4] a3 e3", // C C#m A5 B5
I: "~@11 [g4,b4]!3 [f#4,a4] [e4,g4,b4]", // G F#m Em
J: "~ g4 [e4,g4]!2 [d4,f#4] c#4@2 [g4,b4]!3 [f#4,a4] [e4,g4,b4] ~ [e4,g4] e4 [e4,g4]", // Em D G F#m Em
K: "[d4,f#4] d4 c4 c#4 a3@2 [g4,b4]!2 [f#4,a4] [e4,g4,b4] ~ g4 [e4,g#4]!2 [d4,f#4] c#4", // D G F#m Em E D
L: "~ g4 [g4,b4]!2 [f#4,a4] [e4,g4]@2 g4 [e4,g4]!2 [d4,f#4] d4 c4 c#4 a3!2", M: "[~@7 [e3,b3]@17 ~@8]/2",
N: "~@15 e5",
O: "[[c#5,e5]!2 [b4,d5] [d4,b4,d5] [a4,c#5]!2 [b4,d5]!2 [a4,c#5]!2 f#4!2 e4 c4 c#4 e3@3 ~@13 e5, ~@2 d4@3 ~@11]/2", // C#m Bm G A Bm A
P: "[[c#5,e5]!2 [b4,d5]!2 [a4,c#5]!2 [b4,d5]!2 [a4,c#5]!2 f#4!2 e4 c4 c#4 e3@3 ~@13 e5]/2", // C#m Bm A Bm A
Q: "[c#5,e5]!2 [b4,d5]!2 [a4,c#5]!2 [b4,d5]!2 [a4,c#5]!2 f#4!2 e4 c4 c#4 a3", R: "~@12 a4 g4 f#4 e4",
S: "[c4 c#4 [e4,a4]@2 ~ [e4,a4]@2 [e4,a4] a3@16 ~@8]/2", T: "~@7 e5 [c#5,e5]!2 [b4,d5]!2 [a4,c#5]!2 [b4,d5]!2",
U: "[a4,c#5]!2 f#4!2 e4 c4 c#4 e3@3 ~@6", // A
V: "[a4,c#5]!2 f#4!2 e4 c4 c#4 [a3,e4,a4,c#5]@2 [e4,a4] c#4 e4 a4 g4 f#4 e4", // A A5
W: "b4 a4 g4 f#4 e4 c4 c#4 e4 a4 g4 f#4 e4 c4 c#4 [e4,a4]@2", // A5
X: "~ [e4,a4]@2 [a3,e4,a4,c#5]@2 [e4,a4] c#4 e4 a4 g4 f#4 e4 b4 a4 g4 f#4", // A5 A A5
Y: "e4 c4 c#4 e4 a4 g4 f#4 e4 c4 c#4 [e4,a4]@2 ~ [e4,a4] [e4,a4]@2", Z: "[a3,e4,a4]@3 ~@5",
})).s("gm_overdriven_guitar").gain(0.47).pan(0.9)
// chords · distortion guitar · "Guitar 5"
const distortion_guitar_2 = note("<~@98 A B A B A B A B A B C D ~@4>".pickRestart({
A: "~@7 [e5,g5] [f#5,a5]!2 [e5,g5]!2 [c#5,e5]!2 [d5,f#5]!2", B: "[c#5,e5]!2 b4!2 a4 f#4!2 f#4@3 ~@6",
C: "~@7 [e5,g5] [f#5,a5]!2 [e5,g5]!2 [c#5,e5] c#5 d5 c#5", D: "c#5!2 a4@2 a4 e4 a3@2 ~@8",
})).s("gm_distortion_guitar").gain(0.4).pan(0.9)
// chords · distortion guitar · "Guitar 6"
const distortion_guitar_3 = note(`<
A@2 B C B C B C B C B C B C B D E F G@2 H I J K L B M B M B D E F N@2 O@2 P@6 Q R S@2 T@2 U@4 V W C B C B C B C B C B
X E F Y@2 Z AA AB AC AD AC AD AC AD AC AE@2 AF@10 AG@2 AH AI AJ@2 AK AL AM AL AM AN AM AN AM AN AO AP AQ AR ~@2
>`.pickRestart({
A: "[~@18 c#4!2 a3 b3 e4 [e3,b3] ~@7 f#4, ~@15 f#4@2 g#4@3 ~@12, ~@8 d4 ~@7]/2", // E5
B: "[d4,f#4]!2 c#4!2 a3 b3 e4 [e3,b3] ~@7 f#4", // D E5
C: "[d4,f#4]!2 c#4!2 a3 b3 [b3,e4] [d4,a4,d5] ~ [e4,b4,e5]@2 g4 g#4 [b4,e5]@2 f#4", // D E5 D5 E5
D: "[d4,f#4]!2 c#4!2 a3 [b3,e4]@2 [d4,a4,d5] ~ [e4,b4,e5]@2 c#4!2 e4 f#4 a3", // D E5 D5 E5
E: "~ c4 c#4 e4 f#4 g4@2 c4 c#4 e4 f#4 g#4 ~ c4 c#4 e4", F: "f#4 e4 c4 c#4 a3 c4 c#4 e4 f#4 a3@2 c4 c#4 e4 f#4 g4",
G: "[~ c4 c#4 e4 f#4 g4@2 c4 c#4 e4 f#4 a3 c4 c#4 a3 [d4,f#4]@2 [d4,f#4] c#4!2 a3 b3 e4 [e3,b3] ~@7 [d4,f#4,g4]]/2", // D E5 Gmaj7
H: "[d4,f#4,g4] [d4,f#4] c#4!2 a3 b3 e4 [d4,a4] ~ [e4,b4,e5]@2 g4 g#4@2 [b4,e5] [a4,e5]", // Gmaj7 D D5 E5 A5
I: "d4 f#4 c#4!2 a3 e4!2 e3 ~@7 [d4,f#4]", // D
J: "[d4,f#4]!2 c#4!2 a3 [b3,e4]@2 [d4,a4,d5] ~ [e4,b4,e5]@2 [g4,b4] [g#4,b4] [b4,e5]@2 e4", // D E5 D5 E5 G G#m E5
K: "[d4,f#4] f#4 c#4!2 a3 b3 e4 [e3,b3] ~@7 [c#4,f4]", // D E5 C#
L: "[d4,f#4]!2 c#4!2 a3 b3 e4 [d4,a4,d5] ~ [e4,b4,e5]@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@2 f#4", // D D5 E5 G G#m E
M: "[d4,f#4]!2 c#4!2 a3 b3 [b3,e4] [d4,a4,d5] ~ [e4,b4,e5]@2 [g4,b4] g#4 [b4,e5]@2 f#4", // D E5 D5 E5 G E5
N: "[~ c4 c#4 e4 f#4 g4@2 c4 c#4 e4 f#4 a3 c4 c#4 a3 [d4,b4]@2 ~@2 g4 ~@2 e3 [b3,g#4]@2 g#4 [c#4,a4] [b3,g#4]@2 g#4 [c#4,a4]!2, ~@17 b4@2 ~@2 g#4@2 ~@9, ~@9 c#4 [b3,d4,g4] ~@5]/2", // G E F#m E F#m G
O: "~ b4 ~ g4!2 g#4 [b4,e5] [e3,b3,d4,g#4]@2 [b3,g#4] [c#4,a4] [b3,d4,g#4]@2 [b3,g#4] [c#4,a4]!2, [d4,b4]@2 [c#4,a4]@2 b3@3 ~@9", // E5 E7 E F#m G#dim E F#m G …
P: "~ b4 ~ g4!2 [d4,g#4]@2 [e3,b3,d4,g#4]@2 [b3,g#4] [c#4,a4] [b3,d4,g#4]@2 [b3,g#4] [c#4,a4]!2, [d4,b4]@2 [c#4,a4]@2 b3@3 ~@9", // Ddim E7 E F#m G#dim E F#m G …
Q: "b4!2 a4 g4!2 g#4@2 [d4,a4,d5] ~ [e4,b4,e5]@2 [b4,e5,g#5]!2 [b4,e5,g#5]@2 a4", // D5 E5 E
R: "~ b4 ~ g4!2 [d4,g#4]@2 [e3,b3,d4,g#4]@2 [b3,g#4] [c#4,a4] [b3,d4,g#4]@2 [b3,g#4] [c#4,a4]!2, [d4,b4]@2 [d4,a4]@2 b3@3 ~@9", // Ddim E7 E F#m G#dim E F#m G …
S: "[~ b4 ~ g4!2 g#4 e4 [d4,a4,d5] ~ [e4,b4,e5] ~ g4 ~ [b4,e5,g#5] ~ e3@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@3 [c#5,e5]@2 ~ [f4,a4] [f#4,a4] [a4,d5,f#5]@3 [b4,d5,f#5]@2, [d4,b4]@2 [c#4,a4]@2 b3@3 ~@5 g#4@2 ~@18]/2", // D5 E5 E G G#m E C#m F …
T: "[~ [c4,e4] [c#4,e4] [e4,a4]@2 [e4,a4] f#4 e4 e4@2 f#4@2 [e4,a4] [f#4,b4] e3 e3@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@3 [c#5,e5]@2 ~ [f4,a4] [f#4,a4] [a4,d5,f#5]@3 [b4,d5,f#5]@2]/2", // C C#m A5 B5 G G#m E C#m …
U: "[~ [c4,e4] [c#4,e4] [e4,a4]@2 [e4,a4] f#4 e4 e4@2 f#4@2 [e4,a4] [f#4,b4] a3 e3@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@3 [c#5,e5]@2 ~ [f4,a4] [f#4,a4] [a4,d5,f#5]@3 [b4,d5,f#5]@2]/2", // C C#m A5 B5 G G#m E C#m …
V: "~ [c4,e4] [c#4,e4] [e4,a4]@2 [e4,a4] f#4 e4 e4@2 f#4@2 [e4,a4] [f#4,b4] a3 [d4,f#4]", // C C#m A5 B5 D
W: "[d4,f#4] f#4 c#4!2 a3 b3 e4 [e3,b3] ~@7 f#4", // D E5
X: "[d4,f#4]!2 c#4!2 a3 b3 ~ [d4,a4,d5] ~ [e4,b4,e5]@2 c4 c#4 e4 f#4 a3", // D D5 E5
Y: "[~ c4 c#4 e4 f#4 g4@2 c4 c#4 e4 f#4 a3 c4 c#4 a3 [d4,f#4]@2 f#4 c#4!2 a3 e4!2 [e3,b3]@8 [c#4,f4]]/2", // D E5 C#
Z: "[d4,f#4] f#4 c#4@2 a3 b3 e4 [d4,a4,d5] ~ [e4,b4,e5]@2 g4 g#4 [b4,e5,g#5] [a4,d5,f#5] [c#4,f4]", // D D5 E5 E D C#
AA: "[d4,f#4] f#4 c#4@2 a3 [b3,e4]!2 [e3,b3]@8 [c#4,f4]", // D E5 C#
AB: "[d4,f#4] f#4 c#4!2 a3 e4!2 [d4,a4,d5] ~ [e4,b4,e5]@2 [b4,e5] [b4,e5,g#5]!2 [a4,d5,f#5] [c#4,f4]", // D D5 E5 E D C#
AC: "[d4,f#4] f#4 c#4!2 a3 e4!2 [e3,b3]@8 [c#4,f4]", // D E5 C#
AD: "[d4,f#4] f#4 c#4!2 a3 e4!2 [d4,a4,d5] ~ [e4,b4,e5]@2 [g4,b4] [g#4,b4] [b4,e5,g#5] [a4,d5,f#5] [c#4,f4]", // D D5 E5 G G#m E D C#
AE: "[[d4,f#4] f#4 c#4!2 a3 b3 e4 [d4,a4,d5] ~ [e4,b4,e5]@2 g4 g#4 [b4,e5]@2 g#3@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@3 [c#5,f#5]@2 ~ [f4,a4] [f#4,a4] [a4,d5,f#5]@3 [b4,e5]@2]/2", // D D5 E5 G G#m E F#5 F …
AF: "[~ c4 c#4 [e4,a4]@2 [e4,a4] f#4 e4 e4@2 f#4@2 [e4,a4] [f#4,b4] a3 e3@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@3 [c#5,f#5]@2 ~ [f4,a4] [f#4,a4] [a4,d5,f#5]@3 [b4,e5]@2]/2", // A5 B5 G G#m E F#5 F F#m …
AG: "[~ c4 c#4 [e4,a4]@2 [e4,a4] f#4 e4 g4@2 f#4@2 e4 f#4 a3 a3@5 ~@12]/2", AH: "~@11 a3@2 c4 c#4 e4",
AI: "a4 g4 f#4 e4 b4 a4 g4 f#4 e4 c4 c#4 e4 a4 g4 f#4 e4",
AJ: "[c4 c#4 [e4,a4]@2 ~ [e4,a4]@2 [e4,a4] [a3,e4]@15 e3@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@3 [c#5,e5]@2]/2", // A5 G G#m E C#m
AK: "~ [f4,a4] [f#4,a4] [a4,d5,f#5]@3 [b4,e5]@2 ~ [c4,e4] [c#4,e4] [e4,a4]@2 [e4,a4] f#4 e4", // F F#m D E5 C C#m A5
AL: "e4@2 f#4@2 [e4,a4] [f#4,b4] a3 e3@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@3 [c#5,e5]@2", // A5 B5 G G#m E C#m
AM: "~ [f4,a4] [f#4,a4] [a4,d5,f#5]@3 [b4,d5,f#5]@2 ~ [c4,e4] [c#4,e4] [e4,a4]@2 [e4,a4] f#4 e4", // F F#m D Bm C C#m A5
AN: "e4@2 f#4@2 [e4,a4] [f#4,b4] a3 e3@2 [g4,b4] [g#4,b4] [b4,e5,g#5]@3 [c#5,f#5]@2", // A5 B5 G G#m E F#5
AO: "~ [f4,a4] [f#4,a4] [a4,d5,f#5]@3 [b4,d5,f#5]@2 ~ c4 c#4 [e4,a4]@2 [e4,a4] f#4 e4", // F F#m D Bm A5
AP: "[e4,a4]@2 [f#4,b4]@2 [e4,a4] a3 e3 [a3,e4,a4,c#5]@2 [e4,a4] c#4 e4 a4 g4 f#4 e4", // A5 B5 A5 A A5
AQ: "b4 a4 g4 f#4 e4 c4 c#4 e4 a4 g4 f#4 e4 c4 c#4 [e4,a4]@2", AR: "~ [e4,a4]@2 [a3,e4,a4,c#5]@2 ~@11",
})).s("gm_distortion_guitar").gain(0.48).pan(0.2)
// bass · fretless bass · "Bass"
const bass = note(`<
~ A B C B D B C B C B D B C B E F G H B I J I B I B I B I B E F G H K@4 L M N@3 I O P@8 Q B C B C B C B C B C B R S T
U V W V X V X V X V X V Y@8 Z@6 AA ~ AB@3 AC@2 AD@2 AE@2 AF@2 AG@2 AH ~ AI ~ AJ
>`.pickRestart({
A: "d2@2 c#2!2 b1 c#2 d2 e1 ~@8", B: "d2@2 c#2!2 b1 c#2 e2 e1 ~@8",
C: "d2@2 c#2!2 b1 c#2 e2 c#2 ~ e2@2 g#1!2 b1 c#2 b1", D: "d2@2 c#2!2 b1 c#2 e2 c#2 ~ e2 ~ g#1!2 b1 c#2 b1",
E: "d2@2 c#2!2 b1 c#2 e2 d2 ~ e2@2 c#2!2 e2 f#2 a1", F: "~ c#2!2 e2 f#2 g#2@2 c#2!2 e2 f#2 g#2 ~ c#2!2 e2",
G: "f#2 e2 c#2!2 a1 c#2!2 e2 f#2 a1@2 c#2!2 e2 f#2 g#2", H: "~ c#2!2 e2 f#2 g#2@2 c#2!2 e2 f#2 a1 c#2!2 a1 c#2",
I: "d2@2 c#2!2 b1 c#2 e2 d2 ~ e2@2 g#1!2 b1 c#2 b1", J: "d2 ~ c#2!2 b1 c#2 e2 e1 ~@8",
K: "d2@2 c#2!2 b1 c#2 e2 e1@3 ~@6", L: "d2@2 c#2!2 b1 c#2 e2 e1@4 e1@5", M: "d2@2 c#2!2 b1 c#2 e2 e1@3 e2 e1@3 e2@2",
N: "d2@2 c#2!2 b1 c#2 e2 e1@3 ~ e1@3 ~@2", O: "d2@2 c#2!2 b1 c#2 e2 e1@4 e1@3 ~@2",
P: "[d2@2 c#2!2 b1 c#2 e2 d2 ~ e2@2 g#1!2 b1 c#2 e2@3 ~@5 f#2@3 ~@5 a1@3 ~@2 a1@2 ~ a1 a1@2 b1@2 c#2 d2!2 e2@3 ~@5 d2@3 ~@5 a1@3 ~@2 a1@3 a1 a1@2 b1@2 c#2 d2!2 e2@3 ~@5 d2@3 ~@4 e2 a1@3 ~@2 a1@3 f#2 g#2@2 f#2 g#2 e2 c#2!2 e2@3 ~@5 d2@3 ~@5 a1]/8",
Q: "~@4 a1@3 f#2 g#2!2 f#2@2 e2@2 e2@2", R: "d2@2 c#2!2 b1 c#2 e2 d2 ~ e2@2 c2 c#2 e2 f#2 a1",
S: "~ c2 c#2 e2 f#2 g#2@2 c2 c#2 e2 f#2 g#2 ~ c2 c#2 e2", T: "f#2 e2 c2 c#2 a1 c2 c#2 e2 f#2 a1@2 c2 c#2 e2 f#2 g2",
U: "~ c2 c#2 e2 f#2 g2@2 c2 c#2 e2 f#2 a1 c2 c#2 a1 c2", V: "d2@2 c#2@2 b1 c#2 e2 e1@9",
W: "d2@2 c#2@2 b1 c#2 e2 e1@3 ~@6", X: "d2@2 c#2!2 b1 c#2 e2 d2 ~ e2 ~ g1 g#1 b1 c#2 b1",
Y: "[d2@2 c#2!2 b1 c#2 e2 d2 ~ e2@2 g1 g#1 b1 c#2 e2@3 ~@5 d2@3 ~@5 a1@3 ~@2 a1@2 ~ a1 a1@2 b1@2 c#2 d2 d#2 e2@3 ~@5 d2@3 ~@5 a1@3 ~@5 f#2 g2!2 b1@2 g2 f#2 e2 e2@3 ~@5 d2@3 ~@5 a1@3 ~@5 c2 c#2@2 e2@2 f#2 e2 c#2 e2@3 ~@4 b1 d2@3 ~@5 a1]/8",
Z: "[~@7 f#2 g2@2 f#2@2 e2@2 ~ e2@3 ~@5 d2@3 ~@5 a1@3 ~@6 c#2@2 e2@2 f#2!2 c#2 e2@3 ~@4 b1 d2@3 ~@4 e2 a1@3 ~@5 f#2 g2@2 f#2@2 e2!2 c#2 a1@5 ~@12]/6",
AA: "~@11 a1@5", AB: "[~@8 a1@15 e2@3 ~@5 d2@3 ~@5 a1@3 ~@5 f#2]/3",
AC: "[g2@2 f#2@2 e2!2 c#2 e2@3 ~@5 d2@3 ~@5 a1@3 ~@5 e2]/2",
AD: "[~ e2@2 f#2 e2 c#2!2 e2@3 ~@5 d2@3 ~@5 a1@3 ~@5 a1]/2",
AE: "[a1@2 b1@2 c#2 d2 d#2 e2@3 ~@5 d2@3 ~@5 a1@3 ~@5 c2]/2",
AF: "[c#2@2 e2@2 f#2 e2 c#2 e2@3 ~@5 d2@3 ~@5 a1@3 ~@5 c2]/2",
AG: "[c#2@2 e2@2 f#2 e2 c#2 e2@3 ~@5 d2@3 ~@5 a1@3 ~@5 f#2]/2", AH: "g2@2 f#2@2 e2 c#2 a1 a1@5 ~@4",
AI: "~@3 a1@5 ~@8", AJ: "a1@3 ~@5",
})).s("gm_fretless_bass").gain(0.54).pan(0.1)
// drums · kick
const kick = s("bd").struct(`<
~ A B C D C D E D C D A F G@2 H I J K L M@4 D M N F O P H Q R K L D B C E@5 S T S U V W X U Y W Z L E M@3 D M AA F G@2
O AB AC K AD AE AF@9 AG U AH W X U AI U AJ W AK AL AM ~ AN ~ Q AO AP AQ AR U AS U AR AT U AU AV ~@2 AW ~ AX
>`.pickRestart({
A: "x ~@6 x ~@8", B: "x ~ x!2 ~@3 x ~@7 x", C: "x ~ x!2 ~@12", D: "x ~ x!2 ~@3 x ~@8", E: "x ~ x!2 ~@3 x ~@3 x ~@4",
F: "x ~ x!2 ~@3 x ~@2 x!2 ~@3 x", G: "x ~ x!2 ~@3 x ~@2 x!2 ~@4", H: "x ~ x!2 ~@3 x ~@2 x ~@4 x", I: "~ x ~@2 x ~@3",
J: "x ~@7 x!2 ~@2 x ~@3", K: "x!2 ~@6 x ~@6 x", L: "~@2 x!2 ~@3 x ~@8", M: "x ~ x ~@4 x ~@8", N: "x ~@6 x ~@2 x ~@5",
O: "x ~ x!2 ~@3 x ~ x!2 ~@4 x", P: "x ~ x!2 ~@3 x!4 ~@5", Q: "~ x", R: "x ~@7 x!2 ~@6", S: "x ~ x!2 ~@11 x",
T: "~@7 x ~ x ~ x ~@4", U: "~@7 x ~@7 x", V: "~@8 x ~ x ~@4 x", W: "~@7 x ~@2 x!2 ~@3 x", X: "~ x!2 ~@12 x",
Y: "~@8 x ~@6 x", Z: "~ x!2 ~@5 x ~ x ~@4 x", AA: "x!2 ~@6", AB: "~@8 x!2 ~@6", AC: "x!2 ~@6 x!2 ~@6",
AD: "~@9 x ~ x!2 ~@2 x", AE: "x ~@2 x!2 ~@2 x ~ x ~@2 x ~@2 x", AF: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x",
AG: "x ~@2 x!2 ~@10 x", AH: "~ x!3 ~@3 x ~@2 x ~@2 x ~ x", AI: "~@7 x ~ x ~ x ~ x ~ x", AJ: "~@2 x!2 ~@4 x ~ x ~@4 x",
AK: "~@2 x ~@5 x ~ x ~@4 x", AL: "~@2 x!2 ~@3 x ~@2 x!2 ~@3 x", AM: "~@2 x!2 ~@12", AN: "~@11 x ~@4", AO: "~@15 x",
AP: "~@2 x!2 ~@3 x ~@2 x ~@2 x ~@2", AQ: "x ~@2 x ~@3 x ~@7 x", AR: "~@7 x ~ x!2 ~@5", AS: "~@7 x ~@8",
AT: "~ x!2 ~ x ~@2 x ~@7 x", AU: "~ x ~ x ~@3 x ~@7 x", AV: "~@7 x ~@2 x!2 ~@4", AW: "~@3 x ~@12", AX: "x",
})).gain(0.71).pan(0.6)
// drums · snare
const snare = s("sd").struct(`<
A B C D B E B F B G B G H@3 I H J H B F K F C F K L H@3 I H@3 C B C M N@5 O P Q H R H S H T H I C F K F K U K V H@3 I
H@3 W X Y@9 Z H AA H AB H AC H@3 I H AD ~@4 AE AF AG AH AI AJ AK H AL H AM AJ AN ~@4
>`.pickRestart({
A: "~@15 x", B: "~@4 x ~@2 x ~@7 x", C: "~@4 x ~@2 x ~@8", D: "~@4 x ~@2 x ~ x ~@2 x!2 ~ x",
E: "~@4 x ~@2 x ~ x ~ x!2 ~ x!2", F: "~@4 x ~@4 x ~@2 x ~ x!2", G: "~@4 x ~@2 x ~ x ~ x ~ x ~ x", H: "~ x ~ x",
I: "~@4 x ~@7 x!3 ~", J: "~ x ~@2", K: "~@3 x!2 ~@2 x ~@8", L: "~@4 x ~@4 x ~@2 x!4", M: "~@4 x ~@2 x ~@5 x!3",
N: "~@4 x!3 ~@2 x!2 ~@2 x!3", O: "~@4 x ~ x!2 ~ x ~ x!4 ~", P: "~@4 x ~ x ~@3 x ~@2 x!3",
Q: "~@4 x ~@2 x ~ x ~ x!3 ~@2", R: "~@4 x ~@2 x ~@4 x!2 ~@2", S: "~@4 x ~ x!2 ~ x!4 ~ x ~", T: "~@2 x ~@2 x ~ x",
U: "~@4 x ~@4 x ~@2 x ~@3", V: "~@4 x ~@2 x ~ x ~ x!5", W: "~@3 x ~ x ~ x", X: "~@2 x ~@2 x!2 ~@3 x!2 ~ x!2 ~",
Y: "~@2 x ~@2 x!2 ~@3 x ~@2 x!2 ~", Z: "~@2 x ~@3 x!2 ~ x ~ x!3 ~@2", AA: "~@4 x ~@3 x!2 ~ x!2 ~ x ~",
AB: "~@4 x ~ x!2 ~ x ~@2 x ~@3", AC: "~@4 x ~@3 x!2 ~@2 x ~ x ~", AD: "~@4 x ~@3 x ~ x ~ x ~ x!2", AE: "~@3 x",
AF: "~@4 x ~@3 x!2 ~ x!2 ~ x!2", AG: "~ x!2 ~ x!3 ~@5 x ~@3", AH: "~@4 x ~@7 x ~ x!2", AI: "~ x!2 ~@3 x ~@5 x ~@3",
AJ: "~@4 x ~@7 x ~@2 x", AK: "~ x ~ x ~@2 x ~", AL: "x ~@4 x!2 ~@5 x ~@3", AM: "x ~@3 x!3 ~@5 x ~@3",
AN: "x ~ x ~ x!2 ~ x ~@8",
})).gain(0.71).pan(0.6)
// drums · low tom
const low_tom = s("lt").struct("<~@47 A ~@3 B ~@30 C ~ D ~ E ~@10 F C G ~ H ~ H ~@3 I ~@6>".pickRestart({
A: "~@4 x!2 ~ x", B: "~@8 x ~@3 x!2 ~@2", C: "~@10 x ~@2 x ~@2", D: "~@13 x ~@2", E: "~@10 x!2 ~ x ~@2", F: "~ x",
G: "x ~@2 x ~@12", H: "~@4 x!2 ~@10", I: "~ x!3 ~@12",
})).gain(0.71).pan(0.6)
// drums · hihat
const hihat = s("hh").struct(`<
~ A B C A D A D A E A F G H@2 I J K C A D A L A F A F G H@2 I J K C A@2 B@2 ~@5 M@2 N O N O M O P O Q A D A L A J A L
R H@2 S T K C U V W@9 X O M O M O N O J Y L Y N ~@4 Z N Z AA Z O AB AC Z O Z AC ~@5
>`.pickRestart({
A: "~@2 x!2 ~@4", B: "x!4 ~@4", C: "x!8", D: "x!6 ~@2", E: "~ x!5 ~ x", F: "~@2 x!4 ~@2", G: "~@6 x!10", H: "x!16",
I: "x!10 ~@6", J: "~@2 x!6", K: "x!4 ~@2 x!2", L: "~ x!5 ~@2", M: "~ x!2 ~@5", N: "~ x!3 ~@4", O: "~ x!3 ~ x!3",
P: "~ x!3 ~@2 x ~", Q: "~ x!4 ~@3", R: "~@4 x!12", S: "x!12 ~@4", T: "~ x!7", U: "~ x!4 ~ x ~", V: "~ x!2 ~ x!3 ~",
W: "x!3 ~ x!3 ~", X: "x!3 ~@5", Y: "~@2 x!2 ~@2 x!2", Z: "~@5 x!3", AA: "~ x!3 ~ x!2 ~", AB: "~@2 x ~@2 x!3",
AC: "~ x!3 ~@2 x!2",
})).gain(0.71).pan(0.6)
// drums · mid tom
const mid_tom = s("mt").struct("<~@49 A ~ B ~@30 C ~ D ~@13 E F ~ G ~ H ~@10>".pickRestart({
// … 22 more lines
More by Led Zeppelin
Not in the database
That song isn't here.
Nothing in the database matches this link. It may have been renamed, or the address was mistyped. The closest songs to :
Real transcriptions · Editable patterns · Instrumental
Type a song.
Get Strudel code.
Chords, structure, melody, bass and drums compiled from open transcriptions into Strudel live-coding patterns. Play it here, scrub through the bars, then open it in strudel.cc and start hacking.
Smells Like Teen SpiritNirvana
The JokerSteve Miller Band · 1973
Love Me DoThe Beatles · 1964
I Don't MindJames Brown · 1961
- Real transcriptionsMcGill chord charts, Lakh MIDI and quality-filtered PDMX scores. The library includes alternate transcriptions of some songs.
- One bar, one cycleEvery layer follows the same bar timeline, keeping the code, playback and song structure aligned.
- Instrumental by designDetected vocal parts are removed. Guitar riffs, harmonica and other instrumental leads stay.