Strudelify

Purest Feeling

Nine Inch Nails

KeyE minorTempo120 bpm
0:00/0:00
// Purest Feeling — Nine Inch Nails
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 92 bars on a 32-step grid, each part at one level. 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.

// chords · alto sax · "saxophone"
const alto_sax = note(`<
  A@2 ~ B C@2 ~ D A@2 ~ B C@2 ~ D ~@14 A@2 ~ B C@2 ~ D A@2 ~ B C@2 ~ D ~@14 A@2 ~ B C@2 ~ D A@2 ~ B C@2 ~ D A@2 ~ B C@2
  ~ D A@2 ~ B C@2 ~ D
>`.pickRestart({
  A: "[~@59 a4@4 ~, ~@8 e4@45 ~@2 e4@9, ~@9 b4@51 ~@4]/2", B: "~@4 a4@3 ~@25",
  C: "[~@8 [e4,b4]@46 ~ [e4,b4]@4 a4@3 ~@2]/2", D: "~@3 a4@3 ~@10 a4@3 ~@13",
})).s("gm_alto_sax").gain(0.36)

// bass · electric bass finger · "bass"
const bass = note("<~@16 A B C D E@3 A B C D F@3 ~@16 A B C D E@3 A B C D F@3 ~@32>".pickRestart({
  A: "d2@2 ~ d2@2 ~@2 d2@2 ~@2 d2@2 ~@2 d2@2 ~ d2@2 ~@2 d2@2 ~@2 d2@2 ~ d2@2 ~",
  B: "~ d2@2 ~@2 d2@2 ~ d2@2 ~@2 d2@2 ~ d2@2 ~@2 d2@2 ~@2 d2@2 ~ c2@2 ~@2 c2@2",
  C: "~ c2@2 ~@2 c2@2 ~ c2@2 ~ c2@2 ~@2 c2@2 ~ c2@2 ~@2 c2@2 ~ c2@2 ~@2 c2@2 ~",
  D: "c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 ~ c2@2 ~@2 a1@2 ~ a1@2 ~@2 a1@2 ~ a1@2 ~",
  E: "[a1@2 ~@2 a1@2 ~ a1@2 ~@2 a1@2 ~ a1@2 ~@2 a1@2 ~ a1@2 ~ a1@2 ~@2 a1@2 ~ a1@2 ~@2 a1@2 ~@2 a1@2 ~ g1@2 ~@2 g1@2 ~ g1@2 ~@2 g1@2 ~ g1@2 ~ g1@2 ~@2 g1@2 ~ g1@2 ~@2 g1@2 ~ g1@2 ~ g1@2 ~@2 g1@2 ~@2 g1@2 ~ g1@2 ~@2 g1@2 ~ g1@2]/3",
  F: "[a1@2 ~@2 a1@2 ~ a1@2 ~@2 a1@2 ~ a1@2 ~@2 a1@2 ~ a1@2 ~ a1@2 ~@2 a1@2 ~ a1@2 ~@2 a1@2 ~@2 a1@2 ~ g1@2 ~@2 g1@2 ~ g1@2 ~@2 g1@2 ~ g1@2 ~ g1@2 ~@2 g1@2 ~ g1@30]/3",
})).s("gm_electric_bass_finger").gain(0.31)

// other · acoustic guitar steel · "guitar"
const acoustic_guitar_steel = note("<~@25 A@5 ~@24 B@7 ~@31>".pickRestart({
  A: "[~@13 a4@29 g4@23 a4@15]/5", B: "[~ b3@56 a3@57 g3@48 b3@36 ~@26]/7",
})).s("gm_acoustic_guitar_steel").gain(0.41)

