Strudelify

My Love Don't Cost a Thing

Jennifer Lopez

KeyE minorTempo184 bpm
0:00/0:00
// My Love Don't Cost a Thing — Jennifer Lopez
// 184 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 15 "Harp.chord" named as a string part, played on orchestral harp (its harpsichord patch is not one)
// note: Full arrangement: all 180 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(184/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 · electric bass finger · "sysex"
const bass = note(`<
  ~ A B C D E F G H A B C D E I G H A B C D E F G H A B C D E F G H A B C D E I G H A B C D E F G H J K C D E F G H A B
  C D E F G H A B C D E I G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E I G H A B ~@8 C D E F G H J K C
  D E F G H J K L ~@5 A B C D E F G H A B C D E F G H A B C D E I G H A B C D E F G H A B C D E F G H ~@3
>`.pickRestart({
  A: "e1@4 ~@6 e2@2 f#1@3 ~@7 e2@2", B: "g1@3 ~@7 e2@2 g#1@3 ~@7 e2@2", C: "a1@5 ~ e2@3 ~ g2@2 a2@3 ~@7 e2@2",
  D: "a1@3 ~@3 b1@4 ~@2 c2@4 ~@8", E: "a1@2 ~@4 a2@2 ~@2 g2@2 a2@3 ~@3 e2@2 ~@4",
  F: "a1@3 ~ b1@2 c2@3 ~@3 d2@3 ~@3 e2@3 ~ d2@2", G: "e2@3 ~@3 b1@3 ~@3 e1@4 ~@6 b1@2",
  H: "d2@3 ~ b1@2 e2@2 ~@10 b1@3 ~@3", I: "a1@3 ~ b1@2 c2@3 ~@3 d2@2 ~@4 e2@3 ~ d2@2", J: "e1@5 ~ e2@5 ~ f#1@6 f#2@6",
  K: "g1@3 g2@3 g#1@3 g#2@2 ~", L: "a1@5 ~@19",
})).s("gm_electric_bass_finger").gain(0.4)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~ A B ~@6 A B C@4 ~@2 D E F ~@5 G H I ~@2 J K ~@4 J L ~@3 M N C@4 ~@2 D E C@4 ~@2 D E F ~@2 J O ~ G H I ~@2 J K ~@4 J
  L ~@3 M N C@4 ~@2 D E F ~@2 J O ~ G H F ~@2 J O ~ G H ~@8 C@4 ~@2 D E C@4 ~@2 D E C@4 ~@2 D E F ~@2 J O ~ G H F ~@2 J
  O ~ G H F ~@2 J O ~ G H F ~@2 J O ~ G H F ~@2 J O ~@4
>`.pickRestart({
  A: "e5@5 ~@7 f#5@6 ~@6", B: "g5@5 ~@7 g#5@6 b5@4 ~@2", C: "a5/4", D: "e5 ~@3 f#5@2 ~@2", E: "g5 ~ g#5@2",
  F: "a5@23 ~", G: "e5@7 ~@5 f#5@6 ~@6", H: "g5@7 ~@5 g#5@8 ~@4", I: "a5@5 ~@19", J: "~@3 d5", K: "e5 ~@7",
  L: "e5 ~@5 e5@2 ~@4", M: "e5@9 ~@3 f#5@8 ~@4", N: "g5@8 ~@4 g#5@7 ~@5", O: "e5@3 ~@9 e5@4 ~@8",
})).s("gm_string_ensemble_1").gain(0.21)

// other · string ensemble 1 · "Strings" · soft notes
const string_ensemble_1_soft = note("<~@15 A@2 ~@30 A@2 ~@6 A@2 ~@30 A@2 ~@30 A@2 ~@6 A@2 ~@6 A@2 ~@43>".pickRestart({
  A: "[g5@29 ~@19]/2",
})).s("gm_string_ensemble_1").gain(0.12)

// other · orchestra hit · "OrchestHit"
const orchestra_hit = note("<~@34 [~@18 e4 ~@5] [a4@5 ~@19] ~@38 [~@18 e4 ~@5] [a4@5 ~@19] ~@104>")
  .s("gm_orchestra_hit").gain(0.42)

// other · timpani
const timpani = note(`<
  ~ A@2 B ~@5 C A B ~@5 C A B ~@5 C A B ~@2 D E ~ C A B ~@2 D E ~ C A B ~@5 C A B ~@5 C A B ~@5 C A B ~@2 D E ~ C A B
  ~@2 D E ~ C A B ~@5 C A B ~@5 C A ~@16 B ~@5 C A B ~@5 C A B ~@5 C A B ~@5 C A B ~@5 C A B ~@5 C A B ~@5 C A B ~@8
