Strudelify

tourette's

Nirvana

KeyF majorTempo175 bpm
0:00/0:00
// tourette's — Nirvana
// 175 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 "Guitar 1" overdriven guitar (copy of ch 5 "Guitar 2" distortion guitar)
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Intro - Guitar 2.
setcpm(175/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 · guitar harmonics
const guitar_harmonics = note("<~ A@4 ~@57 B@3 C D>".pickRestart({
  A: "[~@17 g3@2 ~ g3@2 ~@2 g3@2 ~@6 g3@2 ~@2 a3@2 g4@3 [f2,g3]@2 [f2,g3]@2 f2@2 ~@4 g3@2 ~@2 g3@2 ~@7, ~ f3@31, ~@47 g4@6 ~@11]/4", // Fsus2
  B: "[~@22 a5@4 a5@3 ~@5 b3@3 ~@5 a3@2 c4@2 c4@2, ~@3 g5@9 ~@3 e4@5 ~@4, ~@8 [c4,ab5] ~@3]/3", // Fm
  C: "b3@3 ~@5 gb4@2 bb4@2 db4@2 ab3@2", D: "e3 ~@7",
})).s("gm_guitar_harmonics").gain(0.32)

// chords · distortion guitar · "Guitar 2"
const distortion_guitar = note(`<
  A B@3 C ~@2 D E D E D E D E D E D E D E F@8 D E D E D E D E F@8 D E D E D E D E D E D E D E D E G@6
>`.pickRestart({
  A: "~ [bb4,d5] bb4 d5", B: "[g5@3 c6@4 c6@4 g5@4 d5@4 bb4@3 bb4@4 d5@4 [g5,c6]@11 [g5,c6]@4 d5@3]/3", C: "~ bb4@15",
  D: "[f2,c3,f3]!4 [a2,e3,a3]!4", E: "[bb2,f3,bb3]!4 [gb2,db3,gb3]!4", F: "[f2,c3,f3] ~ bb3 a3@2 a3 bb3@2",
  G: "[~@29 g2@2 ~@6 g2 ~@3 gb2@3 ~@4, [f2,c3,f3]@30 ~ g2@2 ~@3 gb2@2 g2@4 ~@6, ~@32 a2@5 ~@11]/6", // F5
})).s("gm_distortion_guitar").gain(0.64).pan(0.7)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@7 A B A B A B A B A B A B A B C@8 A B A B A B A B C@8 A B A B A B A B A B A B A B A B D@4 ~@2
>`.pickRestart({
  A: "[f1,c2,f2]!4 [a1,e2,a2]!4", B: "[bb1,f2,bb2]!4 [gb1,db2,gb2]!4", C: "[f1,c2,f2] ~@7", D: "[[f1,c2,f2]@15 ~]/4",
})).s("gm_electric_bass_pick").gain(0.8).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@8 A B@3 C B@7 D@5 E@4 B@3 C B C B F D@4 E@3 F B@3 C B@3 C G@8 D ~@5>".pickRestart({
  A: "x ~@2 x ~ x ~@2", B: "x ~@3 x!2 ~@2", C: "x!2 ~@2 x!2 ~@2", D: "x", E: "x ~@4 x ~ x", F: "x!4",
  G: "x ~ x ~ x!3 ~",
})).gain(0.54)

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

// drums · low tom
const low_tom = s("lt").struct("<~@8 A B@3 C B@7 D@9 B@3 C B C B D@9 B@3 C B@3 C E@8 D ~@5>".pickRestart({
  A: "x ~@2 x ~ x ~@2", B: "x ~@3 x!2 ~@2", C: "x!2 ~@2 x!2 ~@2", D: "x", E: "x!4",
})).gain(0.54)

// drums · hihat
const hihat = s("hh").struct("<~@6 [x!4]!2 ~@59>").gain(0.54)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A@5 B A B A B A B ~@4 A@11 C ~@4 A@3 C A@16 D ~@5>".pickRestart({
  A: "x!8", B: "x!5 ~@3", C: "x!3 ~ x ~ x ~", D: "x",
})).gain(0.54)

// drums · crash
const crash = s("cr").struct("<~@9 A@4 B C B C B C B C D@4 B@4 A@8 D@4 B@3 E A@8 B@8 D ~@5>".pickRestart({
  A: "x!4", B: "x!8", C: "x!5 ~@3", D: "x", E: "x!3 ~ x ~ x ~",
})).gain(0.54)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@21 [~@3 x ~@12]!4 ~@12 [~@3 x ~@12]!4 ~@26>").gain(0.06)

stack(guitar_harmonics, distortion_guitar, bass, kick, snare, low_tom, hihat, open_hat, crash, crash_soft)

More by Nirvana