Strudelify
Can't Fight This Feeling cover art

1985 · Wheels Are Turnin'

Can't Fight This Feeling

REO Speedwagon

KeyA majorTempo95 bpm
0:00/0:00
// Can't Fight This Feeling — REO Speedwagon
// 95 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(95/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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.

// chords · piano · "A.PIANO 1"
const piano = note("<A B@2 C@2 D@7 E@8 F@5 G@6 H@4 I@6 J@4 K@3 L@8 M@8 G@6 H@4 I@6 J@4 N@5 ~ O@4>".pickRestart({
  A: "~@15 b4, ~@7 a4",
  B: "[~@31 b4, c#5, ~ e4@2 e4@2 e4@2 e4 a4@6 e5@2, ~@2 e5@4 e5@3 e4 e5@3 e4@3, ~@4 b4@7 e4 b4@3 a4]/2",
  C: "[~@15 b4, c#5@7 g#4, ~ e4@2 e4@2 e4@2 e4 a4 e4 a4@6, ~ e5@2 e5@5, ~@4 b4@7 e4 b4 e4@3]/2",
  D: "[~@33 c#5@2 c#5@2 c#5@2 c#5@2 c#5@2 ~@2 b4 ~@18 d5 d5@2 d5@2 d5 ~@4 c#5@2 ~ b4 ~@18 e5@2 e5 e5@2 e5@2 ~@2 d5@3 ~ d5@3, c#5@8 a4@15 b4@15 c#5@16 c#5@2, ~@2 e4@4 e4@4 e4@22 b4@11 c#5@27 d5@32 ~ e5@9, ~@4 e5@24 g#4@32 ~@3 e4@31 e4@18, ~@4 b4@2 g#4 b4@5 f#4@13 a4@14 b4@16 ~]/7",
  E: "[c#5@2 ~@3 a#4 ~@3 f#4@4 ~@3 d5 d5@2 d5@2 ~@5 c#5 ~@7 c#5@13 ~ c#5@2 c#5 ~@3 b4@2 ~ c#5@2 ~@3 b4 ~@17 d5@2 d5 ~@6 c#5@2 ~@2 b4 ~@18 e5 e5@2 e5@3 e5 ~@4 c#5@2 ~ c#5@2, ~@2 d5@12 b4 c#5@6 c#5 d5@31 a4@13 a4@25 c#5@31 d5@3 d5@3, ~@3 c#5@10 f#4@32 ~@2 e4@32 f#4@15 b4@32 ~@2, ~@4 b4@4 g#4@22 b4@24 ~@2 b4@6 ~ b4@25 d5@31 e5@9, ~@6 a#4@21 c#5@2 a4@22 c#5@6 ~@2 c#5@24 d5@2 e5@25 e4@18]/8",
  F: "[~@5 a#4 ~@9 d5@2 d5@2 d5@3 ~@26 f#5@2 f#5 f#5@2 ~@9 f#5@2 ~@2 e5 ~@12 e5, ~@2 d5@7 f#4@31 b4@29 c#5 f#5@10, ~@3 c#5@5 g#4@26 c#5 a4@18 f#5@3 e5@2 d5@22, ~@4 b4@10 c#5@8 d5 c#5@2 b4 a4@3 b4@8 c#5@27 f#5@3 e5@11 c#5@2, ~@6 a#4@24 c#5 d5@16 e4@32 ~]/5",
  G: "[f#5@2 f#5 f#5@2 ~@2 d5!2 d5@3 ~ c#5 ~@7 b4 ~@10 f#5@2 f#5@2 f#5@2 ~@6 a5@2 ~@8 e5@4 ~@28 d5 d5@2 d5@2 d5@2 d5@2 d5, ~@5 f#5@17 b4@28 g#5@32 ~@14, ~@6 e5@17 a4@29 f#5@6 e5@8 e5@30, ~@12 d5@5 d5@14 e4@31 f#5@32 ~@2, ~@7 c#5@3 c#5@9 f#5@2 g#5@2 a5@16 ~@9]/6",
  H: "[~@5 a4 ~@16 d5!2 ~@2 e5@2 ~@7 b4@2 ~@17 d5@2 d5@2 d5 d5@2 d5@2 d5, ~ c#5@27 e5 f#5@11 a4@24, ~@3 b4@29 e5@32, ~@6 a4@27 c#5@31, ~@24 d5@13 a4 b4@26]/4",
  I: "[~@5 a4 ~@15 a4 ~@32 d5 ~@2 f#5@2 f#5@2 ~@6 b4@2 ~@17 d5!2 ~@2 e5@2 ~ f#5@3, ~ c#5@15 d5@18 g#4@30 e5@7 a4@21 e5@4, ~@4 b4@14 c#5@4 a4@13 f#4@31 c#5@30, ~@6 a4@13 b4@9 c#5@27 d5@14 a4 b4@26, ~@14 f#4@16 b4@31 f#5@27 d5@8]/6",
  J: "[~@9 d5@14 d5!2 d5@2 d5 d5@2 ~@7 a4 ~@13 b4@2 ~@10 c#5, e5@3 e5@5 e5@30 a4@15 a4@2 a4@9, ~ c#5@4 c#5@29 c#5@12 c#5@4 c#5@13 ~, ~@6 f#5@29 b4@16 ~@3 b4@8 b4@2, ~@15 d5@9 d5@8]/4",
  K: "[~@10 b4 ~@2 a4 ~@18 b3@4 ~@2 c#4@10, d5@14 b3 a3@9, ~ c#5@6 c#5@29 b3@12, ~@3 b4@7 ~ b4@32 ~@5, ~@5 a4@8 ~ a4@32 ~@2]/3",
  L: "[~@22 f#4@10 f#4@12 e4 ~@3 a4@12 ~@20 f#5@4 ~@2 e5@7 ~@2 e5 ~@2 c#5 ~@3 b4 ~@2 c#5@3 ~@19 c#5, ~@4 c#4@32 ~@9 e4@16 g#4@13 a5 e5 c#5@20 e5@32, ~@12 b3@4 b3@32 ~@12 a4@5 a5 e5 b5@2 e5 c#5 e5 b5@27 c#5@2 a4@10 c#5@16 ~, ~@14 a3@32 d4@18 c#6@20 f#5@9 e5 f#5@20 a4@14, ~@20 e4@24 ~ f#4@17 e4@15 a5 e5 a5@24 b4@5 c#5 b4@17 b4@2]/8",
  M: "[~ d5!2 d5@2 d5@2 ~@2 c#5@2 ~@2 b4 b4@2 ~@16 e5@2 e5 ~@4 e5@2 ~@4 c#5 c#5@4 ~@3 a#4 ~@10 d5@2 d5 d5@2 ~@4 c#5@4 ~@19 f#5@2 f#5 f#5@2 ~@9 f#5@2 ~@2 e5 ~@12 e5, c#5@9 ~@2 c#5@19 c#5@7 c#5@6 d5@7 d5@6 g#4@25 c#5@2 b4@18 f#5@3 e5@2 d5@22, ~@7 d5@24 d5@7 d5@4 e5@15 f#4@28 a4@27 f#5@5 c#5 f#5@10, ~@16 b4@32 ~@3 c#5 b4@2 a#4@23 b4 c#5 d5@16 e4@31 c#5@2, ~@35 e5@4 ~@2 f#5@21 b4 c#5@6 d5 e5@16 c#5@29 e5@12 ~]/8",
  N: "[~@9 b4!2 ~@2 a4 a4@18 ~@15 b4@32 ~, d5@16 ~ e4 e5@4 e5@16 ~@2, ~ c#5@6 c#5@31 e4@4 e4@32 ~@6, ~@3 b4@6 ~@2 b4@29 b4@7 ~@33, ~@5 a4@8 ~@19 a4@14 a4@32 ~@2]/5",
  O: "[a4 ~ a4@6, ~ a4 ~@6, ~@3 g#4@8 ~@5]/4",
})).s("gm_piano").gain(0.37)

