Strudelify

Tangerine

Led Zeppelin

KeyG majorTempo86 bpm
0:00/0:00
// Tangerine — Led Zeppelin
// 86 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 65 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): mandolin.
setcpm(86/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 · acoustic guitar nylon · "mandolin"
const acoustic_guitar_nylon = note("<~@7 A ~ A ~@13 A ~ A ~@39>".pickRestart({
  A: "~@5 b4 ~ d5",
})).s("gm_acoustic_guitar_nylon").gain(0.64).pan(0.7)

// chords · acoustic guitar steel · "12 string"
const acoustic_guitar_steel = note(`<
  A B C D E F G H B C D E F G I J K J K L K M N O B C D E F P Q R S T U V@2 W X Y J K J K L K M N Z@7 AA@4 AB@2 AC AD@3
>`.pickRestart({
  A: "~@4 [a2,e3,a3,c4,e4] [a2,e3,a3,d4,e4] [a2,e3,a3,c4,e4] [a2,e3,g3,b3]", // Am Asus4 Am Em
  B: "[g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4] [a2,d3,a3,d4,f#4] [a2,d3,a3,d4,f#4]@2 ~ d4, ~@3 [d3,a3]", // G D D5
  C: "[a2,d3,a3,d4,f#4]@4 [a2,d3,a3,d4,f#4]@2 [g3,b3,e4]!2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,d4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,g3,b3]@2", // D Em Am Asus4 Am Em
  D: "[g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4] [a2,d3,a3,d4,f#4] [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4] [c3,e3,g3,c4,e4]", // G D C
  E: "[c3,e3,g3,c4,e4]@4 [c3,e3]@2 [c3,e3,g3,c4,e4]@2 c3 e3 g3!2 b2 d3 g3!2", // C
  F: "a2@4 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]!2 [a2,e3,a3,c4,e4]@3 [d3,g3,b3,g4] [d3,g3,b3,g4]@3 [a2,d3,a3,d4,f#4]", // Am G D
  G: "[a2,d3,a3,d4,f#4]@6 [a2,d3,a3,d4,f#4]!2 [a2,d3,a3,d4,g4]@2 [a2,d3,a3,d4,f#4]@4 [a2,d3,a3,d4,g4]@2", // D Dsus4 D Dsus4
  H: "[a2,d3,a3,d4,f#4]@4 [a2,e3,a3,c4,e4] [a2,e3,a3,d4,e4] [a2,e3,a3,c4,e4] [a2,e3,g3,b3]", // D Am Asus4 Am Em
  I: "[a2,d3,a3,d4,f#4]@6 [a2,c3,e3,g3,c4,e4]!2 [a2,c3,e3,g3,c4,e4]@2 [d3,a3,d4,f#4]!2 [d3,a3,d4,f#4]@3 [g2,b2,d3,g3,b3,g4]", // D Am7 D G
  J: "[g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4] [d3,a3,d4,f#4]!2 [c3,e3,g3,c4,e4]", // G D C
  K: "[c3,e3,g3,c4,e4]@4 [c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]!2 [c3,e3,g3,c4,e4]@3 [d3,a3,d4,f#4] [d3,a3,d4,f#4]@3 [g2,b2,d3,g3,b3,g4]", // C D G
  L: "[g2,b2,d3,g3,b3,g4]@3 [g2,b2,d3,g3,b3,g4]!2 [d3,a3,d4,f#4]!2 [c3,e3,g3,c4,e4]", // G D C
  M: "[g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]@3 [g2,b2,d3,g3,b3,g4] [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,b3,g4]!4", // G
  N: "[g2,b2,d3,b3,g4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,g4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!2 [d3,a3,d4,g4]!2 [d3,a3,d4,g4]@2", // G D Dsus4 D Dsus4
  O: "[d3,a3,d4,f#4]@4 [a2,e3,a3,c4,e4] [a2,e3,a3,d4,e4] [a2,e3,a3,c4,e4] [a2,e3,g3,b3]", // D Am Asus4 Am Em
  P: "[a2,d3,a3,d4,f#4]@6 [a2,d3,a3,d4,f#4]!2 [a2,d3,a3,d4,g4]@2 [a2,d3,a3,d4,f#4]@4 [a2,d3,a3,d4,e4]@2", // D Dsus4 D Asus4
  Q: "[a2,d3,a3,d4,f#4]", R: "[a2,e3,a3,c4,e4]!2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]!2 [a2,e3,a3,c4,e4]@2",
  S: "[g2,b2,d3,g3,b3]@4 ~@2 [g2,b2,d3,g3,b3,g4]!2 [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]@3 [e3,a3,d4,f#4], g4@3 ~@5", // G D
  T: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] [d3,g3,b3,e4]", // D Em7
  U: "[f2,c3,f3,a3,c4,f4]@4 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4] [e2,b2,e3,g#3,b3,e4]", // F E
  V: "[[e2,b2,e3,g#3,b3,e4]@4 [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4]!2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 d3@2 [e2,b2,e3,g#3,b3,e4]@6 [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4]!2 [f2,c3,f3,a3,c4,f4]@4 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4] [c3,e3,g3,c4,e4]]/2", // E F E F C
  W: "[c3,e3,g3,c4,e4]@4 [c3,e3,g3,c4,e4]@2 [g2,b2,d3,g3,b3,g4]!4 [g2,b2,d3,g3,b3,g4]@3 [g2,b2,d3,g3,b3,g4] [g2,b2,d3,g3,b3,g4]@2", // C G
  X: "[g2,b2,d3,g3,b3,g4] [d3,a3,d4,f#4]!2 [d3,a3,d4,e4] [d3,a3,d4,f#4]@3 [d3,a3,d4,g4]", // G D Dsus2 D Dsus4
  Y: "[d3,a3,d4,f#4]@6 [c3,e3,g3,c4,e4]!2 [c3,e3,g3,c4,e4]@3 [a2,d3,a3,d4,f#4] [a2,d3,a3,d4,f#4]@3 [g2,b2,d3,g3,b3,g4]", // D C D G
  Z: "[d3,a3,d4,f#4]@14 [d3,a3,d4,f#4]!2", // D
  AA: "[d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@3 [d3,a3,d4,f#4] [d3,a3,d4,g4]@2 [d3,a3,d4,f#4]!3 [d3,a3,d4,e4] [d3,a3,d4,e4]@2", // D Dsus4 D Dsus2
  AB: "[[a2,e3,a3,c4,g4]@8 [a2,e3,a3,c4,e4]@6 ~@2 [g3,b3]@2 [g3,c4]@2 [g3,d4]@2 [g2,b2,d3,g3,d4]!4 [g2,b2,d3,g3,d4]@2 [g2,b2,d3,g3,d4]!3 [g2,b2,d3,g3,b3], ~@7 g2@4 ~@5]/2", // Am7 Am G C5 G5 G
  AC: "b3@2 b3@2 c4@2 [f3,a3,c4]!2 ~ [f3,a3,c4] [f3,g3] f3@2 [g3,c4] ~ [f3,g3,c4], [f3,a3]@6 ~@4 c4@3 ~@3", // F Fsus2 C5 Fsus2 F
  AD: "[f3 [f3,g3,c4] ~ [g3,c4]@2 [g3,b3]@3 [g3,b3]@6 ~@9 g4@20 ~@5, ~@5 [g2,b2,d3]@8 ~@3, ~@11 [d4,b4]@10 ~@3]/3", // Fsus2 C5 G
})).s("gm_acoustic_guitar_steel").gain(0.4)

