Strudelify
You Can't Hurry Love cover art

You Can't Hurry Love

You Can't Hurry Love

Ross

KeyG majorTempo200 bpm
0:00/0:00
// You Can't Hurry Love — Ross
// 200 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 162 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(200/4)

// 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, A@4 for four bars: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B A B A B A C D B E F G@2 A B D B E F G@2 A B D C H@2 G@2 I J I J K L K L M N M N O P O P Q B D B H@2 G@2 A B D B
  H@2 G@2 I J I J K L K L M N M N O P O P Q B D B H@2 G@2 A B D B H@2 G@2 A B A C D B E F G@2 A B D B E F G@2 A B D C
  H@2 G@2 Q B D B H@2 G@2 A B D B H@2 G@2 Q B D B H@2 G@2 A B D B H@2 G@2 A B R ~@7
>`.pickRestart({
  A: "g1 ~@3 g1 ~@3 g1@4 ~@3 g1", B: "~@3 g1 ~@3 g1 g1@2 ~@2 g1@2 ~@2", C: "~@3 g1@2 ~@2 g1 g1@2 ~@2 g1@2 ~@2",
  D: "c2 ~@3 c2 ~@3 c2@5 ~@2 g1", E: "b1 ~@3 b1 ~@3 b1@5 ~@2 e1", F: "~@3 e1 ~@3 e1 e1@2 ~@2 e1 ~@3",
  G: "[a1 ~@3 a1 ~@3 a1@5 ~@2 d2@2 ~@2 d2@2 ~@2 d2 d2@2 ~@2 d2@2 ~@2]/2",
  H: "[b1@2 ~@2 b1 ~@3 b1@5 ~@2 e2@2 ~@2 e2 ~@3 e2 e2@2 ~@2 e2@2 ~@2]/2", I: "b1 ~@3 b1 ~@3 b1@5 ~@2 b1",
  J: "~@3 b1@2 ~@2 b1 b1@2 ~@2 b1 ~@3", K: "e2 ~@3 e2 ~@3 e2@4 ~@3 e2", L: "~@3 e2 ~@3 e2 e2@2 ~@2 e2@2 ~@2",
  M: "a1 ~@3 a1 ~@3 a1@4 ~@3 a1", N: "~@3 a1 ~@3 a1 a1@2 ~@2 a1 ~@3", O: "d2 ~@3 d2 ~@3 d2@4 ~@3 d2",
  P: "~@3 d2@2 ~@2 d2 d2@2 ~@2 d2@2 ~@2", Q: "g1 ~@3 g1 ~@3 g1@5 ~@2 g1", R: "g1@3 ~@13",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "A.PIANO"
const piano = note("<~@4 A ~@89 A ~@57 A ~ B ~@7>".pickRestart({
  A: "[b2,d3,g3] ~@3", B: "[b2,d3,g3]@3 ~@13",
})).s("gm_piano").gain(0.56).pan(0.3)

// other · piano · "A.PIANO"
const piano_2 = note("<~@4 A ~@89 A ~@57 A ~ A ~@7>".pickRestart({
  A: "[g5,g6]@3 ~@13", // G
})).s("gm_piano").gain(0.8).pan(0.8)

// chords · acoustic guitar nylon · "A.GUITAR"
const acoustic_guitar_nylon = note(`<
  ~@6 A@2 B A C D E F A@2 B A C G H I A@2 B A C A H I C@4 G D@3 H@4 I J K L A@2 B A C D H I A@2 B A C D B I C@4 G D@3
  H@4 I J K L A@2 B A C D H I A@2 B A C D B I ~@2 A@2 B A C D E F A@2 B A C G H I A@2 B A C A H I A@2 B A C D H I A@2 B
  A C D B I A@2 B A C D H I A@2 B A C D B I ~@10
>`.pickRestart({
  A: "~@4 [b3,d4,g4] ~@7 [b3,d4,g4] ~@3", B: "~@4 [c4,e4,g4] ~@7 [c4,e4,g4] ~@3",
  C: "~@4 [b3,d4,f#4] ~@7 [b3,d4,f#4] ~@3", D: "~@4 [b3,e4,g4] ~@7 [b3,e4,g4] ~@3",
  E: "~@4 [a3,c4,e4] ~@7 [a3,c4,e4] ~@3", F: "~@4 [a3,d4,f#4] ~@7 [a3,d4,f#4] ~@3",
  G: "~@4 [b3,e4,g4] ~@7 [b3,d4,g4] ~@3", H: "~@4 [c4,e4,a4] ~@7 [c4,e4,a4] ~@3",
  I: "~@4 [d4,f#4,a4] ~@7 [d4,f#4,a4] ~@3", J: "~@4 [d4,f#4,b4] ~@7 [d4,f#4,b4] ~@3",
  K: "~@4 [d4,f#4,c5] ~@7 [d4,f#4,c5] ~@3", L: "~@4 [d4,f#4,d5] ~@7 [d4,f#4,d5] ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.48)

// chords · vibraphone
const vibraphone = note(`<
  ~@14 A@2 B@2 C@2 D@2 A@2 B@2 C@2 E@2 ~@16 F@2 G@2 H@2 I J K L G@2 H@2 M N ~@16 F@2 G@2 H@2 I J K L G@2 H@2 M N ~@18
  A@2 B@2 C@2 E@2 F@2 G@2 H@2 I J K L G@2 H@2 M N F@2 G@2 H@2 I J K L G@2 H@2 M N ~@10
