Strudelify
Thriller cover art

1983 · Thriller

Thriller

Michael Jackson

KeyC minorTempo120 bpm
0:00/0:00
// Thriller — Jackson Michael
// 120 bpm, 4/4, key C minor. 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 161 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.

// bass · synth bass 2 · "Bass"
const bass = note("<~@9 A B C@31 D C@27 D E@2 F@2 G@2 H I J@2 K C@7 L C@15 M N@2 C@7 O P@43 Q@2>".pickRestart({
  A: "c1@3 eb1@13", B: "eb1@4 f1@4 c1@5 ~@2 c2", C: "bb1@2 c2@2 eb2@2 f2@2 c2 ~@2 c1 ~@3 c2",
  D: "ab1 ~@5 f1 ~@5 bb1@2 ~@2", E: "[c2@2 ~ c2@2 bb1 g1 c1 ~@2 eb1 a1 f1@10 ~ c2 f2@6 ~ c2]/2",
  F: "[f1@7 c2 f1@2 ~ eb1@2 ~ ab1@7 ~@2 ab1 ab1@6 ~@2]/2",
  G: "[ab1@6 ~ ab1 ab1@2 ~ bb1@2 ~ c2@7 ~@2 c2 c2@2 d2@2 eb2@2 c2@2]/2", H: "bb1@6 ~ bb1 bb1@6 c2 bb1",
  I: "a1@5 ~@2 a1 a1@4 ~@2 a1 ~", J: "[ab1@5 ~@2 ab1 ab1@6 eb2 ~ g2@4 ~@3 g2 g2@6 ~ d2, g1 ~@14 ab2@2 ~@15]/2",
  K: "g1@5 ~ g1 ~ g1@2 f2 [f2,gb2] eb2 c2 bb1 g1", L: "bb1 ~ c2 ~ eb2@2 ~ f2 ~ bb2 g2 f2 eb2 c2 ~ c2",
  M: "ab1 ~@2 f1 ~@2 bb1 ~", N: "[~@2 d2@3 ~@3 db2@4 ~@2 bb1@10 c2 [g1,bb1] ~ f1@2 eb1@3]/2",
  O: "ab1 ~@5 f1 ~@5 bb1@2 ~ [c1,c2]", P: "~ [c1,c2] ~@13 [c1,c2]", Q: "[~ [c1,c2] ~@13 [c1,c2]@3 ~@14]/2",
})).s("gm_synth_bass_2").gain(0.4)

