Strudelify

Fall On Me

R.E.M.

KeyD minorTempo107 bpm
0:00/0:00
// Fall On Me — R.E.M.
// 107.1 bpm, 3/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 100 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 · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/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(`<
  ~@5 A B@2 C@2 D@2 E@2 B@2 F G H@2 I J K L M@2 N@2 O P Q@2 C@2 D@2 E@2 B@2 C@2 R@2 S@2 T U M@2 N@2 V J K W@2 X Y@7 Z@8
  AA@6 AB@6 AC@8 AD@2 AE@2 AF@3
>`.pickRestart({
  A: "c2 a2 d1@3 d1", B: "[d1@4 a1@3 a1 a1@4]/2", C: "[d1@3 d1 d1@4 a1@3 a1]/2", D: "[a1@4 d1@3 d1 d1@4]/2",
  E: "[a1@3 a1 a1@4 d1@3 d1]/2", F: "d2@3 d2 g2@2", G: "~ g2 c2@3 c2", H: "[c2@3 d2 d2@3 ~@3 c2@2]/2",
  I: "g2@9 ~@7 g2@4 g1@4", J: "a1 b1 c2@3 c2", K: "d2@3 d2 f2@2", L: "~ f2 g2 g1 a1 b1",
  M: "[c2@6 c2@2 d2@6 d2@2 f2@5 ~ f2@2]/2", N: "[g2 g1 a1 b1 c2@3 c2 d2@3 d2]/2", O: "f2@5 ~ f2@2 g2@4",
  P: "~@4 f2@5 ~ f2@2", Q: "[f2@5 ~@3 a1@6 a1@2 a1@2 a1@2 g1@2 d1@2]/2", R: "[a1@16 d2@12 d2@4 g2@9 ~@3 g2@4]/2",
  S: "[c2@3 c2 c2@3 d2 d2@3 ~]/2", T: "~ c2 g2", U: "~@2 g2 g1 a1 b1", V: "f2@5 ~ f2@2 g2@2 g1@2",
  W: "[~@4 f2@4 g2@9 ~@6 f2@10 ~@2 f2@4 f2@9]/2", X: "~@7 a1@12 a1@4 a1",
  Y: "[~@3 a1@4 g1@4 d1@4 a1@16 a1@16 f1@16 f1@16 a1@16 a1@16 g1@16 g1@16 a1@16 a1@9]/7",
  Z: "[~@7 f1@16 f1@16 d2@12 ~@4 d2@12 ~@4 g1@16 g1@16 d2@12 d2@4 g2@9 ~ g2@2 g2@4 c2@12 c2@4 c2@12 d2@4 d2@12 d2@4 g2@8 g2]/8",
  AA: "[~@3 g2@4 c2@12 c2@4 c2@12 d2@4 d2@12 d2@12 ~@8 c2@8 g2@8 g2@4 g1@4 a1@4 b1@4 c2@12 c2@4 d2@12 d2@4 f2@9]/6",
  AB: "[~@3 f2@4 g2@4 g1@4 a1@4 b1@4 c2@12 c2@4 d2@12 d2@4 f2@10 ~@2 f2@4 g2@4 g1@4 a1@4 b1@4 c2@12 c2@4 d2@12 d2@4 f2@10 ~@2 f2@4 g2@9]/6",
  AC: "[~@7 f2@10 ~@2 f2@4 f2@10 ~@6 a1@12 a1@4 a1@4 a1@4 g1@4 d1@4 c2@12 c2@4 d2@12 d2@4 f2@10 ~@2 f2@4 g2@4 g1@4 a1@4 b1@4 c2@12 c2@4 d2@12 d2@4 f2@10 ~@2 f2@4 g2@4 g1@4 a1]/8",
  AD: "[~@3 b1@4 c2@12 c2@4 d2@12 d2@4 f2@9]/2", AE: "[~@3 f2@4 g2@9 ~@7 f2@10 ~@2 f2@4 f2@9]/2",
  AF: "[~@7 a1@12 a1@4 a1@4 a1@4 g1@4 d1@24 ~@13]/3",
})).s("gm_synth_bass_2").gain(0.51)

// chords · electric guitar clean
const electric_guitar_clean = note("<A B C@2 D ~@95>".pickRestart({
  A: "b3 c4 g4 e4 c4 a4", B: "g4 b3!2 c4 g4 e4",
  C: "[c4 a4 g4 b3 [b3,c4] [c4,e4,g4] [e4,g4] [c4,e4] [c4,a4] [g4,a4] [b3,g4] b3, ~@20 c3@17 ~@11]/2", // Cmaj7 C Em C F Gsus2 Em
  D: "[b3,c4] [c4,e4,g4]@2 ~@3, ~@4 c3@17 ~@3", // Cmaj7 C
})).s("gm_electric_guitar_clean").gain(0.51)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B A ~@7 C D E D E D E D E D E D E D E D E D
  E D E D ~@8 E D F ~@7 C D E ~@2
>`.pickRestart({
  A: "~ x ~", B: "x ~ x", C: "~@23 x", D: "~@5 x ~@2", E: "~@7 x ~@15 x", F: "~@7 x ~@16",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A B C B C B C B C B D B C B C E F G H G@2 I G J A B C B C B C B C B C B C K C B C B D G@2 I G J F G L M N M N M N
  M O M N M N P Q M N M N M N P R@2 S R@2 T R U Q M V R@2 T R U W R X M N Y ~
>`.pickRestart({
  A: "x!2 ~@2 x ~", B: "~ x ~", C: "x ~ x", D: "x ~@6 x!2 ~ x ~", E: "~@4 x ~@6 x", F: "x!3 ~ x ~", G: "x!3",
  H: "x ~@3 x ~@2 x!2 ~ x ~", I: "x ~@2 x!2 ~ x ~ x ~@3", J: "x ~@3 x ~@3 x ~@2 x", K: "~@3 x!2 ~ x ~@5",
  L: "x ~@7 x ~@4 x ~ x ~@3 x ~@4", M: "~@7 x ~@15 x", N: "~@5 x ~@2", O: "~@15 x ~ x ~ x ~ x ~@2",
  P: "~@7 x ~@13 x ~ x", Q: "~ x ~@3 x ~@2", R: "~@7 x ~@7 x ~@7 x", S: "~@7 x ~@5 x ~ x ~@3 x ~@3 x",
  T: "~@5 x ~ x ~@3 x ~@3 x ~@7 x", U: "~@7 x ~@7 x ~@5 x ~ x", V: "~@15 x ~@7 x", W: "~@3 x ~@3 x ~@7 x ~@7 x",
  X: "~@7 x ~@5 x ~ x ~@3 x ~@4", Y: "~@7 x ~@16",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~@3 C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B ~@3 D E ~ F D E
  ~ F D E ~ F D E ~ F D E F@2 D E ~ F D E ~@3 E ~ F D E ~ F D ~@4
>`.pickRestart({
  A: "~ x ~@4", B: "~ x", C: "~@5 x", D: "~@11 x ~@12", E: "~@19 x ~@4", F: "~ x ~@6",
})).gain(0.31)

// drums · lt
const lt = s("lt").struct(`<
  ~@16 A B C D A C@2 E A B F D A ~@13 F D A B C E A B F D A C@2 E ~@2 G H I J K L I J K H I K@2 H I J K H I K@2 L I J G
  H I ~@3 I J G H I K@2 L ~@4
>`.pickRestart({
  A: "~ x ~ x ~@2", B: "~ x ~ x ~ x", C: "~@3 x ~ x", D: "~ x ~@3 x", E: "~ x ~@4", F: "~@5 x", G: "~@19 x ~@4",
  H: "~@3 x ~@15 x ~@4", I: "~@3 x ~@7 x ~@12", J: "~@3 x ~@7 x ~@7 x ~@4", K: "~@11 x ~@7 x ~@4", L: "~ x ~@6",
})).gain(0.31)

stack(bass, electric_guitar_clean, kick, snare, crash, lt)

More by R.E.M.