// other · piano · "trent"
const piano = note(`<
  ~@7 A B ~@2 C@2 ~@16 D E ~@2 F@2 ~@2 G H ~@2 I@2 ~@16 J K ~@2 L@2 ~@2 M N ~@2 O@2 ~@19
>`.pickRestart({
  A: "~@16 e4@4 a3@3 ~@9", B: "~ a3@4 c4@3 ~@24", C: "[~@16 e4@3 a3@4 ~@8 a3@4 c4@4 ~@25]/2", D: "~@21 e4@3 ~ a3@3 ~@4",
  E: "~@3 a3@3 c4@3 ~@23", F: "[~@15 e4@3 ~ a3@4 ~@8 a3@4 c4@4 ~@25]/2", G: "~@16 e4@3 a3@4 ~@9", H: "a3@4 c4@3 ~@25",
  I: "[~@4 e4@3 a3@3 ~@21 a3@4 c4@3 ~@26]/2", J: "~@19 e4@3 a3@5 ~@5", K: "~ a3@3 c4@3 ~@25",
  L: "[~@16 e4@3 a3@4 ~@8 a3@4 c4@2 ~@27]/2", M: "~@16 e4@3 ~ a3@3 ~@9", N: "a3@2 c4 ~@13",
  O: "[~@15 e4@4 a3@3 ~@9 a3@3 ~ c4@2 ~@27]/2",
})).s("gm_piano").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A B C D E F G A B C D E F ~ H I J K L M L N O P Q R J S T U A B C D E F G A B C D E F ~ H I J K L M L N O P Q R J
  S T U H I J K L M L N O P Q R J S T U
>`.pickRestart({
  A: "~ x ~@6 x ~@6 x ~@7 x ~@6 x ~", B: "~@4 x ~@6 x ~@6 x ~@7 x ~@5", C: "~ x ~@6 x ~@6 x ~@6 x ~@6 x ~@2",
  D: "~@4 x ~@6 x ~@6 x ~@6 x ~@6", E: "x ~@6 x ~@6 x ~@6 x ~@6 x ~@3", F: "~@2 x ~@7 x ~@6 x ~@6 x ~@5 x ~",
  G: "~@5 x ~@6 x ~@6 x ~@6 x ~@5", H: "~ x ~@15 x ~@10 x ~@3", I: "~@4 x ~@7 x ~@3 x ~@2 x ~@11 x",
  J: "~@15 x ~@11 x ~@4", K: "~@2 x!2 ~@7 x ~@3 x ~@3 x ~@11 x", L: "x ~@3 x ~@2 x", M: "~ x ~ x!3 ~@2",
  N: "~@3 x!2 ~@7 x ~@3 x ~@2 x ~@12", O: "x ~@16 x ~@12 x ~", P: "~@6 x ~@7 x ~@3 x ~@2 x ~@10",
  Q: "~@2 x ~@14 x ~@11 x ~@2", R: "~@4 x!2 ~@6 x ~@2 x!2 ~@3 x ~@10 x", S: "~@3 x ~@7 x ~@3 x ~@3 x ~@12",
  T: "x ~@14 x ~@10 x ~@5", U: "~ x ~@3 x ~ x ~ x ~@6",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct(`<
  A B A C A B A C D@2 A B@2 E B F ~@2 G ~@3 H ~ I ~@2 J ~@2 K L M B N A N A O P Q L M B R S ~@2 G ~@3 H ~ I ~@2 J ~@2 K
  L M B N A N A O P Q L M B R S K L M B N A N A O P Q L M B R S
>`.pickRestart({
  A: "~ x ~ x", B: "~@7 x ~@15 x ~@8", C: "~@4 x!2 ~@6 x ~@3", D: "~@9 x ~@15 x ~@6", E: "~@7 x ~@14 x ~@9",
  F: "~@7 x ~@16 x ~@7", G: "~@29 x ~@2", H: "~@13 x ~@18", I: "~ x ~@6", J: "~@21 x ~@10", K: "~ x!2 ~@3 x ~",
  L: "~@8 x ~@14 x ~@8", M: "~@3 x ~@3 x ~@15 x ~@8", N: "~@4 x ~@2 x!2 ~@15 x ~@7", O: "~@5 x ~@2 x!2 ~@16 x ~@5",
  P: "~@5 x ~@7 x ~@2", Q: "~@5 x ~@3 x ~@14 x ~@7", R: "~@3 x ~@2 x!2 ~@15 x ~@8", S: "~@3 x ~@8 x ~@3",
})).gain(0.46)

// drums · low tom
const low_tom = s("lt").struct("<~@17 A ~ B C D E ~ A ~ B C D ~@18 A ~ B C D E ~ A ~ B C D ~@33>".pickRestart({
  A: "~@12 x ~@6 x ~@12", B: "~@4 x ~@6 x ~@20", C: "~@7 x", D: "~@3 x ~@28", E: "~@19 x ~@6 x ~@5",
})).gain(0.51)

stack(alto_sax, bass, acoustic_guitar_steel, piano, kick, snare, low_tom)

More by Nine Inch Nails