Strudelify
Something I Can Never Have cover art

Pretty Hate Machine

Something I Can Never Have

Nine Inch Nails

KeyC majorTempo110 bpm
0:00/0:00
// Something I Can Never Have — Nine Inch Nails
// 110 bpm, 4/4, key C major. 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 162 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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.

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<A@4 ~@158>".pickRestart({
  A: "[~@57 g5@5 ~@3 g5@57 ~@6, ~ [c3,g3,c4]@92 ~@35]/4", // C5
})).s("gm_overdriven_guitar").gain(0.2)

// chords · piano · "A.PIANO 1"
const piano = note("<A B@8 C@2 D@5 E@7 B@72 F@4 G H@4 I J@2 K@8 B@40 L@7>".pickRestart({
  A: "~ g4!3",
  B: "[g4!2 ~@2 g4!4 g4!2 ~@2 g4!4 g4!2 ~@2 g4!4 g4!2 ~@2 g4!4, ~@2 g4!2 ~@6 g4!2 ~@6 g4!2 ~@6 g4!2 ~@4, ~@5 g#4@16 g#4@16 g#4@16 g#4@11, ~@7 c4@16 c4@16 c4@16 c4@9]/8",
  C: "[g4!2 ~@2 g4!4, ~@2 g4!2 ~@4, ~@5 g#4@11, ~@7 c4@9]/2",
  D: "[g4@2 g4@2 ~@3 c4 g4@2 ~@2 g4@2 g4@2 g4@2 ~@6 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 ~@3 [g3,c4], ~@4 g4@2 g4@2 c4@10 g4 g3@16 ~ g4@2 g4@2, ~@5 g#4@13 f3@4 g4 c4@16 ~, ~@7 g3@3 g4 a#3@11 e4@16 ~@2, ~@10 d4@10 g4 [f4,g#4]@16 g#4@3]/5", // C5 Fm
  E: "[g4 ~ g4!2 g4 ~@3 g4!4 g4!2 ~@2 g4!4 g4!2 ~@2 g4!4, c4@10 g4 g3@16 ~ g4@2 g4@2 ~@12 g4@2 g4@2 ~@8, ~@2 d4@10 g4 [f4,g#4]@16 g#4@16 g#4@11, ~@2 g4@2 ~@6 f3@4 g4 c4@16 c4@16 c4@9, ~@3 a#3@11 e4@16 ~@26]/7", // Fm
  F: "[g4!2 ~@2 g4!4 g4!2 ~@2 g4!4, ~@2 g4!2 ~@6 g4!2 ~@4, ~@5 g#4@16 g#4@11, ~@7 c4@16 c4@9]/4",
  G: "g4@2 g4@2 ~@3 [g3,c4], ~@2 g4!2, ~@5 g#4@3", // C5
  H: "[g4@2 g4@2 ~@2 g4@2 g4@2 g4@2 ~@8 g4@2 g4@2 g4@2 g4@2 ~@3 [g3,c4], c4@14 f3@14 g4 g#4@3, ~@4 d4@10 g4 [g3,c4]@15 g4@2, ~@16 g4@8 ~@24 g4@4 g#4@20 g4@3 e4@53, ~@5 a#3@11 g4 f4@15]/4", // C5
  I: "g4 ~ g4!2, c4, ~ g4 a#3@2, ~@13 d4@19",
  J: "[g4 ~@3 g4!4, ~@2 g4@2 g3@2 g4 [c4,e4]@9, ~@3 f3@13, ~@2 g4 f4@5, ~@5 g#4@11]/2", // C
  K: "[g4!2 ~@3 g4!3 g4!2 ~@3 g4!3 g4!2 ~@3 g4!2 ~ g4!2 ~@2 g4!4, ~@4 g4@2 g4@2 g4@2 ~@10 g4@2 g4@2 a#3@15 [f3,c4]@11 e4@14, ~@5 g#4@16 g#4@15 g4 g#4@9 g4 f4@16 ~, ~@7 [f3,c4]@16 [f3,c4]@15 g4@2 a#3@12 g4 g#4@11, ~@33 [a#3,d4]@63 g4 d4@63 g4 d4@55 g4@4 c4@36]/8", // F5 A#
  L: "[g4@2 g4@2 ~@4 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 ~@4 g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 ~@3 c4@16 ~, ~@2 g4!2 ~@6 g4!2 ~@6 g4 g4@8 ~, ~@5 g#4@16 g#4@16 g#4@16 ~@3, ~@7 c4@16 c4@16 ~@17]/7",
})).s("gm_piano").gain(0.48)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<~@32 A@8 ~@24 B@6 ~@34 B@6 ~@14 C@8 ~@30>".pickRestart({
  A: "g2/8", B: "[~ a#2@170 ~@21]/6", C: "g3/8",
})).s("gm_lead_2_sawtooth").gain(0.25).pan(0.2)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@70 A@5 B@4 C@7 D@5 E@7 F@5 ~@44 G@8 ~ H@4 ~@2>".pickRestart({
  A: "[~@2 e4@29 f4@37 c4@60 e4@32]/5", B: "[~ f4@30 c4@64 e4@33]/4", C: "[f4@31 c4@64 e4@27 f4@37 c4@65]/7",
  D: "[~ e4@30 f4@29 ~ c4@66 e4@33]/5", E: "[f4@31 c4@63 e4@33 f4@30 c4@65 e4@2]/7", F: "[~@29 f4@34 c4@67 ~@30]/5",
  G: "[~@31 a#3@64 ~@63 g#3@98, ~@95 f3@67 ~@94]/8", H: "[f3@127 ~]/4",
})).s("gm_string_ensemble_2").gain(0.32)

// other · pad bowed · "BOWEDGLASS"
const pad_bowed = note("<~@132 A@8 B ~@3 B ~@17>".pickRestart({
  A: "[f2,f3]/4", B: "[f2,f3]",
})).s("gm_pad_bowed").gain(0.56)

// drums · kick
const kick = s("bd").struct(`<
  ~@44 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 ~@15
>`.pickRestart({
  A: "x!2 ~@6 x ~@23",
})).gain(0.8).pan(0)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@44 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 ~@15
>`.pickRestart({
  A: "~ x ~@6 x ~@23",
})).gain(0.48).pan(0)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@44 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 ~@15
>`.pickRestart({
  A: "~ x ~@6 x ~@23",
})).gain(0.48).pan(0)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@45 A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~@25 A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~@33 A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~@14
>`.pickRestart({
  A: "~ x", B: "~@15 x ~@16",
})).gain(0.8).pan(0)

// drums · china
const china = s("cr").struct(`<
  ~@44 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 ~@15
>`.pickRestart({
  A: "~@4 x!2 ~@2",
})).gain(0.48).pan(0)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@32 [~@2 x!2 ~@2 x!2]!5 [~@2 x!2 ~@4] ~@86 [~@2 x!2 ~@2 x!2]!24 ~@14>")
  .gain(2.43).pan(0)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@37 [~@6 x!2] [~@2 x!2 ~@2 x!2]!2 ~@122>").gain(0.81).pan(0)

stack(
  overdriven_guitar, piano, lead_2_sawtooth, string_ensemble_2, pad_bowed, kick, low_tom, mid_tom, open_hat, china,
  cabasa, cabasa_soft
)

More by Nine Inch Nails