Strudelify

Smack My Bitch Up

The Prodigy

KeyB♭ minorTempo136 bpm
0:00/0:00
// Smack My Bitch Up — The Prodigy
// 136 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 188 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(136/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.

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note("<A@3 B ~@164 C@8 ~@12>".pickRestart({
  A: "[db3,db4]!2", B: "[db3,db4]@4 [db3,db4]@4 [db3,db4]@4 [db3,db4]!4", C: "[[bb3,f4]@63 ~]/8",
})).s("gm_distortion_guitar").gain(0.31)

// chords · lead 4 chiff · "CHIFFERLED"
const lead_4_chiff = note("<~@76 A@4 ~@16 B@16 C@5 D@3 B@16 C@5 E@2 ~@41 F@2 G@2>".pickRestart({
  A: "[[bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 ~@7, ~@7 [bb2,f3]@2 ~@6 [bb2,f3]@2 ~@15]/4", // Bb5
  B: "[[bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ f4 [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ f4 [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3], ~@7 [bb2,f3]@2 ~@6 [bb2,f3]@2 ~@6 [bb2,f3]@2 ~@6 [bb2,f3]@2 ~@6 [bb2,f3]@2 ~@6 [bb2,f3]@2 ~@6 [bb2,f3]@2 ~@7]/8", // Bb5
  C: "[[bb2,f3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ f4 [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3], ~@7 [bb2,f3]@2 ~@6 [bb2,f3]@2 ~@6 [bb2,f3]@2 ~@6 [bb2,f3]@2 ~@7]/5", // Bb5
  D: "[[bb2,f3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3], ~@7 [bb2,f3]@2 ~@6 [bb2,f3]@2 ~@7]/3", // Bb5
  E: "[[bb2,f3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] ~ [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3]@2 [bb3,f4] [bb2,f3], ~@7 [bb2,f3]@2 ~@7]/2", // Bb5
  F: "[[bb3,f4]@2 ~@2 [bb3,f4] [bb3,f4]@2 ~@2 [bb3,f4] [bb3,f4]@2 ~@2 [bb3,f4] [bb3,f4]@2 ~@2 [bb3,f4] [bb3,f4]@2 ~@2 [bb3,f4] [bb3,f4]@2 ~@2 [bb3,f4] [bb3,f4]@2, ~@2 [bb2,f3]@4 ~ [bb2,f3]@4 ~ [bb2,f3]@4 ~ [bb2,f3]@4 ~ [bb2,f3]@4 ~ [bb2,f3]@4 ~]/2", // Bb5
  G: "[~@2 [bb3,f4] [bb3,f4]@2 ~@2 [bb3,f4] [bb3,f4]@2 ~@2 [bb3,f4] [bb3,f4]@2 ~@2 [bb3,f4] [bb3,f4]@2 ~@2 [bb3,f4] [bb3,f4]@2 ~@2 [bb3,f4]@2 ~@3, [bb2,f3]@4 ~ [bb2,f3]@4 ~ [bb2,f3]@4 ~ [bb2,f3]@4 ~ [bb2,f3]@4 ~ [bb2,f3]@4 ~@3]/2", // Bb5
})).s("gm_lead_4_chiff").gain(0.41)

// bass · electric bass pick · "PICKEDBASS"
const bass = note(`<
  A@4 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B D B C B C B C B D B C B C B C B D B
  C B C B C B D B C B C B C B D ~@4 B C B C B C B D B C B C B C B D ~@24 B C B C B C B C B C B C B C B C B C B C B C B ~
  B C B C B C B D B C B C B C B D B C B C B C B D B C B C B C B D B C B C B C B D ~@4
>`.pickRestart({
  A: "db2!4", B: "bb1@2 bb1@2 ~@2 bb1@2 bb1!2 bb1@2 ~ bb1 bb1@2",
  C: "bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 ab1@2 ~ ab1 bb1@2, ~@10 bb1 ~@5",
  D: "db2@2 ~ db2 db2@2 ~ db2 db2@2 ~ db2 db2@2 ~ db2",
})).s("gm_electric_bass_pick").gain(0.36)

// other · lead 2 sawtooth · "SAWWAVE"
const lead_2_sawtooth = note(`<
  ~@12 A@24 B@6 A C A@2 D@2 A@2 E C A@2 D@2 A@2 E C F G F G F G F A F G F G F G F A ~@4 F G F G F G F A F G F G F G F A
  ~@32 H@8 I@6 J ~ F G F G F G F A F G F G F G F A F G F G F G F A@17 ~@4
>`.pickRestart({
  A: "bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1",
  B: "[bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1, [bb2,bb3]]/6", // Bb
  C: "bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1, [db3,db4]", // Db
  D: "[bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1, [bb2,bb3]]/2", // Bb
  E: "bb1@2 bb1@2 bb1@2 ~ bb1 bb1@2 bb1@2 bb1@2 ~ bb1, [bb2,bb3]", // Bb
  F: "bb1@2 bb1@2 bb1@2 ~ bb1 ~ ab3 [ab3,ab4] ~@2 [ab3,ab4] ~ bb1, [bb2,bb3]@11 [b3,b4]@2 ~ [bb3,bb4]@2, ~@4 bb1!3 ~", // Ab Bb B Bb
  G: "bb1@2 bb1@2 bb1@3 bb1 ~ ab3 [ab2,ab3] ~@2 [ab2,ab3] ~ bb1, bb2@11 [b2,b3]@2 ~ [bb2,bb3]@2, ~@4 bb1!3 ~", // Ab B Bb
  H: "[[bb1,bb2]@63 ~]/8", I: "[[bb2,bb3]@15 ~]/2", J: "[bb2,bb3]@7 ~",
})).s("gm_lead_2_sawtooth").gain(0.2)