// bass · electric bass pick · "PICK BASS"
const bass = note(`<
  ~ A@2 B@2 C D E@2 F G H I J G H K L G M I N O P Q P R S@2 T U V W V W V X T U V W V W V X Y Z@2 AA@2 AB@2 AC AD E@2 F
  G E AE N AF P Q P R S@2 T U V W V W V X T U V W V W V X AG E@2 AH@2 AI AJ AK@3
>`.pickRestart({
  A: "a1/2", B: "f#1/2", C: "d1", D: "d1@2 e1!2", E: "a1!2", F: "b1 a#1", G: "e2@3 e2 e2@4", H: "a1 g#1",
  I: "g2@3 f#1@5", J: "b1 c#2 d2@2", K: "f#1", L: "b1 a#2", M: "a1 ~", N: "b1 c#2", O: "d2!2", P: "d2", Q: "c#2",
  R: "a1 c#2 e2 e2@5", S: "[c#2@4 d2 e2 f#2 f#2@8 e2]/2", T: "e2@3 e2 e2@3 e1", U: "e1", V: "a1@3 a1 b1@4",
  W: "d2@3 d2 d2@4", X: "c#2@3 c#2 d2@4", Y: "e2", Z: "a1@3 a1 a1@4", AA: "f#1@3 f#1 f#1@4", AB: "d1@3 d1 d1@4",
  AC: "e1@3 e1 e1@4", AD: "e1!2", AE: "g1@3 f#1@5", AF: "d2 e2", AG: "e2!2", AH: "f#1!2", AI: "d1!2", AJ: "d1@2 e1 e0",
  AK: "a0/3",
})).s("gm_electric_bass_pick").gain(0.37)

