Strudelify

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: 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 C D V@6 W X@7 Y Z@8
  AA@8 AB@3 AC@2 AD@4 AE ~ AF@4 Y AG@7 W X@7 Y AG@7 W AH@8 AI@8 AJ@8 AK@7 W X@7 Y AL@3 AM@4 AN AO@2 AP@5 AQ AR@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: "[a2@4 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 ~@4 g2@8 g2@4 a2@7 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",
  W: "~@3 g2@8 g2@4 a2@8 ~",
  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@8 e2@4 g2@9",
  Z: "[~@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",
  AA: "[~@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",
  AB: "[~@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",
  AC: "[~@3 b2@4 b2@7 ~@9 e2@11 ~ e2@4 e2@9]/2",
  AD: "[~@7 b2@7 ~@5 b2@4 b2@7 ~@9 e1@12 e1@4 e1@16 b2@7 ~@5 b2@4 b2@7 ~@2]/4", AE: "~@7 a2@8 ~@9",
  AF: "[~@23 a2@8 ~@4 g2@8 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 a2@8 g2@9]/4",
  AG: "[~@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",
  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@4 g2@4 a2@8 ~@4 g2@8 g2@4 a2@8 ~@3 g2@6]/3",
  AM: "[~@2 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 ~@2]/4",
  AN: "~ g2@4 g2@2 a2@4 ~", AO: "[~@2 g2@8 g2@4 a2@8 a2@8 g2@9 ~@3 e2@6]/2",
  AP: "[~@2 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 ~]/5",
  AQ: "~@2 e2@8 e2@4 g2@9 ~", AR: "[~ e2@2 g2@4 e2@2 g2@2 a2@2 g2@2 ~@9]/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 C B A B A B A B A B A B A E F G F
  G F G F G F G F G F G F G F G F G ~ G F H F I F G ~ G F H F I F G ~ G F H F G F G F G F G F G F G F G F G F G F G F G
  F G F G F G F G F G F I F G ~ G F H F I F G ~ G F H F I F G ~ G F G F G F G F G F G F G F G F G J K J K J K J K J K J
  K J K J ~
>`.pickRestart({
  A: "x ~ x", B: "~ x ~", C: "~@2 x", D: "x", E: "~@8 x ~@14 x", F: "~@5 x ~@2", G: "~@7 x ~@15 x", H: "~@23 x",
  I: "~@7 x ~@16", J: "~@7 x ~@4", K: "~@3 x ~@7 x",
})).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 H I J I
  J I J I J I J I J I J I J I J K J L J I M I N I J O J I P I N Q J L J I M I J I J I J I J I J I J I J I J I J I J I J
  I J I J I J I J I R I N I J O J I P I N Q J L J I M I N I J O J I J I J I J I J I J I J I J I J S T U T U T U T U T U
  T U T U ~
>`.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: "x ~@4 x ~@2",
  I: "~@7 x ~@15 x", J: "~@5 x ~@2", K: "~@3 x ~@3 x ~@3 x ~@11 x", L: "~@7 x ~@7 x ~@7 x", M: "~@7 x ~@3 x ~@3 x ~@8",
  N: "~@15 x ~@7 x", O: "~@7 x ~@7 x ~@3 x ~@3 x", P: "~@7 x ~@7 x ~@8", Q: "~@3 x ~@3 x ~@15 x",
  R: "~@11 x ~@3 x ~@3 x ~@4", S: "~@7 x ~@14 x ~", T: "~@7 x ~@4", U: "~@3 x ~@7 x",
})).gain(0.51)

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

stack(bass, kick, snare, splash)

More by R.E.M.