Strudelify

Smooth Criminal

Michael Jackson

KeyA minorTempo116 bpm
0:00/0:00
// Smooth Criminal — Michael Jackson
// 116 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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 · synth bass 2 · "Bass"
const bass = note(`<
  A B C B C B D B D B E B D B F B G H I J K L M N O B C B C B C B P Q M Q I R I S T U C U C U C U P Q M V M W X W O Y Z
  AA AB Y Z Y AC Q M S T U C U C AD@3 A U AE U AF U AE U AF Y Z AA AB Y Z Y AG Y Z AA AB Y Z Y AH
>`.pickRestart({
  A: "~@14 a1 ~", B: "~@2 a1 ~ a1!2 g1 a1 b1@2 b1 ~@3 a1 b1", C: "c2@2 c2 ~@3 b1 c2 b1!2 g1@3 ~ a1 ~",
  D: "c2@2 c2 ~@3 b1 c2 b1@2 g1@4 a1 ~", E: "c2@2 c2 ~@3 b1 c2 b1@2 g1@3 ~ a1 ~",
  F: "c2@2 c2 ~@3 b1 c2 b1@2 g1@3 ~ a1@2", G: "c2@2 c2 ~@3 b1 c2 b1@2 g1@4 f1@2", H: "~ f1!2 ~ f1 f2 f1!2",
  I: "f1@3 ~ f1@3 ~ g1@4 g1@2 f1@2", J: "~ f2 f1 ~ f1 f2 f1!2", K: "f1@2 f1 ~ g1@2 g1 f1",
  L: "~@2 f2@2 f1@3 ~ f1@2 f1@2 f1@3 ~", M: "f1@2 ~@2 f1@3 ~ g1@4 g1@2 f1@2", N: "~ f2 f1 ~ f1!3 ~",
  O: "e1@2 e1 ~ e1!2 g1 a1", P: "c2@2 c2 ~@3 b1 c2 b1!2 g1@3 ~ f1 ~", Q: "~ f1!2 ~ f1 f2 f1 f2",
  R: "~@2 f1@2 f1@2 ~@2 f1@2 f2@2 f1@3 ~", S: "e1 ~@3 e1!2 ~@2", T: "~@2 e1 ~@4 a1",
  U: "~@2 a1!4 g1 a1 b1@2 b1 ~@3 a1 b1", V: "~ f1!2 ~ f1!4", W: "~ f1!2 ~ f1!3 ~", X: "f1 ~ f1 ~ g1@2 g1 f1",
  Y: "~@2 a1 ~ a1 ~ a1!2 g1@2 g1 ~ g1 ~ g1!2", Z: "f1@2 f1 ~@3 f1!2 g1@2 e1@2 g1@2 a1 ~",
  AA: "~@2 a1!3 ~ a1!2 g1@2 g1 ~ g1 ~ g1!2", AB: "f1@2 f1 ~@3 f1!2 e1 ~ e1@2 g1@2 a1 ~",
  AC: "f1@2 f1 ~@3 f1!2 e1 ~ e1 ~ e1@2 f1@2", AD: "~@2 a1!6 c2 ~ a1 ~ g1 ~ a1 ~",
  AE: "c2@2 c2 ~@3 b1 c2 b1!2 g1@2 g1@2 a1 ~", AF: "c2@2 c2 ~@3 b1 c2 b1!2 g1 ~ g1@2 a1 ~",
  AG: "f1@2 f1 ~@3 f1!2 e1@2 e1 ~ g1@2 a1 ~", AH: "f1@2 f1 ~@3 f1!2 e1 ~ e1 ~ g1@2 a1@2",
})).s("gm_synth_bass_2").gain(0.41)

// chords · synth brass 2 · "Keyboard"
const synth_brass_2 = note("<A ~@8 B C B C B C B C ~@24 B C B C B C B C ~@20 B C B C D@3 ~@25>".pickRestart({
  A: "~@14 a1 ~", B: "~@8 [b3,d4] ~ [b3,d4] ~@5", C: "[c4,e4] ~ [c4,e4] ~@5 [b3,d4] ~ [b3,d4] ~@3 [a3,c4] ~",
  D: "~@2 a1!6 c2 ~ a1 ~ g1 ~ a1 ~",
})).s("gm_synth_brass_2").gain(0.19).pan(0.4)

