Strudelify

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.
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: edit a riff to change every repeat.

// bass · slap bass 1
const bass = note(`<
  A@8 B@2 C@22 D@2 E F G F G F G F G F G F G F G F H I@3 J K L M J K L M J K L M J K L N O P Q@2 R@2 S@4 T@2 U@2 T@2 U@2
  V@4 W@20 X@6 Y Z AA AB AA AB AA AB AA AC AD@3 AE AF AG AH AE AF AG AH AE AF AG AH AE AF AG AI@3 AJ@3 O AK@6 AL@5 AM
  AN@3 O AO@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 b0@14]/2", E: "~ a0@2 a0!2 a0@2 ~",
  F: "a0@2 a0@3 a0@2 a0", G: "a0 a0@2 a0!2 a0@2 ~", H: "a0@2 a1 ~ a0 ~@3 a1 ~@7", I: "~@2 a1 ~ a0 ~@3 a1 ~@7",
  J: "~@2 e1@5 ~ d#1@2 d#1@5 ~", K: "d1@2 d1@5 ~ c#1@2 c#1@5 ~", L: "a1@2 a1@5 ~ g#1@2 g#1@5 ~",
  M: "g1@2 g1@5 ~ f#1@2 f#1@5 ~", N: "g1 g1@3 f#1 f#1@3", O: "~@3 a0@2 ~ a0@2 ~@2 a0@2 a0@2 ~@2",
  P: "~ a0@2 a0@2 ~@3 a0@2 ~@4 a0@2", Q: "[a0@2 a0@2 ~@9 a0@2 a0@2 ~@2 a0@2 ~ a0@2 ~@2 a0@2 a0@2 ~@2]/2",
  R: "[~ a0@2 ~@4 a0@3 a0@4 a0@4 ~@14]/2",
  S: "[~@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",
  T: "[~@3 e1, d2@2 ~ a#1@2 ~@3, ~@3 a1@4 ~@2 f1@4 ~@3]/2", U: "[~@7 f1, ~ f1@2 ~ a#1@2 ~@2, ~@5 e1@4 ~@2 a1@4 ~]/2",
  V: "[~@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",
  W: "[~@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",
  X: "[~@6 e1!2, d1@2 ~ a#0@2 ~@3, ~@3 a0@4 ~@2 f1@4 ~@3]/2", Y: "~@6 a0@4 a#0@3 f1@3, d1 ~", Z: "e1!2 a0@2 a0!2 a0@2",
  AA: "~ a0@2 a0@3 a0@2", AB: "a0!2 a0@2 a0!2 a0@2", AC: "a0@2 a0@2 a1 ~ a0 ~@3 a1 ~@5", AD: "~@4 a1 ~ a0 ~@3 a1 ~@5",
  AE: "~@4 e1@5 ~ d#1@2 d#1@4", AF: "~@2 d1@2 d1@5 ~ c#1@2 c#1@4", AG: "~@2 a1@2 a1@5 ~ g#1@2 g#1@4",
  AH: "~@2 g1@2 g1@5 ~ f#1@2 f#1@4",
  AI: "[~@2 g1@2 g1@6 f#1@2 f#1@6 ~@4 a0@2 a0@2 ~@2 a0@2 ~ a0@2 ~@2 a0@2 ~ a0@2 ~@2 a0@2 ~@4]/3",
  AJ: "[a0@2 a0@2 a0@2 ~@9 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 ~@2]/3",
  AK: "[~ 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 ~@4 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",
  AL: "[~ 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 ~@5 a0@2 a0@2 ~@2]/5",
  AM: "~ a0@2 a0@2 ~@3 a0@2 a0@2 ~ a0@2 ~",
  AN: "[~ a0@2 a0@2 ~ a0@2 a0@2 ~@5 a0@2 a0@2 ~@3 a0@2 a0@2 ~@2 a0@2 ~ a0@2 ~@7 a0@2 a0@2 a0@2 ~@2]/3",
  AO: "[~ 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 BN BO BC BP BQ BR BS BT BU BD BV BW
>`.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: "~@3 x ~@2 x ~@3 x ~ x ~@3",
  AC: "~ x ~ x ~@4 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 ~@3 x ~@2 x", BD: "~@3 x ~@2 x ~@3 x ~@5",
  BE: "x ~ x ~ x ~@10 x", BF: "~ x ~@4 x ~ x ~@3 x ~@2 x", BG: "~@3 x!4 ~", BH: "~ x ~ x ~@6 x ~ x ~@2 x",
  BI: "~ x ~@6 x ~ x ~@4 x", BJ: "~@6 x ~ x ~@6 x", BK: "~ x ~ x ~@2 x ~@5 x ~@2 x", BL: "~@3 x ~@6 x ~ x ~@3",
  BM: "~@3 x ~@2 x ~ x ~ x ~@5", BN: "~@3 x ~@6 x ~@5", BO: "~ x ~@8 x ~@4 x", BP: "~@3 x ~@2 x ~ x ~@3 x ~@2 x",
  BQ: "~ x ~ x ~@6 x ~ x ~@3", BR: "~ x ~@6 x ~ x ~@5", BS: "~ x ~ x ~@2 x ~ x ~@6 x", BT: "~ x ~@4 x ~@5 x ~@2 x",
  BU: "~@4 x!3 ~", BV: "~ x ~ x ~@2 x ~@3 x ~ x ~@2 x", BW: "~ 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 S AI AJ AK T AA K AL AM AN AO AP AQ Y AR S@2 AS ~
>`.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: "~ x!2 ~", I: "~ x ~ x!3 ~@2 x ~@3 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: "~ x ~@4 x ~", AI: "~@3 x ~@12",
  AJ: "~ x ~@4 x!2 ~@8", AK: "~ x ~@6 x ~@7", AL: "~ x ~@6 x ~@6 x", AM: "~@8 x ~@3 x ~@2 x",
  AN: "~@6 x ~ x ~@3 x ~@2 x", AO: "~@3 x ~@2 x ~ x ~@3 x ~@2 x", AP: "~ x ~ x ~@12", AQ: "~@3 x ~@6 x ~@5",
  AR: "~@8 x ~@6 x", AS: "~ x ~ x ~@2 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: "~@3 x ~@2 x ~@3 x ~ x ~@3", J: "~ x ~ x ~@4 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 ~@3 x ~@2 x", S: "~@3 x ~@2 x ~@3 x ~@5", T: "x ~ x ~ x ~@10 x", U: "~ x ~@4 x ~ x ~@3 x ~@2 x",
  V: "~@3 x!4 ~", W: "~@3 x ~@2 x ~ x ~@7", X: "~@4 x!3 ~", Y: "~@10 x ~ x ~@2 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 C H I@2 C H I@2 C H I@2 C H I J ~@23
>`.pickRestart({
  A: "~@5 x ~@3 x ~@3 x ~@2", B: "~ x ~@3 x ~@3 x ~@3 x ~@2", C: "x!3 ~", D: "~ x ~@2 x!2 ~@2 x ~@7",
  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 ~@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 T U V U W U W U W U ~@2 W U W U X U Y ~
>`.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: "~@3 x", U: "~ x ~@4 x ~@3 x ~@4 x", V: "~@3 x ~@4 x ~@3 x ~@2 x", W: "~@3 x ~@4 x ~@3 x ~@3", X: "~@4 x!3 ~",
  Y: "~ x ~ x ~@2 x ~@9",
})).gain(0.51)

// drums · ride bell
const ride_bell = s("rd").struct("<~@33 [~ x] ~@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