Strudelify
Don't Stop 'Til You Get Enough cover art

1983 · Off the Wall

Don't Stop 'Til You Get Enough

Michael Jackson

KeyB majorTempo120 bpm
0:00/0:00
// Don't Stop 'Til You Get Enough — Jackson Michael
// 120 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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.

// chords · piano · "Ch  1"
const piano = note(`<
  ~@8 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@2 F@2 E@2 G@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2
  A@2 B@2 C@2 D@2 E@2 F@2 E@2 H ~@9 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@2 F@2 E@2 H ~@9
>`.pickRestart({
  A: "[[b3,d#4,f#4]@3 [a3,c#4,e4]@28 ~]/2", B: "[[a3,c#4,e4]@2 ~ [b3,d#4,f#4]@28 ~]/2",
  C: "[[b3,d#4,f#4]@3 [a3,c#4,e4]@26 ~ [a3,c#4,e4] ~]/2", D: "[[b3,d#4,f#4]@31 ~]/2", E: "[[f#3,a3,b3,c#4,e4]@15 ~]/2",
  F: "[[b3,c#4,d#4,f#4]@15 ~]/2", G: "[[b3,c#4,d#4,f#4]@27 ~@5]/2", H: "[b3,c#4,d#4,f#4]",
})).s("gm_piano").gain(0.18).pan(0.6)

// bass · electric bass finger · "Ch  2"
const bass = note("<A@3 B A C A D A@39 E A@31 F G H I J I H K L A@39 F G H I J I H K L>".pickRestart({
  A: "[b0,b1]@2 ~ [b0,b1] ~@3 [b0,b1]!2 ~@5 [a0,a1] ~", // B A
  B: "[b0,b1]@2 ~ [b0,b1] ~@3 [b0,b1]!2 ~@3 [d1,d2] [d#1,d#2] [b0,b1] ~", // B D D# B
  C: "[b0,b1]@2 ~ [b0,b1] ~@3 [b0,b1]!2 ~@3 [a1,a2] [b1,b2] [b0,b1] ~", D: "[b0,b1]@2 ~ [b0,b1] ~@3 [b0,b1]!2 ~@7",
  E: "[b0,b1]@2 ~ [b0,b1] ~@3 [b0,b1]!2 ~@3 [b0,b1]!2 ~@2", F: "b1 ~@7, b0 ~@15",
  G: "[b0,b1,d2] [b0,b1] ~ [e1,e2]@4 ~ [e1,e2]!2 ~ [f#1,f#2]@3 ~@2", // Bm B E F#
  H: "[f#1,f#2]!2 ~ [g#1,g#2]@2 ~@3 [f#0,f#1] ~ [a0,a1] ~ [b0,b1] ~@3", // F# G# F# A B
  I: "[b0,b1]!2 ~ [e1,e2]@4 ~ [e1,e2]!2 ~ [f#1,f#2]@4 ~", // B E F#
  J: "[f#1,f#2]!2 ~ [g#1,g#2]@3 ~@2 [f#0,f#1] ~ [a0,a1] ~ [b0,b1] ~@3, ~@3 g1 ~@12", // F# G# F# A B
  K: "[b0,b1]!2 ~ [e1,e2]@4 ~ [e1,e2]!2 ~ [f#1,f#2]@3 ~@2", L: "[f#1,f#2]!2 ~ [g#1,g#2] ~@12",
})).s("gm_electric_bass_finger").gain(0.24)

