Strudelify

Oh, the Guilt

Nirvana

KeyA majorTempo154 bpm
0:00/0:00
// Oh, the Guilt — Nirvana
// 153.8 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 112 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(153.8/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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
const overdriven_guitar = note(`<
  A@4 B@3 C A@4 B@3 A B@3 A@9 D E D E D E D E B@3 A B@3 A@9 D E D E D E D E F G@3 H@4 A I@8 J@8 K@8 L@8 M@8 ~@3
>`.pickRestart({
  A: "[a2,e3,a3]!3 [g#2,d#3,g#3]@2 [g#2,d#3,g#3] [c#3,g#3,c#4]@2", B: "[a2,e3,a3]!3 ~@5",
  C: "[a2,e3,a3]!3 [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@2", D: "[a2,e3,a3]!3 [g2,d3,g3] [f#2,c#3,f#3]!4",
  E: "[c3,g3,c4]!5 [b2,f#3,b3] [g2,d3,g3]!2", F: "c#4@17 c#5@6 ~",
  G: "[c#4 c#4@2 c#4@2 c#4@2 a3@2 a3@2 a3@2 a3@2 g3@2 g3@2 g3@2 g3@3]/3",
  H: "[a3@2 a3@2 g3 a3 c4 c#4@2 c#4@2 c#4@2 c#4@2 a4@2 a4@2 a4@2 a4@2 c#5@2 c#5@2 c#5@2 c#5@3]/4",
  I: "[[a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@5 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 ~@15 [a2,e3,a3]]/8", // A5 G#5 C#5 A5 G#5 C#5 A5 G#5 …
  J: "[~@2 [a2,e3,a3]@3 [a2,e3,a3]@3 ~@15 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 ~@15 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 ~@15 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 ~@15 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 ~@15 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]]/8", // A5 G#5 C#5 A5 G#5 C#5 A5 G#5 …
  K: "[~@2 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g#2,d#3,g#3]@6 [g#2,d#3,g#3]@3 [c#3,g#3,c#4]@6 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g2,d3,g3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [c3,g3,c4]]/8", // A5 G#5 C#5 A5 G#5 C#5 A5 G#5 …
  L: "[~@2 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [b2,f#3,b3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g2,d3,g3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [b2,f#3,b3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g2,d3,g3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [b2,f#3,b3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g2,d3,g3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [b2,f#3,b3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g2,d3,g3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [c3,g3,c4]]/8", // C5 B5 G5 A5 G5 F#5 C5 B5 …
  M: "[~@2 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [b2,f#3,b3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g2,d3,g3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [b2,f#3,b3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g2,d3,g3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [b2,f#3,b3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [g2,d3,g3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [b2,f#3,b3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 ~@16]/8", // C5 B5 G5 A5 G5 F#5 C5 B5 …
})).s("gm_overdriven_guitar").gain(0.64)

// bass · electric bass finger
const bass = note(`<
  ~@4 A@3 B C@4 A@3 C A@3 C@9 D E D E D E D E A@3 C A@3 C@9 D E D E D E D E A@3 B A@3 B C F@8 G@8 H@8 I@8 J@8 ~@3
>`.pickRestart({
  A: "a1!3 ~@5", B: "a1!3 a1@2 a1 a1@2", C: "a1!3 g#1@2 g#1 c#2@2", D: "a1!3 g1 f#1!4", E: "c2!5 b1 g1!2",
  F: "[a1@3 a1@3 a1@3 g#1@5 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 ~@15 a1]/8",
  G: "[~@2 a1@3 a1@3 ~@15 a1@3 a1@3 a1@3 ~@15 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 ~@15 a1@3 a1@3 a1@3 ~@15 a1@3 a1@3 a1@3 ~@15 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1]/8",
  H: "[~@2 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g#1@6 g#1@3 c#2@6 a1@3 a1@3 a1@3 g1@3 f#1@3 f#1@3 f#1@3 f#1@3 c2]/8",
  I: "[~@2 c2@3 c2@3 c2@3 c2@3 b1@3 g1@3 g1@3 a1@3 a1@3 a1@3 g1@3 f#1@3 f#1@3 f#1@3 f#1@3 c2@3 c2@3 c2@3 c2@3 c2@3 b1@3 g1@3 g1@3 a1@3 a1@3 a1@3 g1@3 f#1@3 f#1@3 f#1@3 f#1@3 c2@3 c2@3 c2@3 c2@3 c2@3 b1@3 g1@3 g1@3 a1@3 a1@3 a1@3 g1@3 f#1@3 f#1@3 f#1@3 f#1@3 c2@3 c2@3 c2@3 c2@3 c2@3 b1@3 g1@3 g1@3 a1@3 a1@3 a1@3 g1@3 f#1@3 f#1@3 f#1@3 f#1@3 c2]/8",
  J: "[~@2 c2@3 c2@3 c2@3 c2@3 b1@3 g1@3 g1@3 a1@3 a1@3 a1@3 g1@3 f#1@3 f#1@3 f#1@3 f#1@3 c2@3 c2@3 c2@3 c2@3 c2@3 b1@3 g1@3 g1@3 a1@3 a1@3 a1@3 g1@3 f#1@3 f#1@3 f#1@3 f#1@3 c2@3 c2@3 c2@3 c2@3 c2@3 b1@3 g1@3 g1@3 a1@3 a1@3 a1@3 g1@3 f#1@3 f#1@3 f#1@3 f#1@3 c2@3 c2@3 c2@3 c2@3 c2@3 b1@3 g1@3 g1@3 a1@3 a1@3 a1@3 ~@16]/8",
})).s("gm_electric_bass_finger").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@3 B A@3 C A@3 B A@3 B@4 C B@3 C D E D F D E D G A@3 B A@3 B@4 C B@3 C D E D G D E D G A@3 B A@3 B A H I J I@3 J
  I@3 K I@3 K@4 J K@3 J L M L N L M L N L M L N L M L O ~@4
>`.pickRestart({
  A: "x!2 ~@6", B: "x!2 ~ x ~ x ~@2", C: "x!2 ~ x ~@4", D: "x!2 ~ x!3 ~ x", E: "x ~@2 x ~@5 x ~@2 x ~@2 x ~@3 x ~@4",
  F: "x!2 ~ x!2 ~@2 x", G: "x!2 ~ x!2 ~@3", H: "x ~@2 x ~@19 x", I: "~@2 x ~@20 x", J: "~@2 x ~@5 x ~@14 x",
  K: "~@2 x ~@5 x ~@5 x ~@8 x", L: "~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~@2 x", M: "~@2 x ~@5 x ~@2 x ~@2 x ~@4 x ~@3 x",
  N: "~@2 x ~@5 x ~@2 x ~@11 x", O: "~@2 x ~@5 x ~@2 x ~@12",
})).gain(0.64)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A@3 B A@3 B A@3 B A@3 B C@3 D C@3 D C@7 E A@3 B A@3 B C@3 D C@3 D C@3 E C@3 E A@3 B A@3 B A F G H G@3 H G@3 H G@3
  H@9 I@3 J I@3 J I@3 J I@3 J K ~@3
>`.pickRestart({
  A: "x!2 ~@2", B: "x ~@2 x ~@4", C: "x!4", D: "x!3 ~", E: "x ~ x ~ x!4", F: "x ~@5 x ~@16 x", G: "~@5 x ~@17 x",
  H: "~@8 x ~@14 x", I: "~@5 x ~@5 x ~@5 x ~@5 x", J: "~@5 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x", K: "~@2 x ~@2 x ~@18",
})).gain(0.64)

stack(overdriven_guitar, bass, kick, snare, crash)

More by Nirvana