Strudelify
Predictable cover art

1994 · Korn

Predictable

Korn

KeyA minorTempo160 bpm
0:00/0:00
// Predictable — Korn
// 160 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 9/4 at bar 70, 4/4 at bar 75, 9/4 at bar 147, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 4 distortion guitar (copy of ch 3 overdriven guitar)
// note: Full arrangement: all 171 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: The whole transcription plays 20 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(160/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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, A@4 for four bars: edit a riff to change every repeat.

// bass · slap bass 1
const bass = note(`<
  A@8 B@2 C@22 D@3 E F E F E F E F E F E F E F E G H@3 I J K L I J K L I J K L I J K L M N O@2 P@2 Q@4 R@2 S@2 R@2 S@2
  T@4 U@20 V@6 W X Y Z Y Z Y Z Y AA AB@3 AC AD AE AF AC AD AE AF AC AD AE AF AC AD AE AG@3 AH@3 M AI@6 AJ@5 AK AL@3 M
  AM@2
>`.pickRestart({
  A: "[~@9 a0@4 a0@2 a0@2 e1@2 d#1@2 a0@2 b0@4 a0@2 b0@2 c1@2 e1@2 d#1@2 c1@2 b0@2 a0@4 a0@2 a0@2 e1@2 d#1@2 a0@2 b0@4 a0@2 b0@2 c1@2 e1@2 d#1@2 c1@2 b0@2 a0@4 a0@2 a0@2 e1@2 d#1@2 a0@2 b0@4 a0@2 b0@2 c1@2 e1@2 d#1@2 c1@2 b0@2 a0@4 a0@2 a0@2 e1@2 d#1@2 a0@2 b0@4 a0@2 b0@2 c1]/8",
  B: "[~ e1@2 d#1@2 ~@4 a0@4 a0@2 a0@2 a0@4 ~@2 a0@4 a0@5]/2",
  C: "[~ a0@4 a0@2 a0@2 a0@4 a0@2 a0@2 a0@4 ~@2 a0@4 a0@5]/2", D: "[~ a0@2 a0@2 b0@28 ~ a0@4 a0@2 a0@2 a0@4 ~@2]/3",
  E: "a0@2 a0@3 a0@2 a0", F: "a0 a0@2 a0!2 a0@2 ~", G: "a0@2 a1 ~ a0 ~@3 a1 ~@7", H: "~@2 a1 ~ a0 ~@3 a1 ~@7",
  I: "~@2 e1@5 ~ d#1@2 d#1@5 ~", J: "d1@2 d1@5 ~ c#1@2 c#1@5 ~", K: "a1@2 a1@5 ~ g#1@2 g#1@5 ~",
  L: "g1@2 g1@5 ~ f#1@2 f#1@5 ~", M: "~@4 a0@2 a0@2 ~@2 a0@2 ~ a0@2 ~", N: "~ a0@2 ~ a0@2 ~@2 a0@2 ~@4 a0@2",
  O: "[a0@2 a0@2 ~@9 a0@2 a0@2 ~@3 a0@2 a0@2 ~@2 a0@2 ~ a0@2 ~]/2", P: "[~ a0@2 ~@4 a0@3 a0@4 a0@4 ~@14]/2",
  Q: "[~@24 e1@11 ~@25 f1@4, d2@4 ~@2 a#1@4 ~@11 e1@4 ~@2 a1@4 ~, ~@3 a1@4 ~@2 f1@4 ~@5 f1@4 ~@2 a#1@4 ~@4]/4",
  R: "[~@3 e1, d2@2 ~ a#1@2 ~@3, ~@3 a1@4 ~@2 f1@4 ~@3]/2", S: "[~@7 f1, ~ f1@2 ~ a#1@2 ~@2, ~@5 e1@4 ~@2 a1@4 ~]/2",
  T: "[~@24 e1@11 ~@25 f1@4, d1@4 ~@2 a#0@4 ~@11 e1@4 ~@2 a1@4 ~, ~@3 a0@4 ~@2 f1@4 ~@5 f1@4 ~@2 a#1@4 ~@4]/4",
  U: "[~@24 e1@6 e1@5 ~@25 f1@4, d1@4 ~@2 a#0@4 ~@11 e1@4 ~@2 a1@4 ~, ~@3 a0@4 ~@2 f1@4 ~@5 f1@4 ~@2 a#1@4 ~@4]/4",
  V: "[~@6 e1!2, d1@2 ~ a#0@2 ~@3, ~@3 a0@4 ~@2 f1@4 ~@3]/2", W: "~@6 a0@4 a#0@3 f1@3, d1 ~", X: "e1!2 a0@2 a0!2 a0@2",
  Y: "~ a0@2 a0@3 a0@2", Z: "a0!2 a0@2 a0!2 a0@2", AA: "a0@2 a0@2 a1 ~ a0 ~@3 a1 ~@5", AB: "~@4 a1 ~ a0 ~@3 a1 ~@5",
  AC: "~@4 e1@5 ~ d#1@2 d#1@4", AD: "~@2 d1@2 d1@5 ~ c#1@2 c#1@4", AE: "~@2 a1@2 a1@5 ~ g#1@2 g#1@4",
  AF: "~@2 g1@2 g1@5 ~ f#1@2 f#1@4",
  AG: "[~@2 g1@2 g1@6 f#1@2 ~ f#1@6 ~@3 a0@2 a0@2 ~@3 a0@2 a0@2 ~@2 a0@2 ~ a0@2 ~@2 a0@2 ~@4]/3",
  AH: "[a0@2 a0@2 ~ a0@2 ~@8 a0@2 a0@2 ~@3 a0@2 a0@2 ~@3 a0@2 a0@2 ~ a0@2 ~@2 a0@2 a0@2 a0@2 ~ a0@2 ~]/3",
  AI: "[~ a0@2 a0@2 ~ a0@2 ~@2 a0@2 ~ a0@2 a0@2 a0@2 ~@5 a0@2 a0@2 ~@3 a0@2 a0@2 ~@3 a0@2 a0@2 ~ a0@2 ~@2 a0@2 a0@2 ~ a0@2 a0@2 ~@5 a0@2 a0@2 ~@2 a0@2 ~ a0@2 ~@2 a0@2 ~ a0@2 a0@2 ~@2 a0@2 ~ a0@2 a0@2 a0@2 ~@4]/6",
  AJ: "[~ a0@2 a0@2 ~@3 a0@2 a0@2 ~@3 a0@2 a0@2 ~ a0@2 ~@2 a0@2 a0@2 ~ a0@2 a0@2 ~@5 a0@2 a0@2 ~@3 a0@2 a0@2 ~@2 a0@2 ~ a0@2 ~ a0@2 ~@2 a0@2 a0@2 a0@2 a0@2 ~@5 a0@2 ~ a0@2 ~]/5",
  AK: "~ a0@2 a0@2 ~@3 a0@2 a0@2 ~ a0@2 ~",
  AL: "[~ a0@2 a0@2 ~ a0@2 a0@2 ~@5 a0@2 a0@2 ~@3 a0@2 a0@2 ~@3 a0@2 a0@2 ~@7 a0@2 a0@2 ~ a0@2 ~]/3",
  AM: "[~ a0@2 a0@2 ~ a0@2 ~@2 a0@2 ~ a0@2 a0@2 a0@2 ~@13]/2",
})).s("gm_slap_bass_1").gain(0.36)

