Strudelify

It Hurts to Be in Love

Gene Pitney

KeyF♯ majorTempo130 bpm
0:00/0:00
// It Hurts to Be in Love — Gene Pitney
// 130 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 C D E F G H I J K L E F G H I J K M N O P Q R@2 S T E F G H I J K L E F G H I J K M N O P Q R@2 S T E F G H I J
  K M N O P Q R@2 S T E F U V E F U V E F U V W@3
>`.pickRestart({
  A: "f#2@3 ~ d#2@3 ~", B: "f#2@2 ~ d#2 ~ d#2 ~ f2", C: "f#2@5 ~@3 d#2@6 ~@2",
  D: "f#2@3 ~ f#2@2 d#2@2 ~@2 d#2@2 ~@2 f2 ~", E: "f#2@4 ~@2 f#2@2 c#2@4 ~@2 c#2 ~", F: "b1@5 ~ b1@2 f#2@5 ~ f#2 ~",
  G: "d#2@3 ~@3 d#2 ~ f#2@3 ~ f#2@3 ~", H: "d#2@4 ~@2 d#2 ~ f#2@3 ~ f#2@2 ~@2", I: "b1@3 ~ b1@3 ~ f#1@3 ~ f#1@3 ~",
  J: "g#1@3 ~ g#1@3 ~ c#2@3 ~ c#2@3 ~", K: "f#2@3 ~ f#2@3 ~ d#2@3 ~ d#2@3 ~", L: "f#2@3 ~ f#2@3 ~ d#2@3 ~ d#2@2 ~@2",
  M: "f#1 ~@7", N: "d#2@4 ~@2 d#2 ~ a#1@3 ~ a#1@3 ~", O: "d#2@4 ~@2 d#2@2 a#1@3 ~ a#1@3 ~",
  P: "a#1@4 ~@2 a#1@2 f1@3 ~ f1@3 ~", Q: "a#1@4 ~@2 a#1@2 f1@3 ~ f1@2 ~@2", R: "a2 ~ b2@2 ~@2 f#2@2 ~@8",
  S: "d#2@3 ~@5 c#2@3 ~@5", T: "b1@3 ~@7 c#2 ~ c#2 ~ c#2 ~", U: "d#2@4 ~@2 d#2@2 f#1@3 ~ f#1@3 ~",
  V: "d#2@4 ~@2 d#2@2 f#1@3 ~ f#1@2 ~@2", W: "[f#1@17 ~@7]/3",
})).s("gm_acoustic_bass").gain(0.53)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C D E F G H I J K L E F G H I J K ~ M@2 N@2 O@2 P Q E F G H I J K L E F G H I J K ~ M@2 N@2 O@2 P Q E F G H I J
  K ~ M@2 N@2 O@2 P Q E F R S E F R S E F R S T@3
>`.pickRestart({
  A: "~@4 [c#4,f#4] ~@3 [d#2,a#2,d#3]@4 [c#4,f#4,a#4] ~@3, [f#2,c#3,f#3]@3 ~ [c#4,g#4] ~@3", // F#5 D#5 F# F#5 C#5
  B: "[f#2,c#3,f#3]@4 [c#4,f#4] ~ [c#4,g#4] ~@3 [c#4,g#4] ~ [c#4,f#4,a#4] ~@3, ~@3 [d#2,a#2,d#3]@3 ~@2", // F#5 C#5 F# D#5
  C: "~@4 [c#4,f#4,a#4] ~@3 [d#2,a#2,d#3]@4 [c#4,a#4]@2 ~@2, [f#2,c#3,f#3]@6 ~@2 [c#4,g#4]@2 ~@2 f#4 ~@3", // F# D#5 F# F#5 C#5
  D: "[f#2,c#3,f#3]@4 [c#4,f#4] ~ [d#2,d#3,c#4,g#4]@3 ~ [d#2,a#2,d#3]@2 [c#4,f#4,a#4] ~@3, ~@6 a#2 ~@3 [c#4,g#4] ~@5", // F#5 C#sus2 D#5 F# C#5
  E: "[f#3,a#3,c#4]@3 ~@3 f#2@2 [f#3,a#3,c#4] ~@5 [f#3,a#3,c#4]@2, f#2@2 [f#3,a#3,c#4]@2 ~ [f#3,a#3,c#4]@2 ~, ~@3 f#2", // F#
  F: "[f#3,b3,d#4] ~@3 b2@2 [f#3,a#3,c#4]@4 ~@2 f#2@2 [f#3,a#3,c#4] ~, b2@2 ~ f#2@3 ~@2, ~ [f#3,b3,d#4]@2 ~@2 [f#3,a#3,c#4]@2 ~", // B F# B F#
  G: "[f#3,b3,d#4]@3 ~ [f#3,b3,d#4]@3 ~ [f#3,a#3,c#4]@4 [f#3,a#3,c#4]@2 f#2 ~, d#3@4 f#2@3 ~", // B F#
  H: "[f#3,b3,d#4]@3 ~ [f#3,b3,d#4] ~ [f#3,a#3,c#4]@2 f#2@2 [f#3,a#3,c#4]@2 f#2 ~ [f#3,a#3,c#4] ~, d#3 ~@3", // B F#
  I: "[f#3,b3,d#4]@3 ~ [f#3,b3,d#4]@2 ~@2 [f#3,b3,d#4] ~@5 [f#3,b3,d#4]@2, b2@3 b2@3 b2@2, ~@5 [f#3,b3,d#4]@2 ~", // B
  J: "[g#3,b3,d#4]@3 ~ [g#3,b3,d#4]@3 ~ [c#3,g#3,c#4,f4]@3 ~ [c#3,g#3,c#4,f4]@3 ~, g#2@7 ~@9", // G#m C#
  K: "[f#3,a#3,c#4]@3 ~ [f#3,a#3,c#4]@3 d#4 [f#3,a#3,d#4]@3 ~ [f#3,a#3,d#4]@3 ~, f#2@6 ~@2 d#2@7 ~", // F# D#m
  L: "[f#3,a#3,c#4]@3 ~ [f#3,a#3,c#4]@3 ~ [d#2,f#3,a#3,d#4]@3 ~ [d#2,f#3,a#3,d#4]@3 ~, f#2@7 ~@9", // F# D#m
  M: "[~@4 [f#3,a#3,d#4]@6 ~@4 [d#5,f#5] ~ [d#5,f#5]@2 [f5,g#5] ~@3 [f5,g#5]@3 ~@3 [f#3,a#3,d#4]@3 ~, [d#2,a#2,d#3]@14 ~@2 [d#2,a#2,d#3]@15 ~, ~@6 [f#3,a#3,d#4]@3 ~ [f#3,a#3,d#4]@3 [d#5,f#5]@3]/2", // D#m Fm D#m D#5 D#m
  N: "[~@4 [a#3,c#4,f4]@7 ~@3 [c#5,f5] ~ [c#5,f5]@2 [d#5,f#5]@2 ~@2 [d#5,f#5]@3 ~@3 [a#3,c#4,f4]@2 ~@2, [a#2,f3]@15 ~ [a#2,f3]@14 ~@2, ~@6 [a#3,c#4,f4]@3 ~ [a#3,c#4,f4]@3 [c#5,f5]@2 ~]/2", // A#m C# D#m A#m A#5 A#m C#
  O: "[a3,c#4,e4] ~ [b3,d#4,f#4] ~@3 [f#3,a#3,c#4] ~@9", P: "[d#3,a#3,d#4,f#4] ~@3 [c#3,g#3,c#4,f4] ~@3",
  Q: "[b2,d#4]@2 ~@8 [c#3,f3,g#3,c#4,f4] ~ [c#3,f3,g#3,c#4,f4] ~ [c#3,f3,g#3,c#4,f4] ~, [f#3,b3] ~@15", // B C# B5
  R: "[d#3,f#3,b3,d#4] ~ [d#3,f#3,b3,d#4]@2 ~@2 [f#2,f#3,a#3,c#4]@4 [f#3,a#3,c#4]@2 [f#3,a#3,c#4]@2 [f#3,a#3,c#4]@2, ~@2 f#2 ~@7 f#2@6", // B F#
  S: "[d#3,f#3,b3,d#4] ~ [d#3,f#3,b3,d#4]@2 ~@2 [f#3,a#3,c#4]@3 ~@3 [f#3,a#3,c#4]@2 f#2 ~, ~@3 f#2@2 [f#3,a#3,c#4] ~@2, ~@11 f#2@3 ~@2", // B F#
  T: "[[f#2,c#3,f#3,a#3,c#4,f#4]@17 ~@7]/3", // F#
})).s("gm_piano").gain(0.5)

