Strudelify

Hairspray Queen

Nirvana

KeyE minorTempo140 bpm
0:00/0:00
// Hairspray Queen — Nirvana
// 140 bpm, 4/4, key E minor. 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 4 electric bass pick (copy of ch 2 electric bass finger)
// note: Full arrangement: all 145 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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(`<
  ~@7 A@8 B C D E B C D E D F G ~@7 A@8 B C D E B C D E H I H I H I J ~@7 K@8 A@8 J ~@7 L@2 K@6 M N O P Q R S T J ~@7
  K@16 M N O P Q R S T U@8 V@2
>`.pickRestart({
  A: "[[f2,c3,f3,c4,f4]@4 [f2,c3,f3,c4,f4]@2 [f2,c3,f3,c4,f4]!5 ~@3 [f2,c3,f3,c4,f4]@6 [f2,c3,f3,c4,f4]@2 [f2,c3,f3,c4,f4]!6 ~@2 [f2,c3,f3,c4,f4]@6 [f2,c3,f3,c4,f4]@2 [f2,c3,f3,c4,f4]!5 ~@3 [f2,c3,f3,c4,f4]@6 [f2,c3,f3,c4,f4]@2 [f2,c3,f3,c4,f4]!5 [f2,c3,f3,c4,f4]@2 ~ [f2,c3,f3,c4,f4]@6 [f2,c3,f3,c4,f4]@2 [f2,c3,f3,c4,f4]!5 ~@3 [f2,c3,f3,c4,f4]@6 [f2,c3,f3,c4,f4]@2 [f2,c3,f3,c4,f4]!5 ~@3 [f2,c3,f3,c4,f4]@6 [f2,c3,f3,c4,f4]@2 [f2,c3,f3,c4,f4]!5 [f2,c3,f3,c4,f4]@2 ~ [f2,c3,f3,c4,f4]@6 [f2,c3,f3,c4,f4]@2 [f2,c3,f3,c4,f4]!5 ~@5]/8", // F5
  B: "[g#3,g#4] [d3,d4] ~ [a3,a4] [d#3,d#4] ~ [a#3,a#4] [e3,e4]", // G# D A D# A# E
  C: "[b3,b4] [f3,f4]!2 [c4,c5] [f#3,f#4] [c#4,c#5] [e4,e5]@2", D: "[c3,g3,c4,g4,c5]",
  E: "[c3,g3,c4,g4,c5] [b2,f#3,b3,f#4,b4]!2 [a2,e3,a3,e4,a4]!2 [b2,f#3,b3,f#4,b4]!2 [a2,e3,a3,e4,a4]", // C5 B5 A5 B5 A5
  F: "[b2,f#3,b3,f#4,b4]", G: "[a2,e3,a3,e4,a4] ~@15", H: "[c2,g2,c3,g3,c4]",
  I: "[c2,g2,c3,g3,c4] [b1,f#2,b2,f#3,b3]!2 [a1,e2,a2,e3,a3]!2 [b1,f#2,b2,f#3,b3]!2 [a1,e2,a2,e3,a3]", // C5 B5 A5 B5 A5
  J: "[a1,e2,a2,e3,a3] ~@15", K: "[e2,b2,e3,b3,e4]/2", L: "[~ [e2,b2,e3,b3,e4]@15]/2",
  M: "[a1,a2] [c2,c3] [f2,f3] [f#2,f#3] [d#2,d#3] [a2,a3] [g#2,g#3]!2", // A C F F# D# A G#
  N: "[c#3,c#4] [a2,a3] [g2,g3] [d3,d4] [c#3,c#4] [d3,d4] [g#2,g#3] ~", // C# A G D C# D G#
  O: "[d3,d4] [f3,f4] [a2,a3] [g#3,g#4] [d3,d4] [d#3,d#4] [g#2,g#3] [f#3,f#4]", // D F A G# D D# G# F#
  P: "[c3,c4] [d#3,d#4] [g#2,g#3] [c#3,c#4] [a2,a3] [c4,c5] [g#3,g#4] [b3,b4]", // C D# G# C# A C G# B
  Q: "[g#3,g#4] [b3,b4] [f#2,f#3] [d3,d4] [g#3,g#4] [d#2,d#3] [g#3,g#4] [a3,a4]", // G# B F# D G# D# G# A
  R: "[g#3,g#4] [b3,b4] [g#2,g#3] [a3,a4] [c#3,c#4] [g#3,g#4] [g2,g3] [f#3,f#4]", // G# B G# A C# G# G F#
  S: "[c#3,c#4] [b3,b4] [d#3,d#4] [d3,d4] [c#3,c#4] [d3,d4] [a#2,a#3] [b2,b3]", // C# B D# D C# D A# B
  T: "[a#2,a#3] [c#3,c#4] [c3,c4] [g#2,g#3] [a#2,a#3] [g#2,g#3] [a#2,a#3] [b2,b3]", // A# C# C G# A# G# A# B
  U: "[a1,e2,a2,e3,a3] [g#1,d#2,g#2,d#3,g#3]!2 [g1,d2,g2,d3,g3]!2 [f#1,c#2,f#2,c#3,f#3]!2 [f1,c2,f2,c3,f3]", // A5 G#5 G5 F#5 F5
  V: "[e1,b1,e2,b2,e3]/2", // E5
})).s("gm_overdriven_guitar").gain(0.64)

// bass · electric bass finger
const bass = note("<A B C@3 D@58 E@8 D@16 E@8 F G@7 D@8 E@16 F G@7 H@8 E@2>".pickRestart({
  A: "~@4 d2 d1 f1@2", B: "g2@4 ~ d2@4 d2@2 d1@2 f1@3",
  C: "[~@2 a#2@4 d2@4 d2@2 d1@2 f1@4 ~ a#2@4 d2@4 d2@2 d1@2 f1@4 a#2@4 d2@4 ~ d2@2 d1@2]/3", D: "f1@2 a#2@2 d2@2 d2 d1",
  E: "e1/2", F: "a1 g#1 g1 f#1 f1 f#1 f1 f#1", G: "f1 g#1 g1 f#1 f1 f#1 f1 f#1", H: "a1 g#1 f1 g#1 g1 e1 f1 e1",
})).s("gm_electric_bass_finger").gain(0.64)

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

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

// drums · hihat
const hihat = s("hh").struct("<~@2 A B C D@2 E@56 ~@8 E@16 ~@8 E@16 ~@16 E@8 ~@10>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@3 x ~@3 x ~@3 x", C: "~@3 x ~@3 x ~@4 x ~@3", D: "x!4", E: "~ x!3",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@7 A@56 ~@8 A@16 ~@8 A@16 ~@16 A@8 ~@10>".pickRestart({
  A: "x",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@63 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 B C B C B C B C A ~
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@2 x ~", C: "~ x ~@2 x ~ x ~",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct(`<
  ~@63 A B A B A B A B ~@16 A B A B A B A B ~@16 A B A B A B A B A B A B A B A B ~@18
>`.pickRestart({
  A: "~ x!7", B: "x!8",
})).gain(0.64)

stack(overdriven_guitar, bass, kick, snare, hihat, open_hat, crash, ride)

More by Nirvana