Strudelify

The Wake-Up Bomb

R.E.M.

KeyG majorTempo120 bpm
0:00/0:00
// The Wake-Up Bomb — R.E.M.
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 144 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// 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 B C D A B C D A B C D A B C D A B C D A B C D E@2 F G E@2 F G A B C D A B C H E@2 F G E@2 F G E@2 F G E@2 F G A B C
  D A B C D A B C D A B C D A B C D A B C H E@2 F G E@2 F G E@2 F G E@2 F G I J K L I J K L A B C D A B C D A B C H E@2
  F G E@2 F G E@2 F G E@2 F G E@2 F G E@2 F M@5
>`.pickRestart({
  A: "e2!8", B: "d2!8", C: "a1!8", D: "g1!8", E: "[c2@3 g1 g1@3 c2@2 c2@3 g1@2 b1 d2]/2", F: "d2@3 d2 d2@4",
  G: "g2 f#2@2 e2@2 d2@3", H: "g1 ~", I: "e2", J: "d2", K: "a1", L: "g1", M: "[g2 f#2@2 e2@2 d2@35]/5",
})).s("gm_synth_bass_2").gain(0.4).pan(0.4)

// other · distortion guitar
const distortion_guitar = note("<~@96 A B@2 C@2 B@2 D ~@40>".pickRestart({
  A: "~@4 e5 b4@3", B: "[d5@12 d5 c#5@3]/2", C: "[b4@12 e5 b4@3]/2", D: "b4",
})).s("gm_distortion_guitar").gain(0.4).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  A@24 B C D E B C D E A@7 E B C D E B C D E B C D E B C D E A@23 E B C D E B C D E B C D E B C D E A@19 E B C D E B C D
  E B C D E B C D E B C D E B C D E ~@4
>`.pickRestart({
  A: "x!2", B: "x ~@3 x ~@2 x", C: "x!2 ~ x!2 ~@3", D: "~ x ~ x!3 ~@2", E: "x",
})).gain(0.4).pan(0.4)

// drums · snare
const snare = s("sd").struct(`<
  A@25 B C D A B C D A@7 E A B C D A B C D A B C D A B C D A@23 E A B C D A B C D A B C D A B C D A@19 E A B C D A B C D
  A B C D A B C D A B C D A B C D ~@4
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x ~ x ~ x!2", C: "x!2 ~ x", D: "~@4 x ~@5 x!6", E: "~@2 x!2",
})).gain(0.4).pan(0.4)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@27 A ~@3 A ~@7 B ~@3 A ~@3 A ~@3 A ~@3 A ~@23 B ~@3 A ~@3 A ~@3 A ~@3 A ~@19 B ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@4
>`.pickRestart({
  A: "~@11 x!2 ~ x!2", B: "~@5 x ~@2",
})).gain(0.4).pan(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@24 A B C D A B C D ~@8 A B C D A B C D A B C D A B C D ~@24 A B C D A B C D A B C D A B C D ~@20 A B C D A B C D A B
  C D A B C D A B C D A B C D ~@4
>`.pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "x", D: "~@13 x ~@2",
})).gain(0.4).pan(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  A@2 B A@3 B A@3 B A@3 B A@3 B A@3 B A ~@8 A@2 B A@4 C ~@16 A@2 B A@3 B A@3 B A@3 B A@3 B A@4 C ~@16 A@2 B A@3 B A@3 B
  A@3 B A@4 C ~@28
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "x",
})).gain(2.01).pan(0.4)

stack(bass, distortion_guitar, kick, snare, high_tom, crash, cabasa)

More by R.E.M.