Strudelify

If You Love Me

Olivia Newton-John

KeyF majorTempo139 bpm
0:00/0:00
// If You Love Me — Olivia Newton-John
// 139 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(139/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 · "tk1"
const piano = note(`<
  A@2 B C@2 D@3 E F G H I J@2 K L M N O P Q@8 R@5 S@3 D@3 E F G H I J@2 K T@2 U V W X@2 Y Z AA AB@2 AC AD@2 AE AF AG
  AH@2 AI Q@8 R@5 AJ@3 Q@8 R@5 AJ@3 AK@2 AL A@2 B AM@4 ~
>`.pickRestart({
  A: "[~@6 bb4 ~@3 g4 ~@4 a4, f2!2 c2 g2, a4@3 a4@3 ~ a4@3 ~ g4@3 ~@2, ~ [c4,f4] ~ [c4,f4] ~ [bb3,c4] ~ [bb3,c4]]/2", // F5 Bbsus2
  B: "bb4@4 c5@4 a4@2 a4@4 a4 g4, [c2,c4,e4]!2", // C
  C: "[~@2 [bb3,d4]@2 ~@2 [bb3,d4]@2 c4@6 ~ c4, f4@7 ~, bb1!2 [f2,a3]@2]/2", // Bb F
  D: "[~@3 c4 c4@2 [f3,a3,c4] ~@2 [f3,a3,c4]@3 ~ f4 [a3,c4,f4] ~@5 c3@4, f2 ~ f2 ~ f2 ~, c4@3 ~@4 [f3,a3,d4]@2 ~@6 a4@2 [c4,f4,a4]@7, ~ [f3,a3] c3@2 ~@2 c3@2 ~@4]/3", // F Dm F
  E: "~@2 [a3,c4,f4]@2 ~@3 c4, f2 c3, ~@3 a3", F: "~@3 a4!2 ~@2 bb4, f2 c3, a4@3 ~@2 c5@2 ~, ~ [c4,f4] ~ [c4,f4]",
  G: "a4@4 ~@2 a4@2 [c4,f4,a4]@4 a4@2 a4 g4, f2 c3, ~ [c4,f4] ~ [c4,f4]", H: "~ [bb3,d4] ~ [bb3,d4,f4], f4@3 ~, bb2 f2",
  I: "~@2 [bb3,d4,f4]@2 ~@3 c4, bb2 f2, ~@3 [bb3,d4]", // Bb
  J: "[d4@2 d4 ~@5 [bb3,d4] [bb3,d4,f4]@2 ~@4 c5, bb2 f2 bb2!2, ~ bb3 ~ bb3 ~@4, ~@3 d4@2 d4@2 f4@2 ~@2 [d4,f4,bb4]@4 ~]/2", // Bb
  K: "[c4,f4,a4] [a3,c4] ~ [a3,c4], f2 c3, ~ f4@3", L: "~@2 [a3,c4,f4]@2 ~@2 g4 a4, f2 c3, ~@3 [c4,f4]",
  M: "~@3 bb4 ~@3 a4, g2 d2, bb4@3 ~ bb4@3 ~, ~ [d4,g4] ~ [bb3,d4]", // G5 Bb
  N: "a4 g4 [bb3,e4]@2 ~@3 e4, c2!2, ~@2 a4@5 ~, ~@3 bb3", O: "~ [a3,c4] ~ [a3,c4], f4, f2 c3",
  P: "~ [a3,c4,f4] [f2,c4,f4,a4] [f2,a3,eb4,g4], f2 ~", // F F7
  Q: "[f4@2 [bb3,d4,f4]@2 f4 ~@5 [bb3,d4]@2 ~ e4 d4 ~@4 a3 c4 ~@5 [f3,a3]@2 ~ e4 f4 ~@4 e4 g4@2 a4 ~@3 [bb3,c4]@2 ~ f4 g4 ~@4 g4 a4@2 bb4 ~@5 [c4,eb4]@2 [a3,eb4,g4]@2, bb2@4 f2@4 bb2@4 bb2@4 f2@4 ~@2 [f3,a3]@2 ~@7 g4@4 ~@4 g4@2 e4@2 ~@3 [c4,e4]@2 ~@2 [c4,f4]@2 ~@2 [c4,f4]@2 ~@2 [c4,eb4]@2 ~@4, ~@5 g4@2 f4@3 ~@5 c4@3 ~@3 d4@2 c4@3 ~@4 [a3,c4]@2 ~@2 [bb3,c4]@2 ~@2 [bb3,c4]@2 c3@4 g2@4 f2@4 c3@4 f2@4 f2@4, ~@6 [bb3,d4]@2 ~@6 bb3@2 ~@2 f3@2 c3@4 f2@4 f2@4 c3@4 c2@4 ~@7 a4@4 ~@4 a4@2 f4@2 a4@3 ~@2]/8", // Bb F Bbsus2 Cm Am7b5 F C F5 …
  R: "[f4@2 [bb3,d4,f4]@2 f4 ~@5 [bb3,d4]@2 ~ e4 d4 ~@4 a3 c4 ~@5 [f3,a3]@2 ~ e4 f4 ~@4 g4 g4@2 ~ a4, bb2 f2 bb2!2 f2 c2 f2!2 c2 g2, ~@5 g4@2 f4@3 ~@11 d4@2 c4@3 ~@5 g4@4 ~@5, ~@6 [bb3,d4]@2 ~@7 c4@3 f3@2 ~@2 [f3,a3]@2 ~@10 [bb3,c4]@2 ~@2 [bb3,c4]@2]/5", // Bb F Bb F Bbsus2
  S: "[[c4,e4,bb4]@2 [c4,e4,bb4]@2 [c4,e4,a4] [c4,e4]@2 ~@3 [bb3,d4]@2 ~@2 [bb3,d4]@2 f2@2 c3@2 f3@2 ~ a3, c2@2 c2@2 bb1@2 bb1@2 ~@3 f2, ~@7 f4@13 ~@4, ~@7 [bb3,d4]@3 ~@6 [a3,c4]@4 ~@4]/3", // C7 Am C Bb Am
  T: "[~@2 [a3,c4]@2 ~ g4 a4 ~@4 bb4 bb4@2 a4!2, f2!2 g2 d2, ~@3 [c4,f4] ~ [d4,g4] ~ [bb3,d4], ~@7 bb4@4 ~@5]/2", // Am F5 G5 Bb
  U: "g4@2 ~ g4!2 ~@2 g4, g2 d2, ~@2 [bb3,d4]@2 ~ f4@2 ~, ~@3 [bb3,d4]", // Bb
  V: "f4 ~ [bb3,c4]@2 ~@2 [bb3,c4]@2, c2 g2, ~ e4@3 ~@4", W: "c3@2 ~@5 a3, [bb3,c4,e4]@3 ~, ~ c2@3",
  X: "[~@3 c4!2 ~@5 c4 ~@3 [a3,c4,f4]@2, f2@2 ~ [f3,a3] ~ a3 ~@2, c4@3 ~@2 c4@2 d4@3 ~ f4@3 ~@2, ~ [f3,a3] c3@2 f2@2 c2@2]/2", // F
  Y: "~@6 a4@2 ~ g4 f4@4 d4@2, f2 c2, a4@3 ~@5, ~ [a3,c4]@3", Z: "c4 [f3,a3] ~ [f3,a3,c4], f2 c2",
  AA: "a4 ~@3 [c4,f4] [c4,a4,c5]@2 [c4,g4,bb4], f2!2, ~ a4@2 a4@2 ~@3, ~ [c4,f4] ~@2", // F5 F C7 F5
  AB: "[a4@2 ~ a4 a4@2 a4 ~@3 [bb3,d4]@2 ~@2 [bb3,d4]@2, f2!2 bb2 f2, ~ [c4,eb4] ~ [a3,eb4] ~@4, ~@7 g4@2 f4@5 ~@2]/2", // Bb Cm Adim
  AC: "~@2 [bb3,d4]@2 [bb3,d4]@3 c4, bb2 f2", // Bb
  AD: "[d4@2 d4 ~@6 [bb3,d4,f4]@2 ~@4 c5, bb2 f2 bb2!2, ~ bb3 ~ bb3 ~@4, ~@3 d4@2 d4@2 f4@2 ~@2 [d4,f4,bb4]@4 ~]/2", // Bb
  AE: "a4 [a3,c4] ~ [a3,c4], f2 c3, ~ f4@3", AF: "~@2 [a3,c4,f4]@2 ~@2 g4 a4, f2!2, ~@3 [a3,c4]",
  AG: "bb4@2 bb4!2 a4@2 a4!2, g2 d2, ~ [d4,g4] ~ [bb3,d4]", // G5 Bb
  AH: "[g4@2 ~ g4 a4@2 e4 ~@3 [a3,c4]@2 ~@2 [a3,c4]@2, c2!2 f2 c2, ~ [bb3,c4] ~ [bb3,c4] ~@4, ~@7 f4@5 ~@4]/2", // Am Bbsus2
  AI: "[f2,a3,c4,f4]@2 [f2,c4,f4,a4] [f2,c4,eb4,g4]", // F Cm
  AJ: "[[c4,e4,bb4]@2 [c4,e4,bb4]@2 [c4,e4,a4] [c4,e4]@2 ~@3 [bb3,d4]@2 ~@2 [bb3,d4]@2 [a3,c4]@2 [a3,c4,f4]@2 [f2,c4,f4,a4]@2 [f2,a3,eb4,g4]@2, c2!2 bb1!2 f2 ~, ~@7 f4@11 ~@6, ~@7 [bb3,d4]@3 ~@14]/3", // C7 Am C Bb Am F F7 Bb
  AK: "[f4@2 [bb3,d4]@2 f4 ~@5 [bb3,d4,f4]@2 g4 f4 [bb3,d4]@2, bb2 f2 bb2!2, ~@5 g4@2 f4@3 ~@6, ~@3 [bb3,d4] ~@4]/2", // Bb
  AL: "~@3 a3 c4 ~@2 c4, f2 c2, c4@3 ~@2 d4@2 ~, ~ f3 ~ [f3,a3]", // F
  AM: "[~ [bb3,d4] ~ [bb3,d4] [f2,a3,c4]@12, f4, bb1!2 ~@6]/4", // Bb F
})).s("gm_piano").gain(0.64)

