Strudelify

U Cant Touch This (club mix)

MC Hammer

KeyA minorTempo135 bpm
0:00/0:00
// U Cant Touch This (club mix) — MC Hammer
// 135 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 142 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · piano · "E Pno"
const piano = note(`<
  ~@2 A B A B A B A B A C A C A C A C A B A B A B A B A C A C A C A C A B A B A B A B A C A C A C A C A B A B A B A B
  ~@8 A C A C A C A C A B A B A B A B ~@8 A B A B A C A C A B A B A B A B ~@8 A C A C A C A C A C A C ~@8 A B A B A B A
  B
>`.pickRestart({
  A: "~@10 [c5,e5,a5] ~ [c5,e5,a5] ~@3", B: "~@2 [b4,d5,g5] ~ [b4,d5,g5] ~@5 [c5,e5,a5] ~@5",
  C: "~@2 [b4,d5,g5] ~ [b4,d5,g5] ~@5 [c5,e5,a5] ~ [c5,e5,a5] ~@3", // G Am
})).s("gm_piano").gain(0.26)

// other · pad poly · "Lead synth"
const pad_poly = note(`<
  ~@3 A ~ A ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~ A ~ A ~ A ~@9
  A ~ B ~ A ~ B ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~@9 A ~ B ~ A ~ B ~ A ~ B ~@9 A ~ A ~ A ~ A
>`.pickRestart({
  A: "b5@3 ~@3 c6@2 ~@8", B: "g5@3 ~@3 a5@2 ~@8",
})).s("gm_pad_poly").gain(0.46)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@2 A B C D A D A B A E A B F B A G A B C D A D A B A E A B F B A G A B C D A D A B A E A B F B A G A B A E A H F E
  I@6 J@2 A E A B F B A G A B C D A D A B I@6 J@2 A B C D A E A B A B C D A B C D I@6 J@2 A E A B A E A B F B A G I@6
  J@2 A B A E A H F E
>`.pickRestart({
  A: "d3@2 c3 b2 a2 ~@2 e2", B: "g2@2 ~@4 b2@2 a2@3 ~@5", C: "d3@4 c3@2 b2@2 a2 ~@5 e2@2", D: "g2 ~@2 b2 a2 ~@3",
  E: "g2@3 ~@3 b2@2 a2@3 ~@5", F: "d3@4 c3@2 b2@2 a2@3 ~@3 e2@2", G: "g2@3 ~@3 b2@2 ~ a2@2 ~@5",
  H: "g2@3 ~@3 b2@2 a2@4 ~@4", I: "[a3 ~ a3 ~ a3 ~ a3 c4@4 ~@3 a3 c4@4 ~@3 a3 c4@4 ~@5]/2",
  J: "[a3 ~ a3 ~ a3 ~ a3 c4@4 ~@3 a3 c4@4 ~@13]/2",
})).s("gm_electric_bass_finger").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@56 B ~ B ~ B ~ B ~ A@16 B ~ B ~ B ~ B ~ A@16 B ~ B ~ B ~ B ~ A@12 B ~ B ~ B ~ B ~ A@8
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x!2 ~ x!2 ~@3",
})).gain(0.46)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@141>").gain(0.46)

// drums · clap
const clap = s("cp").struct(`<
  ~@2 A B A B A B A B A C A C A C A C A B A B A B A B A C A C A C A C A B A B A B A B A C A C A C A C A B A B A B A B
  A@7 B A C A C A C A C A B A B A B A B A@7 B A B A B A C A C A B A B A B A B A@7 B A C A C A C A C A C A C A@7 B A B A
  B A B A B
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@4 x ~@5 x ~ x!3 ~",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C ~
  D ~ D ~ D ~ D A C A C A C A C A C A C A C A C ~ D ~ D ~ D ~ D A C A C A C A C A C A C A C A C ~ D ~ D ~ D ~ D A C A C
  A C A C A C A C ~ D ~ D ~ D ~ D A C A C A C A C
>`.pickRestart({
  A: "x!8", B: "x!6 ~@2", C: "~ x!5 ~@2", D: "~@10 x!3 ~@3",
})).gain(0.31)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@58 A B A B A B A ~@17 A B A B A B A ~@17 A B A B A B A ~@13 A B A B A B A ~@9
>`.pickRestart({
  A: "x!4 ~@3 x", B: "~@3 x ~@4",
})).gain(2.34)

// drums · whistle
const whistle = s("ballwhistle:0").struct(`<
  ~@58 A B A B A B A ~@17 A B A B A B A ~@17 A B A B A B A ~@13 A B A B A B A ~@9
>`.pickRestart({
  A: "~@7 x ~@7 x", B: "~@7 x ~@8",
})).gain(0.53)

stack(piano, pad_poly, bass, kick, rim, clap, hihat, crash, cabasa, whistle)

More by MC Hammer