>`.pickRestart({
  A: "[c5@4 b4@4 a4@3 ~ b4@7 ~ e5@7 ~ e5@2 ~@2]/2", B: "[e5@2 d5@2 c5@2 d5@7 ~ d5 ~]/2",
  C: "[d5@4 e5@4 f#5@4 e5@8 d5@8 a4 ~@3]/2", D: "[a4@4 b4@4 c5@3 ~ e5@7 ~ d5@7 ~ d5@3 ~]/2",
  E: "[a4@4 b4@4 c5@3 ~ e5@7 ~ d5@6 ~@6]/2",
  F: "[c5@4 b4@4 a4@4 ~@4 c6@2 ~@2 b5 ~@3 a5 ~@3 g5 ~@3, ~@3 b4@3 ~@2, ~@7 a5 ~@8, ~@15 b5@2 ~@15]/2",
  G: "[e5@2 d5@2 c5@2 d6@9 ~, e6@6 d5@3 ~@7]/2", H: "[[d5,f#5]@11 ~ [e5,g5]@17 ~@3]/2",
  I: "[c5,a5]@3 ~ [d5,b5]@3 ~ [e5,c6]@3 ~ [d5,b5]@3 ~", J: "[c5,a5] ~ [d5,b5]@3 ~ [e5,c6]@4 ~@6",
  K: "c5@2 b4@2 a4@2 ~ b5, ~@3 b4, ~@13 a5@2 ~", L: "c6@2 ~@2 b5 ~@3 a5 ~@3 g5 ~@3",
  M: "a5@2 ~@2 [d5,b5] ~@3 c6@2 ~@2 [d5,b5]@2 ~@2, c5 ~@7 e5 ~@7", N: "[c5,a5] ~ [d5,b5]@2 ~@2 [e5,c6]@3 ~@7",
})).s("gm_vibraphone").gain(0.56).pan(0.9)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@30 A@4 B@4 C D B@2 E F G@2 H@2 I@2 J@2 K L M N I@2 J@2 O P A@4 B@4 C D B@2 E F G@2 H@2 I@2 J@2 K L M N I@2 J@2 O P
  ~@26 H@2 I@2 J@2 K L M N I@2 J@2 O P H@2 I@2 J@2 K L M N I@2 J@2 O P ~@10
>`.pickRestart({
  A: "[f#5@20 d5@4 e5@4 f#5@3 ~]/2", B: "[g5@5 e5 f#5 g5]/2", C: "b5", D: "a5", E: "f#5", F: "g5", G: "[a5@15 ~]/2",
  H: "[~@16 c6@2 ~@2 b5 ~@3 a5 ~@3 g5 ~@3, ~@7 a5 ~@8, ~@15 b5@2 ~@15]/2", I: "[e6@6 d6@9 ~]/2",
  J: "[[d5,f#5]@11 ~ [e5,g5]@17 ~@3]/2", K: "[c5,a5]@3 ~ [d5,b5]@3 ~ [e5,c6]@3 ~ [d5,b5]@3 ~",
  L: "[c5,a5] ~ [d5,b5]@3 ~ [e5,c6]@4 ~@6", M: "~@7 b5, ~@13 a5@2 ~", N: "c6@2 ~@2 b5 ~@3 a5 ~@3 g5 ~@3",
  O: "a5@2 ~@2 [d5,b5] ~@3 c6@2 ~@2 [d5,b5]@2 ~@2, c5 ~@7 e5 ~@7", P: "[c5,a5] ~ [d5,b5]@2 ~@2 [e5,c6]@3 ~@7",
})).s("gm_string_ensemble_1").gain(0.56).pan(0.3)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@6 A@2 B@2 C@8 D@8 E@4 F@3 G@8 H@5 I@2 J K@4 L@5 M@4 N@3 G@8 H@5 I@2 J K@4 L@5 O@5 ~ A@2 B@2 C@8 D@8 P@6 J K@4 L@5
  Q@6 J K@4 L@5 O@5 ~@9
