Strudelify

E-Bow the Letter

R.E.M.

KeyE minorTempo150 bpm
0:00/0:00
// E-Bow the Letter — R.E.M.
// 150 bpm, 3/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 214 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.

// other · cello
const cello = note(`<
  A@3 B@8 C@2 D@6 E@4 F@4 G@4 H@4 I@4 J@4 G@4 K@4 L@4 F@4 G@4 M@4 N@5 O@3 P@8 E@4 F@4 G@4 H@4 I@4 J@4 G@4 K@4 L@4 F@4
  G@4 M@4 N@5 O@3 P@8 B@8 C@2 D@6 B@8 G@4 K@4 Q@4 F@4 G@4 M@4 N@5 O@3 P@8 R@3
>`.pickRestart({
  A: "[~@5 g2@32 a2@11]/3", B: "[e2@43 g2@32 a2@10 e2@43]/8", C: "g2/2", D: "[a2@11 e2@42 g2@32 a2@11]/6",
  E: "[e2@43 c3@21]/4", F: "[g3@21 e3@21 ~ d3@21]/4", G: "[c3@21 g3@21 ~ e3@21]/4", H: "[e3@21 c3@21 ~ g3@21]/4",
  I: "[e3@21 d3@21 ~ c3@21]/4", J: "[g3@21 e3@21 ~ e3@21]/4", K: "[d3@21 c3@21 ~ g3@21]/4",
  L: "[e3@21 e3@21 ~ c3@21]/4", M: "[e3@21 d2@37 ~ d2@5]/4", N: "[e2@43 d2@37]/5", O: "[d2@5 e2@43]/3",
  P: "[d2@37 d2@5 ~ e2@42 d2@37 ~ d2@5]/8", Q: "[e3@21 e3@16 e3@5 ~ c3@21]/4", R: "[e2@43 ~@5]/3",
})).s("gm_cello").gain(0.51)

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

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

// drums · splash
const splash = s("cr").struct(`<
  A@2 B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B
  C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A
  B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B ~@10 E B C D
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D F
>`.pickRestart({
  A: "~@5 x ~@5 x ~@4", B: "x ~@10 x ~@4", C: "x ~@4 x ~@10", D: "x ~@4 x ~@5 x ~@4", E: "~@11 x ~@4", F: "~@5 x ~@10",
})).gain(0.41)

stack(cello, bass, snare, splash)

More by R.E.M.