Strudelify
Trampled Under Foot cover art

1975 · Physical Graffiti

Trampled Under Foot

Led Zeppelin

KeyG minorTempo110 bpm
0:00/0:00
// Trampled Under Foot — Led Zeppelin
// 110 bpm, 4/4, key G minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 152 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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 · clavinet
const clavinet = note(`<
  A B A@6 C A@8 C A@8 C D A B A@6 C A@8 C A B A@6 E D A@2 F@4 A@22 F@4 A@8 C A@8 C A@8 C D A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B G ~
>`.pickRestart({
  A: "g2@2 [g3,g4]@2 [g2,f4]@2 [g3,g4]@2 a4 ~@4 f4 g3@2, ~@4 [g2,d5] g3 g2 ~, ~@9 bb4@2 [g4,d5]@2 ~ d4 ~", // G G7 G G5
  B: "g2@2 [g3,g4]@2 [g2,f4]@2 [g3,g4]@2 a4 ~@4 c5 bb4 [f4,bb4], ~@4 [g2,d5] g3 g2 g3, ~@9 bb4@2 [f4,d5]@2 f4@2 ~", // G G7 G Bb5 G5 Dm
  C: "bb2@3 bb2 c3@3 c3, [f4,bb4,d5] [g4,c5,e5]", D: "[eb3,g4,bb4,eb5]@8 f3@3 f3@2 f3 f3@2, ~ [f4,a4,eb5]",
  E: "bb2@4 bb2@4 c3@4 c3@2 d3 eb3, [f4,bb4,d5] [g4,c5,e5]", F: "[g2,g4,d5]/2", G: "[g4,d5]",
})).s("gm_clavinet").gain(0.4).pan(0)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@2 A@6 B C@2 D E@5 B C@2 D E@5 B F C@2 D E@5 B C@2 D E@5 B C@2 D E@5 B F C@2 G@4 E@22 G@4 E@2 A@6 B C@2 D E@5 B C@2 D
  E@5 B F C@2 E@32 H ~
>`.pickRestart({
  A: "~@2 [bb4,d5]@2 [a4,db5]@2 [bb4,d5]@2 a4 bb4 g4 f4 d4 f4 g4@2", // Bb A Bb
  B: "d5 ~@2 bb5@2 bb5 d5@2 d5 e5@2 ~@2 c6 e5@2, ~ d5@5 ~@5 c6@2 ~@3, ~@6 e5 ~",
  C: "~@2 [a5,d6]@2 [bb5,d6]@2 ~@2 a5 bb5 g5 f5 d5 f5 g5@2", D: "~@2 a4@2 bb4@2 ~@2 a4 bb4 g4 f4 d4 f4 g4@2",
  E: "~@2 [a4,db5]@2 [bb4,d5]@2 ~@2 a4 bb4 g4 f4 d4 f4 g4@2", // A Bb
  F: "f5 ~@2 eb6@2 eb6 g5@2 g5 ~@2 f6@2 f6 a5@2, ~ g5@5 ~@3 a5@5 ~@2", G: "[g4,d5]/2", H: "[g4,d5]",
})).s("gm_distortion_guitar").gain(0.4).pan(0)

// bass · electric bass pick
const bass = note(`<
  ~@2 A@6 B C@2 A@6 D C@2 A@6 D E C@2 A@6 D C@2 A@3 C A@2 D C@8 D E C@2 F@2 G@2 A@22 H@2 I@2 C@2 A@6 B C@2 A@6 D C@2 A@6
  D E C@34 J ~
>`.pickRestart({
  A: "g2@2 ~@2 g2@2 ~@2 g2@2 g2!2 g2@2 ~@2", B: "bb2@4 c3@3 g2", C: "g2 ~ g2 ~ g2 ~ g2 ~", D: "bb2 c3",
  E: "eb3@4 f3 f3@2 f2", F: "[g2@29 e3 f3 gb3]/2", G: "[g3@28 ~@2 f2 gb2]/2", H: "[g2@30 d3 f3]/2",
  I: "[g3@27 g3 g3@4]/2", J: "g2",
})).s("gm_electric_bass_pick").gain(0.57).pan(0)

// other · accordion
const accordion = note(`<
  ~@2 A B C D E F ~@2 G H I J K L@2 ~@3 M N O P Q@2 ~@4 R S T U@3 ~@3 V W X Y Z@2 ~@3 AA N AB AC@3 ~@2 AD@2 ~ AE@3 AF
  ~@21 AG@4 ~@2 A B C D E F ~@2 G H I J K L@2 ~@3 M N O P Q@2 ~@3 G AH AF AH AF AH AF AH AF AH AF AH AF AH AF AH AF AH
  AF AH AF AH AF AH AF AH AF AH AF AH AF AH AF ~@2