// bass · acoustic bass · "bass"
const bass = note(`<
  ~@14 A B C D C E C F@2 G ~@7 H I J K L@2 M N O P Q P C P C R S T ~@4 U V W X Y Z AA ~@5
>`.pickRestart({
  A: "~@3 d2", B: "g2@4 g2!3 d2", C: "c2@2 c2 d2", D: "g2@3 d3 g2 d2!2 c2", E: "g1@4 g1 d2!2 c2",
  F: "[g2@5 g2@2 g2@2 d2@2 a1 d2@3 a1]/2", G: "d2 ~", H: "a1@7 a1 c2@2 c2 b1@3 a1@2", I: "g1@4 ~ g1@2 g1",
  J: "d2@2 d2@3 d2@2 g1", K: "f1@2 f1@2 ~ f1 g1 f1",
  L: "[e1@2 e1@2 e1@2 f1 c2 f2@2 e2 d2@3 e2@4 b1@2 e1@3 e1 f1@6 g1 a1]/2", M: "c2!3 g1!5", N: "g1 d2!2 a1 d2!3 a1",
  O: "d2@2 c2 d2", P: "g2@2 g2@2 g2 d2!2 c2", Q: "c2@3 c2!2 d2 d2@2", R: "g1@3 g1!2 g1@2 g1",
  S: "g1@2 d2@4 d2@2 d2@4 d2 c2 a1@2", T: "d2", U: "d2@2 d2@2 d2 d2@2 d2", V: "d2@2 d2@3 d2@2 d2",
  W: "d2@4 d2@4 ~@2 d2@3 a1 a1@2", X: "d2@4 d2@4 ~@2 c2@3 b1 b1@2", Y: "d2@2 d2@2 ~ d2@2 ~",
  Z: "d2@4 d2@4 ~@2 d2@2 g2 a2@3", AA: "a1",
})).s("gm_acoustic_bass").gain(0.52)

// drums · kick
const kick = s("bd").struct("<~@15 A B A B A@4 C ~@7 A@5 D A E C A@8 C ~@4 A@5 F C ~@5>".pickRestart({
  A: "x ~@3 x!2 ~ x", B: "x!2", C: "x", D: "~ x ~@2 x!2 ~ x", E: "x!2 ~@2 x!2 ~ x", F: "x ~@3 x!2 ~@2",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@14 A B C@7 ~@7 A C@8 ~ B C@7 D ~@3 E C@5 F ~@6>".pickRestart({
  A: "~@7 x", B: "x!2 ~ x", C: "~ x ~ x", D: "x", E: "~@14 x!2", F: "~@4 x ~@2 x ~@4 x!3 ~",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@15 A B@7 ~@8 A B@3 C B ~@3 A B@7 ~@5 D E@4 F ~@6>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x!7 ~", D: "~@2 x ~ x ~ x ~ x ~ x ~ x ~ x!2", E: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2",
  F: "x ~ x ~ x ~ x!3 ~ x ~@5",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@15 A ~@7 A ~@7 A ~@3 B ~ A ~ A@2 ~@7 A ~@4 A ~@5 A ~@5>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@37 [~ x!7] [x!8] ~@26>").gain(0.4)

stack(acoustic_guitar_nylon, acoustic_guitar_steel, bass, kick, snare, hihat, crash, ride)

More by Led Zeppelin