Strudelify
Black Mountain Side cover art

Led Zeppelin

Black Mountain Side

Led Zeppelin

KeyG majorTempo120 bpm
0:00/0:00
// Black Mountain Side — Led Zeppelin
// 120 bpm, 8/8, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 8/8 at bar 4, 3/8 at bar 12, 8/8 at bar 12, ...) are rendered on a constant 8/8 grid of one bar per cycle
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · "Acoustic Guitar 1" · Dmaj7 Amaj7 Dmaj7 Amaj7 Dmaj7 Amaj7 Esus2 Dmaj7 …
const electric_guitar_clean = note(`<
  ~@41
  [~@14 e4 [c#4,d4]]
  [b3 [g#3,a3] e4 [c#4,d4] b3 [g#3,a3] e4 [c#4,d4] b3 [g#3,a3] [e4,f#4]@2 e4@2 e4 [c#4,d4]]
  [b3 [g#3,a3] e4 [c#4,d4] b3 [g#3,a3] e4 [c#4,d4] b3 [g#3,a3] a3 [f#3,g#3] e3 [c#3,d3] c#3@2]
  [[b2,c#3] c#3!2 [b2,c#3] c#3!2 [b2,c#3] c#3!2 [b2,c#3] c#3 g#2 [b2,c#3]@2 g#2 [b2,c#3]]
  [c#3!2 [b2,c#3] c#3!2 [b2,c#3] c#3!2 e2@4 c#2@2 ~@2]
  ~@18
>`).s("gm_electric_guitar_clean").gain(0.51)