// chords · pad poly · "Polysynth"
const pad_poly = note(`<
  ~ A@2 B@2 C@2 D@2 E F@5 ~@4 G@2 H@2 I@2 J@2 K@2 L@2 M@2 N O P Q R S P T R U ~@4 G@2 H@2 I@2 J@2 K@2 L@2 M@2 N O P Q R
  S P T R U V@8 W X@2 G@2 H@2 I@2 J@2 K@2 L@2 M@2 N O P Q R S P T R Y Z@2 P Q R S P T R Y ~@45
>`.pickRestart({
  A: "[[c2,c3,eb3,bb3], [g3,d4]@15 ~]/2", B: "[c2,c3,f3,ab3,c4,eb4]/2", C: "[[c3,a3,c4,f4], c2@15 ~]/2",
  D: "[[c2,c3,a3,c4,eb4,gb4]@31 ~]/2", E: "[eb4,g4,c5,g5,c6]@3 [eb4,g4,bb4,g5,bb5]@13",
  F: "[[eb4,g4,bb4,g5,bb5]@4 [c4,f4,a4,f5,a5]@4 [c3,c4,eb4,g4]@71 ~, ~ [eb5,g5] ~@8]/5", G: "[[a3,c4], f3@15 ~]/2",
  H: "[g3,bb3,eb4]/2", I: "[f3,a3,c4]/2", J: "[[g3,bb3,eb4]@15 ~]/2", K: "[[a3,f4], c4@15 ~]/2", L: "[bb3,eb4,g4]/2",
  M: "[c4,f4,a4]/2", N: "[ab3,eb4,g4]", O: "[bb3,d4,f4]@7 ~", P: "[eb4,g4,c5]@3 [eb4,g4,bb4]@12 ~",
  Q: "[eb4,g4,bb4]@4 [c4,f4,a4]@4 [bb3,eb4,g4]@7 ~", R: "[a3,c4,f4]@15 ~", S: "[ab3,c4,f4]@15 ~",
  T: "[eb4,g4,bb4] [c4,a4] [bb3,eb4,g4]@2, ~@2 f4 ~@5", U: "[ab3,c4,eb4] ~@5 [f3,a3,c4] ~@5 [bb3,d4,f4] ~@3",
  V: "[~@10 [eb3,g3] ~ a3@4 [g3,bb3]@8 a3@8 [g3,bb3]@7 ~ [f3,g3,a3,c4]@2 ~ [f3,bb3,d4] ~@2 [g3,ab3,c4,eb4]@26 [g3,ab3,c4,eb4]@3 [bb3,c4,d4,f4] ~@2 [c4,g4]@17 ~ [bb3,g4]@15 ~ [a3,c4,g4]@16, ~@10 bb3@2 [f3,c4]@27 ~@39 eb4@49 ~]/8", // Eb Gm F Bb Abmaj7 Bb C5 Eb …
  W: "[ab3,c4,eb4,g4]@15 ~", X: "[[g3,c4,d4,g4]@15 ~, a3 ~@15]/2",
  Y: "[gb3,bb3,c4,eb4] ~@5 [f2,eb3,g3,a3,c4] ~@5 [bb2,ab3,c4,eb4]@2 ~@2, ab2@2 ~@10 [gb4,g4,ab4] ~@3", // Cm7b5 F7 Ab
  Z: "[~@2 [c4,d4,gb4]@2 ~@4 [ab3,c4,eb4,f4]@2 ~@5 eb4@14 ~@3, ~@14 [ab3,c4]@15 ~@3]/2", // D7 Fm7 Ab
})).s("gm_pad_poly").gain(0.2)

// other · electric guitar muted · "Muted Electric Guitar"
const electric_guitar_muted = note("<~@27 A@15 ~ A@27 ~@12 A@23 ~@3 A@7 ~ A@44 ~>".pickRestart({
  A: "~@2 g3 f3 g3 ~ g3 f3 g3 ~ g3 f3 g3 bb3 ~ c4",
})).s("gm_electric_guitar_muted").gain(0.2)

// other · brass section
const brass_section = note(`<
  ~@9 A B@2 ~@30 C ~@3 D ~@3 E ~@3 F ~@8 G H ~@2 G H ~ C I@7 J K L@2 ~@3 E ~@3 F ~@8 G H ~@2 G H ~ C M ~ G H ~@2 G H ~ C
  ~@43 N ~
>`.pickRestart({
  A: "[c5,c6]@3 [bb4,bb5]@13", B: "[[bb4,bb5] [a4,a5] [g4,g5]@3 ~@3]/2",
  C: "[ab4,c5,eb5,gb5] ~@5 [f4,a4,c5,eb5] ~@5 [f4,ab4,c5,eb5] ~@3", D: "~@13 [bb3,bb4] ~ [c4,c5]",
  E: "~@10 [eb4,eb5] [c4,c5] ~@2 [bb3,bb4] [g3,g4]", F: "~@6 [eb4,eb5] [c4,c5] ~@8",
  G: "~@4 [eb4,eb5] [f4,f5] [eb4,eb5] [c4,c5] ~@8", // Eb F Eb C
  H: "~@4 [eb4,eb5] [f4,f5] [eb4,eb5] [c4,c5] [eb4,eb5] [f4,f5] [eb4,eb5] [c4,c5] [eb4,eb5] [f4,f5] [eb4,eb5] [c4,c5]", // Eb F Eb C Eb F Eb C …
  I: "[~@10 [eb3,g3,bb3] ~ [f3,a3,c4]@27 ~ [eb3,a3,c4]@3 [f3,bb3,d4] ~@2 [g3,c4,eb4]@25 ~ [c4,eb4]@3 [ab3,d4,f4] ~@2 [bb3,eb4,g4]@33 ~, ~@72 g3 ~@39]/7", // Eb F Adim Bb Cm Ddim Eb
  J: "[a3,c4,eb4,g4]@15 ~", K: "[ab3,c4,eb4,g4]@15 ~",
  L: "[[g3,g4]@5 ~ [c4,c5] ~ [d4,d5]@3 [f4,f5] ~@2 [g4,g5]@11 ~ [eb5,eb6] ~ [c5,c6] [bb4,bb5] ~ [c5,c6]]/2", // G C D F G Eb C Bb …
  M: "~@2 [c5,d5,gb5,ab5,a5] ~@13", N: "~@12 [g4,g5] [bb4,bb5] ~ [c5,c6]",
})).s("gm_brass_section").gain(0.3)

