Strudelify
Legs cover art

1983 · Eliminator

Legs

ZZ Top

KeyE majorTempo123 bpm
0:00/0:00
// Legs — ZZ Top
// 123 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 130 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(123/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.

// bass · electric bass pick · "BASS"
const bass = note(`<
  ~@4 A@4 B@2 A@10 C@4 A@4 C@4 D@2 E@2 A@8 C@4 A@4 C@4 D@2 E@2 A@4 F@4 G@4 F@4 G@2 H@2 I@4 A@4 C@4 A@4 C@4 D@2 E@2 A@4
  F@4 G@4 F@4 G@2 H@2 I@4 J@2
>`.pickRestart({
  A: "e1@2 e1!2 e1@2 e1!2 e1@2 e1!2 e1@2 e1!2", B: "d1@2 d1!2 d1@2 d1!2 d1@2 d1!2 d1@2 d1!2",
  C: "c#1@2 c#1!2 c#1@2 c#1!2 c#1@2 c#1!2 c#1@2 c#1!2", D: "a0@2 a0!2 a0@2 a0!2 a0@2 a0!2 a0@2 a0!2",
  E: "b0@2 b0!2 b0@2 b0!2 b0@2 b0!2 b0@2 b0!2", F: "c#1 ~ c#1!3 ~ c#1!3 ~ c#1!3 ~ c#1!2",
  G: "f#1 ~ f#1!3 ~ f#1!3 ~ f#1!3 ~ f#1!2", H: "b0 ~ b0!3 ~ b0!3 ~ b0!3 ~ b0!2", I: "e1 ~ e1!3 ~ e1!3 ~ e1!3 ~ e1!2",
  J: "[c#1@2 ~ c#1 g#0@2 c#0@19 ~@7]/2",
})).s("gm_electric_bass_pick").gain(0.72)

// chords · overdriven guitar · "Guitar 1"
const overdriven_guitar = note(`<
  ~@2 A@2 B@2 A B C@2 A@3 B D B E@4 F@4 E@4 F@4 G@2 H@2 E@8 F@4 E@4 F@4 G@2 H@2 E@4 I@4 J@4 I@4 J@2 K@2 L@4 E@4 F@4 E@4
  F@4 G@2 H@2 E@4 I@4 J@4 I@4 J@2 K@2 L@4 M@2
>`.pickRestart({
  A: "~ [e3,b3,e4] ~@2 [e3,b3,e4]@2 [e3,b3,e4]!2", B: "~@2 [e3,b3,e4]@2 ~@4 [e3,b3,e4]@3 ~ [e3,b3,e4]@2 [e3,b3,e4]@2",
  C: "~ [d3,a3,d4] ~@2 [d3,a3,d4]@2 [d3,a3,d4]!2", D: "~@2 [e3,b3,e4] ~@5 [e3,b3,e4]@3 ~ [e3,b3,e4]@2 [e3,b3,e4]@2",
  E: "~ [e3,b3,e4] ~@2 [e3,b3,e4] ~@3", F: "~ [c#3,g#3,c#4] ~@2 [c#3,g#3,c#4] ~@3",
  G: "~ [a2,e3,a3] ~@2 [a2,e3,a3] ~@3", H: "~ [b2,f#3,b3] ~@2 [b2,f#3,b3] ~@3",
  I: "~ [c#3,g#3,c#4] ~@2 [c#3,g#3,c#4]@3 ~", J: "~ [f#3,c#4,f#4] ~@2 [f#3,c#4,f#4]@3 ~",
  K: "~ [b2,f#3,b3] ~@2 [b2,f#3,b3]@3 ~", L: "~ [e3,b3,e4] ~@2 [e3,b3,e4]@3 ~",
  M: "[[c#3,g#3,c#4] ~@2 [c#3,g#3,c#4]@10 ~@3]/2", // C#5
})).s("gm_overdriven_guitar").gain(0.56)