// bass · fretless bass · "tk2"
const bass = note(`<
  A B C D ~ A E A F A E G D G H A F I B A J G H A F C B A@2 G H A F C B G ~ A E A F A E G D G H A F K L C M A E A F A E
  G D G H A F I B A ~ G H A F C B A ~ G H A F C B G ~ G H A F C B A ~ G H A F C B G F N O P Q R S T U@2 ~@2
>`.pickRestart({
  A: "f2@4 ~@2 f2@2 c2@5 ~@3", B: "c2@2 ~ c2 g2@2 g1@2", C: "c2@4 ~@2 c2@2 g1@5 ~@3", D: "bb1@2 ~ f1 d2@2 f1@2",
  E: "f2@2 ~ f2 c3@2 c2@2", F: "f2@2 ~ c2 a2@2 c2@2", G: "bb1@4 ~@2 bb1@2 f1@5 ~@3", H: "bb1@2 ~ bb1 f2@2 f1@2",
  I: "g1@4 ~@2 g1@2 d2@5 ~@3", J: "f2@2 ~ c2 a2@2 f2@2", K: "g2@4 ~@2 g2@2 d2@5 ~@3", L: "g2@2 ~ g2 d3@2 d2@2",
  M: "c2@2 ~ g1 e2@2 g1@2", N: "bb1@5 ~ bb1@2 eb2@4 ~@2 eb2@2", O: "f1@2 ~ f1 f1@2 eb2@2", P: "f1@2 ~ a1 bb1@2 ~ bb1",
  Q: "c2@5 ~ c2 ~ c2@2 g2@2 c3@2 bb2@2", R: "c2@4 ~@2 e2@2 f2@6 c2 f1", S: "c2@5 ~ g1 ~ a1@6 a1@2",
  T: "bb1@5 ~ c2@2 f1@2 c2@2 g2@2 f2 ~", U: "[f3 f2 c2 f2@13, ~@4 bb1 ~@27]/2",
})).s("gm_fretless_bass").gain(0.35)

