Strudelify
All Apologies cover art

In Utero

All Apologies

Nirvana

KeyD majorTempo114 bpm
0:00/0:00
// All Apologies — Nirvana
// 114 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/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 · harpsichord · "Kurdt Kobain"
const harpsichord = note(`<
  A@2 B@2 C D E@2 F@2 G@2 F@2 G@2 F@2 G@2 F@2 H@2 I@6 J@2 K@2 F@2 G@2 F@2 G@2 F@2 G@2 F@2 H@2 I@6 L@2 M@2 N@2 O@2 P Q
  O@2 P Q O@2 P Q R@2 S@4 T@2 U@2 V@8 ~ W@4 X@6 Y ~
>`.pickRestart({
  A: "[~ f#3 g3 f#3 a3!2 g3 ~ d2 ~ g3 f#3 d4!2 c4 b3, d2@2 ~@5 f#3@2 d2@2 d2@2 ~@3]/2",
  B: "[~ f#3 [d2,g3] [d2,f#3] a3!2 g3 ~@2 f#3 g3 f#3 f#4 [d3,f#4] [d3,e4] d4, d2@2 ~@2 d2@2 ~ f#3@2 ~@7, ~@8 d2@2 ~ d2@2 ~@3]/2", // G5 D Dsus2
  C: "f#3!2 g3 f#3 a3!2 g3 f#3, d2@2 ~ d2@2 ~@3", D: "f#3!2 g3 f#3 d4!2 [a2,c4] [a2,b3], d2@2 ~ d2@2 ~@3",
  E: "[~ f#3 g3 f#3 a3!2 g3 ~@2 f#3 g3 f#3 f#4 [d3,f#4] [d3,e4] d4, d2@2 ~ d2@2 ~@2 f#3@2 ~@7, ~@8 d2@2 ~ d2@2 ~@3]/2", // D Dsus2
  F: "[~ f#3 g3 f#3 a3!2 g3 ~@2 f#3 [d2,g3] f#3 d4 [a2,d4] [a2,c4] b3, d2@2 ~ d2@2 ~@2 f#3@2 ~@7, ~@8 d2@2 ~ d2@2 ~@3]/2", // G5 D5 Am
  G: "[~ f#3 g3 f#3 a3!2 g3 ~ d2 f#3 g3 f#3 d4!2 [a2,c4] b3, d2@2 ~ d2@2 ~@2 f#3@2 d2@2 d2@2 ~@3]/2", // Am
  H: "[d2@2 [d2,f#3]@2 g3@2 [d2,f#3]@2 [d2,a3]@2 a3@2 g3@2 ~@2 d2@2 f#3@2 g3@2 [d2,f#3]@2 [d2,d4]@2 [d3,f#4] ~ [a2,d3,f#4] e4 [a2,d3,g3] ~, ~@8 d3 ~@5 f#3@4 d2@4 ~@2 g3 ~ d4@2 ~@2 b3@2]/2", // D D5 D Dsus4
  I: "[g2,d3] ~ [g2,d3] ~ [g2,d3,g3,b3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3,g3,b3] ~ [g2,d3] ~", J: "[a2,e3,a3]/2",
  K: "[[a2,e3,a3]@23 ~@5 [a2,d3]@3 ~]/2", L: "[[a2,e3,a3,a4]@20 ~@2 e3@4 ~@2 c#4@3 ~]/2",
  M: "[[a2,e3]@20 ~@2 c#4@3 ~ a3 ~ e3 ~ a3 ~]/2", N: "[[a2,e3,a3]@24 [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~]/2",
  O: "[f#3 ~ f#3 ~ d2@2 d2@2 a3 ~ a3 ~ g3 ~@3 d2@2 f#3 ~ g3 ~ f#3 ~ d4 ~ d4 ~ c4 ~ b3 ~, d2@4 g3 ~ f#3 ~ d2@4 d2@4 ~@2 d2@4 d2@4 ~@6, ~@7 f#3@2 ~@7]/2",
  P: "f#3 ~ f#3 ~ d2@2 d2@2 a3 ~ a3 ~ [d3,g3,b3] ~ d2@2, d2@4 g3 ~ f#3 ~ d2@4 ~@2 f#3 ~", // G
  Q: "f#3 ~ f#3 ~ d2@2 f#3 ~ [d3,f#4] ~ f#4 ~ [a2,d3,e4] ~ d4 ~, d2@4 g3 ~ d2@4 ~@6", // D Asus4
  R: "[f#3 ~ f#3 ~ d2@2 d2@2 a3 ~ a3 ~ g3 ~@3 d2@2 f#3 ~ g3 ~ f#3 ~ d4 ~ [d3,d4] ~ c4 ~ b3 ~, d2@4 g3 ~ f#3 ~ d2@4 d2@4 ~@2 d2@4 d2@4 ~@6, ~@7 f#3@2 ~@7]/2", // D
  S: "f#3 ~ f#3 ~ d2@2 d2@2 a3 ~ a3 ~ g3 ~ d2@2, d2@4 g3 ~ f#3 ~ d2@4 ~@2 f#3 ~",
  T: "[[d2,f#3]@20 ~@2 d2@5 ~@3 d2 ~]/2", U: "[d2@31 ~]/2", V: "d2/8", W: "[d2@63 ~]/4", X: "[d2@95 ~]/6",
  Y: "~@8 d2 ~@7",
})).s("gm_harpsichord").gain(0.56).pan(0)

