Strudelify
Last cover art

Broken

Last

Nine Inch Nails

KeyD minorTempo90 bpm
0:00/0:00
// Last — Nine Inch Nails
// 90 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 · distortion guitar
const distortion_guitar = note(`<
  A B A B A B A B A B A B C D C D E F E F A G A G A G A G A G A G C D C D H@8 ~@4 I@4 J@8 C D C D H@16 ~@2 A K A K A K A
  K A K A K A K A K A K A K A G A G
>`.pickRestart({
  A: "[d3,a3,d4]@4 [d3,a3,d4]@2 [c3,g3,c4] [d3,a3,d4]@2 [c3,g3,c4] [d3,a3,d4]@2 [ab3,eb4,ab4]@2 [ab3,eb4,ab4]@2", // D5 C5 D5 C5 D5 Ab5
  B: "[d3,a3,d4]@4 [d3,a3,d4]@2 [c3,g3,c4] [d3,a3,d4]@2 c3!2 db3 d3!4", // D5 C5 D5
  C: "[c3,g3,c4]@2 [c3,g3,c4] [db3,ab3,db4]@2 [db3,ab3,db4] [d3,a3,d4]@3 [g2,d3,g3] [g2,d3,g3]@2 [ab2,eb3,ab3]@2 [a2,e3,a3]!2", // C5 Db5 D5 G5 Ab5 A5
  D: "[c3,g3,c4]@2 [c3,g3,c4] [db3,ab3,db4]@2 [db3,ab3,db4] [d3,a3,d4]@3 [g2,d3,g3] [g2,d3,g3]@2 [ab2,eb3,ab3]@2 [a2,e3,a3]@2", // C5 Db5 D5 G5 Ab5 A5
  E: "[c3,g3,c4] [d3,a3,d4]!2 [c3,g3,c4] [d3,a3,d4] [c3,g3,c4] [a2,e3,a3] [c3,g3,c4]@2 [d3,a3,d4]!2 [c3,g3,c4] [f3,c4,f4]@2 [f3,c4,f4]@2", // C5 D5 C5 D5 C5 A5 C5 D5 …
  F: "[c3,g3,c4] [d3,a3,d4]!2 [c3,g3,c4] [d3,a3,d4] [c3,g3,c4] [a2,e3,a3] [g2,d3,g3] [c3,g3,c4] [a2,e3,a3] [g2,d3,g3] [f2,c3,f3]@5", // C5 D5 C5 D5 C5 A5 G5 C5 …
  G: "[d3,a3,d4]@4 [d3,a3,d4]@2 [c3,g3,c4] [d3,a3,d4]@2 d3 ~ eb3 ~ eb3 e3 f3", // D5 C5 D5
  H: "[d3 e3!3 d3 e3!2 e3@2 ~ e3 d3!2 e3!2 e3@2 ~ e3 d3!2 e3!3 ~@2 d3 e3 ~@2 g3 a3]/2", I: "d3!16",
  J: "[c3,g3,c4]!2 [c3,g3,c4]@2 [c3,g3,c4] [db3,ab3,db4]@2 [db3,ab3,db4] [d3,a3,d4]@2 [d3,a3,d4] [eb3,bb3,eb4]@2 [eb3,bb3,eb4] [e3,b3,e4] [f3,c4,f4]", // C5 Db5 D5 Eb5 E5 F5
  K: "[d3,a3,d4]@4 [d3,a3,d4]@2 [c3,g3,c4] [d3,a3,d4]@2 ~@7", // D5 C5 D5
})).s("gm_distortion_guitar").gain(0.39)

// bass · fretless bass · "Bass"
const bass = note(`<
  A B A B A B A B A B A B C D C D E F E F A G A G A G A G A G A G C D C D H@8 ~@8 I@8 C D C D H@16 ~@2 A J A J A J A J A
  J A J A J A J A J A J A G A G
>`.pickRestart({
  A: "d2@4 d2@2 c2 d2@2 c2 d2@2 ab2@2 ab2@2", B: "d2@4 d2@2 c2 d2@2 c2!2 db2 d2!4",
  C: "c2@2 c2 db2@2 db2 d2@3 g1 g1@2 ab1@2 a1!2", D: "c2@2 c2 db2@2 db2 d2@3 g1 g1@2 ab1@2 a1@2",
  E: "c2 d2!2 c2 d2 c2 a1 c2@2 d2!2 c2 f2@2 f2@2", F: "c2 d2!2 c2 d2 c2 a1 g1 c2 a1 g1 f1@5",
  G: "d2@4 d2@2 c2 d2@2 d2 ~ eb2 ~ eb2 e2 f2",
  H: "[d2 e2!3 d2 e2!2 e2@2 ~ e2 d2!2 e2!2 e2@2 ~ e2 d2!2 e2!3 ~@2 d2 e2 ~@2 g2 a2]/2",
  I: "c2!2 c2@2 c2 db2@2 db2 d2@2 d2 eb2@2 eb2 e2 f2", J: "d2@4 d2@2 c2 d2@2 ~@7",
})).s("gm_fretless_bass").gain(0.41)