// chords · brass section · "Ch  3"
const brass_section = note(`<
  ~@8 A@2 B@2 C@2 D@2 ~@24 E ~ F ~ E ~ F G ~@7 H ~@7 H ~@8 E ~ F ~ E ~ F I J K L K M K J N A@2 B@2 C@2 D@2 ~@15 H ~@8 E
  ~ F ~ E ~ F I J K L K M K J N
>`.pickRestart({
  A: "[[b4,c#5,d#5,f#5]@3 [a4,c#5,e5]@27 ~@2]/2", B: "[[a4,c#5,e5]@2 ~ [b4,c#5,d#5,f#5]@28 ~]/2",
  C: "[[b4,c#5,d#5,f#5]@3 [a4,c#5,e5]@27 ~@2, e5 ~@31]/2", // B A
  D: "[[a4,c#5,e5]@3 [b4,c#5,d#5,f#5]@24 ~ [b4,c#5,f#5,b5]@2 ~@2]/2", E: "[a3,a4] [f#3,f#4] [g#3,g#4] [a3,a4] ~@12",
  F: "~@7 [f#3,f#4] ~ [g#3,g#4] [a3,a4] ~@5", G: "~@12 [b3,b4,b5]!2 ~@2", H: "~@6 [b4,c#5,f#5,b5] ~",
  I: "[b3,b4,b5] ~@15", J: "[b2,b4,d#5,f#5,b5]!2 ~ [e3,a4,d5,f#5,a5]@4 ~ [e3,a4,d5,f#5,a5]!2 ~ [f#3,b4,e5,g#5]@4 ~",
  K: "[f#3,b4,e5,g#5]!2 ~ [g#3,b4,d#5,f#5]@9 ~@4", // E G#m7
  L: "[b2,b4,d#5,f#5,b5] [b2,b4,d5,d#5,f5,f#5,a#5,b5] ~ [e3,a4,d5,f#5,a5]@4 ~ [e3,a4,d5,f#5,a5]!2 ~ [f#3,b4,e5,g#5]@4 ~", // B Bmaj7 D E
  M: "[b2,b4,d#5,f#5,g5,a5,b5] [b2,b4,d5,d#5,f5,f#5,a#5,b5] ~ [e3,a4,d5,f#5,a5]@4 ~ [e3,a4,d5,f#5,a5]!2 ~ [f#3,b4,e5,g#5]@4 ~", // B7 Bmaj7 D E
  N: "[f#3,b4,e5,f#5,g#5] [f#3,b4,e5,g#5] ~ [g#3,b4,d#5,f#5] ~@12", // E G#m7
})).s("gm_brass_section").gain(0.26).pan(0.7)

// other · brass section · "Ch  5"
const brass_section_2 = note("<~@80 A@2 B@6 ~@40 A@2 B@6>".pickRestart({
  A: "[[b4,b5]@23 ~ [f#4,f#5] ~ [a4,a5] ~ [b4,b5] ~@3]/2", // B F# A B
  B: "[[b4,b5]@23 ~ [d4,d5] [e4,e5] ~ [f#4,f#5] ~ [a4,a5] ~ [b4,b5]@24 ~ [b3,b4] [e4,e5] ~ [f#4,f#5] ~ [a4,a5] ~ [b4,b5]@19 ~ [b5,b6] ~@12, ~@83 b4@2 ~@11]/6", // B D E F# A B E F# …
})).s("gm_brass_section").gain(0.31).pan(0.4)

// other · brass section · "Ch  5" · soft notes · G#
const brass_section_soft = note("<~@85 [~@11 [g#4,g#5] ~@4] ~@47 [~@11 [g#4,g#5] ~@4] ~@2>")
  .s("gm_brass_section").gain(0.15).pan(0.4)

// other · lead 1 square · "Ch  6"
const lead_1_square = note("<~@79 A B C D@2 E@2 F@2 ~@39 A B C D@2 E@2 G@2>".pickRestart({
  A: "~@12 e4 f#4 a4 e4", B: "b4", C: "~ d5 b4 [b4,d5]!3 d5 b4 [b4,d5] d5 [b4,d5] b4 [b4,d5] d5 b4@2",
  D: "[f#5@8 d5 [e5,f5] b4@18 [g#4,a#4] ~@3]/2", // Fmaj7 G#sus2
  E: "[f#5 [f#5,a5] a5 f#5 [f#5,a5]!2 a5 [f#5,a5] f#5 a5 [f#5,a5] f#5 a5 f#5 b5@8 [g#5,a5] [e5,f#5] c#5 [b4,e5] c#5 [a#4,b4] [f#4,a4] [a4,b4,c5] f#4 a4]/2", // F#m Amaj7 Esus2 E5 Bmaj7 F#m Am
  F: "[f#4@5 [b3,e4] [f#4,b4] [b4,c#5,e5] f#5 a5@9 a#5 ~@13]/2", // E5 B5 C#m7
  G: "[f#4@5 [b3,e4] [f#4,b4] [b4,c#5,e5] f#5 a5@10 ~@13]/2", // E5 B5 C#m7
})).s("gm_lead_1_square").gain(0.2).pan(0.6)

