Strudelify

Got Me Under Pressure

ZZ Top

KeyE minorTempo156 bpm
0:00/0:00
// Got Me Under Pressure — ZZ Top
// 156 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 4 "square lead-bass" named as a bass, played on electric bass finger (its lead 2 sawtooth patch is not one)
// note: duplicate parts dropped: ch 4 "square lead-bass" electric bass finger (copy of ch 1 "bass" electric bass finger); ch 5 "guit echo" distortion guitar (copy of ch 2 "guit1" overdriven guitar, 0.108 beats late)
// note: Full arrangement: all 143 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(156/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 finger · "bass"
const bass = note(`<
  ~@2 A B A B A B C B D E D E ~@4 D F D F E F E B G H E I G J G K E L E M G N O@2 G P Q@2 R S E B T@2 E B ~ A U E F E U
  E F E U E F E U E F V U E W E U E W E U E F E U E X ~@3 Y Z AA AB G AC AD AE AF@2 G AG ~ G AH AI AJ G AH G AJ A U E F
  E U E F E U E F E U E F V U E W E U E W E U E F E U E X
>`.pickRestart({
  A: "e2@3 ~ e2 ~ e2 ~ e2@4 e2 ~ e2 ~", B: "e2 ~@7", C: "e2@3 ~ e2 ~ e2 ~ e2@3 ~ e2@2 e1@2",
  D: "e2@4 e2 ~ e2 ~ e2@3 ~ e2 ~ e2 ~", E: "e2@3 ~ e2 ~ e2 ~ e2@3 ~ e2 ~ e2 ~",
  F: "e2@3 ~ e2 ~ e2 ~ e2 ~ c2 ~ d2 ~ d#2 ~", G: "e2@3 ~ e2 ~ e2 ~ e2@3 ~ e2 ~ e2@2",
  H: "~@2 e2@3 ~ e2 ~ a2@3 ~ a2@3 ~", I: "e2@2 ~@8 c2 ~ d2 ~ d#2 ~", J: "~@2 e2@3 ~ e2 ~ e2 ~ c2@2 d2 ~ d#2 ~",
  K: "~@2 e2 ~ e2 ~ e2 ~ e2@2 c2 ~ d2 ~ d#2 ~", L: "e2@3 ~ e2 ~ e2@4 c2 ~ d2 ~ d#2 ~",
  M: "e2@3 ~ e2 ~ e2 ~ e2@2 c2 ~ d2@2 d#2 ~", N: "~@2 e2@3 ~ e2 ~ e2@2 c2 ~ d2 ~ d#2 ~",
  O: "[e2@3 ~ e2 ~ e2 ~ e2@3 ~ e2 ~ e2@4 e2@3 ~ e2 ~ e2@2 c2 ~ d2 ~ d#2 ~]/2",
  P: "~@2 e2 ~ e2 ~ e2 ~ e2@2 c2@2 d2@2 d#2@2",
  Q: "[e2@3 ~ e2 ~ e2 ~ e2@4 e2 ~ e2@4 e2 ~ e2 ~ e2 ~ e2@2 c2@2 d2@2 d#2@2]/2", R: "e2@4 e2 ~ e2 ~ e2@4 e2 ~ e2@2",
  S: "~@2 e2@3 ~ e2 ~ e2@2 c2@2 d2 ~ d#2@2", T: "[e2@3 ~ e2 ~ e2 ~ e2@3 ~ e2 ~ e2@4 e2 ~ e2 ~ e2 ~ a2@3 ~ a2@3 ~]/2",
  U: "d2@3 ~ d2 ~ d2 ~ d2@3 ~ d2 ~ d2 ~", V: "e2@3 ~ e2 ~ e2 ~ e2@3 ~@3 e2 ~",
  W: "e2@3 ~ e2 ~ e2 ~ e2@2 c2 ~ d2 ~ d#2 ~", X: "e2@3 ~ e2 ~@11", Y: "a2@4 a2 ~ a2 ~ a2@3 ~ a2 ~ a2@2",
  Z: "~@2 a2@2 a2 ~ a2 ~ a2@3 ~ a2 ~ a2 ~", AA: "f#2@4 f#2 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2@2",
  AB: "~@2 f#2 ~ f#2 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2 ~", AC: "~@2 e2 ~ e2 ~ e2 ~ e2@3 ~ e2 ~ e2 ~",
  AD: "a2@3 ~ a2 ~ a2 ~ a2@3 ~ a2 ~ a2@2", AE: "~@2 a2 ~ a2 ~ a2 ~ a2@3 ~ a2 ~ a2 ~",
  AF: "[f#2@3 ~ f#2 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2@4 f#2 ~ f#2 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2 ~]/2",
  AG: "~@2 e2@3 ~ e2 ~ e2 ~ e2 ~ e2 ~@3", AH: "~@2 e2 ~ e2 ~ e2 ~ a2@3 ~ a2@3 ~", AI: "e2@4 e2 ~ e2 ~ e2@3 ~ e2 ~ e2@2",
  AJ: "~@2 e2 ~ e2 ~ e2 ~ e2 ~ c2 ~ d2 ~ d#2 ~",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · overdriven guitar · "guit1"
const overdriven_guitar = note(`<
  ~ A ~ B ~ B ~ B ~ C D E F E F E G E H I J K L M N ~ O@2 P Q H I J K L M H I J K L M H R S K L M H ~ O@2 P Q ~ T U V@2
  T U W@2 X U W@2 X Y W@2 X Z W@2 T U W@2 X U W@2 T U X AA AB AC AD@3 AE@4 AF@2 AG@2 V@2 ~ AH@2 AI@2 AJ@2 AK@2 T U V@2 T
  U W@2 X U W@2 X Y W@2 X Z W@2 T U W@2 X U W@2 T U X AL
>`.pickRestart({
  A: "~@2 [b3,e4]@2 [b3,d4]@2 [f#3,b3] e4 ~ e4@2 ~ d4 ~@3", B: "~@2 [b3,e4]@2 [b3,d4]@2 [f#3,b3] ~ e4 ~ e4@2 d4 ~@3",
  C: "~@2 [b3,e4]@2 ~ f#3 b3 ~ e4 ~ e4@2 d4 ~@3, ~@2 [b3,d4] ~@5", D: "~@2 [a2,d3] ~ [a2,d3]@2 ~ [a2,d3]",
  E: "~@2 [a2,d3]@3 ~ [a2,d3]@2 g2@4 [b2,e3]@4", F: "~@4 [a2,d3]@2 ~@2 [a2,d3]@5 ~ [a2,d3]@2",
  G: "~@4 [a2,d3] ~@3 [a2,d3]@4 ~@2 [a2,d3]@2", H: "e2@2 [b2,e3] ~ [b2,e3]@2 ~ [b2,e3], ~@8 d3 ~@7",
  I: "~@2 [b2,d3,e3]@2 ~@2 [b2,e3]@2 g2@3 ~ [b2,e3]@4", J: "e2@4 [b2,e3] ~@3 [b2,e3]@5 ~ [b2,e3]@2",
  K: "~ [b2,d3,e3] ~ [b2,e3] g2@2 [b2,e3]@2", L: "e2@4 [b2,d3,e3] ~@3 [b2,e3]@4 ~@2 [b2,e3]@2",
  M: "~@2 [b2,e3]@2 ~@2 [b2,e3]@2 g2@3 ~ [b2,e3]@4", N: "e2@4 [b2,e3]@2 ~@2 [b2,e3]@4 ~@2 [b2,d3,e3] ~",
  O: "[~@6 a3@2 b3@2 g4@2 f#4@2 a3@2 f#4@2 g4@2 ~@4 [a2,e3,a3]@3 ~ [a2,e3,a3]@4, [e2,b2,e3,e4]@3 ~]/2", // A5 E5
  P: "~@3 a3 b3 g4 f#4 a3, [e2,b2,e3,e4]", Q: "f#4 g4 ~@6",
  R: "~ [b2,d3,e3] ~ [b2,e3,a3] g2 g4 [b2,e3,f#4]@2, ~@8 b3 ~@7", // E7 Esus4 Bsus4
  S: "f#4@2 g4@2 [b2,e3] ~@3 [b2,e3]@5 ~ [b2,e3]@2, e2 ~@3", T: "[e2,b2,e3]@15 ~", U: "[d2,a2,d3]@15 ~",
  V: "[[e2,b2,e3]@29 ~@3]/2", W: "[[e2,b2,e3]@31 ~]/2", X: "[e2,b2,e3]", Y: "[d2,a2,d3]@7 ~",
  Z: "[d2,a2,d3]@15 ~, b2 ~@15", AA: "~@4 [b4,e5] ~ [b4,e5] ~@5 [b4,e5]@2 ~@2",
  AB: "~@4 [b4,e5] ~ [b4,e5]@2 ~@4 [b4,e5]@2 ~@2", AC: "~@4 [b4,e5] ~ [b4,e5]@2 ~@4 [b4,e5] ~@3",
  AD: "[~@4 [b4,e5]@11 ~ [a2,a3]@32, ~@5 e3@11]/3", AE: "[[f#2,c#3,f#3] [e2,b2,e3]]/4", AF: "[[a2,e3,a3]@7 ~]/2",
  AG: "[[f#2,c#3,f#3]@29 ~@3]/2", // F#5
  AH: "[~@6 a3@2 b3 ~ g4@2 f#4@2 a3@2 f#4@2 g4@2 ~ a2 ~@2 [a2,e3,a3]@3 ~ [a2,e3,a3]@4, [e2,b2,e3]@3 ~]/2", // A5 E5
  AI: "[~@3 a3 b3 g4 f#4 a3 f#4 g4@5 ~@2, [e2,b2,e3]@31 ~]/2", // E5
  AJ: "[~@6 a3@2 b3@2 g4@2 f#4@2 a3@2 f#4@2 g4@2 ~@4 [a2,e3,a3]@3 e2 [a2,e3,a3]@4, [e2,b2,e3]@25 ~@3 e2 ~@3]/2", // A5 E5
  AK: "[~@3 a3 b3 g4 f#4 a3 f#4 g4@5 ~@2, [e2,b2,e3]]/2", AL: "~@4 [b4,e5] ~ [b4,e5] ~@9",
})).s("gm_overdriven_guitar").gain(0.45)

// other · overdriven guitar · "lead guit"
const overdriven_guitar_2 = note(`<
  ~@55 A B C@2 D E F@2 G H I J K L@2 M G N@3 O P Q R S T U V W X Y ~@25 Z B C@2 D E F@2 G H I J K L@2 M G N@3 AA AB AC@2
  S T U V W X AD ~
>`.pickRestart({
  A: "b3@2 g4@5 b3", B: "a3 f#4@6 b3", C: "[e4@8 e4@5 ~ e4@4 ~ b3@2 ~ a3@2 g3@2 e3@2 ~@4, ~@9 d4 ~@6]/2",
  D: "~@6 e2@2 b2@2 ~@2 e3@3 ~", E: "~@4 d3 ~ d3@2 f#2 ~@3 [c3,d3]@2 ~@2",
  F: "[~@4 e3 ~@3 e3@4 ~ e3 g3@6 e3@2 ~@2 d3@2 e3@2 ~@4]/2", G: "~@4 e3 ~ e3@2 ~@4 e3 ~ e3@2",
  H: "~@4 e3 ~ e3@2 e4@2 ~@2 a4 ~@3", I: "b4", J: "g4 e4@6 a3", K: "b3 g4@6 a3",
  L: "[g4@2 ~@12 g4@4 f#4@2 e4@2 ~ e4@2 ~@2 d4@2 ~@2 e4, ~ f#4@7 ~@3 d4 ~@4]/2", M: "~@4 e4@3 ~ e4 ~@7",
  N: "[~@4 e3 ~ e3 ~@5 g3@8 e3 ~@3 e3@4 ~@2 a3@6 g3 ~@3 a3@2 g3@2 ~@4]/3", O: "~@4 a3@8 g3 ~@3",
  P: "a3@4 g3@2 ~@2 e3 ~ d3@2 ~@2 e3@2", Q: "~@2 e3@2 d3@2 b2@2 ~@4 g3 ~@3", R: "e3 ~@3 e3@7 ~ e3 ~@3",
  S: "~@4 e2 ~ e2@2 ~@4 e2 ~ e2 ~", T: "~@4 d2 ~ d2@2 ~@4 d2 ~ d2@2", U: "~@4 e2 ~@7 e2 ~ e2 ~",
  V: "~@4 e2 ~@7 [d2,e2] ~ e2@2", W: "~@4 e2 ~ e2@2 ~@4 e3 ~@3", X: "e4@15 ~", Y: "a3@6 g3 e3",
  Z: "~@2 g4@5 b3, b3@3 ~", AA: "~@4 e3 ~ e3@2 ~@4 e3@2 ~@2", AB: "~@4 d3 ~ d3@2 ~@4 d3@2 ~@2",
  AC: "[~@4 e3@2 ~@2 e3@4 e3@2 g3@6 e3@2 ~@2 d3 ~ e3@2 ~@4]/2", AD: "e4@6 g3 e3",
})).s("gm_overdriven_guitar").gain(0.8)

// drums · kick
const kick = s("bd").struct("<~ A B@23 A B@23 A B@3 C@2 B@31 C@4 B@12 ~ B@39 D>".pickRestart({
  A: "x", B: "x!2", C: "x!4", D: "x!2 ~@2",
})).gain(0.79)

// drums · snare
const snare = s("sd").struct("<~ A B@15 C B@7 A B@3 C B@19 A B@3 D E B@31 ~@4 B@12 ~ B@39 ~>".pickRestart({
  A: "x", B: "~ x ~ x", C: "~@2 x ~ x!4", D: "x ~@2 x ~@2 x ~", E: "~ x ~@2 x ~ x ~",
})).gain(0.79)

// drums · low tom
const low_tom = s("lt").struct("<~@9 [~@5 x!3] ~@78 [x!8]!2 ~@53>").gain(0.79)

// drums · pedal hat
const pedal_hat = s("hh").struct("<A ~ B@23 ~ B@23 ~ B@3 C ~ B@31 ~@4 B@12 ~ B@39 ~>".pickRestart({
  A: "x!4", B: "x!8", C: "x",
})).gain(0.79)

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 [~@4 x ~ x!2] ~@76 [x!8]!2 ~@54 [x!3 ~@5]>").gain(0.79)

// drums · high tom
const high_tom = s("ht").struct("<~@9 [~ x ~@2 x ~@3] ~@133>").gain(0.79)

// drums · crash
const crash = s("cr").struct("<~ A ~@24 A ~@23 A ~@39 A ~@12 A ~@3 A ~@35>".pickRestart({
  A: "x",
})).gain(0.79)

stack(bass, overdriven_guitar, overdriven_guitar_2, kick, snare, low_tom, pedal_hat, mid_tom, high_tom, crash)

More by ZZ Top