Strudelify
Can't Touch This cover art

1990 · Please Hammer Don't Hurt 'Em

Can't Touch This

MC Hammer

KeyA minorTempo134 bpm
0:00/0:00
// Can't Touch This — MC Hammer
// 134 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 144 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(134/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B A B A B A B A B C B A B C B A B A B A B A B A B C B A B C B A B A B A B A B A B C B A B C B A B A B A B A B D@6
  E@2 A B C B A B C B A B A B A B A B D@6 E@2 A B C B A B C B A B A B A B A B D@6 E@2 A B C B A B C B A B C B A B C B A
  B C B A B C B A B C B A B C B
>`.pickRestart({
  A: "d3@2 c3 b2 a2 ~@2 e2", B: "g2 ~@2 b2 a2 ~@3", C: "d3@2 c3 b2 a2 ~@2 b2",
  D: "[a1 ~ a1 ~ a1 ~ a2 d3@3 c3 ~ a2 ~ a2 d3@3 c3 ~ a2 ~ a2 d3@3 c3 ~@5]/2",
  E: "[a1 ~ a1 ~ a1 ~ a2 d3@3 c3 ~ a2 ~ a2 d3@3 c3 ~@13]/2",
})).s("gm_acoustic_bass").gain(0.4)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B A B A B A B A B C B A B C B A B A B A B A B A B C B A B C B A B A B A B A B ~@10 A B A B A B ~@8 A B C B A B C B A
  B A B A B A B ~@8 A B C B A B C B A B A B A B A B ~@8 A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B
>`.pickRestart({
  A: "d3@2 c3 b2 a2 ~@2 e2", B: "g2 ~@2 b2 a2 ~@3", C: "d3@2 c3 b2 a2 ~@2 b2",
})).s("gm_acoustic_guitar_steel").gain(0.64)

// other · acoustic guitar steel · "STEEL GTR" · soft notes
const acoustic_guitar_steel_2 = note("<~@40 A B C B A B C B A B ~@94>".pickRestart({
  A: "d3@2 c3 b2 a2 ~@2 e2", B: "g2 ~@2 b2 a2 ~@3", C: "d3@2 c3 b2 a2 ~@2 b2",
})).s("gm_acoustic_guitar_steel").gain(0.24)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  A B A C A C A C A D A E A D A E A C A C A B A C A D A E A D A E A B A C A B A C A D A E A D A E A B A C A C A C ~@8 A
  D A E A D A E A C A C A B A B ~@8 A D A E A D A E A B A C A C A C ~@8 A D A E A D A E A D A E A D A E A D A E A D A E
  A D A E A D A F
>`.pickRestart({
  A: "~@10 [c5,e5,a5] ~ [c5,e5,a5] ~@3", B: "~@2 [b4,d5,g5] ~ [b4,d5,g5] ~@11",
  C: "~@2 [b4,d5,g5] ~ [b4,d5,g5] ~@5 [c5,e5,a5] ~@5", D: "~@2 [b4,d5,g5] ~ [b4,d5,g5] ~@5 [c5,e5,a5] ~ [c5,e5,a5] ~@3",
  E: "~@2 [d5,g5,b5] ~ [d5,g5,b5] ~@5 [c5,e5,a5] ~ [c5,e5,a5] ~@3", F: "~@2 [d5,g5,b5] ~ [d5,g5,b5] ~@11",
})).s("gm_epiano1").gain(0.44)

// other · pad sweep · "SOUNDTRACK"
const pad_sweep = note(`<
  ~ A ~ A ~ A ~ A ~ B ~ C ~ B ~ C ~ A ~ A ~ A ~ A ~ B ~ C ~ B ~ C ~ A ~ A ~ A ~ A ~ B ~ C ~ B ~ C ~ A ~ A ~ A ~ A ~@9 B
  ~ C ~ B ~ C ~ A ~ A ~ A ~ A ~@9 B ~ C ~ B ~ C ~ A ~ A ~ A ~ A ~@9 B ~ C ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~
  C ~ B ~ D
>`.pickRestart({
  A: "~@3 [c5,c6]@2 ~@3, [b4,b5] ~", B: "~@3 [c5,c6]@4 ~, [b4,b5] ~", C: "~@3 [a4,a5]@4 ~, [g4,g5] ~",
  D: "~@3 [a4,a5] ~@4, [g4,g5] ~", // A G
})).s("gm_pad_sweep").gain(0.41)

// other · lead 3 calliope · "CALLIOPE"
const lead_3_calliope = note("<~@56 A@6 B@2 ~@16 A@6 B@2 ~@16 A@6 B@2 ~@32>".pickRestart({
  A: "[a4 ~ a4 ~ a4 ~ a4 d5@3 c5 ~ a4 ~ a4 d5@3 c5 ~ a4 ~ a4 d5@3 c5 ~@5]/2",
  B: "[a4 ~ a4 ~ a4 ~ a4 d5@3 c5 ~ a4 ~ a4 d5@3 c5 ~@13]/2",
})).s("gm_lead_3_calliope").gain(0.56)

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

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

// drums · snare
const snare = s("sd").struct(`<
  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 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@17 C A C A C A B
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@4 x ~@5 x ~ x!3 ~",
})).gain(0.7)

// drums · clap
const clap = s("cp").struct(`<
  A B A B A B A B A@9 B A B A B A B A@9 B A B A B A B A@9 B A B A B A B ~@8 A@9 B A B A B A B ~@8 A@9 B A B A B A B ~@8
  A@31 B
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.62)

// drums · hihat
const hihat = s("hh").struct(`<
  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 D E D
  E D E D F A C A C A C A C A B A B A B A B D E D E D E D G A C A C A C A C A B A B A B A B D E D E D E D G A C A C A C
  A C A B A B A B A B D E D E D E D E A B A B A B A C
>`.pickRestart({
  A: "x!8", B: "~ x!5 ~@2", C: "~ x!4 ~@3", D: "~@2 x ~ x ~@3 x ~ x ~ x ~ x!2", E: "x ~ x ~ x ~@3 x ~ x!2 ~@4",
  F: "x ~ x ~ x ~@3 x!7 ~", G: "x ~ x ~ x ~@3 x!6 ~@2",
})).gain(0.62)

// drums · crash
const crash = s("cr").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "x",
})).gain(0.7)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct(`<
  ~@9 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A
  ~ A ~ A ~@2
>`.pickRestart({
  A: "~@10 x ~ x!3 ~",
})).gain(3.96)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@8 A B A B A B A B ~@8 A B A B A B A B ~@8 A B A B A B A B ~@8 C D C D C D C D A B A B A B A B ~@8 C D C D C D C D A
  B A B A B A B ~@8 C D C D C D C D A B A B A B A B ~@8 C E C E C E C F A B A B A B A G
>`.pickRestart({
  A: "~@3 x!2 ~@2 x", B: "x ~@2 x!2 ~@2 x", C: "~ x ~ x ~ x ~ x", D: "x ~@2 x ~@3 x", E: "x!2 ~ x ~ x ~ x",
  F: "x!2 ~ x ~@3 x", G: "x ~@2 x!2 ~@3",
})).gain(3.54)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_steel_2, epiano1, pad_sweep, lead_3_calliope, kick, rim, snare, clap,
  hihat, crash, agogo_bells, cabasa
)

More by MC Hammer