Strudelify

Justify My Love

Madonna

KeyG majorTempo397 bpm
0:00/0:00
// Justify My Love — Madonna
// 397 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 226 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(397/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · pizzicato strings
const pizzicato_strings = note(`<
  A@7 B A@7 B A@7 B A@7 B C@8 ~@7 B C@8 ~@7 B C@8 ~@7 B C@8 ~@7 B ~@31 D A@7 B A@7 B A@7 B A@7 B C@8 ~@7 B C@8 ~@7 B C@8
  ~@7 B C@8 ~@7 E@3
>`.pickRestart({
  A: "d6/7", B: "c6", C: "d6/8", D: "~ c6", E: "c6/3",
})).s("gm_pizzicato_strings").gain(0.4)

// other · pizzicato strings
const pizzicato_strings_2 = note(`<
  A@7 B A@7 B A@7 B A@7 B C@4 D@4 E@4 F@3 B C@4 D@4 E@4 F@3 B C@4 D@4 E@4 F@3 B C@4 D@4 E@4 F@3 B ~@31 G A@7 B A@7 B A@7
  B A@7 B C@4 D@4 E@4 F@3 B C@4 D@4 E@4 F@3 B C@4 D@4 E@4 F@3 B C@4 D@4 E@4 F@3 H@3
>`.pickRestart({
  A: "g5/7", B: "f5", C: "g5/4", D: "f5/4", E: "e5/4", F: "d#5/3", G: "~ f5", H: "f5/3",
})).s("gm_pizzicato_strings").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A
  C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B
  A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A
  B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C ~@2
>`.pickRestart({
  A: "x!2", B: "~ x", C: "~ x ~@2",
})).gain(0.8).pan(1)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B
  A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A
  B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~
  A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~ A B A ~ A B C ~@2
>`.pickRestart({
  A: "x ~@2 x", B: "x!3 ~", C: "x",
})).gain(0.72).pan(1)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!4]!224 ~@2>").gain(0.48).pan(1)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "~ x",
})).gain(0.48).pan(1)

stack(pizzicato_strings, pizzicato_strings_2, kick, snare, pedal_hat, crash)

More by Madonna