Strudelify

Blood on the Dance Floor

Michael Jackson

KeyF minorTempo109 bpm
0:00/0:00
// Blood on the Dance Floor — Jackson Michael
// 109 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(109/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 · "FINGERBAS"
const bass = note(`<
  ~@7 A B C D E B C D E B C D E B C D E B C D E B C D F G H I H J K L M B C D E B C D N B C D E B C D E B C D E B C D F
  G H I H J K L M B C D E B C D N B C D E B C D N K O J P K O J M B C D E B C D N B C D E B C D N B C
>`.pickRestart({
  A: "~@23 f1", B: "f1 ~ f1 f1@2 ~ f1 ~@2 f1 ~@2 f1 ~ f1 ab1 ~ bb1 ~@2 bb1 c2 ~ f1",
  C: "f1 ~ f1!2 ~@2 f1 ~@2 f1 ~@2 f1 ~ f1 ab1 ~ bb1@2 ~ bb1 c2@2 f1",
  D: "f1 ~ f1!2 ~@2 f0 ~@2 f1 ~@2 f1 ~ f1 ab1 ~ bb1@2 ~ bb1 c2 ~ f1",
  E: "f1 ~ f1!2 ~@2 f1@2 ~ f1 ~@2 f1 ~ f1 ab1 ~ bb1@2 ~ bb1 c2@2 ~", F: "f1 ~ f1!2 ~@2 f1@2 ~ f1 ~@2 f1 ~ f1!2 ~ ab1@7",
  G: "bb1@3 ab1", H: "f1@3 ab1", I: "bb1@3 c2", J: "bb1", K: "f1", L: "bb1@2 ab1 bb1", M: "c2 ~ c2 ~ c2 ~ c2 ~",
  N: "f1 ~ f1!2 ~@2 f1@2 ~ f1 ~@2 f1 ~ f1 ab1 ~ bb1@2 ~ bb1 c2 ~@2", O: "ab1", P: "db2",
})).s("gm_electric_bass_finger").gain(0.39)

// chords · lead 1 square · "SQUAREWAV"
const lead_1_square = note("<~@35 A B C B D@7 E@2 ~@66>".pickRestart({
  A: "~ [c4,f4,ab4] [bb3,eb4,g4] [ab3,c4,f4]", B: "[f3,bb3,d4]", C: "[eb3,ab3,c4]@3 ~@5",
  D: "[[e3,bb3,eb4]@3 ~@3 [e3,bb3,eb4]@3 ~@3 [e3,bb3,eb4]@2 ~@4 [e3,bb3,eb4]@3 ~@2 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4]@2 ~ [ab3,ab4] ~@2 [d4,bb4]@5 [ab3,c4] ~@5 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4,bb4]@2 ~ [ab3,c4,ab4]@2 ~ [bb3,d4,c5]@4 ~@7 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [d4,bb4]@2 ~ [ab3,ab4] ~@2 [bb3,d4,bb4]@5 [ab3,c4]@2 ~@4 [c4,eb4,c5]@4 [eb4,c5]@2 ~ [c4,eb4,c5]@3 [ab3,c4,ab4]@2 ~ [ab3,c4,ab4]@4 ~@7 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4]@2 ~ [ab3,ab4] ~@2 [d4,bb4]@5 [ab3,c4] ~@5 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4,bb4]@2 ~ [ab3,c4,ab4]@2 ~ [bb3,d4,c5]@4 ~@7 [c4,eb4,c5], ~@30 bb4 ~@2 c4@2 ~ bb3@4 ~ ab4@3 ~@34 bb3 ~@2 c4@2 ~@6 ab4@4 ~@6 c4 ~@26 bb4 ~@2 c4@2 ~ bb3@4 ~ ab4@3 ~@28]/7", // Eb Cm Bb Ab Gm Ab Cm Bb …
  E: "[~@3 [c4,eb4,c5]@2 ~ [d4,bb4]@2 ~ [ab3,ab4] ~@2 [bb3,d4,bb4]@5 [ab3,c4]@2 ~@4 [c4,eb4,c5]@4 [eb4,c5]@2 ~ [c4,eb4,c5]@2 ~ [ab3,c4,ab4]@2 ~ [ab3,c4,ab4]@4 ~@8, ~@6 bb3 ~@2 c4@2 ~@6 ab4@4 ~@6 c4 ~@20]/2", // Cm Gm Ab Bb Ab Cm Ab
})).s("gm_lead_1_square").gain(0.33)

