Strudelify
Bang and Blame cover art

Monster

Bang and Blame

R.E.M.

KeyG majorTempo107 bpm
0:00/0:00
// Bang and Blame — R.E.M.
// 107.1 bpm, 3/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 182 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(107.1/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, A@4 for four bars: edit a riff to change every repeat.

// bass · synth bass 2
const bass = note(`<
  A@2 B C D E@3 F G H I@2 J@2 K A@2 B C D E@3 F G H I@2 J@2 K L M N L O P Q R S T U I@2 J@2 K A@2 B V D W@6 I X@7 V Y@8
  Z@8 AA@3 AB@2 AC@4 AD ~ AE@4 V AF@7 AG X@7 V AF@7 AG AH@8 AI@8 AJ@8 AK@7 AG X@7 V AF@7 AG X@7 V AL@2
>`.pickRestart({
  A: "a2@2 ~ g2@2 g2", B: "a2!2 g2", C: "~ e2@2 e2 g2@2", D: "~ e2 g2@2 e2 g2",
  E: "[a2 g2 a2@2 ~ g2@2 g2 a2@2 ~ g2@2 g2 a2@2 a2@2]/3", F: "g2@9 ~@3 e2@8 e2@4", G: "g2@9 ~@3 e2@4 g2@8",
  H: "e2 g2 a2 g2 a2@2", I: "~ g2@2 g2 a2@2", J: "[a2@8 g2@9 ~@3 e2@8 e2@4 g2@9 ~@3 e2@4]/2", K: "g2@2 e2 g2 a2 g2",
  L: "a1!6", M: "a1!2 c2!4", N: "c2!4 a1!2", O: "g1!6", P: "g1!2 a1!4", Q: "a1!4 c2!2", R: "c2!6", S: "b1!6",
  T: "b1!2 a#1!4", U: "a#1!4 a2@2", V: "~@3 e2@8 e2@4 g2@9",
  W: "[a2@4 g2@4 a2@8 ~@4 g2@7 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 a2@8 g2@9 ~@3 e2@8 e2@4 g2@9 ~@3 e2@4 g2@8 e2@4 g2@4 a2@4 g2@4 a2@8 ~]/6",
  X: "[~@3 g2@8 g2@4 a2@8 a2@8 g2@9 ~@3 e2@8 e2@4 g2@9 ~@3 e2@4 g2@8 e2@4 g2@4 a2@4 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 a2@8 g2@9]/7",
  Y: "[~@3 e2@4 g2@8 e2@4 g2@4 a2@4 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 a2@8 g2@9 ~@3 e2@8 e2@4 g2@9 ~@3 e2@4 g2@8 e2@4 g2@4 a2@4 g2@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 c2]/8",
  Z: "[~@3 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 g1@4 g1@4 g1@4 g1@4 g1@4 g1@4 g1@4 g1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1]/8",
  AA: "[~@3 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 e1@12 e1@4 e1@16 b2@7 ~@2]/3",
  AB: "[~@3 b2@4 b2@7 ~@9 e2@11 ~ e2@4 e2@9]/2",
  AC: "[~@7 b2@7 ~@5 b2@4 b2@7 ~@9 e1@12 e1@4 e1@16 b2@7 ~@5 b2@4 b2@7 ~@2]/4", AD: "~@7 a2@8 ~@9",
  AE: "[~@23 a2@8 ~@4 g2@8 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 a2@8 g2@9]/4",
  AF: "[~@3 e2@4 g2@8 e2@4 g2@4 a2@4 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 a2@8 g2@9 ~@3 e2@8 e2@4 g2@9 ~@3 e2@4 g2@8 e2@4 g2@4 a2@4 g2@4 a2@8 ~]/7",
  AG: "~@3 g2@8 g2@4 a2@8 ~",
  AH: "[~@3 g2@8 g2@4 a2@8 a2@8 g2@9 ~@3 e2@8 e2@4 g2@9 ~@3 e2@4 g2@8 e2@4 g2@4 a2@4 g2@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 g1]/8",
  AI: "[~@3 g1@4 g1@4 g1@4 g1@4 g1@4 g1@4 g1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 a#1@4 a#1@4 a#1@4 a#1@4 a#1@4 a#1@4 a#1@4 a#1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 c2]/8",
  AJ: "[~@3 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 g1@4 g1@4 g1@4 g1@4 g1@4 g1@4 g1@4 g1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 a1@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 c2@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 a#1]/8",
  AK: "[~@3 a#1@4 a#1@4 a#1@4 a#1@4 a#1@4 a#1@4 a#1@4 a2@8 ~@4 g2@8 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 a2@8 g2@9 ~@3 e2@8 e2@4 g2@9 ~@3 e2@4 g2@8 e2@4 g2@4 a2@4 g2@4 a2@8 ~]/7",
  AL: "[~@3 e2@4 g2@8 e2@4 g2@4 a2@3 g2@4 ~@18]/2",
})).s("gm_synth_bass_2").gain(0.51)

// drums · kick
const kick = s("bd").struct(`<
  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 B D B A ~ A B E B A B A B A B A B A B A F E F E
  F E F E F E F E F E F E F E F E F ~ F E G E H E F ~ F E G E H E F ~ F E G E F E F E F E F E F E F E F E F E F E F E F
  E F E F E F E F E F E H E F ~ F E G E H E F ~ F E G E H E F ~ F E F E F E F E F E F E F E F E F E F E F E F E F E F E
  F E F E ~
>`.pickRestart({
  A: "x ~ x", B: "~ x ~", C: "~@2 x", D: "x", E: "~@5 x ~@2", F: "~@7 x ~@15 x", G: "~@23 x", H: "~@7 x ~@16",
})).gain(0.51)

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

// drums · splash
const splash = s("cr").struct(`<
  A@31 B A@4 C A@3 D@2 E D@31 F D@4 G D@4 H D@5 E D@4 G D@31 I D@4 H D@5 E D@4 G D@4 H D@32 I
>`.pickRestart({
  A: "~ x ~ x ~ x", B: "~ x ~@4", C: "~ x ~ x ~@2", D: "~@3 x ~@7 x ~@7 x ~@4", E: "~@11 x ~@7 x ~@4", F: "~@19 x ~@4",
  G: "~@3 x ~@15 x ~@4", H: "~@3 x ~@7 x ~@12", I: "~ x ~@6",
})).gain(0.41)

stack(bass, kick, snare, splash)

More by R.E.M.