// other · lead 2 sawtooth · "Lead 2 (sawtooth)"
const lead_2_sawtooth = note("<~@36 A@8 ~@20 A@16 ~@22 B@4>".pickRestart({
  A: "[d3 e3!3 d3 e3!2 e3@2 ~ e3 d3!2 e3!2 e3@2 ~ e3 d3!2 e3!3 ~@2 d3 e3 ~@2 g3 a3]/2",
  B: "[c3,g3,c4]!2 [c3,g3,c4]@2 [c3,g3,c4] [db3,ab3,db4]@2 [db3,ab3,db4] [d3,a3,d4]@2 [d3,a3,d4] [eb3,bb3,eb4]@2 [eb3,bb3,eb4] [e3,b3,e4] [f3,c4,f4]", // C5 Db5 D5 Eb5 E5 F5
})).s("gm_lead_2_sawtooth").gain(0.44)

// other · overdriven guitar
const overdriven_guitar = note("<~@44 A@6 B@2 ~@28 A@26>".pickRestart({
  A: "~ f4 ~ g4 ~ a4 ~ c4", B: "[~ f4 ~ g4 ~ a4 ~ c4 ~ f4 ~ g4 ~ a4 ~ c4, d5]/2",
})).s("gm_overdriven_guitar").gain(0.22)

// other · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@44 [c4 ~@3 f4 ~@3 g4 ~@3 a4 ~@3]!8 ~@28 [c4 ~@3 f4 ~@3 g4 ~@3 a4 ~@3]!26>")
  .s("gm_overdriven_guitar").gain(0.14)

// other · lead 1 square · "Lead 1 (square)" · D F D C D F G F …
const lead_1_square = note(`<
  ~@46
  [[d4,d5]@2 ~@2 [d3,d4]@2 ~ [d3,d4]@2 [d3,d4]@2 ~ [f3,f4] [d3,d4] [c4,c5] [d4,d5]]
  [~ [d3,d4]@2 ~ [d4,d5]@2 ~ [d4,d5]@2 [f3,f4]@2 ~ [g3,g4]@2 [f3,f4]@2]
  [[d4,d5]@2 ~@2 [d3,d4]@2 ~ [d3,d4]@2 [d3,d4]@2 ~ [f3,f4] [d3,d4] [c4,c5] [d4,d5]]
  [~ [d3,d4]@2 ~ [d4,d5]@2 ~ [d4,d5]@2 [f3,f4]@2 ~ [g3,g4]@2 [f3,f4]@2]
  [[d4,d5]@2 ~@2 [d3,d4]@2 ~ [d3,d4]@2 [d3,d4]@2 ~ [f3,f4] [d3,d4] [c4,c5] [d4,d5]]
  [~ [d3,d4]@2 ~ [d4,d5]@2 ~ [d4,d5]@2 [f3,f4]@2 ~ [g3,g4]@2 [f3,f4]@2]
  ~@54
>`).s("gm_lead_1_square").gain(0.22)

// other · piano
const piano = note("<~@65 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@26>".pickRestart({
  A: "c3 ~@3",
})).s("gm_piano").gain(0.31)

// drums · kick
const kick = s("bd").struct("<A@12 B@3 C A@16 B@3 C D@8 ~@8 A@8 B@3 C D@16 ~@2 A@24>".pickRestart({
  A: "x!2", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x ~ x ~ x ~@4", D: "x!16",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct("<A@12 B@3 C A@16 B@3 C B@8 ~@8 A@8 B@3 C B@16 ~@2 A@24>".pickRestart({
  A: "~ x ~ x", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~ x ~ x!4",
})).gain(0.46)

// drums · hihat
const hihat = s("hh").struct("<~@44 [x!4]!8 ~@28 [x!4]!2 ~@24>").gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<[x!8]!14 ~@2 [x!8]!44 ~@4 [x!8]!42>").gain(0.31)

// drums · china
const china = s("cr").struct(`<
  ~@12 A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@27
>`.pickRestart({
  A: "x",
})).gain(0.46)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@12 A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@27
>`.pickRestart({
  A: "x",
})).gain(0.46)

stack(
  distortion_guitar, bass, lead_2_sawtooth, overdriven_guitar, overdriven_guitar_soft, lead_1_square, piano, kick,
  snare, hihat, open_hat, china, ride_bell
)

More by Nine Inch Nails