// other · whistle
const whistle = note("<~@90 A B C D E F G H ~@46 A B C D I J K@2 A B C D I J K@2 ~>".pickRestart({
  A: "~ [g5,g6] [c6,c7] [d6,d7]", B: "[eb6,eb7] [f6,f7] [bb6,bb7] [g6,g7]", C: "[f6,f7]",
  D: "[d6,d7]@4 [eb6,eb7]@4 [c6,c7]@7 ~", E: "~ [c6,c7] [f6,f7] [g6,g7]", F: "[a6,a7]@2 [c7,c8] [f7,f8]",
  G: "[eb7,eb8]", H: "[eb7,eb8] [d7,d8] [bb6,bb7] [g6,g7]", I: "~@4 [c5,c6]@3 ~ [eb5,eb6]@4 [f5,f6]@3 ~",
  J: "[g5,g6]@3 ~ [bb5,bb6]@3 ~ [eb6,eb7]@4 [d6,d7]@4", K: "[[c6,c7]@7 ~]/2",
})).s("gm_whistle").gain(0.18)

// chords · church organ
const church_organ = note("<~@9 A B@2 ~@108 C@8 D E F@7 G@5 H@4 I@4 J@4 K@6 ~>".pickRestart({
  A: "[c2,c3,c5,eb5,c6]@3 [eb2,bb4,eb5,bb5]@13, g5", // Cm Eb5
  B: "[[eb2,bb4,g5,bb5] [f2,c5,f5,a5] [c2,c3,c5,eb5,g5]@3 ~@3, eb5@3 ~@29]/2", // Eb F Cm
  C: "[~@15 [eb5,ab5]@16 [d5,bb5]@16 a5@16 [eb5,g5]@16 ab5@16 [d5,bb5]@16 a5@16 [c5,eb5,g5], c6, c5@30 ~ f5@31 ~@17 eb5@15 ~ f5@31 ~@2, ~@47 c5@47 ~@17 c5@15 ~@2]/8", // Ab5 Gm Eb Gm Cm
  D: "~@15 [c5,ab5]", E: "~@15 [d5,f5,bb5]",
  F: "[~@15 [c5,a5]@16 g5@16 ab5@16 [d5,bb5]@16 [c5,a5]@16 [c5,eb5,g5]@16 [c5,eb5,ab5], ~@15 c6@97, ~@31 eb5@31 ~ f5@31 ~@18, ~@31 c5@15 ~ c5@15 ~@50]/7", // F Gm F Cm Ab
  G: "[~@15 d5@15 ~ a5@16 [eb5,g5]@16 [c5,eb5,ab5,c6]@17, ~@15 f5@31 ~@34, ~@15 bb5@18 ~@47, ~@31 c5@31 ~@18]/5", // Eb Ab
  H: "[[d5,bb5]@15 [c5,a5]@16 ~ [eb5,g5]@16 [eb5,ab5]@16, f5@31 ~ c5@31 ~, ~@15 c6@48 ~]/4", // Gm F Eb Ab5
  I: "[[d5,bb5,c6]@16 a5@16 [eb5,g5]@15 ab5@17, f5@31 ~@33, ~@16 [c5,c6]@31 c5@15 ~@2]/4", // Gm Eb C
  J: "[[d5,bb5] a5 g5 [c5,ab5], f5@32 eb5@31 ~, ~@16 c5@31 ~@17]/4", // Gm Fm
  K: "[[d5,bb5,c6]@16 [a5,c6]@16 [g5,c6]@15 [c5,ab5,c6]@16 [d5,bb5]@16 [c5,a5]@16 [c5,eb5,g5,c6], f5@31 ~ eb5@31 [f5,c6]@31 ~@2, ~@8 c5@15 ~@25]/6", // Gm Am C5 Fm Gm F Cm F5
})).s("gm_church_organ").gain(0.03)

