Strudelify

Remember the Time

Michael Jackson

KeyE♭ majorTempo108 bpm
0:00/0:00
// Remember the Time — Jackson Michael
// 108 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G H I B C D E F G H I B C D E F G H I B C J K F G H I L C D E F G H I B C D E F G H I B C J K F G H M N O
  N P N Q R S B C J K F G H M B C J K F G H M B C J K F G H M B C J K F G H M B C J K F G H M ~@2
>`.pickRestart({
  A: "~@4 f2@4 eb2@4 db2@3 ~", B: "c2 ~@12 g1 bb1 g1", C: "c2 ~@15", D: "f1 ~@12 c1 eb1 c1", E: "f1 ~@7",
  F: "c2@2 ~@11 g1 bb1 g1", G: "c2 ~@7", H: "f1@2 ~@11 c1 eb1 c1", I: "f1 ~@3 f2@4 eb2@4 db2@4", J: "f1 ~@15",
  K: "f1 ~ f1@2 g1 ~ g1@2 ab1 ~@3 db2@4", L: "~@13 g1 bb1 g1", M: "f1 ~@7 f2@4 eb2@4",
  N: "db1@2 ~ db1 ~@2 db1 ~@3 db1 ~@2 db1 ~@2", O: "f1@3 f1 ~@2 f1 ~@3 f1 ~@2 f1 ~@2",
  P: "f1@2 ~ f1 ~@2 f1 ~@3 f1 ~@2 f1 ~@2", Q: "f1@2 ~ f1 ~@2 f1 ~@3 f1 ~@3 f1@2",
  R: "bb1 ~ bb1 ~ ab1 ~ ab1 ~ g1 ~ g1 ~ f1 ~ f1 ~", S: "c2 ~ c2 ~ c2 ~ c2 ~",
})).s("gm_acoustic_bass").gain(0.56)

// chords · trombone
const trombone = note("<~@57 A B A C D E F G ~@42>".pickRestart({
  A: "[g3,bb3,c4,eb4]@2 ~ [g3,bb3,c4,eb4] ~@2 [g3,bb3,c4,eb4] ~@3 [g3,bb3,c4,eb4] ~@2 [g3,bb3,c4,eb4] ~@2", // Cm7
  B: "[g3,ab3,c4]@2 ~ [eb3,g3,ab3,c4] ~@2 [eb3,ab3,c4] ~@3 [eb3,g3,ab3,c4] ~@2 [eb3,g3,ab3,c4] ~@2, eb3 ~@15", // Abmaj7 Ab Abmaj7
  C: "[eb3,g3,ab3,c4]@2 ~ [eb3,g3,ab3,c4] ~@2 [eb3,g3,ab3,c4] ~@3 [eb3,g3,ab3,c4] ~@2 [eb3,g3,ab3,c4] ~@2", // Abmaj7
  D: "[g3,bb3,c4,eb4]@2 ~ [g3,bb3,c4,eb4] ~@2 [g3,bb3,c4,eb4] ~@3 [g3,bb3,eb4] ~@2 [g3,bb3,c4] ~@2", // Cm7 Eb C7
  E: "[eb3,g3,ab3,c4]@3 [eb3,g3,ab3,c4] ~@2 [eb3,g3,ab3,c4] ~@3 [eb3,ab3,c4] ~@2 [eb3,g3,ab3,c4] ~@2", // Abmaj7 Ab Abmaj7
  F: "[f3,ab3,db4,eb4]@2 ~ [f3,ab3,db4,eb4] ~@2 [f3,ab3,db4,eb4] ~@3 [f3,ab3,db4,eb4] ~@2 [f3,ab3,eb4] ~@2", // Db Fm7
  G: "[e3,g3,bb3,eb4]@3 ~ [e3,g3,bb3,eb4]@3 ~ [e3,g3,bb3,eb4]@2 ~@2 [e3,g3,bb3,eb4]@3 ~", // Eb
})).s("gm_trombone").gain(0.29)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  A B C D E B C F A ~@8 B C F E B G F A ~@7 H ~@8 B G F E B C F A ~@7 I ~@8 J K L M J K L N J K L M J K L N J K O M J K
  L N J K L M J K L N J K L M J K L N ~@2
>`.pickRestart({
  A: "~ [f5,f6] [eb5,eb6] [db5,db6]", // F Eb Db
  B: "~@2 [c4,f4,g4,bb4] ~@2 [c4,f4,g4,bb4] ~@2 [c4,f4,g4,bb4]@3 [c4,f4,g4,bb4]@4 ~", // Csus4
  C: "~@2 [c4,f4,g4,bb4] ~@2 [c4,f4,g4,bb4] ~@2 [c4,f4,g4,bb4]@3 [c4,f4,g4,bb4]@5", // Csus4
  D: "~@2 [f4,ab4,c5,eb5] ~@2 [f4,ab4,c5,eb5] ~@2 [f4,ab4,c5,eb5]@3 [f4,ab4,c5,eb5]@4 ~", // Fm7
  E: "~@2 [f4,ab4,c5,eb5] ~@2 [f4,ab4,c5,eb5] ~@2 [f4,ab4,c5,eb5]@2 ~ [f4,ab4,c5,eb5]@5", // Fm7
  F: "~@2 [f4,ab4,c5,eb5] ~@2 [f4,ab4,c5,eb5] ~@2 [f4,ab4,c5,eb5]@3 [f4,ab4,c5,eb5]@5", // Fm7
  G: "~@2 [c4,f4,g4,bb4] ~@2 [c4,f4,g4,bb4] ~@2 [c4,f4,g4,bb4]@2 ~ [c4,f4,g4,bb4]@5", H: "~ f5 eb5 db5",
  I: "~ f5 eb5 f5", J: "~@2 [e4,bb4,eb5] ~@2 [e4,bb4,eb5] ~@2 [e4,bb4,eb5]@3 [e4,bb4,eb5]@4 ~",
  K: "~@2 [e4,bb4,eb5] ~@2 [e4,bb4,eb5] ~@2 [e4,bb4,eb5]@2 ~ [e4,bb4,eb5]@5", // Eb
  L: "~@2 [f4,ab4,eb5] ~@2 [f4,ab4,eb5] ~@2 [f4,ab4,eb5]@3 [f4,ab4,eb5]@5", // Fm7
  M: "~@2 [f4,ab4,eb5] ~@2 [f4,ab4,eb5] ~@2 [f4,ab4,eb5]@2 ~ [f4,ab4,eb5]@5", N: "~ [f5,f6] [eb5,eb6] [db5,f5,db6]",
  O: "~@2 [f4,ab4,eb5] ~@2 [f4,ab4,eb5] ~@2 [f4,ab4,eb5]@3 [f4,ab4,eb5]@4 ~", // Fm7
})).s("gm_rock_organ").gain(0.36)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  A ~@2 B@2 ~@2 C D ~@10 B@2 ~@2 C D E F G@2 H@3 I ~@10 B@2 ~@2 C D E F G@2 H@3 J K L K M K N O P E Q E R E Q E S E Q E
  R E Q E S E Q E R E Q E S E Q E R E Q E S E Q E R E Q E S ~@2
