Strudelify

Very Ape

Nirvana

KeyG minorTempo156 bpm
0:00/0:00
// Very Ape — Nirvana
// 156 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "Pat Smear(lead 1squareGuitar 2)" named as a guitar, played on overdriven guitar (its lead 1 square patch is not one)
// note: duplicate parts dropped: ch 6 "Kurt Cobain(overGuitar 3)" overdriven guitar (copy of ch 2 "Pat Smear(lead 1squareGuitar 2)" overdriven guitar)
// note: Full arrangement: all 73 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): Pat Smear(lead 1squareGuitar 2).
setcpm(156/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · overdriven guitar · "Kurt Cobain(overGuitar 1)"
const overdriven_guitar = note(`<
  A B C D E F@2 C G D G F H F I J K F L M G D G F H F I J N O@3 P Q R Q R Q R Q S M G C G D G F H F I J N O@3 P Q R Q R
  Q R Q R Q R Q R Q R Q T
>`.pickRestart({
  A: "~@2 [g2,d3]@2 [a2,e3]@2 [a2,e3]@2 [d3,g3,b3] ~ [g2,d3]@2 [bb2,f3]@2 [bb2,f3]@2", // G5 A5 G G5 Bb5
  B: "f3 [g2,d3] [a2,e3]!2 f3 [g2,d3] [bb2,f3]!2", // G5 A5 G5 Bb5
  C: "[e2,a2,d3,g3,b3] ~ [g2,d3]@2 [a2,e3]@2 [a2,e3]@2 [e2,a2,d3,g3,b3] ~ [g2,d3]@2 [bb2,f3]@2 [bb2,f3,d4]@2", // Em7 G5 A5 Em7 G5 Bb5 Bb
  D: "[e2,a2,d3,g3,b3] ~ [g2,d3,b3]@2 [a2,e3,db4]@2 [a2,e3,db4]@2 [e2,a2,d3,g3,b3] ~ [g2,d3,b3]@2 [bb2,f3,d4]@2 [bb2,f3,d4]@2", // Em7 G A Em7 G Bb
  E: "e2@2 g2@2 [a2,e3,db4]@2 [a2,e3,db4]@2 [e2,a2,d3,g3,b3] ~ [g2,d3]@2 [bb2,f3]@2 [bb2,f3]@2", // A Em7 G5 Bb5
  F: "[e2,a2,d3,g3,b3] ~ [g2,d3]@2 [a2,e3]@2 [a2,e3]@2 [e2,a2,d3,g3,b3] ~ [g2,d3]@2 [bb2,f3]@2 [bb2,f3]@2", // Em7 G5 A5 Em7 G5 Bb5
  G: "[e2,a2,d3,g3,b3] ~ [g2,d3,b3]@2 [a2,e3,db4,e4]@2 [a2,e3,db4,e4]@2 [e2,a2,d3,g3,b3] ~ [g2,d3]@2 [bb2,f3]@2 [bb2,f3]@2", // Em7 G A Em7 G5 Bb5
  H: "[e2,a2,d3,g3,b3] ~ [g2,d3,b3,e4]@2 [a2,e3,db4,e4]@2 [a2,e3,db4,e4]@2 [e2,a2,d3,g3,b3] ~ [g2,d3]@2 [bb2,f3]@2 [bb2,f3]@2", // Em7 A Em7 G5 Bb5
  I: "[e2,a2,d3,g3,b3] ~ [g2,d3]!2 [g2,d3]@4 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2", // Em7 G5
  J: "[g2,d3] [f2,c3] [f2,c3]@2 [f2,c3] ~ [c3,g3] [b2,gb3]", K: "[g2,d3]!2 [a2,e3]!2 ~ [g2,d3] [bb2,f3]!2",
  L: "[e2,a2,d3,g3,b3] ~ [g2,d3,b3,e4]@2 [a2,e3,db4,e4]@2 [a2,e3,db4,e4]@2 [e2,a2,d3,g3,b3] ~ [g2,d3]@2 [bb2,f3]@2 [bb2,f3,d4]@2", // Em7 A Em7 G5 Bb5 Bb
  M: "[e2,a2,d3,g3,b3] ~ [g2,d3]@2 [a2,e3]@2 [a2,e3,db4]@2 [e2,a2,d3,g3,b3] ~ [g2,d3]@2 [bb2,f3]@2 [bb2,f3,d4]@2", // Em7 G5 A5 A Em7 G5 Bb5 Bb
  N: "[g2,d3]!2 [a2,e3]!3 [g2,d3] [bb2,f3]!2", O: "[bb2,f3] [g2,d3] [a2,e3]!3 [g2,d3] [bb2,f3]!2",
  P: "[bb2,f3]@2 [g2,d3]@2 [a2,e3]@4 [a2,e3] ~ [c3,g3,c4]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2", // Bb5 G5 A5 C5 Eb5
  Q: "[eb3,bb3,eb4]!3 [g3,d4,g4] [g3,d4,g4]@2 [g2,d3] [gb2,db3]", // Eb5 G5 Gb5
  R: "[g2,d3]@2 [a2,e3]@2 [a2,e3]@4 [a2,e3] ~ [c3,g3,c4]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2", // G5 A5 C5 Eb5
  S: "[g2,d3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [e2,a2,d3,g3,b3] ~ [g2,d3]@2 [bb2,f3]@2 [bb2,f3]@2", // G5 A5 Em7 G5 Bb5
  T: "[g2,d3] [a2,e3]!3 ~@4", // G5 A5
})).s("gm_overdriven_guitar").gain(0.41)

// other · overdriven guitar · "Pat Smear(lead 1squareGuitar 2)"
const overdriven_guitar_2 = note(`<
  ~@4 A B@3 C@7 D E F B@2 C G@3 H I G J K L M@2 ~@2 N O N ~ N P Q ~@11 R S T@2 U ~@7 V ~ V ~ N ~ V W X
>`.pickRestart({
  A: "~ a4 ~@6", B: "bb4 ~@5 a4 ~", C: "bb4 ~@7", D: "~@10 e4!2 e4@2 d4!2", E: "~@2 a4@2 ~@4 a4@2 ~@2 a4 bb4@3",
  F: "bb4@2 ~@10 a4 bb4@3", G: "bb5 ~@7", H: "bb5 ~@5 a5 ~", I: "bb5@2 ~@10 a5 bb5@3", J: "~@5 e4!3", K: "eb4!2 ~@6",
  L: "~@6 a4 ~", M: "~@12 a4 bb4@3", N: "~ g4 ~@6", O: "~@3 gb5 ~@4", P: "~@5 g3 ~@2", Q: "~@3 a4@3 ~@10",
  R: "~ ab5 ~@4 a5 ~", S: "~@12 a5 bb5@3", T: "~@6 a5 ~", U: "b4 ~@7", V: "~@3 a4 ~@12", W: "~@5 [g4,b4] ~ f4",
  X: "~@2 g4 a4@4 ~@9",
})).s("gm_overdriven_guitar").gain(0.36).pan(0)

// bass · slap bass 1 · "Krist Novoselic(slap1Bass)"
const bass = note(`<
  ~@4 A B@9 C D E B@9 C D E B@3 F G H G H G H G I B@9 C D E B@3 F G H G H G H G H G H G H G H G J
>`.pickRestart({
  A: "~ g1 a1!3 g1 bb1!2", B: "bb1 g1 a1!3 g1 bb1!2", C: "bb1 g1 g1@2 g1!4", D: "g1 f1 f1@2 f1!2 c2 b1",
  E: "g1!2 a1!3 g1 bb1!2", F: "bb1@2 g1@2 a1@4 a1 ~ c2@2 eb2@2 eb2@2", G: "eb2!3 g2 g2@2 g1 gb1",
  H: "g1@2 a1@2 a1@4 a1 ~ c2@2 eb2@2 eb2@2", I: "g1 a1!4 g1 bb1!2", J: "g1 a1!3 ~@4",
})).s("gm_slap_bass_1").gain(0.41)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@6 A ~ A ~ A ~ A ~ B@2 ~@2 A ~ A ~ A ~ A ~ C B ~@14 A ~ A ~ A ~ A ~ C B ~@21
>`.pickRestart({
  A: "~ x ~@6", B: "~@11 x ~@4", C: "~@2 x ~@8 x ~@4",
})).gain(0.41)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@4 A B@8 C ~@2 A B@9 D ~@13 A B@9 D ~@22>".pickRestart({
  A: "~@2 x!6", B: "x!8", C: "x!6 ~@2", D: "x!2 ~@6",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@13 A B C D ~@9 E C F G@11 H ~@9 E C F G@19 I>".pickRestart({
  A: "~@6 x!2", B: "x!2 ~@2 x ~ x ~", C: "x ~ x!2", D: "x", E: "~@2 x!2", F: "x ~ x!6", G: "x!8", H: "x!2 ~@6",
  I: "x!4 ~@4",
})).gain(0.41)

// drums · china
const china = s("cr").struct(`<
  ~@4 A ~@9 A@2 B ~@9 A@2 B ~ C ~ D E D E D E D E ~@10 A@2 B ~ C ~ D E D E D E D E D E D E D E D E ~
>`.pickRestart({
  A: "~ x ~@2", B: "x", C: "x!2 ~@2", D: "~@2 x ~@2 x ~@2", E: "x!2 ~ x",
})).gain(0.41)

stack(overdriven_guitar, overdriven_guitar_2, bass, kick, snare, low_tom, pedal_hat, open_hat, china)

More by Nirvana