// other · lead 8 bass lead
const lead_8_bass_lead = note("<~@84 A B@2 C ~@83>".pickRestart({
  A: "d3@5 ~ a2@5 ~ a#2@4", B: "[~@2 f2@5 ~ e2@11 ~ f2@5 ~ e2@5 ~]/2", C: "a#2@5 ~ a2@5 ~ f2@4",
})).s("gm_lead_8_bass_lead").gain(0.36).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B C D E B C F G B C D E B C F H B C D I B J K L ~ M N O P M N O Q M N O R M N O S T U V W X Y X@3 Y X@2 Z Y X@3
  Y X AA AB AC AD AB AE ~ T AA AF AG AH AI AJ AK AH AI AJ AK T AL AJ T@2 AL AJ AM T AL AJ T@2 AL AJ T@2 AA AJ T@2 AL AJ
  T@2 AN T AN T AN AO AP AQ AR AS AT AQ AR AU AV AW AX@2 AY AZ AY BA@2 AZ AY BA BB AZ AY BA@2 AZ AY AJ BC BD BE BF BG BD
  BH BI BJ BK BL BM AJ BN BC BO BP BQ BR BS BT BD BU BV
>`.pickRestart({
  A: "~@5 x ~@3 x ~@3 x ~ x", B: "~@7 x ~@3 x ~@4", C: "~@7 x ~ x ~@3 x ~ x", D: "~@7 x ~@3 x ~@3 x",
  E: "x ~@8 x ~@3 x ~ x", F: "~@7 x ~@7 x", G: "~@3 x ~ x ~@3 x ~@3 x ~ x", H: "~@9 x ~@3 x ~ x",
  I: "x ~@2 x ~ x ~ x ~@5 x ~ x", J: "~@7 x ~ x ~@5 x", K: "~@7 x ~ x ~@6", L: "~@3 x!2 ~@3", M: "~ x ~ x!2 ~@3",
  N: "x!2 ~@2", O: "x!2 ~ x!2 ~@3", P: "x ~@3 x ~@3 x!2 ~@6", Q: "x ~@7 x!2 ~@2 x ~@3", R: "x!3 ~",
  S: "x ~@7 x!2 ~@2 x ~ x ~", T: "x ~@2 x ~@2 x ~", U: "~@3 x ~@2 x ~", V: "~@2 x!2 ~@2 x ~", W: "~@2 x!2 ~@2 x!2",
  X: "x!2 ~@6", Y: "x!2 ~@3 x!3", Z: "~ x ~@6", AA: "~ x ~@2 x ~@3", AB: "~@4 x ~ x ~@3 x ~@2 x ~@2",
  AC: "~ x ~@2 x ~@3 x ~@5 x ~", AD: "x ~ x ~@10 x ~ x", AE: "~ x ~@5 x ~@2 x ~@3 x ~", AF: "x ~ x ~@2 x ~@2",
  AG: "x ~@2 x", AH: "x ~@2 x ~ x!2 ~", AI: "~ x ~ x!5", AJ: "~@2 x ~@2 x ~@2", AK: "x ~ x!2 ~@2 x ~",
  AL: "~ x ~@2 x ~@2 x", AM: "x ~@2 x ~ x ~@2", AN: "~ x ~@2 x ~ x ~", AO: "x ~@5 x ~@3 x ~@2 x ~@2",
  AP: "x!3 ~ x!2 ~@2", AQ: "~ x ~ x ~@4", AR: "~ x!2 ~ x!2 ~@2", AS: "~@2 x ~@3 x ~@3 x!2 ~@4", AT: "~@2 x ~ x!2 ~@2",
  AU: "~@2 x ~@7 x!2 ~@2 x ~", AV: "x!2 ~@2 x ~@2 x", AW: "~@4 x ~@2 x", AX: "~@3 x!2 ~@2 x", AY: "x!3 ~@5",
  AZ: "~ x!2 ~@3 x!2", BA: "~ x!2 ~@5", BB: "~ x ~@2", BC: "~@6 x ~ x ~@4 x ~ x", BD: "~@3 x ~@2 x ~@3 x ~@5",
  BE: "x ~ x ~@2 x ~@9 x", BF: "~ x ~@4 x ~ x ~@4 x ~ x", BG: "~@6 x ~ x ~ x ~@2 x ~@2", BH: "~ x ~ x ~@6 x ~@2 x ~ x",
  BI: "~ x ~@6 x ~ x ~@4 x", BJ: "~@6 x ~ x ~@6 x", BK: "~ x ~ x ~@2 x ~@6 x ~ x", BL: "~@3 x ~@6 x ~@2 x ~@2",
  BM: "~@3 x ~@2 x ~ x ~ x ~@5", BN: "~ x ~@8 x ~@4 x", BO: "~@3 x ~@2 x ~ x ~@4 x ~ x", BP: "~ x ~ x ~@6 x ~@2 x ~@2",
  BQ: "~ x ~@6 x ~ x ~@5", BR: "~ x ~ x ~@2 x ~ x ~@6 x", BS: "~ x ~@4 x ~@6 x ~ x", BT: "~@8 x ~ x ~@2 x ~@2",
  BU: "~ x ~ x ~@2 x ~@3 x ~@2 x ~ x", BV: "~ x ~@14",
})).gain(0.51)

// drums · rim
const rim = s("rim").struct("<~@55 A ~@3 A ~@3 A ~@3 A ~@9 B ~ C ~@53 D ~@3 D ~@3 D ~@3 D ~@25>".pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~@3 x ~@4", D: "x",
})).gain(0.51)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@16 A ~@15 B C D ~@14 E F G H ~@17 I J K I L ~@4 H ~@2 M ~@3 M ~@24 H ~ H ~ H ~ H ~ N ~@6 O P Q O ~@17 R S T U V ~@13
  W ~ X ~ Y Z
>`.pickRestart({
  A: "~@3 x ~ x ~@10", B: "~@3 x ~@4", C: "~@4 x!2 ~@7 x!3", D: "x!2 ~@14", E: "~@6 x!2", F: "x", G: "~@2 x!2 ~@2 x ~",
  H: "~@3 x", I: "~@4 x ~ x ~@3 x ~@2 x ~@2", J: "~ x ~@2 x ~@3 x ~@5 x ~", K: "x ~ x ~@10 x ~ x",
  L: "~ x ~@5 x ~@2 x ~@3 x ~", M: "~ x", N: "~ x ~@6", O: "~@7 x", P: "x!2 ~@6", Q: "~@3 x!2 ~@2 x",
  R: "~@6 x ~ x ~@4 x ~ x", S: "~@3 x ~@2 x ~@3 x ~@5", T: "x ~ x ~@2 x ~@9 x", U: "~ x ~@4 x ~ x ~@4 x ~ x",
  V: "~@6 x ~ x ~ x ~@2 x ~@2", W: "~@2 x!3 ~@3", X: "~@8 x ~ x ~@2 x ~@2", Y: "~@10 x ~@2 x ~ x", Z: "~ x ~@14",
})).gain(0.51)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@55 A ~@3 A ~@3 A ~@3 A ~@64 B ~@3 B ~@3 B ~@3 B ~@26>".pickRestart({
  A: "~@5 x!2 ~", B: "~@6 x!2",
})).gain(0.51)

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 [~@3 x] ~@137>").gain(0.51)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A B@23 C D E@21 F E@3 F E@3 F E@3 F E G ~@49 H I@12 J H I@2 J H I@2 J H I@2 J H K L ~@23
>`.pickRestart({
  A: "~@5 x ~@3 x ~@3 x ~@2", B: "~ x ~@3 x ~@3 x ~@3 x ~@2", C: "~ x ~@3 x ~@2 x ~@7", D: "~@2 x ~ x!2 ~@3 x ~@6",
  E: "~ x ~ x ~ x ~ x", F: "~ x ~ x ~@4", G: "~@2 x ~@3 x ~@3 x ~@4 x", H: "~ x!3", I: "x!4", J: "x!3 ~",
  K: "x ~@3 x ~@3 x ~@4 x ~@2", L: "~ x ~@14",
})).gain(0.51)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@3 B ~@3 A ~ C ~@5 A ~@3 D ~@3 E ~@3 F ~ F ~@2 G F ~@2 G ~@3 G F@3 H F ~@2 G F ~@3 F ~@2 G F ~@7 G ~ I F J K I
  L M I@2 L M I ~@24 I N I N I N O P ~ Q R S ~@3 Q@3 M Q ~@3 S ~@3 Q ~@3 S ~@7 D T U T V T V T V T ~@2 V T V T W T X ~
>`.pickRestart({
  A: "~@5 x ~@10", B: "~ x ~ x ~ x ~@10", C: "~@9 x ~@6", D: "~@13 x ~@2", E: "~ x", F: "~ x ~@6", G: "~@7 x",
  H: "~ x ~@2 x ~@3", I: "x ~@2 x ~@2 x ~", J: "x ~ x ~@2 x ~@2", K: "x", L: "~ x ~@2 x ~@2 x", M: "~@2 x ~@2 x ~@2",
  N: "~ x ~@2 x ~ x ~", O: "x ~@5 x ~@3 x ~@2 x ~@2", P: "x!2 ~@6", Q: "~ x ~@2", R: "~@6 x!2", S: "x!2 ~@2",
  T: "~ x ~@4 x ~@3 x ~@4 x", U: "~@4 x ~@3 x ~@4 x ~ x", V: "~@4 x ~@3 x ~@4 x ~@2", W: "~@8 x ~ x ~@2 x ~@2",
  X: "~ x ~ x ~@2 x ~@9",
})).gain(0.51)

// drums · ride bell
const ride_bell = s("rd").struct("<~@33 [~@9 x ~@6] ~@54 [x!8]!23 [x!7 ~] ~@59>").gain(0.51)

stack(bass, lead_8_bass_lead, kick, rim, snare, low_tom, pedal_hat, mid_tom, open_hat, crash, ride_bell)

More by Korn