Strudelify

Stupid Cupid

Francis Connie

KeyB majorTempo138 bpm
0:00/0:00
// Stupid Cupid — Connie Francis
// 138 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (3/4 at bar 1, 4/4 at bar 14) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/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.

// chords · piano · "MCPI"
const piano = note(`<
  A@2 B C@6 D@4 E F G H I J K H L M N O G H@3 I J K H L M N O P Q R S@2 Q T U V H@3 I J K H L M N O P Q R S@2 Q T U V O
  G H I J K H L M N O W M N O X
>`.pickRestart({
  A: "[~@6 [f#5,f#6]@9 [c#3,g#3,c#4,e4]@9 [f#2,f#3,a#3,c#4]@8]/2", B: "~ [b2,b3,d#4,f#4]@9 [g#2,g#3,b3,d#4]@2 ~@4",
  C: "[~@4 [c#3,g#3,c#4,e4]@9 [f#2,f#3,a#3,c#4]@9 [b2,b3,d#4,f#4]@9 ~@9 [f#5,f#6]@10 [c#3,g#3,c#4,e4]@9 [f#2,f#3,a#3,c#4]@9 [f#3,b3,d#4]@7 ~@3 b4@17 ~, ~@31 [g#2,g#3,b3,d#4]@18 ~@19 b2@8 [g#3,b3,d#4]@19 ~, ~@77 [g#2,f#4]@18 ~]/6", // C#m F# B F# C#m F# B G#m …
  D: "[~@9 c#6@18 [g#2,c#4,e4,g#4]@18 ~ [f#2,a#3,c#4,f#4]@18, [c#3,g#3,c#4,f4]@7 ~@9, ~@7 c#5@19 ~@38, ~@8 [f5,g#5]@19 ~@37]/4", // C#m F# C# Fm
  E: "[f#2,f#3]!6 [g#2,g#3] [a#2,a#3]", F: "[b2,b3]@3 ~@13", G: "~@5 [f#2,f#3] [g#2,g#3] [a#2,a#3]",
  H: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~, b1!2 d#2!2 f#2!2 g#2 f#2", // B
  I: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~, a2!2 g#2!2 f#2 b1 c#2 d#2", // B
  J: "[g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~, e2!2 g#2!2 b2!2 c#3 b2", // E
  K: "[g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~, e2!2 g#2!2 b2 f#2 g#2 a#2", // E
  L: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~, b1!2 d#2!2 f#2 d#2 e2 f2", // B
  M: "[f#3,a#3,c#4,e4] ~ [f#3,a#3,c#4,e4] ~ [f#3,a#3,c#4,e4] ~ [f#3,a#3,c#4,e4] ~ [f#3,a#3,c#4,e4] ~ [f#3,a#3,c#4,e4] ~ [f#3,a#3,c#4,e4] ~ [f#3,a#3,c#4,e4] ~, f#2!2 a#2!2 c#3!2 a#2 f#2", // F#7
  N: "[e3,g#3,b3,d4] ~ [e3,g#3,b3,d4] ~ [e3,g#3,b3,d4] ~ [e3,g#3,b3,d4] ~ [e3,g#3,b3,d4] ~ [e3,g#3,b3,d4] ~ [e3,g#3,b3,d4] ~ [e3,g#3,b3,d4] ~, e2!2 g#2!2 b2 f#2 g#2 a#2", // E7
  O: "[b1,b2,f#3,b3,d#4] ~@7", P: "~@5 [b1,b2] [c#2,c#3] [d#2,d#3]",
  Q: "[g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~, e2@2 ~ g#2 b2 ~ g#2 b2", // E C#m E
  R: "[g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,b3,c#4,e4] ~ [g#3,b3,e4] ~, e2@2 ~ g#2 b2 ~ g#2 b2", // E C#m C#m7 E
  S: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,c#4,d#4] ~ [f#3,c#4,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~, b1@2 ~ d#2 f#2 ~ d#2 f#2", // B D#m7 B
  T: "[g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#2,b3,e4]@2 [g#3,b3,e4] ~, e2@4 ~@2 g#2@2 b2@2 ~@2 g#3 ~ b2@2", // E C#m E
  U: "[c#2,f3,g#3,c#4]@3 ~@5 [c#2,f3,g#3,c#4]@3 ~@5", // C#
  V: "[f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~, f#2!8", // F#
  W: "~@5 [b2,b3]!3", X: "~@6 [f#3,b3,d#4,a4] ~",
})).s("gm_piano").gain(0.48).pan(0.3)

// bass · acoustic bass
const bass = note(`<
  ~@13 A B C D E F G D H I G J C D@3 E F G D H I G J K L@2 M@2 L@2 N O D@3 E F G D H I G J K L@2 M@2 L@2 N O J C D E F G
  D H I G J P I G J Q
>`.pickRestart({
  A: "f#1!6 g#1 a#1", B: "b1@3 ~@13", C: "~@5 f#1 g#1 a#1", D: "b2@3 ~ d#2@3 ~ f#2@3 ~ g#2@2 f#2@2",
  E: "a2@3 ~ g#2@3 ~ f#2@2 b1@2 c#2@2 d#2@2", F: "e2@3 ~ g#2@3 ~ b2@3 ~ c#3@2 b2@2",
  G: "e2@3 ~ g#2@3 ~ b2@2 f#2@2 g#2@2 a#2@2", H: "b1@3 ~ d#2@3 ~ f#2@2 d#2@2 e2@2 f2@2",
  I: "f#2@3 ~ a#2@3 ~ c#3@3 ~ a#2@2 f#2@2", J: "b2 ~@7", K: "~@5 b1 c#2 d#2", L: "e2@4 ~@2 g#2@2 b2@3 ~ g#2@2 b2@2",
  M: "b1@4 ~@2 d#2@2 f#2@3 ~ d#2@2 f#2@2", N: "c#2@3 ~@5 c#2@3 ~@5", O: "f#2!8", P: "~@5 b1!3", Q: "~@12 b1@3 ~",
})).s("gm_acoustic_bass").gain(0.49)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@16 A@2 B C A@2 D E@2 ~ A@4 B C A@2 D E@2 ~ F G H I J K L M A@4 B C A@2 D C N ~ F G H I J K L M ~@2 A@2 B C A@2 D E@2
  ~ D E@2 O