// chords · acoustic guitar steel · "Acoustic Guitar 2"
const acoustic_guitar_steel = note(`<
  A ~@2 B C@3 D@2 E D F G H@2 I J K L@2 M N O@5 P@3 Q R@2 S@2 T U@2 V R@6 W X@3 Y Z AA AB AC@2 AD@4 AE@3 AF AG
>`.pickRestart({
  A: "g#3 [c#2,g#2,c#3,g#3]@15, c#4", // C#5
  B: "[f#3,c#4]@3 g#3 [f3,f#3]@2 [a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 c#2@2, ~@3 c#4@3 ~@6 f#3@4", // F#5 F#maj7 D#m E
  C: "[f#3,c#4]@3 g#3 [f3,f#3]@2 [a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 c#2@2, ~@3 c#4@3 ~@6 g#3@4", // F#5 F#maj7 D#m E
  D: "[f#3,c#4]@3 g#3 [f3,f#3]@2 [a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 c#2@2, ~@3 c#4@3 ~@6 c#4@4", // F#5 F#maj7 D#m E
  E: "[f#3,c#4]@3 g#3 [f3,f#3]@2 [a#2,f#3,a#3]@4 [e2,e3,f#3]@2 ~@2 c#2@2, ~@3 c#4@3 ~@6 c#4@4", // F#5 F#maj7 D#m Esus2
  F: "c#2@2 [g#2,c#4]@2 [c3,d#4]@2 [c3,d#4] ~@3 c#2@2 [c3,c#3,d#4,f4]@2 [c#2,g#2]@2, ~@3 f4@3 ~@2, ~@3 c#3@2 ~@3", // C#5 Cm C#maj7 C#5
  G: "c#4@2 ~@2 c#2@2 f#4@2 g#4 f#4 f4@2 ~@2 c#2@2, c#3@2 ~ f#3@2 g#3@2 ~, c4 ~ f4@4 ~@6 d#4@4",
  H: "[[f#3,g#3]@2 ~ f#3 f3@2 d#3@2 c#3@2 ~@2 g#3@4 [g#3,c#4]@2 [a#2,b2]@2 [f#3,b3]@2 b2 c#4 [f#3,b3]@2 b2 f#3@2 b2 [f#3,b3]@2, c#4 ~@3, ~ g#3@3 ~ c#2@4 ~@7]/2", // F#sus2 C#5 Bmaj7 B5
  I: "b2@2 a#2 [f#3,a#3]@2 a#2 [f#3,a#3]@2 [c#2,a#2]@2 [f#3,c#4]@3 g#3 [f3,f#3]@2, ~@13 c#4@3", // F# F#5 F#maj7
  J: "[a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 c#2@2 [f#3,c#4]@3 g#3 [f3,f#3]@2, ~@6 g#3@4 ~@3 c#4@3", // D#m E F#5 F#maj7
  K: "[a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 c#2@2 [f#3,c#4]@3 g#3 [g#2,f3,f#3]@2, ~@3 [f#3,c#4]@2 ~@3", // D#m E F#5 C# F#5
  L: "[a#3 b3 a#3@2 [g#2,g#3]@2 [a#2,a#3]@2 [f#3,b3] ~@3 c#2@2 [c#2,g#3]@4 [c#2,c#3,g#3]@2 [c#2,f3,g#3]@2 [c#2,c#3,g#3]@2 [f#3,a#3]@4 [c#2,f3,a#3]@2 [c#2,f#3,a#3]@2, [f#2,c#3]@2 ~@2 [g#3,c#4]@3 c#4@3 ~@6, ~@8 c#2@4 ~@2 [f#3,b3] ~@9 [f3,a3] ~@7]/2", // G# A# B5 C#5 C# C#5 F# A#m …
  M: "[c#2,g#3,c#4]@2 [c#2,g#3,c#4] [c#2,g#3,c#4]@2 [c#2,c#3,f#3]!2 [c#2,f3,g#3], [f#3,b3] ~@5 [f#3,b3] ~@9", // C#5 F#5 C# B5
  N: "[f#3,a#3]@2 [c#2,f#3,a#3]@2 [c#2,f3,a#3]@2 [f3,a3] ~ c#2@2 ~ [c#3,d#3] c#3@2 [g#2,d#3]@2, ~@3 [f#3,a#3]@2 [c#2,f3] ~@2", // F# A#m F C#sus2 G#5 F# C#
  O: "[c#2@2 [f#3,c#4]@3 g#3 [f3,f#3]@2 [a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 c#2@2 [f#3,c#4]@3 g#3 [f3,f#3]@2 [a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 c#2@2 [f#3,c#4]@3 g#3 [f3,f#3]@2 [a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 c#2@2 [f#3,c#4]@3 g#3 [f3,f#3]@2 [a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 c#2@2 c#2@2 [g#2,c#4]@2 [c3,d#4]@2 [c3,d#4] ~ c#2@2 c#2@2 [c3,c#3,d#4,f4]@2, ~@5 c#4@3 ~@6 g#3@4 ~@3 c#4@3 ~@6 [g#3,c#4]@4 ~@3 c#4@3 ~@6 c#4@4 ~@3 c#4@3 ~@6 c#4@4 ~@6 f4@6 ~@2, ~@36 c#3 ~@3]/5", // F#5 F#maj7 D#m E F#5 F#maj7 D#m E …
  P: "[c#2@2 c#4@2 ~@2 c#2@2 f#4@2 g#4 f#4 f4@2 ~@2 c#2@2 [f#3,g#3]@2 ~ f#3 f3@2 d#3@2 c#3@2 ~@2 g#3@4 [g#3,c#4]@2 [a#2,b2]@2 [f#3,b3]@2 b2@2 [f#3,b3,c#4]@2 b2 [f#3,b3]@2 b2, ~ c#3@2 ~ f#3@2 c#3@2 ~@2 g#3@3 ~ c#2@4 ~@6, ~@2 c4 ~ f4@4 ~@6 [a#3,d#4]@4 c#4@8 ~@22]/3", // F#sus2 C#5 Bmaj7 B5 F#sus4 B5 D#5
  Q: "[f#3,b3]@2 b2@2 a#2 [f#3,a#3]@2 a#2 [f#3,a#3]@2 a#2@2 c#2@2 [f#3,c#4]@2", // B5 F# F#5
  R: "~ g#3 [f3,f#3]@2 [a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 [c#2,c#3]@2 [f#3,c#4]@2, ~ c#4@3 ~@6 [g#3,c#4]@4 ~@2", // F#maj7 D#m E C# F#5 C#5
  S: "[~ g#3 [g#2,f3,f#3]@2 a#3 b3 a#3@2 [g#2,g#3]@2 [a#2,a#3]@2 [f#3,b3] ~@3 c#2@2 [c#2,g#3]@4 [c#2,c#3,g#3]@2 [c#2,f3,g#3]@2 [c#2,c#3,g#3]@2 [f#3,a#3]@4, ~@2 [f#2,c#3]@2 ~@2 [g#3,c#4]@3 c#4@3 ~@4, ~@12 c#2@4 ~@2 [f#3,b3] ~@9 [f3,a3] ~@3]/2", // C# G# A# B5 C#5 C# C#5 F# …
  T: "[c#2,f3,a#3]@2 [c#2,f#3,a#3]@2 c#2@3 c#2 c#2@2 ~@2 f#3 ~ a#2@2, ~@4 g#3@6 [a#2,a#3]@3 c#3@3", // A#m F# A#
  U: "[e3@2 ~@2 c#2@2 c#3@2 d#3@2 f3@2 [c#3,f#3,g#3]@3 ~ f3@2 [f#3,g#3,c#4]@4 g#3 f#3 d#3 c#3 b2@2 c#3@3 c#3, e2@4 ~@11 g#3@3 ~@10 b2 ~@3, ~ [g#3,c#4]@2 ~ g#3@2 c#4@3 ~@7]/2", // C#sus4 F#sus2 C#5
  V: "c#3@2 [b2,c#3,g#3] c#3!3 c#3@2 e3@2 ~@2 c#2@2 [f#3,c#4]@2, ~@2 a#3@3 f#3@3 e2@4 ~@4, ~@5 [g#3,c#4]@2 ~", // C#7 F#5 C#5
  W: "~ g#3 [f3,f#3]@2 [a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 [c#2,c#3]@2 c#2@2, ~ c#4@3 ~@6 [g#3,c#4]@4 ~@2", // F#maj7 D#m E C# C#5
  X: "[[c#3,c#4]@2 [c#3,d#4]@2 [c3,d#4] ~ c#2@2 c#2@2 [c#3,f4]@4 c#4@2 ~@2 c#2@2 f#4 g#4 f#4@2 f4@2 ~@2 c#2@2 [f#3,g#3]@2 ~ f#3 f3@2 d#3@2 c#3@2 ~@2 g#3@4 [g#3,c#4]@2, ~@4 [g#3,f4]@6 ~@4 c4 ~ f4@4 ~@6 d#4@4 c#4@8 ~@10, ~@4 c#3@2 ~@4 [c3,d#4] ~@3 c#3@4 ~@2 f#3@4 g#3@4 ~@4 g#3@6 ~@2 c#2@8]/3", // C# C#sus2 Cm C# F#sus2 C#5 C# Cm
  Y: "[a#2,b2]@2 [f#3,b3]@2 b2 c#4 [f#3,b3]@2 b2 f#3@2 b2 [f#3,b3]@2 b2@2", // Bmaj7 B5
  Z: "a#2 [f#3,a#3]@2 a#2 [f#3,a#3]@2 c#2@2 c#2@2 [f#3,c#4]@3 g#3 [f3,f#3]@2, ~@13 c#4@3", // F# F#5 F#maj7
  AA: "[a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 [c#2,c#3]@2 [f#3,c#4]@3 g#3 [f3,f#3]@2, ~@6 [g#3,c#4]@4 ~@3 c#4@3", // D#m E C# F#5 F#maj7 C#5
  AB: "[a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 [c#2,c#3]@2 [f#3,c#4]@3 g#3 [g#2,f3,f#3]@2, ~@3 [g#3,c#4]@2 ~@3", // D#m E C# F#5 C# C#5
  AC: "[a#3 b3 a#3@2 [g#2,g#3]@2 [a#2,a#3]@2 [f#3,b3] ~ c#2@2 c#2@2 [c#2,g#3]@4 [c#2,c#3,g#3]@2 [c#2,f3,g#3]@2 [c#2,c#3,g#3]@2 [f#3,a#3]@4 [c#2,f3,a#3]@2 [c#2,f#3]@2, [f#2,c#3]@2 ~@2 [g#3,c#4]@3 c#4@3 ~@6, ~@8 c#2@2 ~@4 [f#3,b3] ~@17]/2", // G# A# B5 C#5 C# C#5 F# A#m …
  AD: "[c#2@3 c#2 c#2@2 a#3@3 f#3 c#3@2 e3@2 ~@2 c#2@2 c#3@2 d#3@2 f3@2 [f#3,g#3]@3 ~ g#2@2 [f#3,g#3,c#4]@4 g#3 f#3 d#3 c#3 b2@2 c#3@3 c#3 c#3@2 c#3@3 ~ c#3@2 c#3@2 c#3@2 c#2@2 [f#3,c#4]@3 g#3 [f3,f#3]@2, g#3@6 a#2@6 e2@4 ~@11 g#3@3 ~@10 b2 ~@8 f#3@9 ~@6, ~@14 [g#3,c#4]@10 c#4@6 ~@31 c#4@3]/4", // F#sus2 F#5 F#maj7 C#5
  AE: "[a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 c#2@2 [f#3,c#4]@3 g#3 [f3,f#3]@2, ~@6 c#4@4 ~@3 c#4@3", // D#m E F#5 F#maj7
  AF: "[a#2,f#3,a#3]@4 [e2,e3]@2 ~@2 c#2@2 [f#3,c#4]@3 g#3 [f3,f#3]@2, ~@6 [g#3,c#4]@4 ~@3 c#4@3", // D#m E F#5 F#maj7 C#5
  AG: "[a#2,f#3,a#3]@2 [e2,e3,f#3] ~ g#2 ~@3, ~@3 [g#3,c#4]@2 ~@3", // D#m Esus2 C#5
})).s("gm_acoustic_guitar_steel").gain(0.31)