// chords · alto sax
const alto_sax = note(`<
  ~ A B A C D E F G H@2 A C D E F G H@2 A I J K L@2 M@2 N O D E F G H@2 A C D E F G H@2 A I J K L@2 M@2 N O D E F G H@2
  A I J K L@2 M@2 N O D E P Q D E P Q D E P Q ~@3
>`.pickRestart({
  A: "f#3@3 ~ d#3@3 ~", B: "f#3@5 ~ d#3@6 ~@2 f3@2", C: "f#3@5 ~ d#3@7 ~ f3 ~",
  D: "[f#3,c#4]@8 ~@2 [f#3,c#4] ~@3 [f#3,c#4] ~", E: "[b3,d#4]@5 ~ [f#3,c#4]@9 ~", F: "d#4@7 ~ [f#3,c#4]@8, b3 ~@15",
  G: "d#4@7 ~ [f#3,c#4]@7 ~", H: "[[b3,d#4]@23 ~ [c#4,f4]@6 ~@2]/2", I: "f#3 ~@7",
  J: "d#4@4 ~@2 d#4@2 a#3 ~@3 a#3@2 ~@2", K: "d#4@5 ~ d#4@3 ~ a#3@2 d#4 ~ a#3 ~", L: "a#3@2 ~ a#3 f3 ~ f3 ~",
  M: "a3 ~ b3@2 ~@2 f#3@2 ~@8", N: "d#3@3 ~@5 c#3@3 ~@5", O: "b2@3 ~@7 c#3 ~ c#3 ~ c#3 ~",
  P: "d#3 ~ d#3@3 ~ f#3@7 ~ f#3 ~", Q: "d#3 ~ d#3@3 ~ f#3@8 ~@2",
})).s("gm_alto_sax").gain(0.57)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@11 A B ~@6 A C D@2 E@2 F@2 G H I J@2 K L@2 A B I J@3 M@2 A C D@2 E@2 F@2 G H N O P Q R S T ~ D@2 E@2 F@2 G H U V W X
  U V W X U V W X ~@3
