Strudelify

It's The End of the World as We Know It (and I Feel Fine)

R.E.M.

KeyC majorTempo188 bpm
0:00/0:00
// It's The End of the World as We Know It (and I Feel Fine) — R.E.M.
// 187.5 bpm, 3/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 163 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(187.5/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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.

// bass · synth bass 2
const bass = note(`<
  ~@3 A B@2 C D E@2 F G@3 H I J@3 A B@2 C D K@2 L M N O H I J@3 A B@2 C D E@2 F G@3 H I J@3 P Q R S T@2 ~@15 U@3 V W X H
  I J@3 A B@2 C D E@2 F G@3 H I J@3 P Q R S T@2 ~@15 U@3 V W X H I Y@2 ~ A B@2 C D K@2 L M N Z ~@15 AA@3 AB@2 AC
>`.pickRestart({
  A: "g2@5 g2@10 ~", B: "[~@13 a2@8 g2@5 ~ c2@5]/2", C: "c2", D: "d2 e2", E: "[f2@5 g2@5 ~ g2@10 ~@11]/2",
  F: "~@3 a2@8 g2@5", G: "[c2@5 c2@16 d2@8 e2@8 f2@5 ~ g2@5]/3", H: "g2@5 ~@3", I: "~ a2",
  J: "[g2@5 c2@5 ~ c2@16 d2@8 e2@8 f2@5]/3", K: "[f2@5 a#1@5 ~ a#1@10 a#1@11]/2", L: "a#1@5 c2@5 ~ d2@5",
  M: "a2@5 a2@9 ~@2", N: "~@5 c3@8 ~@3", O: "b2@8 ~@3 g2@5", P: "a#1@5 a#1@11", Q: "a#1@11 a#1@5",
  R: "c2@5 d2@5 ~ a2@5", S: "a2@9 ~@7", T: "[c3@8 ~@3 b2@8 ~@13]/2", U: "[~@5 c1@31 ~@12]/3", V: "e2 d2",
  W: "c2@11 e2@5", X: "b1@3 a1@2 g1@5 ~ g2@5", Y: "[g2@5 c2@5 ~ c2@16 ~@5]/2", Z: "b2 ~", AA: "[~@11 c1@31 ~@6]/3",
  AB: "[~@5 e2@8 d2@8 c2@11]/2", AC: "e2@5 b1@3 a1@3 g1@5",
})).s("gm_synth_bass_2").gain(0.51)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B C ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "x ~@10 x ~@4", B: "~@5 x ~@10", C: "x",
})).gain(0.51)

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

// drums · china
const china = s("cr").struct(`<
  ~@2 A ~@53 B C@4 D C@4 E C@4 F G C@4 H ~@26 B C@4 D C@4 E C@4 F G C@4 H ~@15 I C@4 E C@4 F G C@4 D C@5
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@8 x ~@4 x ~@2", C: "~@3 x ~@4 x ~@4 x ~@2", D: "x ~@2 x ~ x ~@2 x ~@4 x ~@2",
  E: "~@3 x ~ x ~@2 x ~@2 x ~ x ~@2", F: "~@3 x ~@4 x ~@2 x ~ x ~@2", G: "x ~@2 x ~@4 x ~@4 x ~@2",
  H: "~@3 x ~@4 x ~@7", I: "~@13 x ~@2",
})).gain(0.41)

stack(bass, kick, snare, china)

More by R.E.M.