Strudelify

Radio Free Europe

R.E.M.

KeyA majorTempo150 bpm
0:00/0:00
// Radio Free Europe — R.E.M.
// 150 bpm, 3/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 183 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/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@8 B@7 C@6 D@3 E@2 F G H@2 ~@2 I@3 J K@4 B@7 L@8 M N@4 O P Q R@3 S ~@2 T@3 U@2 V@8 W@6 B@7 L@8 M N@4 O P Q R@3 S
  ~@2 T@3 U@2 V@8 X@5 Y Z AA AB Y AC@2 AB AD AE@8 N@4 O P Q R@3 S ~@2 T@3 U@2 V@8 AF@4
>`.pickRestart({
  A: "[~@7 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@7 ~ d3@3 d3@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 f#2@3 f#2@3 g#2@2 g#2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@7]/8",
  B: "[~ d3@3 d3@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 f#2@2 f#2@3 g#2@3 g#2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@7 ~ d3@2 d3@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2]/7",
  C: "[~ e2@3 e2@3 e2@2 e2@3 f#2@3 f#2@2 g#2@3 g#2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@7 ~ d3@3 d3@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2]/6",
  D: "[~ e2@3 e2@3 e2@2 e2@3 f#2@8 g#2@8 a2@7 ~ b2@7 ~ c#3@4]/3", E: "[~ d3@5 ~ a2@5 a2@7 ~@4 a2@5 b2@4]/2",
  F: "~ a2@5 ~ g#2@2 f#2@3 e2@4", G: "~ e2@5 ~ e2@2 e2@7", H: "[~ a2@5 ~ e2@5 e2@3 e2@10 ~@7]/2",
  I: "[~@7 f#2@8 g#2@8 a2@7 ~ b2@7 ~ c#3@5 d3@4]/3", J: "~ a2@5 ~ a2@7 ~@2",
  K: "[~ a2@7 ~@4 b2@7 ~@4 b2@5 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@7]/4",
  L: "[~ e2@3 e2@3 e2@2 e2@3 f#2@3 f#2@2 g#2@3 g#2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@7 ~ d3@3 d3@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 f#2@3 f#2@3 g#2@2 g#2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2]/8",
  M: "~ a2@3 a2@3 a2@2 a2@7",
  N: "[~ d3@3 d3@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 f#2@8 g#2@7]/4",
  O: "~ a2@7 ~ b2@7", P: "~ c#3@5 ~ d3@5 a2@4", Q: "~ a2@7 ~@4 a2@4",
  R: "[~ b2@5 ~ a2@5 g#2@3 f#2@2 e2@5 ~ e2@5 e2@3 e2@8 a2@5 e2@4]/3", S: "~ e2@3 e2@10 ~@2",
  T: "[~@12 f#2@8 g#2@8 a2@7 ~ b2@7 ~ c#3@4]/3", U: "[~ d3@5 ~ a2@5 a2@7 ~@13]/2",
  V: "[~ b1@3 b1@3 c#2@2 c#2@3 d2@3 d2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 a1@2 a1@3 a1@3 a1@2 a1@3 b1@3 c#2@2 d2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 a1@3 a1@3 a1@2 a1@3 a1@3 b1@2 c#2@3 d2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 a1@3 a1]/8",
  W: "[~ a1@3 a1@3 a1@2 b1@3 c#2@3 d2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 a1@2 a1@3 a1@3 a1@2 a1@3 b1@3 c#2@2 d2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@7]/6",
  X: "[~ a1@3 a1@3 a1@2 b1@3 c#2@3 d2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 a1@2 a1@3 a1@3 a1@2 a1@3 b1@3 c#2@2 d2@3 b2@7 ~ b2@7 ~@5]/5",
  Y: "~ b2@7 ~ b2@7", Z: "~@7 c#2@5 d2@4", AA: "~ e2@5 ~ f#2@5 c#2@4", AB: "~ d2@5 ~ e2@5 f#2@4",
  AC: "[~@7 b2@7 ~ b2@7 ~@6 c#2@4]/2", AD: "~ c#2@5 ~ d2@5 e2@4",
  AE: "[~ f#2@5 ~ a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@7 ~ d3@3 d3@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 f#2@3 f#2@3 g#2@2 g#2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@3 a2@3 a2@2 a2@7]/8",
  AF: "[~ a1@3 a1@3 a1@2 b1@3 c#2@3 d2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 a1@2 a1@3 a1@3 a1@2 a1@3 b1@3 c#2@2 d2@3 ~@4]/4",
})).s("gm_synth_bass_2").gain(0.51)

// other · distortion guitar
const distortion_guitar = note("<~@28 A B@3 ~@33 C@2 D@3 ~@43 C@2 D@3 ~@43 C@2 D@3 ~@17>".pickRestart({
  A: "~ e3@5 ~ e3@2 e3@7", B: "[~ a3@5 ~ e3@5 e3@3 e3@30 ~@3]/3", C: "[~@7 e3@5 e3@3 e3@8 a3@5 e3@4]/2",
  D: "[~ e3@3 e3@30 ~@14]/3",
})).s("gm_distortion_guitar").gain(0.36)

// 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 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 A B A B A B A B A B A B A B A B
  A B A B A C
>`.pickRestart({
  A: "~@7 x ~@8", B: "~ x ~@10 x ~@3", C: "~ x ~@14",
})).gain(0.51)

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

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

stack(bass, distortion_guitar, kick, snare, china)

More by R.E.M.