// chords · guitar harmonics · "Harmonics" · C#sus4 G#sus4 C#sus4
const guitar_harmonics = note("<~ [[c#3,g#3,c#4,f#4,g#4] [g#2,d#3,g#3,c#4,d#4]] [[c#3,g#3,c#4,f#4,g#4]] ~@61>")
  .s("gm_guitar_harmonics").gain(0.41)

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

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

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@5 A B C D E F G H I J D B K L M N O P Q R J S T ~ U V B C D W X Y I Z AA AB AC AD AE AF AG AH AI AJ AK AE AF AG Z AL
  AM AH AN T AO AP AQ AR X
>`.pickRestart({
  A: "~@3 x!2 ~@2 x", B: "~@4 x!4", C: "~@2 x!2 ~@3 x", D: "~ x!3 ~@4", E: "~@3 x ~ x ~ x", F: "~@3 x ~@3 x",
  G: "~@8 x!3 ~@5", H: "~ x ~@6", I: "~ x ~ x ~@2 x!2", J: "~@5 x ~ x", K: "x!2 ~@4 x!2", L: "x ~ x!2 ~@4",
  M: "x!4 ~@2 x!2", N: "~@3 x ~ x!3", O: "~@7 x", P: "~ x ~ x ~@3 x", Q: "~@3 x ~@4", R: "x!3 ~@7 x ~@5",
  S: "~@2 x!2 ~@4", T: "~ x ~ x ~ x!3", U: "x!6 ~@2", V: "~@2 x!3 ~ x!2", W: "~@3 x ~ x ~@2", X: "~ x ~@4 x ~@9",
  Y: "~@2 x!3 ~@3 x ~@7", Z: "~@3 x", AA: "x ~ x!3 ~@3", AB: "~@5 x!3", AC: "x!3 ~@4 x", AD: "x!2 ~ x!5",
  AE: "~ x!2 ~@4 x", AF: "x!3 ~@2 x!2 ~", AG: "~@2 x ~ x!3 ~", AH: "~@2 x!2", AI: "x!3 ~@5", AJ: "~@3 x!5",
  AK: "x ~@4 x!3", AL: "x ~@6 x ~@4 x ~@3", AM: "~@8 x!3 ~@3 x ~", AN: "~ x!2 ~@5", AO: "~@14 x!2",
  AP: "~ x ~ x ~ x!2 ~@8 x", AQ: "~ x ~ x ~@2 x ~ x ~ x ~ x ~ x ~", AR: "~ x ~ x ~@8 x ~ x!2",
})).gain(1.64)

stack(electric_guitar_clean, acoustic_guitar_steel, guitar_harmonics, bongos, congas, congas_2)

More by Led Zeppelin