Strudelify

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: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B A B C D E@2 F G H I J@2 C D K L H M N O A D P D Q@2 R@2 S T S U V W V X Y Z Y Z AA AB AA AC A AD K L AE@2 AF@2 C L
  AG L AH W AI AJ S T S U V W V X Y Z Y Z AA AB AA AC A AD K L AE@2 AF@2 C L AG L AH W AI AJ C D E@2 F G H I J@2 C D K L
  H M N O A D P D Q@2 R@2 A AD K L AK AL AF@2 C L AG L AH W AI AJ A AD K L AE@2 AF@2 C L AG L AH W AI AJ C D AM ~@7
>`.pickRestart({
  A: "g1 ~@3 g1 ~@3 g1@5 ~@2 g1", B: "~@3 g1 ~@3 g1 g1@2 ~@2 g1 ~@3", C: "g1 ~@3 g1 ~@3 g1@4 ~@3 g1",
  D: "~@3 g1@2 ~@2 g1 g1@2 ~@2 g1@2 ~@2", E: "[g1 ~@3 g1 ~@3 g1@4 ~@3 g1@2 ~@2 g1@2 ~@2 g1 g1@2 ~@2 g1@3 ~]/2",
  F: "c2@2 ~@2 c2 ~@3 c2@4 ~@3 g1", G: "~@3 g1@2 ~@2 g1 g1@2 ~@2 g1 ~@3", H: "b1 ~@3 b1 ~@3 b1@5 ~@2 e1",
  I: "~@3 e1 ~@3 e1 e1@2 ~@2 e1 ~@3", J: "[a1 ~@3 a1 ~@3 a1@5 ~@2 d2@2 ~@2 d2@2 ~@2 d2 d2@2 ~@2 d2@2 ~@2]/2",
  K: "c2 ~@3 c2 ~@3 c2@5 ~@2 g1", L: "~@3 g1 ~@3 g1 g1@2 ~@2 g1@2 ~@2", M: "~@3 e1@2 ~@2 e1 e1@2 ~@2 e1@2 ~@2",
  N: "a1 ~@3 a1 ~@3 a1@5 ~@2 d2", O: "~@3 d2@2 ~@2 d2!2 ~@3 d2 ~@3", P: "c2 ~@3 c2 ~@3 c2@4 ~@3 g1",
  Q: "[b1@2 ~@2 b1 ~@3 b1@5 ~@2 e2@2 ~@2 e2@2 ~@2 e2 e2@2 ~@2 e2@2 ~@2]/2",
  R: "[a1 ~@3 a1 ~@3 a1@5 ~@2 d2@2 ~@2 d2 ~@3 d2 d2@2 ~@2 d2@2 ~@2]/2", S: "b1 ~@3 b1 ~@3 b1@5 ~@2 b1",
  T: "~@3 b1@2 ~@2 b1 b1@2 ~@2 b1 ~@3", U: "~@3 b1@2 ~@2 b1 b1@2 ~@2 b1@2 ~@2", V: "e2 ~@3 e2 ~@3 e2@4 ~@3 e2",
  W: "~@3 e2 ~@3 e2 e2@2 ~@2 e2@2 ~@2", X: "~@3 e2@2 ~@2 e2 e2@2 ~@2 e2@2 ~@2", Y: "a1 ~@3 a1 ~@3 a1@4 ~@3 a1",
  Z: "~@3 a1 ~@3 a1 a1@2 ~@2 a1 ~@3", AA: "d2 ~@3 d2 ~@3 d2@4 ~@3 d2", AB: "~@3 d2 ~@3 d2 d2@2 ~@2 d2 ~@3",
  AC: "~@3 d2 ~@3 d2 d2@2 ~@2 d2@2 ~@2", AD: "~@3 g1 ~@3 g1 g1@3 ~ g1@2 ~@2",
  AE: "[b1@2 ~@2 b1 ~@3 b1@5 ~@2 e2@2 ~@2 e2@2 ~@2 e2!2 ~@3 e2@2 ~@2]/2",
  AF: "[a1 ~@3 a1 ~@3 a1@5 ~@2 d2@2 ~@2 d2@2 ~@2 d2!2 ~@3 d2@2 ~@2]/2", AG: "c2@2 ~@2 c2 ~@3 c2@5 ~@2 g1",
  AH: "b1 ~@3 b1 ~@3 b1@4 ~@3 e2", AI: "a1 ~@3 a1 ~@3 a1@4 ~@3 d2", AJ: "~@3 d2@2 ~@2 d2 d2@2 ~@2 d2@2 ~@2",
  AK: "b1@2 ~@2 b1 ~@3 b1@5 ~@2 e2", AL: "~@3 e2@2 ~@2 e2!2 ~@3 e2@2 ~@2", AM: "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 E@2 F@2 G@2 H@2 ~@16 I@2 J@2 K@2 L M N O P@2 Q@2 R S ~@16 I@2 J@2 K@2 L M N O P@2 Q@2 R S ~@18
  E@2 F@2 G@2 H@2 I@2 J@2 K@2 L M N O P@2 Q@2 R S I@2 J@2 K@2 L M N O P@2 Q@2 R S ~@10
>`.pickRestart({
  A: "[c5@2 b4@2 a4@2 b4@4 e5@3 ~ e5 ~]/2", B: "[e5@4 d5@4 c5@3 ~ d5@13 ~@3 d5@2 ~@2]/2",
  C: "[d5@2 e5@2 f#5@2 e5@4 d5@4 a4 ~]/2", D: "[a4@4 b4@4 c5@3 ~ e5@8 d5@7 ~ d5@3 ~]/2",
  E: "[c5@4 b4@4 a4@3 ~ b4@7 ~ e5@7 ~ e5@2 ~@2]/2", F: "[e5@2 d5@2 c5@2 d5@7 ~ d5 ~]/2",
  G: "[d5@4 e5@4 f#5@4 e5@8 d5@8 a4 ~@3]/2", H: "[a4@4 b4@4 c5@3 ~ e5@7 ~ d5@6 ~@6]/2",
  I: "[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",
  J: "[e5@2 d5@2 c5@2 d6@9 ~, e6@6 d5@3 ~@7]/2", K: "[[d5,f#5]@11 ~ [e5,g5]@17 ~@3]/2",
  L: "[c5,a5]@3 ~ [d5,b5]@3 ~ [e5,c6]@3 ~ [d5,b5]@3 ~", M: "[c5,a5] ~ [d5,b5]@3 ~ [e5,c6]@4 ~@6",
  N: "c5@2 b4@2 a4@2 ~ b5, ~@3 b4, ~@13 a5@2 ~", O: "c6@2 ~@2 b5 ~@3 a5 ~@3 g5@2 ~@2",
  P: "[e5@4 d5@4 c5@4 d6@17 ~@3, e6@12 d5@7 ~@13]/2", Q: "[[d5,f#5]@11 ~ [e5,g5]@18 ~@2]/2",
  R: "a5@2 ~@2 [d5,b5] ~@3 c6@2 ~@2 [d5,b5]@2 ~@2, c5 ~@7 e5 ~@7", S: "[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@2 B@2 C@2 D@2 E F D@2 G H I@2 J@2 K@2 L@2 M N O P Q@2 R@2 S T A@2 B@2 C@2 D@2 E F D@2 G H I@2 J@2 K@2 L@2 M N O
  P Q@2 R@2 S T ~@26 J@2 K@2 L@2 M N O P Q@2 R@2 S T J@2 K@2 L@2 M N O P Q@2 R@2 S T ~@10
>`.pickRestart({
  A: "[f#5@20 d5@4 e5@4 f#5@3 ~]/2", B: "[f#5@5 d5 e5 f#5]/2", C: "[g5@20 e5@4 f#5@4 g5@3 ~]/2",
  D: "[g5@5 e5 f#5 g5]/2", E: "b5", F: "a5", G: "f#5", H: "g5", I: "[a5@15 ~]/2",
  J: "[~@16 c6@2 ~@2 b5 ~@3 a5 ~@3 g5 ~@3, ~@7 a5 ~@8, ~@15 b5@2 ~@15]/2", K: "[e6@6 d6@9 ~]/2",
  L: "[[d5,f#5]@11 ~ [e5,g5]@17 ~@3]/2", M: "[c5,a5]@3 ~ [d5,b5]@3 ~ [e5,c6]@3 ~ [d5,b5]@3 ~",
  N: "[c5,a5] ~ [d5,b5]@3 ~ [e5,c6]@4 ~@6", O: "~@7 b5, ~@13 a5@2 ~", P: "c6@2 ~@2 b5 ~@3 a5 ~@3 g5@2 ~@2",
  Q: "[e6@12 d6@17 ~@3]/2", R: "[[d5,f#5]@11 ~ [e5,g5]@18 ~@2]/2",
  S: "a5@2 ~@2 [d5,b5] ~@3 c6@2 ~@2 [d5,b5]@2 ~@2, c5 ~@7 e5 ~@7", T: "[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@54 ~@2 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@8 c4@14 ~ [d4,f#4]@15 ~ [b3,d4,g4], b3@15 ~@17, [d4,f#4]@6 e4@17 ~@9, ~@12 g4@19 ~ a4@29 ~@3]/4", // D G D
  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@8 c4@14 ~ [d4,f#4]@15 ~ [d4,g4] [d4,g4]@2 ~@30, b3@30 ~@33 b3@4 ~@29, [d4,f#4]@6 e4@17 ~@25, ~@12 g4@19 ~ a4@29 ~@3 b4@31 ~]/6", // D G5 D
  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