// other · electric guitar muted · "Guitar"
const electric_guitar_muted = note(`<
  ~@17 A B A C A D E F ~@8 A C A C A C ~@10 A B A C A D E F ~@8 A C ~@9 G@8 H ~@16
>`.pickRestart({
  A: "~@12 a2!2 g2!2", B: "a2 ~ g2 a2 ~ g2 a2 ~@9", C: "a2 ~ g2 a2 ~ g2 a2!2 b2 ~@7", D: "a2 ~@2 a2 ~ g2 a2 ~@9",
  E: "~@12 a2!4", F: "g#2 ~ g#2 b2 ~ g#2 b2 ~@9",
  G: "[~@14 c4 [c3,c4]@2 c4 b3 ~ a3 ~ [g2,g3] e3 c4!2 ~ [a2,a3] ~ e2 c4 [c3,c4]@2 c4 b3 ~ a3 ~ g3 e3 b3 [g2,b3] ~ [a2,a3] ~@2 c4 [c3,c4]@2 c4 b3 ~ a3 ~ [g2,g3] e3 c4!2 ~ a3 ~@2 c4 [c3,c4]@2 c4 b3 ~ a3 ~ g3 e3 b3!2 ~ [a2,a3] e2 g2 [a2,c4] [c3,c4]@2 c4 b3 ~ a3 ~ [g2,g3] e3 c4!2 ~ [a2,a3] ~ e2 c4 [c3,c4]@2 c4 b3 ~ a3 ~ g3 ~ b3 [g2,b3] ~ [a2,a3] ~@2 c4 [c3,c4]@2 c4 b3 ~ a3 ~ [g2,g3] e3 c4!2 ~ a3 ~@2 c4 [c3,c4]]/8", // C G A C G A C G …
  H: "~ c4 b3 ~ a3 ~ g3 e3 b3!2 ~ [a2,a3] ~@4", // A
})).s("gm_electric_guitar_muted").gain(0.27)

// other · electric guitar muted · "Guitar" · soft notes
const electric_guitar_muted_2 = note("<~ A B A B A C A C ~@13 D ~@31 D ~@22 E F G H E I G H ~@16>".pickRestart({
  A: "~@2 a3 ~ a3!2 g3 a3 b3@2 b3 ~@3 a3 b3", B: "c4@2 c4 ~@3 b3 c4 b3!2 g3@3 ~ a3 ~",
  C: "c4@2 c4 ~@3 b3 c4 b3@2 g3@4 a3 ~", D: "~@2 g2 ~@13", E: "~ e2 b2 e2 a2 e2 ~ e2 g2!2 ~@4 g2 ~",
  F: "~ e2 b2 e2 a2 e2 g2 e2 g2 ~@4 e2 g2 ~", G: "~ e2 b2 e2 a2 e2 ~ e2 g2!2 ~ a2 ~ e2 g2 ~",
  H: "~ e2 b2 e2 a2 e2 g2 e2 g2!2 ~@6", I: "~ e2 b2 e2 a2 e2 g2 [e2,e3] g2 ~@4 e2 g2 ~",
})).s("gm_electric_guitar_muted").gain(0.14)

// other · string ensemble 2 · "Strings"
const string_ensemble_2 = note(`<
  ~@20 A@4 B@2 C@2 D@2 C@2 E@7 F ~@12 A@4 B@2 C@2 D@2 C@2 G@3 F ~@16 H@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 I
>`.pickRestart({
  A: "[~@4 g4@3 f4@13 g4@3 f4@9]/4", B: "[e4@7 c5@5 b4@4]/2", C: "[a4@4 b4@3 c5@5 b4@4]/2",
  D: "[a4@4 g#4@3 c5@5 b4@4]/2", E: "[a4@4 g#4@3 a4@13 b4@3 a4@13 b4@3 a4@13 b4@3 a4]/7", F: "g#4 ~@15",
  G: "[a4@4 g#4@3 a4@13 b4@3 a4]/3", H: "[~@7 c5@5 b4@4]/2", I: "a4@4 g#4@3 a4",
})).s("gm_string_ensemble_2").gain(0.12)