// chords · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note("<~ A@6 B@2 ~@152>".pickRestart({
  A: "[~ d4@2 [eb3,g3,bb3]@2 bb3@2 [eb3,g3,bb3,d4]@2 [eb3,g3,bb3,d4]@2 [eb3,g3,bb3,d4]@2 [eb3,g3,bb3,d4]@2 [eb3,bb3,d4]@2 [f3,ab3,c4,eb4]@2 [f3,ab3,c4,eb4]@2 [f3,ab3,c4,eb4]@2 [f3,ab3,c4,eb4]@2 [f3,ab3,c4,eb4]@2 [f3,ab3,c4,eb4]@2 [f3,ab3,c4,eb4]@2 [f3,ab3,c4,eb4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4]@2 [a3,c4,f4], ~@3 d4@4 ~@41]/6", // Eb Ebmaj7 Fm7 F Am F Am F
  B: "[~@2 [a3,c4,eb4,gb4]@4 [a3,c4,eb4,gb4]@4 [a3,c4,eb4,gb4]@4 [a3,c4,eb4,gb4]@4 [a3,c4,eb4,gb4]@4 [a3,c4,eb4,gb4]@4 [a3,c4,eb4,gb4]@4 [eb4,gb4] ~]/2", // Adim Ebm
})).s("gm_acoustic_guitar_steel").gain(0.1)

// chords · acoustic guitar steel · "Acoustic Guitar" · soft notes
const acoustic_guitar_steel_2 = note("<~ A B@2 ~ C@2 ~ D ~@152>".pickRestart({
  A: "~ [eb3,bb3]@2 ~@2 [eb3,g3]@2 ~", B: "[~@7 g3@2 ~@7]/2", C: "[~@7 f4@2 ~@4 f4@2 ~]/2", D: "~@14 [a3,c4] ~",
})).s("gm_acoustic_guitar_steel").gain(0.05)

// chords · epiano2 · "Chorused Piano"
const epiano2 = note("<~@14 A@5 ~@25 B C D ~@114>".pickRestart({
  A: "[~@61 c6@12 bb3 [gb4,bb4] ~ f4@2 ~@2, ~@10 c6@31 bb4@19 g5@14 ~@6, ~@13 g5@32 ~@12 bb3@16 ~@7, ~@8 f5@16 ~@4 g3@9 ~@3, ~@59 f5@15 ~@2 bb4 ~@3]/5", // Gb
  B: "~@3 eb5, ~ c5", C: "[a4,c5,f5]", D: "[ab4,c5,eb5,g5]@15 ~",
})).s("gm_epiano2").gain(0.25)

// chords · epiano2 · "Chorused Piano" · soft notes
const epiano2_soft = note("<~@16 A@3 ~@142>".pickRestart({
  A: "[~@26 c5@16 ~ eb4 ~@4, ~@6 f4@15 f4 ~@2, ~@13 eb4@29 ~@6, ~@8 d4@13 ~@3]/3",
})).s("gm_epiano2").gain(0.15)