>`.pickRestart({
  A: "[[b3,d4,g4]@31 ~]/2", B: "[[c4,e4]@11 ~ [b3,d4]@19 ~, g4@31 ~]/2",
  C: "[~@8 a4@4 ~@11 b4@7 ~@2 c4@13 ~@11 a3@6 ~@2 b3@30 ~ [c4,e4]@13 b3@8 ~@7 g4@3 ~@2, b3@31 a4@30 ~@67, f#4@12 g4@20 ~@15 f#4@17 g4@55 b3@8 ~, d4@11 ~ e4@34 ~ d4@48 ~@13 d4@19 ~]/8", // C
  D: "[~@8 a4@5 ~@11 b4@7 ~ c4@15 ~@9 a3@6 ~@2 b3@30 ~@2 [c4,e4]@12 d4@8 ~@8 g4@4, b3@31 ~@17 f#4@15 ~ g4@55 ~ d4@8, [d4,f#4]@13 e4@35 d4@46 ~@14 b3@7 ~ b3@11 ~, ~@13 g4@18 ~ a4@30 ~@66]/8", // C D
  E: "[~@8 a4@4 ~@12 b4@7 ~ c4@14 ~ [d4,f#4]@15 ~ [b3,d4,g4], b3@31 ~@33, f#4@12 g4@20 a4@29 ~@3, d4@11 ~ e4@34 ~@18]/4", // D G
  F: "[[b3,d4] ~@23, f#4]/3", G: "[~@15 [b3,e4,g4]@63 ~ [c4,e4,a4]@49]/8",
  H: "[~@15 a4@16 b4@15 ~@2 c5@15 ~ d5@13 ~@3, ~@15 [d4,f#4]@62 ~@3]/5", I: "[[g4,b4], d4@15 ~]/2",
  J: "[c4,e4]@14 ~ [b3,d4]", K: "[~@15 [d4,f#4]@16 g4@16 ~ c4@14 ~ [d4,f#4], ~@15 b3@31 ~ a4@17, ~@31 e4@32 ~]/4",
  L: "[~@15 [b3,d4]@31 ~ [c4,e4]@15 ~ [b3,d4]@16 [b3,d4,f#4], ~@15 g4@63 ~@2]/5", // Bm C Bm
  M: "[~@15 [b3,g4]@15 ~ c4@15 ~ [d4,f#4]@15 ~ [b3,d4,g4], ~@15 e4@32 ~@17, ~@31 a4@31 ~@2]/4", // Em D G
  N: "[[b3,d4] ~@11, f#4]/3", // Bm
  O: "[~@15 [b3,g4]@15 ~ c4@15 ~ [d4,f#4]@15 ~ [b3,d4,g4]@4 ~@13, ~@15 e4@32 ~@33, ~@31 a4@31 ~@18]/5", // Em D G
  P: "[~@8 a4@4 ~@12 b4@7 ~ c4@14 ~ [d4,f#4]@15 ~ [d4,g4] [d4,g4]@2 ~@30, b3@31 ~@32 b3@4 ~@29, f#4@12 g4@20 a4@29 ~@3 b4@31 ~, d4@11 ~ e4@34 ~@50]/6", // D G5
  Q: "[~@15 [b3,g4]@15 ~ c4@15 ~ [d4,f#4]@15 ~ [d4,g4] [d4,g4]@3 ~@29, ~@15 e4@32 ~@16 b3@4 ~@29, ~@31 a4@31 ~@2 b4@31 ~]/6", // Em D G5
})).s("gm_string_ensemble_2").gain(0.48)

// 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 C ~@7
>`.pickRestart({
  A: "x ~@7 x ~@6 x", B: "~@3 x ~@3 x!2 ~@7", C: "x",
})).gain(0.8)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!6 ~@156>").gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  [x ~@3 x ~@3 x ~@6 x]
  [~@3 x ~@3 x!2 ~@2 x!2 ~@3]
  [x ~@3 x ~@3 x ~@6 x]
  [~@3 x ~@3 x!2 ~@2 x!2 ~@3]
  [x ~@3 x ~@3 x ~@6 x]
  [~@3 x ~@3 x!2 ~@2 x!2 ~@2 x]
  ~@156
>`).gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@6 A ~@23 A ~@11 A ~@3 A ~@15 A ~@11 A ~@3 A ~@7 A ~@33 A ~@15 A ~@25>".pickRestart({
  A: "x",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct("<[x!8]!154 ~@8>").gain(0.64)

stack(
  bass, piano, piano_2, acoustic_guitar_nylon, vibraphone, string_ensemble_1, string_ensemble_2, kick, clap, snare,
  low_tom, crash, tambourine
)

More by Ross