// chords · distortion guitar · "Kurdt Kobain -Guitar 2-" · G5 G G5 G G5 G G5 G …
const distortion_guitar = note(`<
  ~@24
  [[g2,d3] ~ [g2,d3] ~ [g2,d3,g3,b3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3,g3,b3] ~ [g2,d3] ~]!6
  ~@20
  [[g2,d3] ~ [g2,d3] ~ [g2,d3,g3,b3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3,g3,b3] ~ [g2,d3] ~]!6
  ~@49
>`).s("gm_distortion_guitar").gain(0.39)

// other · cello · "Kera Schaley -Cello-"
const cello = note(`<
  ~@12 A B A C A B A C A B A C ~@14 A B A C A B A C A B A C ~@12 A B A C A B A C A B A C A B A C A B A C ~@23
>`.pickRestart({
  A: "c3@11 ~@5", B: "a2@11 ~@5", C: "d3@11 ~@5",
})).s("gm_cello").gain(0.5).pan(1)

// bass · electric bass finger · "Krist Novoselic -Bass-"
const bass = note(`<
  ~@3 A B C@3 D E D E D E D E D E D E D E D E F G H I J K L@4 D E D E D E D E D E D E D E D E F G H I J K L@6 M@2 N O N
  O N O N O N O N O N O N O P@2 Q@14 R ~@8
>`.pickRestart({
  A: "~@12 d3@3 ~", B: "d2@4 ~@2 d2@3 ~ d2 ~ d2 ~ d2 ~", C: "d2@4 ~@2 d2@5 ~ d2@3 ~", D: "d2@2 ~ d2@4 ~",
  E: "d2@4 ~@2 d2@4 ~@2 a2@3 ~", F: "g1 ~ f1 ~ g1@3 ~ g1 ~ f#1@3 ~ f#1 ~",
  G: "g1 ~ f1 ~ g1 ~ g1 ~ g1 ~ e1 ~ f#1 ~ f#1 ~", H: "g1@3 ~ g1 ~ g1 ~@3 f1 ~ g1 ~ g1 ~",
  I: "g1 ~ f1 ~ g1 ~ f#1 ~ g1 ~ e1 ~ f#1@3 ~", J: "g1@3 ~ g1 ~ g1 ~ g1 ~ e1 ~ f1 ~ f#1 ~",
  K: "g1 ~ f1 ~ g1 ~ f#1 ~ g1 ~ e1 ~ f#1 ~ g1 ~", L: "[a1@27 ~@5]/2", M: "d2 ~ d2 ~@3 d2 ~@3 d2 ~ e2 ~ a1 ~",
  N: "d2 ~ d2 ~@3 d2@2 d2 ~ d2 ~ e2 ~ a1 ~", O: "d2 ~ d2 ~@3 d2@2 d2 ~ d2!2 e2 ~ a1 ~", P: "[d1@27 ~@5]/2",
  Q: "d2 ~ d2@3 ~ d2@3 ~ d2@3 ~ d2 ~", R: "d2 ~@15",
})).s("gm_electric_bass_finger").gain(0.4)

// bass · electric bass finger · "Krist Novoselic -Bass-" · soft notes
const bass_soft = note("<~@96 [~@2 d2@3 ~ d2@3 ~ d2@3 ~ d2 ~] [d2 ~ d2@3 ~ d2@3 ~ d2@3 ~ d2 ~]!6 ~@2>")
  .s("gm_electric_bass_finger").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@24 A@6 ~@2 B ~@17 A@6 ~@2 B ~@46>".pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "x",
})).gain(0.27)

// drums · snare
const snare = s("sd").struct("<~@3 A B@19 C B@6 ~ D E F B@22 ~ D E D E D B@20 ~@23>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@5 x ~ x!3 ~", D: "~ x!3", E: "x", F: "~@10 x ~ x!3 ~",
})).gain(0.27)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A B@19 C D@6 ~@4 B@16 D@6 ~@6 B@20 ~@23>".pickRestart({
  A: "~@3 x", B: "x!2 ~ x!3 ~ x", C: "x ~ x ~@3 x ~ x ~ x ~ x!3 ~", D: "~ x ~ x",
})).gain(0.27)

// drums · open hat
const open_hat = s("oh").struct("<~@82 x!5 ~@18>").gain(0.27)

// drums · high tom
const high_tom = s("ht").struct("<~@31 A ~@25 A ~ A ~ A ~@43>".pickRestart({
  A: "~ x!3",
})).gain(0.27)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B@6 C ~ C ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B@6 C ~ C ~ C ~@2 A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@23
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x",
})).gain(0.27)

stack(harpsichord, distortion_guitar, cello, bass, bass_soft, kick, snare, low_tom, open_hat, high_tom, crash)

More by Nirvana