>`.pickRestart({
  A: "f5 g5!2 g5@3 ~@2", B: "g5@4 g5@4 g5@2 d5@2 ~@3 f5", C: "g5@2 g5@2 g5@2 g5 bb5@3 g5@2 g5@4",
  D: "f5 g5!2 g5@2 g5@3 g5@4 f5 g5 g5@2", E: "bb5@4 ~@8 f5 g5 g5@2", F: "g5@4 ~@8 f5 g5 g5@2", G: "~@3 bb5",
  H: "f5 g5@2 g5@3 g5@4 g5 d5@5", I: "f5@2 g5 g5@3 g5@2 bb5@4 ~@4", J: "f5 g5@2 g5@2 g5@2 ~ bb5@2 g5 g5@5",
  K: "bb5!5 g5@2 g5@5 f5 g5 g5@2", L: "[bb5@4 ~@8 f5 g5 g5@4 g5@4 ~@2 g5@4 f5 g5 g5@2]/2",
  M: "f5@2 g5@2 g5@2 g5!2 g5@4 ~@4", N: "f5@2 g5 g5@3 g5 bb5@5 ~@4", O: "f5@2 g5 bb5@3 f5@2 bb5 bb5@2 bb5@3 ~@2",
  P: "f5 g5!3 bb5 bb5@2 bb5@3 ~@2 f5 g5 g5@2", Q: "[~@2 bb5 c6 bb5@4 ~@4 f5 g5 g5@4 bb5 c6 bb5@4 ~@4 f5 g5 g5@2]/2",
  R: "f5 g5!2 g5@2 g5@2 bb5@2 bb5@3 ~@4", S: "f5 g5 g5@6 g5@4 ~@4", T: "f5@2 g5 g5@3 g5@2 bb5@2 bb5@2 ~@4",
  U: "[bb5!4 bb5@2 g5 bb5@5 f5 g5 g5@4 bb5@2 c6@4 ~@4 f5 g5 g5@4 c6@6 ~@4 f5 g5 g5@2]/3",
  V: "f5@2 g5@2 g5@2 g5 g5@2 g5@3 ~@4", W: "f5@2 g5 g5@4 g5 g5@4 ~@4", X: "f5@2 g5@2 g5@2 g5 bb5@2 bb5 c6@2 bb5@2 ~@2",
  Y: "bb5!4 a5 g5@2 g5@5 f5 g5 g5@2", Z: "[bb5@4 ~@8 f5 g5 g5@4 g5@2 ~@8 f5 g5 g5@2]/2",
  AA: "c6@2 c6 bb5@3 g5@2 g5@2 g5@2 ~@4", AB: "bb5@2 bb5@2 bb5@2 bb5@2 bb5@2 bb5 c6@4 a5",
  AC: "[bb5!4 a5@2 g5 g5@3 ~@2 f5 g5 g5@4 bb5@4 c6@4 ~@2 bb5!2 bb5@4 g5@4 ~@6 f5 g5 g5@2]/3",
  AD: "~@2 bb5@2 bb5@2 bb5@2 bb5@3 f5@2 g5 g5@2", AE: "[~@4 c6@6 bb5@2 bb5@6 g5@3 bb4 c5 bb5]/3", AF: "g5 ~@3",
  AG: "[~@12 d6@8 c6@16 bb5 c6 ~ bb5 c6 bb5 c6 bb5@2 g5@5 f5@2 f5@2 f5!2 bb5@8]/4",
  AH: "~@2 bb5@2 bb5@2 bb5@2 bb5@3 g5@2 g5 g5@2",
})).s("gm_accordion").gain(0.64).pan(0)

// chords · piano
const piano = note("<~@58 A B A B C D E@2 C D E@2 C D E@2 C D E@2 C D E@2 ~@2 A B A B ~@64>".pickRestart({
  A: "[g4,d5,f5]@4 [g4,d5,f5]@2 g4 [g4,d5,f5]@2 [g4,c5,e5] [g4,c5,e5]@2 [g4,c5,e5]@2 [g4,c5,e5]@2", // G7 C
  B: "a4 [a4,d5,f5]@2 a4 [a4,d5,f5]@2 a4 [a4,d5,f5]@2 [g4,c5,e5] [g4,c5,e5]@2 [g4,c5,e5]@2 [g4,c5,e5]@2", // Dm C
  C: "~@4 [g4,d5,f5]@3 [g4,c5,g5]@2 [g4,bb4]@2 ~@5", D: "[f4,g4] bb4@2 [f4,c5]@2 [f4,c5]@2 [g4,d5,f5]@3 ~@6",
  E: "[~@4 [g4,d5,f5]@3 [g4,c5]@2 [g4,bb4]@2 ~@4 [g4,c5]@2 [g4,c5]@2 d5 [g4,c5] bb4 g4 g4@2 ~ [g4,bb4]@2 [g4,c5] bb4 g4 [g4,db5]]/2", // G7 C5 Gm C5 Gm C5 Gdim
})).s("gm_piano").gain(0.64).pan(0)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B A@4 C A@8 C A@8 D E F@2 B A@5 G A@8 G B A@7 H ~ A F I J I ~ A@21 K I@2 ~@2 B A@2 B A@4 C A@8 C A@8 D E A@34 I
  ~
>`.pickRestart({
  A: "x ~ x ~ x ~@3 x ~ x!3 ~@3", B: "x ~@3 x ~@3 x ~ x!3 ~@3", C: "x!2 ~ x!3 ~@2", D: "x!2 ~@2 x!2 ~@2",
  E: "x!2 ~@2 x ~@3", F: "x!3 ~ x ~ x ~", G: "x ~ x ~@4 x!2 ~ x ~@5", H: "x ~ x ~@4 x!2 ~ x ~@4 x", I: "x",
  J: "~@13 x ~@2", K: "x ~ x ~@5 x ~ x!3 ~@3",
})).gain(0.64).pan(0)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B@6 C B@8 C B@8 D E B F B@6 C G B@7 C G B@8 E B H I J ~ K B@21 L M ~ N O B@8 C B@8 C B@8 D E B@34 ~@2
>`.pickRestart({
  A: "~@10 x ~ x ~ x!2", B: "~ x ~ x", C: "~@4 x ~@8 x!3", D: "~@4 x ~@2 x ~@4 x ~@2 x", E: "~@4 x ~@2 x!4 ~ x ~ x!2",
  F: "~@4 x ~@5 x!6", G: "x!2 ~ x", H: "~@4 x ~@6 x!5", I: "x", J: "~@13 x ~@2", K: "x!3 ~ x ~@2 x ~ x!3 ~@4",
  L: "~@4 x ~@7 x!4", M: "x ~@11 x!4", N: "x ~@2 x!2 ~@11", O: "x!2 ~ x!7 ~@6",
})).gain(0.64).pan(0)

// drums · low tom
const low_tom = s("lt").struct("<~@61 [~@12 x!4] ~@24 [~@7 x ~ x!2 ~ x!3 ~] [~@10 x!6] ~@64>").gain(0.64).pan(0)

// drums · hihat
const hihat = s("hh").struct("<~@5 A ~@20 B C ~@27 D ~@4 E F ~@23 E F@2 ~@5 A ~@20 B C ~@36>".pickRestart({
  A: "x", B: "~@5 x!3", C: "~ x!3 ~ x!3", D: "x!2 ~@6", E: "~ x!3", F: "x!4",
})).gain(0.64).pan(0)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A B@2 A@2 B C B@8 C B@8 D ~ A E F B@5 G A B@7 G A B@7 ~@2 A H ~@4 A B@3 A B@3 A B@3 A B@3 A B@4 E ~@4 A B A B@2
  A@2 B C B@8 C B@8 D ~ A B A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~@2
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "~ x!3 ~ x!2 ~", D: "~ x!3 ~@4", E: "x!5 ~@3", F: "~@2 x!6", G: "~ x!6 ~", H: "x!7 ~",
})).gain(0.64).pan(0)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@3 A ~ B ~@8 B ~@8 B@2 ~@2 A ~@5 A@2 ~@7 A@2 ~@7 B A@2 ~ A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@5 A@2 ~@2 A ~ A
  ~@3 A ~ B ~@8 B ~@8 B@2 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "x", B: "x!2",
})).gain(0.64).pan(0)

// drums · ride
const ride = s("rd").struct("<~@54 [~ x!3 ~ x!3] [~ x!3 ~@4] ~@96>").gain(0.64).pan(0)

stack(clavinet, distortion_guitar, bass, accordion, piano, kick, snare, low_tom, hihat, open_hat, crash, ride)

More by Led Zeppelin