Strudelify
Sanctified cover art

Pretty Hate Machine

Sanctified

Nine Inch Nails

KeyE minorTempo106 bpm
0:00/0:00
// Sanctified — Nine Inch Nails
// 106 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 153 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Overdriven Guitar.
setcpm(106/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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(`<
  ~@8 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 ~@16 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 ~@9
>`.pickRestart({
  A: "e1@3 e2@3 e1@2 e2 ~ e1@2 f2@4", B: "e1@3 e2@3 e1@2 e2 ~ e1@2 g1@4",
})).s("gm_slap_bass_1").gain(0.54)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@32 A@2 B@2 A@2 B@2 ~ C ~ D ~ C ~ D ~@7 E ~@15 F A@2 B@2 A@2 B@2 ~ C ~ D ~ C ~@26 G@8 A@2 B@2 A@2 B@2 ~ C ~ D ~ C ~@3
  C ~ D ~ C ~@11
>`.pickRestart({
  A: "[f#3,d4,f#4]@3 [f#3,d4,f#4] [f#3,d4,f#4]@2 [f#3,d4,f#4]@2 [f#3,d4,f#4]@2 [f#3,d4,f#4]!6", // D
  B: "[g#3,e4,g#4]@3 [g#3,e4,g#4] [g#3,e4,g#4]@2 [g#3,e4,g#4]@2 [g#3,e4,g#4]@2 [g#3,e4,g#4]!6", C: "[f#3,d4,f#4]",
  D: "[g#3,e4,g#4]", E: "~ e6", F: "~@9 [f#3,d4,f#4]!2 ~ [f#3,d4,f#4]!4", G: "e3!16",
})).s("gm_distortion_guitar").gain(0.14)

// other · sitar
const sitar = note("<~@48 A B C ~@3 A B ~@12 D E F ~@82>".pickRestart({
  A: "g#4!2 ~ g#4 ~ g#4 ~ g#4!2 ~ g#4!2 ~ g#4 ~ g#4", B: "g#4!2 ~ g#4!7 ~ g#4!2 [g#4,a#4] a#4 [g#4,a#4]",
  C: "g#4 [g#4,a#4] a#4 [g#4,a#4] g#4 [g#4,a#4] a#4 [g#4,a#4] ~@8", D: "e5!2 ~ e5 ~ e5 ~ e5!2 ~ e5!2 ~ e5 ~ e5",
  E: "e5!2 ~ e5!7 ~ e5!2 [e5,f#5] f#5 [e5,f#5]", F: "e5 [e5,f#5] f#5 [e5,f#5] e5 [e5,f#5] f#5 [e5,f#5] ~@8",
})).s("gm_sitar").gain(0.04).pan(0)

// chords · sitar
const sitar_2 = note("<~@49 A B ~@4 C ~@13 D E ~@82>".pickRestart({
  A: "g#4!13 [g#4,a#4]!3", B: "[g#4,a#4]!8 a#4 ~@7", C: "~ g#4!12 [g#4,a#4]!3", D: "e5!13 [e5,f#5]!3",
  E: "[e5,f#5]!8 f#5 ~@7", // Esus2
})).s("gm_sitar").gain(0.04).pan(1)

// other · pad poly · "Pad 3 (polysynth)"
const pad_poly = note("<~@136 A@8 B@8 ~>".pickRestart({
  A: "[e6,e7]@2 [e6,e7]!2 [e5,e6,e7] [e6,e7]!3 [e6,e7]@2 [e6,e7]!2 [e5,e6,e7] [e6,e7]!3", B: "[d3,a3,d4]/8",
})).s("gm_pad_poly").gain(0.06)

// drums · kick
const kick = s("bd").struct("<[x!4]!88 ~@4 [x!4]!11 [x!3 ~] [x!4]!40 ~ [~@12 x!2 ~@2] ~@7>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@103 A ~@16 B@15 C B@8 D A ~@7>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@3 x!3 ~ x!4", D: "~@5 x ~@2",
})).gain(0.5)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@40 A ~ A ~ A ~ A ~@33 A ~ A ~ A ~ A ~@41 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@10
>`.pickRestart({
  A: "~@7 x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<[x!16]!103 [x!13 ~@3] [x!16]!40 ~@9>").gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@32 A@8 B A B A B A B A ~@24 A@8 B A B A B A B A ~@32 A@8 B A B A B A B A B A B A B A B A ~@9
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~ x",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@40 A ~ A ~ A ~ A ~@33 A ~ A ~ A ~ A ~@41 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@10
>`.pickRestart({
  A: "~@15 x",
})).gain(0.45)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@33 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@25 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@33 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~@2 B C B ~@6
>`.pickRestart({
  A: "~@15 x", B: "x ~@2 x ~@4 x ~@7", C: "x ~@2 x ~@4 x ~@6 x",
})).gain(0.95)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@33 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@25 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@33 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A B C B ~@6
>`.pickRestart({
  A: "~@6 x!2", B: "~@3 x ~ x ~@2", C: "~@3 x ~ x!3",
})).gain(0.95)

// drums · ht
const ht = s("ht").struct(`<
  ~@32
  [x ~@2 x ~@2 x ~ x ~@7]!16
  ~@24
  [x ~@2 x ~@2 x ~ x ~@7]!16
  ~@32
  [x ~@2 x ~@2 x ~ x ~@7]!24
  ~@9
>`).gain(0.3)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@4 A ~ A ~@5 A ~ A ~@5 A ~ A ~@5 A ~ A ~@21 A ~ A ~@5 A ~ A ~@5 A ~ A ~@25 A ~ A ~ A ~ A ~@5 A ~ A ~@42
>`.pickRestart({
  A: "~@12 x!4",
})).gain(1.26)

stack(
  bass, distortion_guitar, sitar, sitar_2, pad_poly, kick, snare, low_tom, hihat, mid_tom, crash, congas, congas_2, ht,
  cabasa
)

More by Nine Inch Nails