// chords · pad poly · "Synth 1"
const pad_poly = note(`<
  ~@16 A@8 B@2 C@2 D@2 C@2 E@7 F ~@8 A@8 B@2 C@2 D@2 C@2 G@3 F ~@16 H@2 C@2 D@2 C@2 I@2 C@2 D@2 C@2 J
>`.pickRestart({
  A: "[~@14 [c3,f3,a3]@26 [d3,g3,b3]@6 [c3,f3,a3]@25 ~ [d3,g3,b3]@6 [c3,f3,a3]@25 ~ [d3,g3,b3]@6 [c3,f3,a3]@18]/8", // F G F G F G F
  B: "[[b2,e3,g#3]@7 [c3,c4,e4,a4,c5]@5 [b2,b3,d4,g4,b4]@4]/2", // E Am G
  C: "[[a2,a3,c4,f4,a4]@4 [b2,b3,d4,g4,b4]@3 [c3,c4,e4,a4,c5]@5 [b2,b3,d4,g4,b4]@4]/2", // F G Am G
  D: "[[c4,f4,a4]@7 ~ [g#2,g#3,b3,e4,g#4]@6 [c3,c4,e4,a4,c5]@10 [b2,b3,d4,g4,b4]@8, [a2,a3] ~@3]/2", // F E Am G A
  E: "[[a2,a3,c4,f4,a4]@4 [g#2,g#3,b3,e4,g#4]@3 [a3,c4,f4,a4]@13 [b3,d4,g4,b4]@3 [a3,c4,f4,a4]@13 [b3,d4,g4,b4]@3 [a3,c4,f4,a4]@13 [b3,d4,g4,b4]@3 [a3,c4,f4,a4]]/7", // F E F G F G F G …
  F: "[g#3,b3,e4,g#4] ~@15", // E
  G: "[[a2,a3,c4,f4,a4]@4 [g#2,g#3,b3,e4,g#4]@3 [a3,c4,f4,a4]@13 [b3,d4,g4,b4]@3 [a3,c4,f4,a4]]/3", // F E F G F
  H: "[~@7 [c3,c4,e4,a4,c5]@5 [b2,b3,d4,g4,b4]@4]/2", // Am G
  I: "[[a2,a3,c4,f4,a4]@4 [g#2,g#3,b3,e4,g#4]@3 [c3,c4,e4,a4,c5]@5 [b2,b3,d4,g4,b4]@4]/2", // F E Am G
  J: "[a2,a3,c4,f4,a4]@4 [g#2,g#3,b3,e4,g#4]@3 [a2,a3,e4,a4]", // F E A5
})).s("gm_pad_poly").gain(0.13)

// chords · pad choir · "Synth 2"
const pad_choir = note("<~@77 A B A C D E A F ~@16>".pickRestart({
  A: "~@8 [d6,g6,c7]!2 ~ [b5,e6,a6] ~ [b5,e6,a6] [a5,d6,g6] [b5,e6,a6]", // Csus2 Esus4 Dsus4 Esus4
  B: "[d6,g6,c7] ~@7 [d6,g6,c7]!2 ~ [b5,e6,a6] ~ [b5,e6,a6] ~ [b5,e6,a6]", // Csus2 Esus4
  C: "[d6,g6,c7] ~@7 [d6,g6,c7]!2 ~ [b5,e6,a6] ~ [b5,e6,a6] [a5,d6,g6] [b5,e6,a6]", // Csus2 Esus4 Dsus4 Esus4
  D: "[d6,g6,c7] [a5,d6,g6] [b5,e6,a6] ~@5 [d6,g6,c7]!2 ~ [b5,e6,a6] ~ [b5,e6,a6] [a5,d6,g6] [b5,e6,a6]", // Csus2 Dsus4 Esus4 Csus2 Esus4 Dsus4 Esus4
  E: "[d6,g6,c7] ~@7 [d6,g6,c7] [b5,e6,a6] ~ [b5,e6,a6] ~ [b5,e6,a6] ~ [b5,e6,a6]", // Csus2 Esus4
  F: "[d6,g6,c7] ~@7 [d6,g6,c7]!2 ~ [d6,g6,c7] ~ [d6,g6,c7] ~@2", // Csus2
})).s("gm_pad_choir").gain(0.12).pan(0.8)

// chords · pad metallic · "Synth 3"
const pad_metallic = note("<~@72 A@5 ~@24>".pickRestart({
  A: "[~@14 a1@15 ~@17 a1@15 ~ a1@14 ~@4, ~@7 a5@31 ~@2, ~@3 f5@5, ~@30 a1@16 f#4@25 ~@9, ~@20 b4@19 ~]/5",
})).s("gm_pad_metallic").gain(0.22).pan(0.2)

// other · brass section · "Brass" · G A G A G A C D …
const brass_section = note(`<
  ~@69
  [~@10 [g4,g5]!2 ~ [g4,g5] [a4,a5] ~]
  ~
  [~@10 [g4,g5]!2 ~ [g4,g5] [a4,a5] ~]
  [~@2 [g4,g5]!2 ~ [g4,g5] [a4,a5] [c5,c6] [d5,d6] [c5,c6] [b4,b5] [a4,a5] [g4,g5] [e4,e5] [b4,b5] [a4,a5]]
  ~@28
>`).s("gm_brass_section").gain(0.33).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B D B C B C B C B C B C B C B C B C B C
  B C B C B C B C B D B C B C B C B E B C B C B C B C B C B C B C B C B C B C B C B C
