Strudelify

Endless, Nameless

Nirvana

KeyA minorTempo120 bpm
0:00/0:00
// Endless, Nameless — Nirvana
// 120 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 45 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): Unnamed-000, Unnamed-001.
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 · overdriven guitar · "Unnamed-000"
const overdriven_guitar = note("<A ~@16 B@4 ~@24>".pickRestart({
  A: "~@4 b3@7 ~@5, f7@15 ~", B: "[a1@23 ~ d1@39 ~]/4",
})).s("gm_overdriven_guitar").gain(0.72).pan(0)

// other · guitar harmonics · "Unnamed-001"
const guitar_harmonics = note("<A@3 ~@8 B ~@6 C D ~@3 E@2 F@3 ~@17>".pickRestart({
  A: "[[g5,b5]@47 ~, b3 ~@15]/3", B: "~@8 [f4,c5,e5]@7 ~", C: "a6@15 ~", D: "~@8 g5@3 ~@5",
  E: "[~@11 f4 a3@8 e3@2 e3@2 e3@2 e3@2 e3@2 e3@2]/2", F: "[e3!2 e2@8 e2@8 ~@6]/3",
})).s("gm_guitar_harmonics").gain(0.36).pan(1)

// chords · distortion guitar · "Unnamed-001"
const distortion_guitar = note("<~@9 A B C D@5 E@3 F G@3 ~@3 H I@8 ~@9>".pickRestart({
  A: "~@8 g5@7 ~", B: "~@8 [g5,b5]@7 ~", C: "~@8 f4@7 ~", D: "~@8 [b4,d5]@7 ~", E: "[d5@47 ~]/3",
  F: "f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~", G: "[[e2,f2] [a1,b1,c2,d2] [a1,e2,b2]@7 ~ a1@31 ~ f4 ~@5, ~@2 g1 ~@45]/3",
  H: "~ e2@3", I: "[~@3 f1@28 ~]/8",
})).s("gm_distortion_guitar").gain(0.36).pan(1)

// chords · distortion guitar · "Unnamed-002"
const distortion_guitar_2 = note("<A ~@8 B C@7 D ~@2 E F@6 ~@18>".pickRestart({
  A: "c3@15 ~", B: "[a1,c2,e2]@7 ~ [a1,c2,e2]@2 [a1,c2,e2]@2 [a1,c2,e2]@2 [a1,c2,e2]@2", C: "[a1,c2,e2]!8",
  D: "d2@15 ~",
  E: "~@8 [e3,a3] [d3,e3,f3,e5,a6] [e3,f3,g3,c4] [c3,e3,f3] [f3,g3,b3,e4,g4] [f4,g4,a4] [c4,d4,e4] [e3,g3,a3]", // A5 Dm C Fmaj7 Em F C A7
  F: "[[b2,c3,d3] [c3,d3,a3,a5] [c3,c4] [c3,d4,g4] [d3,e3,f3,g3] [a3,b3,c4,d4] [e4,f4,g4,a4] [a#4,b4,c5,d5] [b4,c5,c#5] e3@32 f2@16 a1@16 a1@2 a1@2 a1@2 a1@2 ~@15, ~@9 b4 ~@86]/6", // Bm D7 C Csus2 Em7 D7 Fmaj7
})).s("gm_distortion_guitar").gain(0.72)

// chords · distortion guitar · "Unnamed-004" · Am D5
const distortion_guitar_3 = note(`<
  ~
  [[a1,c2,e2]!8]!16
  [e2@15 ~]
  [a1!8]
  [[a1,d2] a1 [a1,d2] a1 [a1,d2] a1 [a1,d2] a1]!2
  ~@24
>`).s("gm_distortion_guitar").gain(0.29).pan(0)

// chords · overdriven guitar · "Unnamed-008"
const overdriven_guitar_2 = note("<~@9 A B C D@4 E F G H I J K L M N O P Q R S T U ~@12>".pickRestart({
  A: "[a1,c2,e2]@2 [a1,c2,e2]@2 [a1,c2,e2]@2 [a1,c2,e2]@2 [a4,e5,g5]@7 ~", // Am A7
  B: "[a1,c2,e2]@2 [a1,c2,e2]@2 [a1,c2,e2]@2 [a1,c2,e2]@2 [c5,g5,b5]@7 ~", C: "[a1,c2,e2]!4 ~@4",
  D: "[a1,c2,e2]@2 [a1,c2,e2]@2 [a1,c2,e2]@2 [a1,c2,e2]@2 [e4,b4,d5]@7 ~", // Am E7
  E: "[a1,c2,e2]@2 [a1,c2,e2]@2 [a1,c2,e2]@2 [a1,c2,e2]@2 [a1,c2,e2,e4,b4,d5]@7 ~", F: "a1!4 g1!4", G: "f1!4 e1!4",
  H: "d1!4 c1!4", I: "b0!2 a0!2 a#0!4", J: "a#0!2 a0 a#0!2 c1!2 b0", K: "d1 e1 d1 b0 a0!2 a#0!2",
  L: "a#0!2 a0!2 a#0!3 a0", M: "a0 b0!2 a0!2 a#0 a0 b0", N: "c1 d1 c1 a0!2 b0 d1 e1", O: "e1 d1 b0 a0 a#0 a0 b0 c1",
  P: "c1!2 d1!3 c1 b0 a0", Q: "a#0!3 a0 c1!3 b0", R: "a0!2 a#0!3 a0 b0!2", S: "d1 g1!2 f1 e1 d1 a#0 f1",
  T: "a#0 f1 a#0 f1 a#0 f1 a#0!2", U: "f1!2 a#0 f1 ~@4",
})).s("gm_overdriven_guitar").gain(0.36)

// drums · kick
const kick = s("bd").struct("<~@9 A@20 ~ B C ~ D E C D E C D E F ~ C ~>".pickRestart({
  A: "x!8", B: "~ x ~@6", C: "~ x!2 ~", D: "~@3 x", E: "x", F: "~@2 x!2",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct("<~ A@8 B@20 C D ~ E C E F ~ E F ~ E ~ C F ~>".pickRestart({
  A: "x!8", B: "~ x", C: "x", D: "~ x ~@4 x ~", E: "~ x ~@2", F: "~@3 x",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~ [x!8]!8 ~@36>").gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 [~ x ~@2] ~@3 [~@3 x] ~@3 [~ x ~@2] ~>").gain(0.72)

// drums · crash
const crash = s("cr").struct("<~@9 A@20 B C ~@2 B ~@4 D ~@4 D ~>".pickRestart({
  A: "x!4", B: "x", C: "~ x ~@6", D: "~ x ~@2",
})).gain(0.72)

stack(
  overdriven_guitar, guitar_harmonics, distortion_guitar, distortion_guitar_2, distortion_guitar_3, overdriven_guitar_2,
  kick, snare, low_tom, mid_tom, crash
)

More by Nirvana