Strudelify

In the Closet

Michael Jackson

KeyB minorTempo113 bpm
0:00/0:00
// In the Closet — Jackson Michael
// 113 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 2 Syn Brass 1 -> synth brass 1; ch 14 Square Wave -> lead 1 square
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 157 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(113/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
const piano = note("<~ A@4 B@2 C@3 ~@147>".pickRestart({
  A: "[~@4 [b3,b4]@4 ~@8 f#5@3 e5@12 ~@2 [c#5,f#5]@2 [f#3,f#5,a5]@2 [d5,f#5,b5]@7 ~@18 [c#5,e5]@2, ~ e3@3 ~@4, ~@5 g3@11 ~@8 f#3@8, ~@12 b3@22 ~@3 b3@11 ~@16, ~@14 e4@21 ~@9 [c#5,f#5,a5]@17 ~@3]/4", // B F#5 F#m Bm C#m F#m
  B: "[f#5 ~ f#5@6 ~@18 c#5 ~ d5@3 ~, ~@2 g4@29 ~, ~@2 e3@14 ~ d3@15, ~@2 b4@9 ~@2 b4@9 ~@2 b4@7 ~, ~@9 e5@15 ~@8]/2",
  C: "[[g4,b4]@4 ~@3 c#5@16 ~, c#3@19 ~@5, e5 ~@2, ~@5 g4@16 ~@3, ~@3 b4@8 ~]/3", // G
})).s("gm_piano").gain(0.48).pan(0.3)

// chords · piano · soft notes
const piano_soft = note("<~@5 A ~ B@6 ~@144>".pickRestart({
  A: "c#5 ~@15", B: "[~@32 b5@15 [f#3,c#5,f#5,a#5]@48 ~, ~@7 e4@32 ~@57, ~@16 e5@31 ~@49, ~@26 g5@21 ~@49]/6",
})).s("gm_piano").gain(0.24).pan(0.3)

// bass · synth brass 1
const bass = note(`<
  ~@13 A B A B A B A ~ A B A B A B A B A B A B A B A B ~@8 C D E D F G ~@4 A B A ~ A B A B A B A B A B A B A B A B ~@8 C
  D E D F G ~@14 C D E D C D E D C D E D C D E D C D E D F G ~@8 A B A B A B A ~ A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "e2@2 f#2 ~@3 e2@2 f#2@2 b2@5 ~", B: "e2@2 f#2 ~@3 e2@2 f#2 ~ b1@5 ~", C: "g2@3 ~@3 g2 ~ f#2@3 ~ f#2@2 a#2@2",
  D: "b2@3 ~@3 f#2@2 b2@3 ~ a2@2 f#2@2", E: "g2@2 ~@4 g2@2 f#2@3 ~ f#2@2 a#2@2", F: "g2@3 ~@3 g2@2 f#2@3 ~ f#2@2 a#2@2",
  G: "b2@3 ~@3 f#2@2 b2@4 a2@2 f#2@2",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · distortion guitar
const distortion_guitar = note("<A@2 ~@155>".pickRestart({
  A: "[[a2,e3,a3]@11 ~@5]/2", // A5
})).s("gm_distortion_guitar").gain(0.64)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@3 A ~ B ~@3 C@4 ~@27 D E F G H ~@33 D E F G H ~@12 I@8 J ~@7 J ~@45>".pickRestart({
  A: "~ f#5@3 ~@12", B: "~ f#5@4 ~@3", C: "[~@19 [c#5,f#5]@41 ~@4, ~@15 f#3@45 ~@4]/4", D: "~ f#4 b4 c#5", E: "d5 c#5",
  F: "b4 f#5", G: "e5", H: "f#5@13 ~@3",
  I: "[~@16 c#4@16 d4@16 [c#4,e4]@16 [d4,f#4]@16 [c#4,e4,a4]@16 [d4,f#4,b4]@16 [e4,a4,c#5]@15 ~, b3]/8", // C#m D A Bm A
  J: "[g4,b4,d5,f#5]@7 ~@9", // Gmaj7
})).s("gm_string_ensemble_1").gain(0.48).pan(0.7)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~ A@2 B C D@8 ~@144>".pickRestart({
  A: "[~@4 b4@4 ~@8 f#5@3 e5@12 ~, ~ [e4,g4]@3]/2", B: "f#4@3 [a4,a5]@2 [b4,d5,f#5,b5]@11", C: "[f#4,a4,c#5,e5]",
  D: "[~@2 d5@7 e5@4 d5@4 ~@10 c#5@4 ~ e5@46 ~@5 g4@41 ~@4, ~ g4@38 ~@25, ~@2 b4@28 ~ b4@47 ~@50, ~@9 e4@29 ~@26, ~@18 d4@14 c#4@44 ~@3 [c#4,f#4]@45 ~@4]/8", // F#5
})).s("gm_string_ensemble_1").gain(0.24).pan(0.7)

// other · synth strings 1
const synth_strings_1 = note(`<
  ~@3 A B@2 C D@6 ~@24 E F E F E F G H ~@6 I@2 J K ~@20 E F E F E F G H ~@6 I@2 J K ~ L F G M@6 ~@22 I@2 J K ~@28
>`.pickRestart({
  A: "~ f#1@4 b1@11", B: "[f#1@9 e1@7]/2", C: "~ d1@15", D: "[c#1@47 f#1@39 ~@10]/6", E: "g1 f#1", F: "b1", G: "c#2",
  H: "f#1@15 ~", I: "[e1@3 g1]/2", J: "c#1", K: "f#1 ~@7", L: "f#1 a1", M: "[b1@95 ~]/6",
})).s("gm_synth_strings_1").gain(0.48)

// other · synth brass 1
const synth_brass_1 = note(`<
  ~@20 A B C D E F G H I ~ J ~ K L M N ~@8 O P@2 Q@2 R@2 ~ S T ~@4 U D V W X@2 G Y I ~@3 Z AA ~@10 AB P@2 Q@2 R@2 ~ S T
  ~@2 AC ~ AD AE AF ~@2 AG ~ P@2 AH@2 P@2 AH@2 P@2 AH@2 P@2 AH@2 P@2 Q@2 R@2 ~ S T ~@20 AI ~@8
>`.pickRestart({
  A: "~@5 b3 d4 e4", B: "f#4!2 ~@4 d4!2", C: "d4@4 ~@6 b3!2 d4@2 e4 ~", D: "f#4@2 f#4@2 ~@6 b3!2 d4@2 d4@2",
  E: "d4@3 ~@7 b3@2 d4@2 e4@2", F: "f#4@2 f#4@2 ~@6 b3!2 d4@2 d4 ~", G: "d4!2 ~@3 b3 d4 e4",
  H: "f#4@2 f#4@2 ~@6 b3@2 d4@2 d4 ~", I: "d4@2 d4@2 ~@5 f#4@2 ~ e4@2 d4!2", J: "~@8 a#3 ~ a#3 ~@5",
  K: "~@5 f#4 a4 f#4", L: "e4 d4 ~@3 e4 d4 ~", M: "~@6 f#4 ~", N: "e4@2 d4@3 ~@11", O: "~@6 b4@3 ~ b4 ~ b4@3 ~",
  P: "[~@2 b4 ~ b4@2 a#4@4 b4@2 c#5@2 c#5@4 b4 ~@3 b4 ~ b4@4 a4@4]/2",
  Q: "[g4@3 ~ b4@4 a#4@2 b4@2 c#5@2 c#5@4 b4@2 ~@4 b4@4 a4@4]/2",
  R: "[b4 ~ b4 ~ b4@2 a#4@4 b4@2 c#5@2 c#5@4 b4 ~@3 b4@5 ~@5]/2", S: "~@4 d4@2 e4@2 f#4@4 e4@2 d4 ~",
  T: "d4@2 e4@2 f#4@2 e4 d4 f#4@2 e4 d4 f#4@4", U: "~@10 b3!2 d4@2 e4@2", V: "d4@4 ~@6 b3@2 d4@2 e4 ~",
  W: "f#4!2 ~@3 b3 d4!2", X: "[d4@3 ~@6 f#4@3 e4@2 d4 d4@3 e4 ~@7 b3!2 d4@2 d4 ~]/2", Y: "d4@2 d4@2 ~@6 b3@2 d4@2 d4 ~",
  Z: "~@7 f#4", AA: "e4 d4 e4@4 ~@4 e4@2 d4@3 ~", AB: "~@6 b4@3 ~@7", AC: "~@2 a5 ~", AD: "~@8 c#4!2 ~ c#4@4 ~",
  AE: "~@8 d4!2 ~ d4@4 ~", AF: "~@6 f#4!2 f#4@2 f#4@3 ~@3", AG: "~@2 b4 ~@7 b4 ~@5",
  AH: "[g4@3 ~ b4@4 a#4@2 b4@2 c#5@2 c#5@4 b4@2 ~@2 b4 ~ b4@4 a4@4]/2", AI: "~@10 a3!2 a3@3 ~",
})).s("gm_synth_brass_1").gain(0.64).pan(0.4)

// other · lead 4 chiff
const lead_4_chiff = note("<~@13 A@7 ~ A@16 ~@18 A@3 ~ A@16 ~@18 A@2 ~@38 A@7 ~ A@16>".pickRestart({
  A: "c#4@2 d4 ~@3 c#4@2 d4 ~@7",
})).s("gm_lead_4_chiff").gain(0.48).pan(0.7)

// other · lead 1 square
const lead_1_square = note("<~@13 A B A B A C A ~@113 A B A B A C A ~@4 B A B A ~ A B A B A B A B>".pickRestart({
  A: "~@6 b6 [f#6,a6] e6 [a5,d6] ~@6", B: "~@6 b6 [f#6,a6] e6 [b5,d6] ~@6",
  C: "~@6 b6 [f#6,a6] e6 [b5,d6] ~@6, [b1,b2]@15 ~", // F#m Bm B
})).s("gm_lead_1_square").gain(0.32).pan(0.6)

// other · orchestra hit
const orchestra_hit = note(`<
  ~@12 A ~@3 B C ~@77 D E F G H I J K ~@26 L ~@6 B C ~@3 M ~@2 N M ~@3 M ~@2 B M ~@3
>`.pickRestart({
  A: "~@6 f#4 ~", B: "~@10 f#4@3 ~@3", C: "[b3,b4]@3 ~@13", D: "[b2,b3] ~@3", E: "c#4 ~@3", F: "d4 ~", G: "e4@5 ~@3",
  H: "f#4@7 ~@9", I: "a4@7 ~@9", J: "b4@7 ~@9", K: "c#5@9 ~@7", L: "[e3,e4] ~@3", M: "[b2,b3]@3 ~@13", N: "~@10 a4 ~@5",
})).s("gm_orchestra_hit").gain(0.72).pan(0.2)

// chords · pad halo
const pad_halo = note(`<
  ~@29 A@8 B@6 C D E@4 F@2 G@4 ~@12 H@8 B@4 I@2 J K E@4 F@2 L@2 M N ~@2 O@7 P E@4 Q@2 E@6 Q@2 E@6 F@2 L@2 M N ~@12 R S T
  U R S T U R S T U R S T V
>`.pickRestart({
  A: "[[f#3,a#3,c#4,e4]@127 ~]/8", B: "[[g3,b3,d4] [a#3,c#4] [b3,d4]@2, ~ f#3@3]/2", C: "[e3,g3,c#4]",
  D: "[f#3,a#3,d4]", E: "[[g3,b3,d4,f#4] [a#3,c#4,e4] [b3,d4]@2, ~ f#3@3]/2",
  F: "[[d4,f#4,b4] [c#4,a#4] [d4,b4]@2, ~ f#4@3]/2", G: "[[d4,f#4]@32 [c#3,c#4,e4]@17 ~@15, [g3,b3]@25 ~@7]/4",
  H: "[[a#3,c#4,e4]@15 [b3,d4,f#4] [a#3,c#4,e4]@15 ~, f#3@31 ~]/8", I: "[[g4,b4,d5] [a#4,c#5] [d4,b4]@2, ~ f#4@3]/2",
  J: "[c#4,e4,g4]", K: "[a#3,d4,f#4]", L: "[[b3,d4,f#4]@3 [e3,b3,d4], g3]/2", M: "[c#3,g3,b3,c#4,e4]", N: "f#3 ~@15",
  O: "[~ c#4 d4 e4 f#4 a4 b4, b3]/7", P: "~@3 b6, [a3,c#5]@15 ~",
  Q: "[[g3,b3,d4,f#4] [a#3,c#4,a#4] c#5 b4, ~ f#4@3, ~ [b3,d4]]/2", // Gmaj7 A#m Bm
  R: "[b2,a3] ~ [b2,a3] ~ [b2,a3] ~ [b2,a3] ~ [b2,a3] ~ [b2,a3] ~ [b2,a3] ~ [b2,a3]@2", // B7
  S: "g#3 ~ g#3 ~ g#3 ~ [b2,g#3] ~ [b2,g#3] ~ [b2,g#3] ~ [b2,g#3] ~ [b2,g#3]@2", // E
  T: "g3 ~ g3 ~ g3 ~ g3 ~ [b2,g3] ~ g3 ~ [b2,g3] ~ [b2,g3]@2", // Em
  U: "f#3 ~ f#3 ~ f#3 ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3]@2", // B5
  V: "f#3 ~ f#3 ~ f#3 ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~@5", // B5
})).s("gm_pad_halo").gain(0.4).pan(0.4)

// chords · pad halo · soft notes
const pad_halo_soft = note("<~@142 A B A ~ A B A ~ A B A ~ A B A>".pickRestart({
  A: "b2 ~ b2 ~ b2 ~@11", B: "b2 ~ b2 ~ b2 ~ b2 ~@3 b2 ~@5",
})).s("gm_pad_halo").gain(0.24).pan(0.4)

// drums · rim
const rim = s("rim").struct("<~@129 [x!4]!4 ~@7 [x!4] ~@16>").gain(0.72)

// drums · kick
const kick = s("bd").struct("<~@13 A@32 B@6 A@32 B@6 A@14 B@22 A@5 ~@3 A@24>".pickRestart({
  A: "x", B: "x!2",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct(`<
  ~@12 A B@7 ~ B@7 C B@8 ~@7 D B@6 ~@3 A B@3 ~ B@7 C B@8 ~@7 D B@6 ~@3 A B@9 E B@22 ~@3 A F ~@3 B@7 ~ B@15 G
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "~@5 x!2 ~", E: "~ x!2 ~ x!2 ~ x", F: "x", G: "~ x ~@2",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@37 A@7 B ~@6 A@3 B ~@20 A@7 B ~@6 A@3 B ~@32 A@3 B ~@28>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@13 A@7 ~ A@16 ~@8 A@6 ~@4 A@3 ~ A@16 ~@8 A@6 ~@4 A@9 B A@22 ~@8 A@7 ~ A@16
>`.pickRestart({
  A: "x!6 ~@2", B: "x!8",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@13 A@7 ~ A@16 ~@8 A@6 ~@4 A@3 ~ A@16 ~@7 B A@6 ~@4 A@9 C A@22 ~@8 A@7 ~ A@16
>`.pickRestart({
  A: "~@2 x!2 ~@2 x ~@9", B: "~@7 x", C: "~@3 x ~@4",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@13 A@7 ~ A@16 ~@8 A@6 ~@4 A@3 ~ A@16 ~@8 A@6 ~@4 A@9 ~ A@22 ~@8 A@7 ~ A@15 ~
>`.pickRestart({
  A: "~@3 x",
})).gain(0.4)

// drums · congas
const congas = s("conga:18").struct("<~@37 A@8 ~@6 A@2 ~@22 A@8 ~@6 A@2 ~@34 A@2 ~@30>".pickRestart({
  A: "~ x ~@2",
})).gain(1.54)

// drums · congas
const congas_2 = s("conga:33").struct("<~@37 A@8 ~@6 A@2 ~@22 A@8 ~@6 A@2 ~@34 A@2 ~@30>".pickRestart({
  A: "~@2 x!2 ~ x!2 ~ x ~@7",
})).gain(1.54)

// drums · congas · soft notes
const congas_soft = s("conga:33").struct("<~@37 A@8 ~@6 A@2 ~@22 A@8 ~@6 A@2 ~@34 A@2 ~@30>".pickRestart({
  A: "~@5 x!2 ~",
})).gain(0.77)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@54 [~@7 x!2 ~@7] ~@37 [~@7 x!2 ~@7] ~@35 [~@7 x!2 ~@7] ~@28>").gain(4.59)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct("<~@54 A ~@37 A ~ B ~@3 C ~@29 A ~@28>".pickRestart({
  A: "~@5 x ~@2", B: "~@10 x!2 ~ x ~@2", C: "~@8 x!4 ~ x ~@2",
})).gain(4.59)

// drums · claves
const claves = s("clave:2").struct(`<
  ~@45 A ~@4 B ~@32 C D C D C D ~@14 C D C D C D C D C D C D C D C D C D C D C D ~@32
>`.pickRestart({
  A: "~@3 x", B: "~@5 x ~ x", C: "~ x ~ x", D: "~@2 x ~@4 x",
})).gain(3.53)

// drums · claves · soft notes
const claves_soft = s("clave:2").struct(`<
  ~@84 A ~ A ~ A ~@15 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@32
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(1.57)
// … 9 more lines

More by Michael Jackson