>`.pickRestart({
  A: "e3@2 ~@4 b2 ~@5 e3@2 ~@4 b2 ~@5", B: "a2@3 ~@5", C: "e3 ~@5 b2 ~@5 e3@2 ~@4 b2 ~@5", D: "~@18 d3 ~@5", E: "e3",
})).s("gm_timpani").gain(0.37).pan(0.6)

// chords · electric guitar muted · "Muted Guit"
const electric_guitar_muted = note(`<
  ~ A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B
  C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B ~@8 C D E F G H A B C
  D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H ~@3
>`.pickRestart({
  A: "[g3,b3] ~ [g3,b3] ~@2 [g3,b3] [f#3,a3] ~ [f#3,a3] ~@2 [f#3,a3]", // G F#m
  B: "[g3,b3] ~ [g3,b3] ~@2 [g3,b3] [g#3,b3] ~ [g#3,b3] ~@2 [g#3,b3]", // G G#m
  C: "~@4 [a3,c4] ~@5 g3@2 [a3,c4]@2 ~@2 [a3,c4]@2 ~@4 g3@2", D: "[a3,c4] ~@5 g3@2 ~@4 [a3,c4]@2 ~@8 g3@2",
  E: "[a3,c4] ~@3 [a3,c4]@2 g3@2 ~@4 [a3,c4] ~@5 g3@2 ~@2 [a3,c4] ~", // Am
  F: "~@4 [a3,c4]@2 g3@2 ~@2 [a3,c4]@2 [a3,c4]@2 ~@4 g3@3 ~ [a3,c4] ~", G: "[g3,b3] ~@2 [g3,b3] ~@2 [g3,b3] ~@4 f#3",
  H: "[g3,b3] ~ [g3,b3]!2 ~@2 [g3,b3] ~@4 [f#3,a3]", // G F#m
})).s("gm_electric_guitar_muted").gain(0.29).pan(0.4)

// other · bandoneon · "Bandeon"
const bandoneon = note(`<
  ~@3 A@2 B C D@2 ~@10 A@2 B C D@2 ~@26 A@2 B C D@2 ~@2 A@2 B C D@2 ~@18 A@2 B C D@2 ~@2 A@2 B C D@2 ~@2 A@2 B C D@2
  ~@34 A@2 B C D@2 ~@2 A@2 B C D@2 ~@2 A@2 B C D@2 ~@2 A@2 B C D@2 ~@2 A@2 B C D@2 ~@3
>`.pickRestart({
  A: "[~@4 a4 ~ c5@2 e5@2 g5@2 f#5@2 e5@2 d5@2 e5@13 ~@17]/2", B: "~@6 a4 ~ c5@2 e5@2 f#5@2 g5@2 f#5@2 e5@3 ~ d5@2",
  C: "e5@7 ~@5", D: "[~@6 g4 ~ b4@2 e5@2 f#5@2 g5@2 f#5@2 e5@2 b4@2 g4@15 ~@11]/2",
})).s("gm_bandoneon").gain(0.19).pan(0.6)

// other · synth bass 2 · "SynthBass2"
const synth_bass_2 = note(`<
  ~@27 A B C D E F ~@2 A B C D E G ~@26 A B C D E G ~@2 A B C D E G ~@18 A B C D E G ~@2 A B C D E G ~@67