>`.pickRestart({
  A: "f#5@4 c#6@3 ~ d#6@4 c#6@3 ~", B: "f#5@4 c#6@4 d#6@4 c#6@3 ~", C: "f#5 ~@7",
  D: "[~@14 [d#5,f#5] ~ [d#5,f#5]@2 [f5,g#5] ~@3 [f5,g#5]@3 ~ [d#5,f#5]@6, [a#3,d#4,f#4]@31 ~]/2", // D#m Fm D#m
  E: "[~@14 [c#5,f5] ~ [c#5,f5]@2 [d#5,f#5]@2 ~@2 [d#5,f#5]@3 ~ [c#5,f5]@4 ~@2, [a#3,c#4,f4,g#4]@31 ~]/2", // C# D#m C# A#m7
  F: "[a3,c#4,e4] ~ [b3,d#4,f#4] ~@3 [f#3,a#3,c#4] ~@9", G: "[d#3,a#3,d#4,f#4] ~@3 [c#3,g#3,c#4,f4] ~@3",
  H: "[b2,d#4]@2 ~@8 [c#3,f3,g#3,c#4,f4] ~ [c#3,f3,g#3,c#4,f4] ~ [c#3,f3,g#3,c#4,f4] ~, [f#3,b3] ~@15", I: "a#4",
  J: "b4 a#4", K: "b4@8 a#4@7 ~", L: "[d#5@24 c#5@7 ~]/2", M: "[d#5@3 c#5]/2", N: "~@4 c#6@3 ~ c#6@3 ~ e6@4",
  O: "d#6@4 b5@2 c#6@9 ~", P: "b5 a#5 f#5 c#6", Q: "b5@2 a#5@3 ~ f#5@8 ~@2, c#6 ~@3",
  R: "[b5,d#6]@4 [a#5,c#6]@4 [f#5,a#5]@3 ~ [d#5,f#5]@4", S: "[b5,d#6]@4 [a#5,c#6]@3 ~ f6@6 ~@2, ~@2 c#6 ~",
  T: "[a#5,c#6] [g#5,b5] [f#5,a#5] [g#5,b5] [a#5,c#6]@11 ~", U: "[a#3,c#4,f#4]@15 ~",
  V: "[b3,d#4,f#4]@5 ~ [a#3,c#4,f#4]@8 ~@2", W: "[d#5,f#5,b5] ~ [d#5,f#5,b5]@3 ~ [c#5,f#5,a#5]@8 ~@2",
  X: "[d#5,f#5,b5] ~ [d#5,f#5,b5]@3 ~ [c#5,f#5,a#5]@9 ~", // B F#
})).s("gm_rock_organ").gain(0.72)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@4 B C B C B@2 A@2 B C B C B@3 D E@4 F@2 G H B C B C B@2 A@2 B C B C B@3 D E@4 F@2 G H B C B C B@3 D E@4 F@2 G H B
  C B C B C B C B C B C I ~@2
>`.pickRestart({
  A: "x ~ x ~ x!2 ~ x", B: "x ~ x ~ x!4", C: "x ~ x!6", D: "x ~@6 x", E: "x!4", F: "x!2 ~ x ~@4", G: "x!2",
  H: "x ~@4 x!3", I: "x",
})).gain(0.62)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@19 A B C@4 ~@3 D ~@14 A B C@4 ~@3 D ~@6 A B C@4 ~@3 D ~@11 E ~@3>".pickRestart({
  A: "~@8 x!4 ~ x ~@2", B: "~@10 x!2 ~@4", C: "~ x ~@2", D: "~@5 x ~@2", E: "~@12 x!2 ~@2",
})).gain(0.19)