// bass · shamisen · C
const bass_2 = note("<~@115 [~@15 [c1,c2]] [~ [c1,c2]@2 ~@12 [c1,c2]]!44 ~>").s("gm_electric_bass_finger").gain(0.19)

// other · lead 8 bass lead · "Synth Bass Lead"
const lead_8_bass_lead = note("<~@35 A@7 ~@21 A@7 ~@28 A@7 ~@3 A@7 ~@46>".pickRestart({
  A: "~@2 c4 ~ bb3 c4 ~ bb3 c4 ~ eb4 ~ f4@3 ~",
})).s("gm_lead_8_bass_lead").gain(0.06).pan(0.7)

// other · electric bass finger · "Electric Bass"
const electric_bass_finger = note(`<
  ~@116 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C ~
>`.pickRestart({
  A: "~@2 c4 ~ c4 bb3 g3 ~ c4 bb3 g3 c4 ~@4", B: "~@2 c4 ~ c4 bb3 g3 ~ c4 ~ eb4 ~@3 f4 ~",
  C: "~@2 c4 ~@2 [bb3,c4] g3 ~ c4 ~ [db4,eb4] ~@3 f4 ~", // Bbsus2 Dbsus2
})).s("gm_electric_bass_finger").gain(0.16).pan(0.6)

// drums · kick
const kick = s("bd").struct("<[~@14 x!2] [x!2]!8 [x ~@2 x ~@12] [x!3 ~] [x!4]!149 ~>").gain(0.3)

// drums · clap
const clap = s("cp").struct("<~@11 [~@3 x]!149 ~>").gain(0.3)

// drums · snare
const snare = s("sd").struct("<[~@7 x] ~@9 [~@11 x!2 ~ x!2] [~ x ~ x]!149 ~>").gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@48 [~@3 x] ~@112>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  [x!4]
  [x ~ x!3 ~ x ~ x ~ x!3 ~ x!2]!3
  [x ~ x!3 ~ x ~ x ~ x!3 ~ x ~]
  [x ~ x!3 ~ x ~ x ~ x!3 ~ x!2]!4
  ~@2
  [x!8]!149
  ~
>`).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@8 ~@2 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 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@2 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 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 C ~
>`.pickRestart({
  A: "~@7 x ~@8", B: "~@11 x ~@4", C: "~@11 x ~@3 x",
})).gain(0.15)

// drums · crash
const crash = s("cr").struct("<~@9 [x ~@2 x ~@11 x] [~ x!2 ~] ~@150>").gain(0.35)

// drums · ride
const ride = s("rd").struct("<~ [x!4] [x!2]!3 [x!4] [x!3 ~] [x ~ x!2]!2 ~@152>").gain(0.1)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@2 [~ x ~ x]!3 ~ [~@3 x] [~ x ~@2]!2 ~@152>").gain(0.05)

// drums · cowbell
const cowbell = s("cb").struct("<~@11 [~@2 x ~@2 x ~@10]!149 ~>").gain(0.25)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@11 A B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 B@2 A B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A B A ~
>`.pickRestart({
  A: "~@3 x ~@2 x ~@2 x ~@6", B: "~@3 x ~@2 x ~ x!2 ~@6",
})).gain(0.63)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@12 A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@2 ~ A@3 ~
  A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@5 ~
>`.pickRestart({
  A: "~@11 x ~@4",
})).gain(0.63)

// drums · congas · soft notes
const congas_soft = s("conga:33").struct(`<
  ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@6
>`.pickRestart({
  A: "~@3 x",
})).gain(0.48)

stack(
  bass, pad_poly, electric_guitar_muted, brass_section, whistle, church_organ, acoustic_guitar_steel,
  acoustic_guitar_steel_2, epiano2, epiano2_soft, bass_2, lead_8_bass_lead, electric_bass_finger, kick, clap, snare,
  low_tom, hihat, open_hat, crash, ride, ride_soft, cowbell, congas, congas_2, congas_soft
)

More by Michael Jackson