>`.pickRestart({
  A: "~ f6 eb6 db6", B: "[~ g5@3, [f4,ab4,c5]]/2", C: "~ g5, [f4,ab4,c5]", D: "~ [f5,f6] [eb5,eb6] [db5,db6]",
  E: "bb5 ~ bb5@2 ab5@2 bb5@9 ~", F: "f5 ab5 bb5 c6 bb5 ~ ab5@2",
  G: "[g5@4 [eb5,eb6] [f5,f6] [c5,c6] [ab4,ab5], f4, ab4@7 ~, c5@3 ~]/2", // Eb F C Ab
  H: "[[eb5,eb6]@7 [f5,f6]@4 [e5,e6]@3 ~@6 g5@2 [bb5,bb6]@2, ~@7 g6@4 ~, ~@7 g5@3 ~@2, ~@2 [f4,ab4,c5]]/3", // Eb F E Bb Fm
  I: "[eb5,eb6] ~ f5@2 [eb5,eb6]@2 [db5,db6]@2", J: "[eb5,eb6] ~@7", K: "[ab2,eb3,g3,c4]", L: "[c3,g3,bb3,eb4]",
  M: "g4 eb4, [c3,g3,bb3]", N: "eb4@3 f4, [c3,g3,bb3]", O: "[bb3,eb4,f4,bb4]@13 ~@3, c3@15 ~",
  P: "[c4,f4,c5]@3 ~ [c4,f4,c5]@3 ~ [f3,f4]@2 [eb3,eb4]@2 [f3,f4]@2 [ab3,ab4]@2", Q: "f5 ab5 bb5 c6 bb5 ~ f5 ab5",
  R: "[eb5,eb6] [f5,f6] [c5,c6] [ab4,ab5]", S: "~ [f5,f6] [ab5,ab6] [bb5,bb6]",
})).s("gm_string_ensemble_2").gain(0.26)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note(`<
  ~ A@2 ~ B A@2 ~@10 A@2 ~ B A@2 ~@2 A@2 ~ B C@2 ~@10 A@2 ~ B A@2 ~@2 A@2 ~ B C@2 ~@13 B ~@7 B ~@7 B ~@7 B ~@7 B ~@6
>`.pickRestart({
  A: "[c4,e4,bb4,eb5]/2", B: "bb5", C: "[c4,e4,bb4]/2",
})).s("gm_string_ensemble_2").gain(0.1)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x ~@2 x ~ x ~@7]!24 [x ~@2 x!2 ~@3] [x ~@2 x ~@2 x ~ x ~@7]!79 ~@2>").gain(0.53)

// drums · rim
const rim = s("rim").struct("<~@105 [~ x ~ x]!2>").gain(0.23)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!48 [~ x ~@2] [~ x ~ x]!55 ~@2>").gain(0.38)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@2 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ B
  ~ A ~ A ~ A ~ B ~ A ~@3 A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@4 x ~@2 x",
})).gain(0.53)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A B A B A B A B C B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@2
>`.pickRestart({
  A: "x ~ x!7 ~@3 x ~ x ~", B: "x ~ x!7 ~@3 x ~@3", C: "x ~ x ~ x!5 ~@3 x ~ x ~",
})).gain(0.38)

// drums · mid tom
const mid_tom = s("mt").struct("<~@32 A ~@31 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@2>".pickRestart({
  A: "~ x ~@2 x!2 ~ x", B: "~@7 x ~@5 x ~@2",
})).gain(0.38)

// drums · open hat
const open_hat = s("oh").struct("<~ [~@5 x ~@2]!81 ~ [~@5 x ~@2]!22 ~@2>").gain(0.23)

// drums · high tom
const high_tom = s("ht").struct("<~@32 A ~@31 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@2>".pickRestart({
  A: "~ x ~@11 x ~@2", B: "~@2 x ~@2 x ~@4 x ~ x ~@3",
})).gain(0.61)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@2 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~
  A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(3.09)

stack(
  bass, trombone, rock_organ, string_ensemble_2, string_ensemble_2_soft, kick, rim, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, cabasa
)

More by Michael Jackson