// other · electric guitar muted · "Ch  7"
const electric_guitar_muted = note(`<
  ~@8 A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G I A B C D E F G H A B C D E F G H A
  B C D E F G H A B C D E F G J ~@8 A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G J ~@8
>`.pickRestart({
  A: "b3!4 ~ b3 f#3 ~ a3 b3 ~ b3 ~@2 b3 ~", B: "b3!4 ~ b3 f#3 ~ a3 b3 ~ b3!2 ~ b3!2",
  C: "~ b3!3 ~ b3 f#3 ~ a3 b3 ~ b3 ~ b3 ~ b3", D: "b3!4 ~ b3 f#3 ~ a3 b3 ~ b3!4 ~",
  E: "b3!2 ~ b3 ~ b3 f#3 ~ a3 b3 ~ b3 ~ b3!3", F: "b3!4 ~ b3 f#3 ~ a3 b3 ~ b3!3 f#3 b3",
  G: "b3!2 ~ b3!3 f#3 ~ a3 b3 ~ b3 ~@2 b3 ~", H: "b3!6 f#3 ~ a3 b3 ~ b3!3 ~ b3", I: "b3!6 f#3 ~ a3 b3 ~ b3 ~@4",
  J: "b3 ~@15",
})).s("gm_electric_guitar_muted").gain(0.25).pan(0.4)

// other · electric guitar muted · "Ch  7" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@8 A B C D E ~ F G A B C D E ~ F G A B C D E ~ F G A B C D E ~ F G A B C D E ~ F ~ A B C D E ~ F G A B C D E ~ F G A
  B C D E ~ F G A B C D E ~ F ~@9 A B C D E ~ F G A B C D E ~ F G A B C D E ~ F G A B C D E ~ F G A B C D E ~ F ~@9
>`.pickRestart({
  A: "~@13 b3 ~ b3", B: "~@4 b3 ~@8 b3 ~@2", C: "b3 ~@15", D: "~@4 b3 ~@10 b3", E: "~@2 b3 ~@13",
  F: "~@2 b3 ~@10 b3 ~ b3", G: "~@12 f#3 ~ b3 ~",
})).s("gm_electric_guitar_muted").gain(0.14).pan(0.4)

// other · string ensemble 1 · "Ch  8"
const string_ensemble_1 = note("<~@4 A B ~@2 A B ~ C A B ~@74 A B ~ C A B ~@42>".pickRestart({
  A: "~@14 f#3 g#3", B: "a3 g#3 f#3 ~ a3 g#3 f#3 ~ a3 g#3 g3 f#3 ~@4", C: "~@12 a3 g#3 g3 f#3",
})).s("gm_string_ensemble_1").gain(0.27).pan(0.9)

// other · string ensemble 1 · "Ch  9"
const string_ensemble_1_2 = note(`<
  ~@4 A ~@3 A B A ~ C B A D ~@39 D ~@7 D ~@24 E B A ~ C B A D ~@15 D ~@24