>`.pickRestart({
  A: "~@6 g3@2 ~@2 g3 ~ g3@3 ~ a3@2 ~@4 g3@2", B: "a3@2 ~@4 a3 ~@5 g3@4 a3@2 ~@6",
  C: "~@4 g3 ~ g3@2 ~@2 g3 ~ g3@3 ~ a3 ~ g3 ~@5", D: "g3 ~@2 g3 ~@2 g3@2 a3 ~@3",
  E: "~@4 g3 ~ g3@2 ~@4 g3@2 ~@2 e3 ~@7", F: "g3 ~@5 g3@2 ~@4 d3@4 e3@2 ~@6", G: "g3 ~@5 g3@2 ~@4 d3@3 ~ e3@2 ~@6",
})).s("gm_synth_bass_2").gain(0.13).pan(0.4)

// other · trombone
const trombone = note("<~@131 A B C D E F G H ~@32 I B C D E F ~@3>".pickRestart({
  A: "[a2,a3]@4 ~@2 [b2,b3]@3 ~@3 [c3,c4]@3 ~@3 [a2,a3]@4 ~@2", // A B C A
  B: "[e3,e4]@3 ~@3 [c3,c4]@4 ~@2 [f#3,f#4]@4 ~@2 [d3,d4]@4 ~@2", // E C F# D
  C: "[a2,a3]@4 ~@2 [b2,b3]@4 ~@2 [c3,c4]@5 ~ [a2,a3]@3 ~@3", // A B C A
  D: "[e3,e4]@4 ~@2 [c3,c4]@4 ~@2 [f#3,f#4]@5 ~ [d3,d4]@2 ~@4", // E C F# D
  E: "[e2,e3]@4 ~@2 [f#2,f#3]@4 ~@2 [g2,g3]@5 ~ [e2,e3]@3 ~@3", // E F# G E
  F: "[d3,d4]@5 ~ [e3,e4]@4 ~@2 [f#3,f#4]@4 ~@2 [d3,d4]@4 ~@2", // D E F# D
  G: "[e3,e4]@4 ~@2 [b2,b3]@4 ~@2 [e3,e4]@5 ~ [b2,b3]@3 ~@3", // E B E B
  H: "[e2,e3]@4 ~@2 [f#2,f#3]@5 ~ [g2,g3]@4 ~@2 [b2,b3]@4 ~@2", // E F# G B
  I: "[a2,a3]@4 ~@2 [b2,b3]@3 ~@3 [c3,c4]@3 ~@3 [a2,a3]@3 ~@3", // A B C A
})).s("gm_trombone").gain(0.39).pan(0.6)

// chords · epiano2 · "E.Piano 2"
const epiano2 = note(`<
  ~ A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B
  C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2
  D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2 E@2 A B C@2 D@2
  E@2 ~@3
>`.pickRestart({
  A: "[b3,d4,e4]@9 ~@3 [f#3,b3]@10 ~@2, g3@7 ~@5 d4@2 ~@10", B: "[g3,b3]@11 ~ [g#3,b3,d4]@10 ~@2",
  C: "[[g3,a3,c4,e4]@19 ~@2 [g3,b3,d4] ~@2, [b3,d4] ~@47]/2", D: "[[g3,a3,c4,e4]@39 ~ [g3,a3,c4,e4]@2 ~@6]/2",
  E: "[[g3,b3,d4,e4]@5 ~]/2", // Em7
})).s("gm_epiano2").gain(0.25).pan(0.4)

// other · orchestral harp · "Harp"
const orchestral_harp = note("<~@75 A@2 B C D@2 ~@99>".pickRestart({
  A: "[~@4 a4 ~ c5@2 e5@2 g5@2 f#5@2 e5@2 d5@2 e5@13 ~@17]/2", B: "~@6 a4 ~ c5@2 e5@2 f#5@2 g5@2 f#5@2 e5@3 ~ d5@2",
  C: "e5@7 ~@5", D: "[~@6 g4 ~ b4@2 e5@2 f#5@2 g5@2 f#5@2 e5@2 b4@2 g4@15 ~@11]/2",
})).s("gm_orchestral_harp").gain(0.23).pan(0.4)

// chords · orchestral harp · "Harp.chord"
const orchestral_harp_2 = note("<~@118 A B@3 ~@58>".pickRestart({
  A: "~@12 [b4,g5]@4 [a4,f#5]@2 [g4,e5]@3 ~ [f#4,d#5]@2", B: "[[g4,e5]@17 ~@7]/3",
})).s("gm_orchestral_harp").gain(0.26).pan(0.6)

// other · pizzicato strings · "PizzictStr"
const pizzicato_strings = note("<~@99 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@66>".pickRestart({
  A: "~@6 [e4,e5] ~@11 [e4,e5] ~@5", // E
})).s("gm_pizzicato_strings").gain(0.23).pan(0.4)

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

// drums · rim
const rim = s("rim").struct(`<
  ~@3 A B A B A B A C A B A B A B A C A B A B A B A C A B A B A B A C A B A B A B A C A B A B A B A C A B A B A B A C A
  B A B A B A C ~ B A B A B A C A B A B A B A C A B A B A B A C A B A B A B A C A B A B A B A C A B A B A B A C A B A B
  A B A C A B A B A B A C ~@6 A C A B A B A B A C A B A B A B A C A B A B A B A C A B A B A B A C A B A B A B ~@3
>`.pickRestart({
  A: "~@5 x ~@6", B: "~ x", C: "~@2 x ~@2 x!2 ~@2 x ~ x",
})).gain(0.5)

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

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

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7
  A ~@7 A ~@8
>`.pickRestart({
  A: "x",
})).gain(0.3)

stack(
  bass, string_ensemble_1, string_ensemble_1_soft, orchestra_hit, timpani, electric_guitar_muted, bandoneon,
  synth_bass_2, trombone, epiano2, orchestral_harp, orchestral_harp_2, pizzicato_strings, kick, rim, hihat, open_hat,
  crash
)

More by Jennifer Lopez