// chords · overdriven guitar · "Guitar 2"
const overdriven_guitar_2 = note(`<
  ~@4 A@4 B@2 C@6 ~@2 D@2 E@2 F@2 G@4 F@2 E@2 H@2 I@2 A@4 ~@2 D@2 E@2 F@2 G@4 F@2 E@2 H@2 I@2 A@4 F@4 J@2 K@2 E@4 J@2
  L@2 A@4 ~@2 D@2 E@2 F@2 G@4 F@2 E@2 H@2 I@2 A@4 F@4 J@2 K@2 E@4 J@2 L@2 A@4 ~@2
>`.pickRestart({
  A: "[~@2 [e3,b3] ~ [e3,b3]@3 ~ [e3,b3]@10 [e3,b3]@2 [e3,b3]@3 ~ [e3,b3]@10 [e3,b3]@2 [e3,b3]@3 ~ [e3,b3]@10 [e3,b3]@2 [e3,b3]@3 ~ [e3,b3]@8]/4", // E5
  B: "~@2 [d3,a3]@2 [d3,a3]@3 ~ [d3,a3]@8", // D5
  C: "[~@2 [e3,b3]@2 [e3,b3]@3 ~ [e3,b3]@10 [e3,b3]@2 [e3,b3]@3 ~ [e3,b3]@10 [e3,b3]@2 [e3,b3]@3 ~ [e3,b3]@10 [e3,b3] ~ [e3,b3]@3 ~ [e3,b3]@10 [e3,b3]@2 [e3,b3]@3 ~ [e3,b3]@10 [e3,b3]@2 [e3,b3]@3 ~ [e3,b3]@8]/6", // E5
  D: "[e3,b3]/2", E: "[[c#3,g#3]@31 ~]/2", F: "[c#3,g#3]/2", G: "[[e3,b3]@63 ~]/4", H: "[[a2,e3]@31 ~]/2",
  I: "[b2,f#3]/2", J: "[f#3,c#4]/2", K: "[[f#3,c#4]@31 ~]/2", L: "[[b2,f#3]@31 ~]/2",
})).s("gm_overdriven_guitar").gain(0.48)

// chords · string ensemble 1 · "Synth Pad"
const string_ensemble_1 = note(`<
  ~@40 A@4 B@4 A@4 B@4 C@2 D@2 E@4 B@4 F@4 B@4 G@2 H@2 A@8 B@4 A@4 B@4 C@2 D@2 E@4 B@4 F@4 B@4 G@2 H@2 A@4 ~@2
>`.pickRestart({
  A: "[b3,e4,g#4]/4", B: "[c#4,e4,g#4]/4", C: "[a3,c#4,e4]/2", D: "[b3,d#4,f#4]/2", E: "[[b3,e4,g#4]@63 ~]/4",
  F: "[f#3,c#4,f#4]/4", G: "[f#3,c#4,f#4]/2", H: "[[b3,d#4,f#4]@31 ~]/2",
})).s("gm_string_ensemble_1").gain(0.35)

// chords · brass section · "Brass"
const brass_section = note("<~@31 A B C@2 ~@20 A B C@2 ~@40 A B C@2 ~@27>".pickRestart({
  A: "~@10 [e5,g#5,b5]@3 ~ [e5,g#5,b5]@2", B: "~@2 [g#5,b5]@4 [f#5,a5]@7 ~@3, ~ e5@5 ~@2",
  C: "[~@5 [e5,g#5,b5]!2 [d#5,g#5,b5]@2 [g#5,b5]@2 [f#5,a5]@2 [g#5,b5] ~@2, ~@9 d#5@5 ~@2]/2", // E G#m F#m G#m
})).s("gm_brass_section").gain(0.45)

// other · electric guitar muted · "MUTED Guitar"
const electric_guitar_muted = note(`<
  ~@2 A@6 B@2 A@10 C@4 A@4 C@4 D@2 E@2 A@8 C@4 A@4 C@4 D@2 E@2 A@4 C@4 F@4 C@4 F@2 E@2 A@8 C@4 A@4 C@4 D@2 E@2 A@4 C@4
  F@4 C@4 F@2 E@2 A@4 G@2
>`.pickRestart({
  A: "e2!16", B: "d2!16", C: "c#2!16", D: "a1!16", E: "b1!16", F: "f#2!16", G: "[c#3@2 ~ c#3 g#2@2 c#2@19 ~@7]/2",
})).s("gm_electric_guitar_muted").gain(0.35)

// drums · kick
const kick = s("bd").struct("<~@4 A@58 B C A@14 B A@3 B C A@22 B C A@14 B A@3 B C D ~>".pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x ~ x!6", D: "x ~@2 x ~@4",
})).gain(0.5)

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

// drums · low tom
const low_tom = s("lt").struct("<~@63 A ~@15 B ~@3 A ~@23 A ~@15 B ~@3 A C ~>".pickRestart({
  A: "~@3 x!5", B: "~@12 x!4", C: "~@2 x!4 ~@10",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<[x!2] [x!4] [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!126 [x ~@2 x ~@4] ~>").gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<~@79 [~@12 x!2 ~@2] ~@43 [~@12 x!2 ~@2] ~@4 [~@2 x!2 ~@12] ~>").gain(0.4)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@40 [x!4]!24 x!16 [x!4]!28 x!16 [x!4]!4 [x ~@2 x!2 ~ x ~@9] ~>").gain(0.4)

stack(
  bass, overdriven_guitar, overdriven_guitar_2, string_ensemble_1, brass_section, electric_guitar_muted, kick, snare,
  low_tom, hihat, mid_tom, crash, tambourine
)

More by ZZ Top