// bass · electric bass finger · "tk2"
const bass_2 = note("<~@4 A ~@31 A ~@31 B ~@7 A ~@7 A ~@7 A ~@19>".pickRestart({
  A: "f2@4 ~@2 f2@2 c2 ~ c2@2 c3 a2 c2 ~", B: "f2@4 ~@2 f2@2 c2 ~ c2@2 f3 a2 c2 ~",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · string ensemble 2 · "tk5"
const string_ensemble_2 = note(`<
  ~@21 A@2 B C D@2 B ~ A@2 B C D@2 E ~@33 A@2 B C D@2 B ~ A@2 B C D@2 E ~ A@2 B C D@2 B ~ A@2 B C D@2 E C ~@11
>`.pickRestart({
  A: "[[f4,bb4,d5]@22 ~@2 [bb4,d5,f5]@7 ~]/2", B: "[a4,c5,f5]", C: "~@2 [f4,a4,c5]@3 ~ [f4,a4,c5]@4 [a3,c4,f4]@5 ~",
  D: "[[bb3,c4,e4]@22 ~@2 [c4,e4,bb4]@7 ~]/2", E: "[d5,f5,bb5]",
})).s("gm_string_ensemble_2").gain(0.35)

// chords · electric guitar clean · "tk6"
const electric_guitar_clean = note(`<
  ~@21 A@2 B@2 C@2 B ~ A@2 B@2 C@2 A ~@33 A@2 B@2 C@2 B ~ A@2 B@2 C@2 A ~ A@2 B@2 C@2 B ~ A@2 B@2 C@2 A B ~@11
>`.pickRestart({
  A: "~@4 [bb4,d5,f5] ~@7 [bb4,d5,f5] ~@3", B: "~@4 [f4,a4,c5] ~@7 [f4,a4,c5] ~@3",
  C: "~@4 [c4,e4,g4,bb4] ~@7 [c4,e4,g4,bb4] ~@3", // C7
})).s("gm_electric_guitar_clean").gain(0.35)

// chords · acoustic guitar steel · "tk6"
const acoustic_guitar_steel = note("<~@101 A@2 B@2 C D E F@2 ~@2>".pickRestart({
  A: "[f4 bb4 f5 eb5@2 d5@2 c5@2 c5 f5 bb5 a5 [bb4,d5] ~ [g4,f5], ~@14 [a4,f5] ~, ~@29 g5@2 ~]/2", // Bb G7 Dm
  B: "[c4@2 f4@2 c5@2 bb4@4 a4@4 ~@4 a5@4 g5 f5 e5@2 g5@2 [c5,d5]@2 c5@2, c5@2 ~@5 g4@9, d4 ~@31]/2", // Csus2
  C: "g3 c4 g4 f4@2 e4@2 [d4,g4], g4 ~@3", D: "[d4,g4] [c4,a4] [bb3,bb4] c4@3 d4 e4, ~@3 c5@5",
  E: "[eb5,g5] [f5,a5] [g5,bb5] [f5,bb5]@2 [d6,f6] [bb5,c6,eb6] [bb5,d6]", F: "[f5,a5]/2",
})).s("gm_acoustic_guitar_steel").gain(0.4)

// chords · string ensemble 2 · "tk7"
const string_ensemble_2_2 = note(`<
  A B C D ~ E F G H I@2 J D K@2 G H L B G M ~@16 E F G H I@2 J D N O G H P@2 C Q I@2 G H A R J D K@2 G H L B G ~@44
>`.pickRestart({
  A: "[c4,f4,a4]", B: "[bb3,c4,e4]@6 ~@2 [c4,e4,bb4]@7 ~", C: "[e4,bb4,c5]",
  D: "~@2 [bb4,d5,f5]@3 ~ [bb4,d5,f5]@4 [f4,bb4]@5 ~", E: "[c4,f4,a4] ~@15", F: "~@8 [f4,a4,c5]@7 ~", G: "[a4,c5,f5]",
  H: "~@2 [f4,a4,c5]@3 ~ [f4,a4,c5]@4 [c4,f4]@5 ~", I: "[[c4,f4,a4]@22 ~@2 [f4,a4,c5]@7 ~]/2", J: "[d5,f5,bb5]",
  K: "[[f4,bb4,d5]@22 ~@2 [bb4,d5,f5]@7 ~]/2", L: "[d4,g4,bb4]",
  M: "~@2 [f4,a4,c5]@3 ~ [f4,a4,c5]@4 [c4,f4]@2 [eb4,f4]@3 ~", N: "[f4,bb4,d5]", O: "[f4,bb4,d5]@6 ~@2 [bb4,d5,f5]@7 ~",
  P: "[[d4,g4,bb4]@22 ~@2 [g4,bb4,d5]@7 ~]/2", Q: "~@2 [c4,e4,bb4]@3 ~ [c4,e4,bb4]@4 [bb3,c4]@5 ~",
  R: "[eb4,f4,a4]@6 ~@2 [f4,a4,eb5]@7 ~", // F7
})).s("gm_string_ensemble_2").gain(0.35)

// chords · string ensemble 2 · "tk7" · soft notes
const string_ensemble_2_soft = note(`<
  ~@3 A ~@4 B ~@3 A ~@3 B ~@3 C ~@19 B ~@3 A ~@3 B ~@3 D ~@3 B ~@3 A ~@3 B ~@47
>`.pickRestart({
  A: "~@10 d4@5 ~", B: "~@10 a3@5 ~", C: "~@10 a3@2 a3@3 ~", D: "~@10 e3@5 ~",
})).s("gm_string_ensemble_2").gain(0.2)

// chords · acoustic guitar steel · "tk7" · F7 F Ebsus2 F7 F Ebsus2 Ebdim Ebsus2 …
const acoustic_guitar_steel_2 = note(`<
  ~@28
  [[f3,a3,eb4,f4] [f3,a3] [eb4,f4] [f3,eb4] [f4,a4] [f3,a3] [eb4,f4] [eb3,a3] [eb4,f4] [eb3,a3] [eb4,f4] [eb3,eb4] [f4,a4] [eb3,a3] [eb4,f4] [f3,a3]]
  ~@83
>`).s("gm_acoustic_guitar_steel").gain(0.25)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x!2 ~@3]!104 [x ~@5 x ~ x ~@2 x ~@2 x ~] [x ~@2 x!2 ~@3]!3 [~@3 x ~@4] ~@3>")
  .gain(0.45)

// drums · snare
const snare = s("sd").struct("<A@4 B A@23 C A@7 B A@31 B A@7 B A@7 B A@7 B A@11 D A@3 E ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x!3 ~@3", C: "~@4 x ~@5 x ~ x!2 ~@2", D: "~@4 x ~@4 x!2 ~ x ~@3", E: "x",
})).gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@23 A ~@7 A ~@31 A ~@7 A ~@7 A ~@7 A ~@15 B ~@3>".pickRestart({
  A: "~@7 x", B: "~ x ~@2",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@13