>`.pickRestart({
  A: "~@7 x", B: "~@4 x!2 ~@2", C: "x!2 ~@2 x!2 ~ x", D: "x!3 ~ x!2 ~ x", E: "~ x ~@2 x ~ x!2",
})).gain(0.37)

// drums · snare
const snare = s("sd").struct("<A B@38 C B@4 D B@22 C B@4 D B@3 E B@23 F>".pickRestart({
  A: "~@7 x", B: "~ x ~ x", C: "~@2 x ~ x!3 ~", D: "~@2 x!5 ~ x ~@3 x ~@3", E: "~ x!2 ~ x ~ x ~",
  F: "~@4 x ~ x!2 ~ x!2 ~ x ~@3",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@39 [~@3 x]!2 ~@27 [~@3 x] ~@31 [~@11 x ~@2 x ~]>").gain(0.41)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C D C B E F E D C G C B H I J K J L M N O P Q B Q R Q B C G S T U V W X W Y Z AA AB G AC D AB D AD Y AE X AF AG
  AC D AC AH AB Y AC G AC Y AI AJ AK AL AI AL AB AM AG AN AO AP AQ AR AS AT AS AG AU AG AS AV AW AX Q AY Q AA Q AL AZ AM
  Q AM Q AX
>`.pickRestart({
  A: "~@4 x!5 ~ x ~@3 x ~", B: "x ~ x ~@3 x!5 ~ x ~@3", C: "x ~ x ~ x!5 ~ x ~@3 x!2", D: "x!2 ~ x!4 ~",
  E: "x ~ x ~ x!5 ~ x ~@3 x ~", F: "x ~ x ~@3 x!3 ~ x ~@5", G: "x ~ x ~@3 x!3 ~ x ~ x ~@3",
  H: "x ~ x ~ x ~ x!5 ~@3 x ~", I: "x ~ x ~@3 x!5 ~ x ~ x ~", J: "x ~ x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2",
  K: "~@2 x!2 ~@2 x!3 ~ x ~ x ~@3", L: "x ~ x!2 ~ x ~ x!2 ~ x!2 ~@4", M: "x ~ x!2 ~ x!2 ~ x ~ x!2 ~@3 x",
  N: "x ~ x!2 ~@2 x!3 ~ x ~ x ~@3", O: "x ~ x!2 ~ x!4 ~ x!6", P: "~@2 x!2 ~ x!4 ~ x ~ x!2 ~@2",
  Q: "x ~ x ~ x!5 ~ x ~ x ~ x!2", R: "x ~ x ~@3 x ~ x!3 ~ x ~@3", S: "x ~ x ~ x!3 ~ x ~ x ~ x!4",
  T: "x ~ x ~@3 x ~ x ~ x ~ x!2 ~@2", U: "x ~ x!3 ~ x ~ x ~ x ~ x!2 ~@2", V: "x ~ x ~ x ~ x ~ x ~ x ~@2 x ~@2",
  W: "x!8", X: "x ~ x ~@3 x!3 ~ x!3 ~@3", Y: "x!7 ~", Z: "x ~ x ~ x ~ x!3 ~ x ~@3 x!2", AA: "x ~ x ~ x ~ x!5 ~ x ~@3",
  AB: "x ~ x ~ x ~ x ~ x ~ x ~@3 x!2", AC: "x!6 ~ x", AD: "x ~ x ~ x ~ x ~ x ~ x ~ x!4",
  AE: "x ~ x!3 ~ x ~ x ~ x ~@3 x ~", AF: "x!4 ~ x!3", AG: "x ~ x ~ x ~ x!3 ~ x ~ x ~@3",
  AH: "x!3 ~ x ~ x ~ x ~ x ~ x ~@3", AI: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", AJ: "x ~ x!3 ~ x!3 ~ x ~ x ~@3",
  AK: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", AL: "x ~ x ~ x ~ x ~ x!3 ~ x ~@3", AM: "x!3 ~ x ~ x!5 ~ x ~@3",
  AN: "x!2 ~@2 x ~ x!4 ~@2 x ~@3", AO: "x ~ x ~ x!5 ~ x!3 ~ x ~", AP: "x ~ x ~ x!5 ~ x ~ x!2 ~@2",
  AQ: "x ~ x ~ x ~ x!6 ~ x!2 ~", AR: "~@2 x ~ x ~ x!3 ~ x ~ x ~@3", AS: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x!2",
  AT: "x ~ x ~ x ~ x!4 ~ x ~ x ~@2", AU: "x ~ x ~ x ~ x!5 ~ x ~ x!2", AV: "x ~ x ~ x ~ x!3 ~ x!4 ~@2",
  AW: "x ~ x!3 ~ x!3 ~ x ~ x ~ x!2", AX: "x!3 ~ x ~ x!3 ~ x ~ x ~@3", AY: "x!3 ~ x ~ x!3 ~ x ~ x!2 ~@2",
  AZ: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x!2",
})).gain(0.23)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A ~@2 B ~@2 A C A B ~@4 D E F G F H I J ~@5 B ~@4 B@2 K L M ~ N O C ~ P ~ Q R P S P T N ~ U V W X Q S Y B Q Z Q B@2
  ~ V AA AB B@2 ~@2 AC ~@4 E@2 AD ~@2 AD ~@9 B@2 ~@5
