Strudelify
Sharp Dressed Man cover art

1983 · Eliminator

Sharp Dressed Man

ZZ Top

KeyC majorTempo124 bpm
0:00/0:00
// Sharp Dressed Man — ZZ Top
// 124 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(124/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B A B A B A B A@6 C D A@2 C D E@2 F G A@6 C D A@2 C D E@2 F G A@19 H I D A@2 D@2 A J ~@4 A@6 C D A@2 C D E@2 F G
  A@19 H I D A@2 D@2 A J ~ K ~ L
>`.pickRestart({
  A: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", B: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~@7",
  C: "a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~", D: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~",
  E: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", F: "c2 ~@7", G: "~@5 d#2 a#1 b1", H: "c2 a#1 ~ g1@4 ~",
  I: "f1@2 f1@2 f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~", J: "c2 ~ a#1@2 ~@2 g1@8 ~@2", K: "~@5 g1 a#1 c2",
  L: "a#1@2 d#2@3 ~ c2@2 ~@8, ~@2 e2 ~@13",
})).s("gm_electric_bass_finger").gain(0.25)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  A B A B C D C B C B C E ~@12 C B C F ~@12 G H I@5 J I@7 K H G H L M@2 H@2 M N H O C E C E C E C B ~@12 G H I@5 J I@7 K
  H G H L M@2 H@2 M N H O C E C E
>`.pickRestart({
  A: "~@4 [f3,c4]@2 ~@2 [d#3,a#3]@2 [c3,g3]@3 ~@3", B: "[f3,c4]@2 [d#3,a#3]@2 ~@2 [c3,g3]@3 ~@7",
  C: "~@2 [f3,c4] ~ [d#3,a#3] [c3,g3] ~@2", D: "[f3,c4] ~ [d#3,a#3]@2 ~@2 [c3,g3]@3 ~@7",
  E: "[f3,c4] [d#3,a#3] ~ [c3,g3] ~@4", F: "[f3,c4] ~ [d#3,a#3]@2 ~@2 [c3,g3]@2 ~@8",
  G: "~@2 [c3,g3]@3 ~@3 [c3,g3]@4 ~@4", H: "~@2 [c3,g3]@2 ~@4 [c3,g3]@5 ~@3", I: "~ [c3,g3] ~@2 [c3,g3]@2 ~@2",
  J: "~ [c3,g3] ~@2 [c3,g3] [g2,d3] [a#2,f3] [c3,g3]", K: "~ [c3,g3] ~@2 [c3,g3]@2 [g2,d3] [a#2,f3]",
  L: "[c3,g3]@2 [a#2,f3]@2 ~@2 [g2,d3]@9 ~", M: "~@2 [f2,c3]@2 ~@4 [f2,c3]@5 ~@3", N: "~ [f2,c3] ~@2 [f2,c3]@3 ~",
  O: "[c3,g3] [a#2,f3] ~ [g2,d3]@3 ~@2", // C5 A#5 G5
})).s("gm_overdriven_guitar").gain(0.3)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_2 = note(`<
  A B C B A B C B A B C B ~@12 A B C B ~@40 A B C B A B C B ~@40 A B C B
>`.pickRestart({
  A: "[c3,g3] ~ [c3,g3]@2 ~@8 [c3,g3] ~ [c3,g3]@2", B: "~@2 [c3,g3] ~@5",
  C: "[c3,g3] ~ [c3,g3]@2 ~@8 [c3,g3]@2 [c3,g3]@2", // C5
})).s("gm_overdriven_guitar").gain(0.3)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~ A B A B A B A B A B A C D E F C G E H I J B K ~ A B A C D E F C G E H I J B K ~@29 A B A B A B A C D E F C G E H I J
  B K ~@29 L ~ M
>`.pickRestart({
  A: "~@10 [g2,d3]@2 [a#2,f3] [c3,g3]!2 ~", B: "[c3,g3]@3 ~@13", C: "[c3,g3]@3 ~@7 [g2,d3]@2 [a#2,f3] [c3,g3]!2 ~",
  D: "[c3,g3]@3 ~@7 [g2,d3]@2 [a#2,f3] [c3,g3] [c3,g3]@2", E: "[a#2,f3]@3 ~@9 [a#2,f3]@4",
  F: "[f2,c3]@3 ~@7 [g2,d3]@2 [a#2,f3] [c3,g3]!2 ~", G: "[c3,g3]@3 ~@9 [c3,g3]@4", H: "[f2,c3]@3 ~@9 [f2,c3]@4",
  I: "[g2,d3]@3 ~@9 [f2,c3]@4", J: "[g2,d3]@3 ~@9 [g2,d3]@4", K: "~@5 [d#3,a#3] [a#2,f3] [b2,f#3]",
  L: "~@5 [g2,d3] [a#2,f3] [c3,g3]", M: "[a#2,f3] [d#3,a#3]@2 [c3,g3] ~@4",
})).s("gm_distortion_guitar").gain(0.3)

// drums · kick
const kick = s("bd").struct("<[x!4]!22 x [x!4]!15 x [x!4]!47 x [x!4]!32 [x!2 ~@2]>").gain(0.36)

// drums · snare
const snare = s("sd").struct("<A@11 B A@10 ~ C A@14 ~ C A@19 D A@7 E A@18 ~ C A@19 F A@7 G A@3 H>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x ~ x!3 ~", C: "x!2 ~@2", D: "x ~ x ~ x ~ x ~ x!4 ~@4", E: "x ~ x ~ x!4",
  F: "~@4 x ~@3 x ~@3 x!4", G: "x!2 ~ x ~ x!2 ~", H: "x!3 ~@5",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@23 [~@7 x] ~@15 [~@7 x] ~@47 [~@7 x] ~@32>").gain(0.36)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@15 A ~@19 B ~@27 A ~@32>".pickRestart({
  A: "~@3 x", B: "~@7 x",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<~@59 A ~@3 B ~@3 B ~@3 A ~@35 A ~@11 C>".pickRestart({
  A: "~@5 x ~ x", B: "~@7 x", C: "x!2 ~ x ~@4",
})).gain(0.26)

// drums · high tom
const high_tom = s("ht").struct("<~@23 A ~@15 A ~@19 B ~@27 A ~@32>".pickRestart({
  A: "~@4 x!2 ~@2", B: "~@3 x",
})).gain(0.36)

stack(
  bass, overdriven_guitar, overdriven_guitar_2, distortion_guitar, kick, snare, low_tom, hihat, mid_tom, open_hat,
  high_tom
)

More by ZZ Top