// chords · lead 2 sawtooth · "SQUAREWAV"
const lead_2_sawtooth = note("<~@67 A B C B D@7 E@8 F@2 G H I J K H I L ~@18>".pickRestart({
  A: "~ [c4,f4,ab4] [bb3,eb4,g4] [ab3,c4,f4]", B: "[f3,bb3,d4]", C: "[eb3,ab3,c4]@3 ~@5",
  D: "[[e3,bb3,eb4]@3 ~@3 [e3,bb3,eb4]@3 ~@3 [e3,bb3,eb4]@2 ~@4 [e3,bb3,eb4]@3 ~@2 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4]@2 ~ [ab3,ab4] ~@2 [d4,bb4]@5 [ab3,c4] ~@5 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4,bb4]@2 ~ [ab3,c4,ab4]@2 ~ [bb3,d4,c5]@4 ~@7 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [d4,bb4]@2 ~ [ab3,ab4] ~@2 [bb3,d4,bb4]@5 [ab3,c4]@2 ~@4 [c4,eb4,c5]@4 [eb4,c5]@2 ~ [c4,eb4,c5]@3 [ab3,c4,ab4]@2 ~ [ab3,c4,ab4]@4 ~@7 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4]@2 ~ [ab3,ab4] ~@2 [d4,bb4]@5 [ab3,c4] ~@5 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4,bb4]@2 ~ [ab3,c4,ab4]@2 ~ [bb3,d4,c5]@4 ~@7 [c4,eb4,c5], ~@30 bb4 ~@2 c4@2 ~ bb3@4 ~ ab4@3 ~@34 bb3 ~@2 c4@2 ~@6 ab4@4 ~@6 c4 ~@26 bb4 ~@2 c4@2 ~ bb3@4 ~ ab4@3 ~@28]/7", // Eb Cm Bb Ab Gm Ab Cm Bb …
  E: "[~@3 [c4,eb4,c5]@2 ~ [d4,bb4]@2 ~ [ab3,ab4] ~@2 [bb3,d4,bb4]@5 [ab3,c4]@2 ~@4 [c4,eb4,c5]@4 [eb4,c5]@2 ~ [c4,eb4,c5]@2 ~ [ab3,c4,ab4]@2 ~ [ab3,c4,ab4]@4 ~@7 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4]@2 ~ [ab3,ab4] ~@2 [d4,bb4]@5 [ab3,c4] ~@5 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4,bb4]@2 ~ [ab3,c4,ab4]@2 ~ [bb3,d4,c5]@4 ~@7 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [d4,bb4]@2 ~ [ab3,ab4] ~@2 [bb3,d4,bb4]@5 [ab3,c4]@2 ~@4 [c4,eb4,c5]@4 [eb4,c5]@2 ~ [c4,eb4,c5]@3 [ab3,c4,ab4]@2 ~ [ab3,c4,ab4]@4 ~@7 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4]@2 ~ [ab3,ab4] ~@2 [d4,bb4]@5 [ab3,c4] ~@5 [c4,eb4,c5]@4 [c4,eb4,c5]@2 ~ [bb3,d4,bb4]@2 ~ [ab3,c4,ab4]@2 ~ [bb3,d4,c5]@4 ~@7 [c4,eb4,c5], ~@6 bb3 ~@2 c4@2 ~@6 ab4@4 ~@6 c4 ~@26 bb4 ~@2 c4@2 ~ bb3@4 ~ ab4@3 ~@34 bb3 ~@2 c4@2 ~@6 ab4@4 ~@6 c4 ~@26 bb4 ~@2 c4@2 ~ bb3@4 ~ ab4@3 ~@28]/8", // Cm Gm Ab Bb Ab Cm Ab Cm …
  F: "[~@3 [c4,eb4,c5]@2 ~ [d4,bb4]@2 ~ [ab3,ab4] ~@2 [bb3,d4,bb4]@5 [ab3,c4]@2 ~@4 [c4,eb4,c5]@4 [eb4,c5]@2 ~ [c4,eb4,c5]@2 ~ [ab3,c4,ab4]@2 ~ [ab3,c4,ab4]@4 ~@8, ~@6 bb3 ~@2 c4@2 ~@6 ab4@4 ~@6 c4 ~@20]/2", // Cm Gm Ab Bb Ab Cm Ab
  G: "[ab3,c4,f4]@23 ~", H: "[ab3,c4,eb4]", I: "[d4,f4,bb4]", J: "[f4,ab4,db5]", K: "[ab3,c4]@23 ~",
  L: "[e3,bb3,eb4]@3 ~@3 [e3,bb3,eb4]@3 ~@3 [e3,bb3,eb4]@2 ~@4 [e3,bb3,eb4]@3 ~@3", // Eb
})).s("gm_lead_2_sawtooth").gain(0.33)