// drums · clap
const clap = s("cp").struct("<~@25 A@2 ~@22 A@2 ~@14 A@2 ~@6 B@8 ~@3>".pickRestart({
  A: "x!2 ~ x ~@4", B: "~ x ~ x ~ x ~ x",
})).gain(0.62)

// drums · low tom
const low_tom = s("lt").struct(`<
  A ~ B ~ B ~@7 B ~@6 B ~@5 C@2 ~ C ~@7 B ~@6 B ~@5 C@2 ~ C ~@6 B ~@5 C@2 ~ C ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@12 x!4", B: "~@14 x!2", C: "~@6 x!2",
})).gain(0.62)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A B A B ~@4 A B A B ~@4 C D C D ~@4 A B A B ~@4 A B A B ~@4 C D C D ~@4 A B A B ~@4 C D C D ~@4 A B A B A B A B A
  B A B ~@3
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", D: "x ~ x!3 ~ x!10",
})).gain(0.19)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~ B ~ B ~@7 B ~@6 C ~@5 D@2 ~ E ~@7 B ~@6 C ~@5 D@2 ~ E ~@6 C ~@5 D@2 ~ E ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@8 x!4 ~@4", B: "~@10 x ~ x!2 ~@2", C: "~@12 x!2 ~@2", D: "~@10 x!2 ~@4", E: "~@5 x ~@2",
})).gain(0.62)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@6 A ~ A ~@5 A ~ A ~@10 B C ~ A ~ A ~@5 A ~ A ~@10 B C ~ A ~ A ~@10 B C ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@7 x", B: "x!2", C: "x",
})).gain(0.62)

// drums · high tom
const high_tom = s("ht").struct("<~@2 A ~ A ~@7 A ~@23 A ~@47>".pickRestart({
  A: "~@8 x!2 ~@6",
})).gain(0.62)

// drums · crash
const crash = s("cr").struct("<~@27 A@2 ~@22 A@2 ~@14 A@2 ~@11 B A ~@2>".pickRestart({
  A: "x", B: "~ x ~@6",
})).gain(0.62)

// drums · ride
const ride = s("rd").struct("<~ A@19 ~ A@4 ~@4 A@15 ~ A@4 ~@4 A@7 ~ A@4 ~@4 A@12 ~@3>".pickRestart({
  A: "x!4",
})).gain(0.62)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@21
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!4
  ~@20
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!4
  ~@12
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!4
  ~@19
>`).gain(0.19)

stack(
  bass, piano, alto_sax, rock_organ, kick, snare, snare_soft, clap, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  ride, shaker
)

More by Gene Pitney