>`.pickRestart({
  A: "~@15 x", B: "~@7 x ~@8", C: "~@3 x", D: "~@5 x ~@9 x", E: "~ x ~@14", F: "~ x", G: "x", H: "~@3 x ~@4",
  I: "~@7 x ~@6 x ~", J: "~@5 x ~@7 x ~@2", K: "~@7 x ~@6 x!2", L: "~@3 x ~@3 x ~@4 x ~@3", M: "~@3 x ~@9 x ~ x",
  N: "~@7 x ~@7 x", O: "~ x ~@5 x ~@8", P: "~@5 x ~ x ~@8", Q: "~@5 x ~ x ~@4 x ~@2 x", R: "~@4 x ~@2 x ~ x ~@6",
  S: "~@7 x ~ x ~@6", T: "~@3 x ~@3 x ~@5 x ~@2", U: "~ x ~ x ~@9 x ~ x", V: "~@11 x ~@4", W: "~@3 x ~@3 x ~@4 x ~@2 x",
  X: "~@4 x ~@2 x ~@8", Y: "~@5 x ~ x ~@4 x ~@3", Z: "~ x ~@2 x ~@11", AA: "~@3 x ~@7 x ~@4", AB: "~ x ~ x ~@12",
  AC: "~ x ~@3 x ~@2", AD: "~@9 x ~@6",
})).gain(0.14)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A@5 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
>`.pickRestart({
  A: "~@7 x",
})).gain(0.23)

// drums · crash
const crash = s("cr").struct(`<
  A ~@7 A ~@7 A ~@7 A ~@2 B ~@2 A ~ A ~@3 A ~ A C D ~@3 E ~@11 A ~@3 A ~ A ~ A ~@2 C D ~@3 E ~@3 F ~@7 A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A
>`.pickRestart({
  A: "~@7 x", B: "x", C: "~@4 x!2 ~@2", D: "~@2 x ~@4 x", E: "~@2 x!2 ~ x ~ x!2 ~@3 x ~ x ~", F: "~ x ~@2 x ~ x!2",
})).gain(0.23)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@100 [~@6 x!2 ~ x ~ x!2 ~@3]>").gain(0.09)

// drums · ride
const ride = s("rd").struct(`<
  ~@25 A B C B C B D E ~@24 C F C G C H C G ~@20 I J K H C L C M C M C F C F C H
>`.pickRestart({
  A: "~@2 x ~ x!5 ~ x ~ x ~ x!2", B: "x ~ x ~@3 x!5 ~ x ~ x ~", C: "x ~ x ~ x!5 ~ x ~ x ~ x!2",
  D: "x ~ x ~ x!5 ~ x ~@3 x!2", E: "x ~ x ~@3 x!3 ~ x ~ x ~ x ~", F: "x!3 ~ x ~ x!5 ~ x ~ x ~",
  G: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", H: "x!3 ~ x ~ x!3 ~ x ~ x ~ x ~", I: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x!2",
  J: "x ~ x ~ x ~ x!3 ~ x!5 ~", K: "x ~ x!3 ~ x!3 ~ x ~ x ~ x!2", L: "x!3 ~ x ~ x!3 ~ x ~ x!3 ~",
  M: "x ~ x ~ x ~ x!5 ~ x ~ x ~",
})).gain(0.18)

stack(
  bass, synth_brass_2, electric_guitar_muted, electric_guitar_muted_2, string_ensemble_2, pad_poly, pad_choir,
  pad_metallic, brass_section, kick, snare, low_tom, hihat, hihat_soft, open_hat, crash, crash_soft, ride
)

More by Michael Jackson