>`.pickRestart({
  A: "~@4 [f#4,b4,d#5] ~@7 [f#4,b4,d#5]@2 [f#4,b4,d#5] ~", B: "~@4 [g#4,b4,e5] ~@7 [g#4,b4,e5]@2 [g#4,e5] ~",
  C: "~@4 [g#4,b4,e5] ~@7 [g#4,b4,e5]@2 [g#4,b4,e5] ~", D: "~@4 [f#4,a#4,c#5] ~@7 [f#4,a#4,c#5]@2 [f#4,a#4,c#5] ~",
  E: "[~@4 [g#4,b4,e5] ~@7 [g#4,b4,e5]@2 [g#4,b4,e5] ~ [f#4,b4,d#5] ~@15, ~@5 d#4@9 ~@2]/2", // E B
  F: "e4@2 [g#4,b4,e5] ~@3 e4@2 [g#4,c#5,e5]@4 [g#4,b4,e5] ~@3", // E C#m E
  G: "e4@2 [g#4,b4,e5] ~@3 e4@2 [g#4,c#5]@4 [g#4,b4] ~@3, ~@4 e5@3 ~", // E C#5 G#m
  H: "b3@2 [d#4,f#4,b4] ~@3 b3@2 [d#4,g#4,b4]@4 [d#4,f#4,b4] ~@3", // B G#m B
  I: "b3@2 [d#4,f#4,b4] ~@5 [d#4,g#4,b4]@4 [d#4,f#4,b4] ~@3, ~@6 b3@7 ~@3", // B G#m B
  J: "e4@2 [g#4,b4,e5] ~@5 [g#4,c#5,e5]@4 b4 ~@3, ~@3 e4@3 ~@2", // E C#m
  K: "e4@2 [g#4,b4,e5] ~@3 e4@2 [g#4,c#5,e5]@4 [g#4,b4,e5]@2 ~@2", L: "[f4,g#4,c#5] ~@3 [f4,g#4,c#5] ~@3",
  M: "f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~, [c#4,f#4]!4", N: "[f#4,b4,d#5] ~@15", O: "~@6 [a4,d#5] ~",
})).s("gm_electric_guitar_clean").gain(0.29).pan(0.7)

// other · alto sax
const alto_sax = note(`<
  ~@13 A B C B D E C F G H C B C B C B D E C F G H C B ~@8 C B C B D E C F G H C B ~@9 B C B D E C F G H C B I H C B J
>`.pickRestart({
  A: "f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~ g#3 ~ a#3 ~", B: "b3 ~@7", C: "~@10 f#3 ~ g#3 ~ a#3 ~",
  D: "~@10 b3 ~ c#4 ~ d#4 ~", E: "e4 ~@15", F: "b3 ~@15", G: "~@10 d#3 ~ e3 ~ f3 ~", H: "f#3 ~@15",
  I: "~@10 b3 ~ b3 ~ b3 ~", J: "~@6 a3 ~",
})).s("gm_alto_sax").gain(0.6).pan(0.7)

// other · electric guitar muted
const electric_guitar_muted = note("<~@38 A@2 B@2 A@2 C D ~@12 A@2 B@2 A@2 C D ~@16>".pickRestart({
  A: "e3@4 ~@2 g#3@2 b3@3 ~ g#3@2 b3@2", B: "b2@4 ~@2 d#3@2 f#3@3 ~ d#3@2 f#3@2", C: "c#3@3 ~@5 c#3@3 ~@5", D: "f#3!8",
})).s("gm_electric_guitar_muted").gain(0.49).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@16 A@8 ~@2 A@10 ~@2 A@7 B A@10 ~@2 A@7 B ~@2 A@8 ~@2 A@2 ~ C>".pickRestart({
  A: "x!2", B: "x!4", C: "~@3 x",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct("<~@26 A@10 ~@10 A@10 ~@12 A@8 ~@2 A@2 ~@2>".pickRestart({
  A: "~@2 x ~@3 x!2",
})).gain(0.5)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@16 A@2 ~ A@5 ~@2 A@2 B@2 ~ B@5 ~@10 B@4 ~ B@5 ~@12 B@2 ~ B@5 ~@2 B@2 ~ C
>`.pickRestart({
  A: "~@2 x!2 ~@12", B: "~@3 x ~@12", C: "~@11 x ~@4",
})).gain(0.15)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@16 A@7 B ~@2 A@9 B ~@2 A@6 ~ C A@9 B ~@2 A@6 ~ C ~@2 A@7 B ~@2 A B ~@2
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4", C: "~@3 x ~ x ~ x",
})).gain(0.25)

// drums · ride
const ride = s("rd").struct("<~@58 [x!4]!6 [x!2] [x!4] ~@16>").gain(0.4)

stack(
  piano, bass, electric_guitar_clean, alto_sax, electric_guitar_muted, kick, clap, snare, snare_soft, hihat, hihat_soft,
  ride
)

More by Francis Connie