// chords · synth strings 2 · "SYNSTRING"
const synth_strings_2 = note(`<
  A@2 B C A@2 B D ~@24 E F E F E F G H ~@24 E F E F E F G H ~@16 A@2 B C A@2 B H ~@18
>`.pickRestart({
  A: "[[f2,f4] [ab2,eb4], [ab3,c4]]/2", B: "[bb2,d4,f4,bb4]", C: "[db3,f4,ab4,db5]", D: "[db3,f4,ab4,db5] ~@7",
  E: "[bb3,d4]", F: "[ab3,c4]", G: "[bb3,d4]@23 ~",
  H: "[bb3,eb4]@3 ~@3 [bb3,eb4]@2 ~@4 [bb3,eb4]@2 ~@4 [bb3,eb4]@3 ~@3", // Eb5
})).s("gm_synth_strings_2").gain(0.37)

// chords · rock organ · "ORGAN3"
const rock_organ = note(`<
  ~@4 A B C D E F@3 E F@2 G H ~@7 I J K ~ I J K L M N O N M N O P Q M R ~ Q M R ~@9 I J K ~ I S T U M N O N M N O P Q M
  R ~ Q M R ~ Q M R ~ Q M R ~@8 P ~@8 V W@3 V W@3 V W
>`.pickRestart({
  A: "[ab5,c6,f6]", B: "[c6,eb6,ab6]", C: "[d6,f6,bb6]", D: "[f6,ab6,db7] ~@5", E: "f4@6 eb4@2 ~@4 d4@4 c4@3 ~@5",
  F: "f4@3 eb4 ~@2 d4@2 c4@2 ~@2", G: "f4@6 eb4@2 ~@4 d4@4 c4@4 ~ [c6,f6]@3", H: "[c6,eb6] ~@7", I: "eb4", J: "d4@11 ~",
  K: "d4 ~@7", L: "~@9 bb5 b5 ~ f5@3 bb5 b5 ~ f5@5 ~, ~@5 bb5 ~@2 bb5 ~@3, ~@11 ab5@2 ~@4 ab5@2 ~@5",
  M: "[f4,ab4,bb4,d5]", N: "[eb4,ab4,c5]", O: "[f4,ab4,bb4,d5]@23 ~",
  P: "[e4,bb4,eb5] ~ [e4,bb4,eb5] ~ [e4,bb4,eb5] ~ [e4,bb4,eb5] ~", Q: "[f4,ab4,c5,eb5]@23 ~", R: "[f4,ab4,c5,eb5] ~@7",
  S: "g4, d4@11 ~", T: "d4@3 d4 ~@2 f4 ~@2 d4 ~@2 d4@4 c4@3 ~@5",
  U: "~@3 c4 ~@2 eb4 ~@2 [c4,bb5] b5 ~ [d4,f5]@3 bb5 b5 ~ f5@5 ~, ~@10 bb5@2 ~@5 ab5@2 ~@5, ~@11 ab5@2 ~@3 [c4,bb5]@3 ~@5", // C7 Dm C7
  V: "~@3 f4@3 eb4@2 ~@4 d4@4 c4@2 ~@6", W: "~@3 f4@3 eb4@2 ~@4 d4@4 c4@3 ~@5",
})).s("gm_rock_organ").gain(0.35)

// drums · kick
const kick = s("bd").struct("x!2").gain(0.5)

// drums · snare
const snare = s("sd").struct("~ x ~ x").gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@7 B ~@23 C ~@31 D ~@15 E ~@26>".pickRestart({
  A: "~@11 x ~@6 x ~@2 x ~@2", B: "~@6 x ~ x ~@3 x ~@8 x ~@2", C: "~@9 x!2 ~", D: "~@3 x!2 ~ x ~", E: "~@7 x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  [x ~@2 x ~ x!2 ~ x!2 ~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x]!95
  [x!4]
  [x ~@2 x ~ x!2 ~ x!2 ~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x]!18
>`).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@7 B ~@23 C ~@3 D ~@27 C ~@3 D ~@7 D ~@3 E ~@26>".pickRestart({
  A: "~@5 x!2 ~@10 x ~@6", B: "x!2 ~@7 x!2 ~", C: "~ x ~@2", D: "~@15 x ~@4 x!2 ~@2", E: "~@15 x!2 ~ x!2 ~@4",
})).gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@39 A ~@3 B ~@27 A ~@3 B ~@7 B ~@30>".pickRestart({
  A: "~ x ~@6", B: "~@3 x",
})).gain(0.45)

stack(bass, lead_1_square, lead_2_sawtooth, synth_strings_2, rock_organ, kick, snare, low_tom, hihat, mid_tom, high_tom)

More by Michael Jackson