// other · piano · "HONKY TONK"
const piano_2 = note(`<
  ~ A B A ~ C D E F G H I J K H I L G H I M F N O P O Q R@2 S T U O U O U V W T U O U O U V H X Y X Z AA Z X AB E F G H
  I J F AC O P O Q R@2 S T U O U O U V W T U O U O U V H AD AE X AF AG AH AI@3
>`.pickRestart({
  A: "~@2 a4 ~@3 g#4 ~", B: "~@2 f#4 ~@3 g#4 ~", C: "~@2 a4 ~@5", D: "e4@2 d4 c#4 a3@2 b3@2", E: "e3!2 g#3!2",
  F: "f#3!2 g#3!2", G: "f#3!4", H: "a3!2 g#3!2", I: "e3!4", J: "e3@3 c#3@3 c#3@2", K: "f#3 g#3 a3!2", L: "c#3!4",
  M: "e3@3 e3@3 e3@2", N: "a3!2 a3@2", O: "a3!4", P: "g#3!4", Q: "e3@2 ~ g#3@3 g#3@2",
  R: "[a3@2 a3@2 a3 b3 c#4 c#4@8 b3]/2", S: "b3@3 b3 b3@3 e2", T: "e2", U: "e3!2 f#3!2", V: "g#3!2 a3!2",
  W: "a3@3 g#3 g#3@3 e2", X: "a4 e4 c#5 e4 g#4 e4 b4 e4", Y: "f#4 e4 a4 e4!3 b4 e4", Z: "f#4 e4 a4 e4 g#4 e4 b4 e4",
  AA: "a4 e4 c#5 e4 g#4 e4 b4 d4", AB: "d4!2", AC: "a3!2 b3@2", AD: "f#4 e4 c#5 e4 g#4 e4 b4 e4",
  AE: "a4@2 b4 c#5@9 ~@4", AF: "f#4 e4 f#4 e4 g#4 e4 g#4 b4", AG: "a4 e4 c#5 e4 g#4 e4 g#4 b4",
  AH: "e4@2 d4 c#4 b3@2 b3@2", AI: "c#4/3",
})).s("gm_piano").gain(0.37)

// drums · kick
const kick = s("bd").struct("<~@7 [x!2]!21 ~ [x!2]!38 ~ [x!2]!19 ~@7>").gain(0.37)

// drums · rim
const rim = s("rim").struct("<~@7 A@21 ~ A@6 ~ A@6 ~ A@6 ~ A@9 ~ A@7 ~ A@6 ~ A@6 ~ A@2 ~ A@2 ~@7>".pickRestart({
  A: "x ~ x ~ x ~ x!2",
})).gain(0.37)

stack(piano, bass, piano_2, kick, rim)

More by REO Speedwagon