>`.pickRestart({
  A: "b5 a#5 a5 g#5 f#5 g#5 a5 a#5 b5 a5 g#5 f#5 ~@4", B: "~@14 a5 a#5",
  C: "b5 [a#5,b5] a5 g#5 f#5 g#5 a5 a#5 b5 a5 g#5 f#5 ~@4", D: "~@12 f#6 ~@3",
  E: "~ a#5 a5 g#5 f#5 g#5 a5 a#5 b5 a5 g#5 f#5 ~@4",
})).s("gm_string_ensemble_1").gain(0.24).pan(0.2)

// other · lead 1 square · "Ch 11"
const lead_1_square_2 = note("<~@80 A@2 B C@2 D E@2 ~@40 F G B C@2 D H ~>".pickRestart({
  A: "[~@2 e4 f#4 a4 e4 b4@17 d5 b4 [b4,d5]!3 d5 b4 [b4,d5] d5]/2", B: "[b4,d5] b4 [b4,d5] d5 b4@2 f#5@8 d5 [e5,f5]",
  C: "[b4@18 [g#4,a#4] ~@3 f#5 [f#5,a5] a5 f#5 [f#5,a5]!2 a5 [f#5,a5] f#5 a5]/2", // G#sus2 F#m
  D: "[f#5,a5] f#5 a5 f#5 b5@8 [g#5,a5] [e5,f#5] c#5 [b4,e5]", // F#m Amaj7 Esus2 E5
  E: "[c#5 [a#4,b4] [f#4,a4] [a4,b4,c5] f#4 a4 f#4@5 [b3,e4] [f#4,b4] [b4,c#5,e5] f#5 ~@9 a#5 ~@7, ~@15 a5@13 ~@4]/2", // Bmaj7 F#m Am E5 B5 C#m7
  F: "~@2 e4 f#4 a4 e4 ~@10", G: "~@7 d5 b4 [b4,d5]!3 d5 b4 [b4,d5] d5",
  H: "c#5 [a#4,b4] [f#4,a4] [a4,b4,c5] f#4 a4 f#4@5 [b3,e4] [f#4,b4] [b4,c#5,e5] f#5 ~", // Bmaj7 F#m Am E5 B5 C#m7
})).s("gm_lead_1_square").gain(0.07).pan(0)

// drums · kick
const kick = s("bd").struct("<~@7 A B@71 C D E F E D E D G B@39 C D E F E D E D G>".pickRestart({
  A: "~@10 x!2 ~@4", B: "x ~@2 x ~@3 x!2 ~@7", C: "x ~@9 x!2 ~@4", D: "x ~@2 x ~@4 x ~@2 x ~@4",
  E: "x ~@2 x ~@4 x ~ x ~ x ~@3", F: "x ~@2 x!2 ~@3 x ~@2 x ~@4", G: "x ~@2 x ~@12",
})).gain(0.24)

// drums · clap
const clap = s("cp").struct("<~@8 [~ x ~@2]!71 ~@9 [~ x ~@2]!39 ~@9>").gain(0.24)

// drums · snare
const snare = s("sd").struct("<~@7 A B@39 C B@31 D B@7 A B@39 D B@7 ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@7 x!2 ~@2", D: "x ~@2 x",
})).gain(0.26)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@39 B A@30 C D E F E@5 G A@38 C D E F E@5 G>".pickRestart({
  A: "x!16", B: "x!14 ~@2", C: "x!14 ~ x", D: "x", E: "x!2", F: "x ~ x!2", G: "x ~@2 x ~@12",
})).gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@87 [~@3 x ~@12] ~@47 [~@3 x ~@12]>").gain(0.26)

// drums · open hat
const open_hat = s("oh").struct("<~@78 [~@7 x] ~@47 [~@7 x] ~@9>").gain(0.18)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@8 [x ~@2 x ~@4 x ~@2 x ~@4]!71 ~@9 [x ~@2 x ~@4 x ~@2 x ~@4]!39 ~@9>")
  .gain(1.34)

// drums · shaker
const shaker = s("sh").struct("<A@8 B@39 C B@31 ~ B@7 D B@39 ~ B@7 D>".pickRestart({
  A: "x!16", B: "~ x!3 ~ x!3 ~ x!3 ~ x!3", C: "~ x!3 ~ x!3 ~ x!3 ~ x ~@2", D: "~ x!3 ~@12",
})).gain(0.16)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~@8
  [~@3 x ~@3 x]!39
  [~@3 x ~@4]
  [~@3 x ~@3 x]!31
  ~@9
  [~@3 x ~@3 x]!39
  ~@9
>`).gain(2.29)

stack(
  piano, bass, brass_section, brass_section_2, brass_section_soft, lead_1_square, electric_guitar_muted,
  electric_guitar_muted_2, string_ensemble_1, string_ensemble_1_2, lead_1_square_2, kick, clap, snare, hihat, low_tom,
  open_hat, agogo_bells, shaker, triangle
)

More by Michael Jackson