>`.pickRestart({
  A: "~@7 x",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@108 [~ x ~@6] ~@3>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@29 x ~@78 [~@3 x ~@4] ~@3>").gain(0.3)

// drums · ride bell
const ride_bell = s("rd").struct("<~@4 A ~@31 A ~@31 A ~@7 A ~@7 A ~@7 A ~@8 A B C D E@3 ~@4>".pickRestart({
  A: "x ~ x!3 ~ x!5 ~ x!3 ~", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x ~", C: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", D: "x ~ x!3 ~ x!9 ~",
  E: "x!3 ~ x!3 ~ x!3 ~ x!3 ~",
})).gain(0.3)

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

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  ~@3 A ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@11
>`.pickRestart({
  A: "~@3 x",
})).gain(0.43)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct(`<
  ~@3 A ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@11
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.43)

// drums · shaker
const shaker = s("sh").struct(`<
  ~ A ~ B ~@2 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B
  ~ A ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~ B ~@11
>`.pickRestart({
  A: "~@11 x ~@3 x", B: "~@9 x ~@6",
})).gain(0.3)

stack(
  piano, bass, bass_2, string_ensemble_2, electric_guitar_clean, acoustic_guitar_steel, string_ensemble_2_2,
  string_ensemble_2_soft, acoustic_guitar_steel_2, kick, snare, hihat, mid_tom, open_hat, high_tom, crash, ride_bell,
  cabasa, woodblocks, woodblocks_2, shaker
)

More by Olivia Newton-John