// other · lead 2 sawtooth · "SAWWAVE" · soft notes
const lead_2_sawtooth_soft = note("<~@12 A@24 B@6 A@18 C A@15 ~@4 C A@15 ~@48 C A@15 C A@23 ~@4>".pickRestart({
  A: "bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0",
  B: "[bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0 bb0@2 bb0@2 bb0@2 ~ bb0, f4]/6",
  C: "bb0@2 bb0@2 bb0@2 ~@2 bb0@2 bb0@2 bb0@2 ~ bb0",
})).s("gm_lead_2_sawtooth").gain(0.15)

// other · woodblock
const woodblock = note("<~@96 A B C D ~@84 A B C D>".pickRestart({
  A: "~@11 bb4!5", B: "bb4!6 [a4,bb4] g4 ~@3 e4!5", C: "e4!8 ~@3 a3!4 [ab3,a3]",
  D: "[g3,ab3] [gb3,ab3] gb3 [e3,gb3] [b2,db3] [ab2,b2] b2 ~@9", // Abmaj7 Gbsus2 Esus2 Bsus2 Abm
})).s("gm_woodblock").gain(0.26)

// other · woodblock · soft notes
const woodblock_soft = note("<~@96 A B C D ~@84 A B C D>".pickRestart({
  A: "~@8 bb4!3 ~@5", B: "~@8 e4!3 ~@5", C: "~@8 a3!3 ~@5", D: "~@7 b2 ~@8",
})).s("gm_woodblock").gain(0.1)

// chords · pad new age · "FANTASIA"
const pad_new_age = note("<~@96 A@8 ~@16 A@8 ~@60>".pickRestart({
  A: "[f3,bb3]/8", // Bb5
})).s("gm_pad_new_age").gain(0.41)

// bass · whistle
const bass_2 = note(`<
  ~@28
  [bb1@6 ~@4 bb1@2 ~ bb1@2 ~]!48
  ~@4
  [bb1@6 ~@4 bb1@2 ~ bb1@2 ~]!16
  ~@48
  [bb1@6 ~@4 bb1@2 ~ bb1@2 ~]!40
  ~@4
>`).s("gm_electric_bass_finger").gain(0.41)

// drums · rim
const rim = s("rim").struct("<~@4 A@24 ~@2 B@6 A@40 ~@4 A@16 ~@22 C D ~@7 E ~@8 F G@6 ~ A@40 ~@4>".pickRestart({
  A: "~@7 x ~ x ~@6", B: "~@7 x ~@8", C: "x!2", D: "x ~@3 x ~@3 x ~@3 x!4", E: "~@3 x!13", F: "~@11 x!5", G: "x!16",
})).gain(0.2)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@79 A ~@47 B ~@8 C ~@6 A ~@44>".pickRestart({
  A: "~ x!2 ~", B: "x!3 ~@13", C: "x!11 ~@5",
})).gain(0.1)

// drums · kick
const kick = s("bd").struct("<A@3 B ~@23 C D@48 ~@4 D@16 ~@24 D@23 ~ D@40 ~@4>".pickRestart({
  A: "x ~@2 x ~@4 x ~@2 x ~@4", B: "x ~@2 x!2 ~@2 x!2 ~@2 x ~@4", C: "x", D: "x ~@9 x ~@2 x ~@2",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct("<~@28 A@2 B@6 C@40 ~@4 C@16 ~@24 A@23 ~ C@40 ~@4>".pickRestart({
  A: "~@7 x ~@4 x ~@3", B: "~@3 x", C: "~@3 x!2 ~ x ~",
})).gain(0.31)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@12 [x!3 ~ x!3 ~]!16 ~@90 [x!16]!2 ~@68>").gain(0.41)

// drums · ride
const ride = s("rd").struct("<~@4 A@24 B@48 ~@4 B@16 ~@24 B@23 ~ B@40 ~@4>".pickRestart({
  A: "~ x ~@2", B: "~ x ~ x",
})).gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [~ x ~ x]!24 ~@160>").gain(0.41)

// drums · splash
const splash = s("cr").struct(`<
  ~@28 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~@4 A@2 ~ A ~ A ~ A
  ~ B ~ A ~ B ~ A ~@25 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@3 ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ B ~
  A ~ B ~ A ~ B ~ A ~ B ~ A ~@5
>`.pickRestart({
  A: "x", B: "x!2 ~@2",
})).gain(0.41)

// drums · splash · soft notes
const splash_soft = s("cr").struct("<[x!2]!3 [x!4] ~@184>").gain(0.1)

// drums · bongos
const bongos = s("bongo:4").struct("<[~@6 x!2 ~@6 x!2]!3 ~@185>").gain(0.81)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@4 [x ~@4 x ~@2]!24 ~@160>").gain(0.81)

// drums · congas
const congas = s("conga:13").struct("<[~ x!3] [x!4]!2 x ~@184>").gain(1.31)

stack(
  distortion_guitar, lead_4_chiff, bass, lead_2_sawtooth, lead_2_sawtooth_soft, woodblock, woodblock_soft, pad_new_age,
  bass_2, rim, rim_soft, kick, snare, pedal_hat, ride, tambourine, splash, splash_soft, bongos, bongos_2, congas
)

More by The Prodigy