Strudelify

when she loved me

Sarah McLachlan

KeyG majorTempo75 bpm
0:00/0:00
// when she loved me — Sarah McLachlan
// 75 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 12, 4/4 at bar 13) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5956150; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 44 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(75/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.

// other · cello · "Violoncello"
const cello = note(`<
  ~@2 A B C D E F G H E I J K L M N O P Q R S K@2 T U V W X ~@2 Y Q N O Z AA Y AB N O S K AC
>`.pickRestart({
  A: "~@4 f3 e3!2 d3", B: "d3 c3!2 a#2 f3 e3!2 d3", C: "d3 c3!2 a#2 f2@2 f3@2", D: "f2 c3 f3@2 a#2@2 a#3@2",
  E: "c3 g3 c4@2 a2 e3 a3@2", F: "d3 a3 d4@2 a#2@2 f3@2", G: "c3 g3 c4@2 f2@2 f3@2", H: "f2 c3 f3@2 a#2@2 f3@2",
  I: "d3 f3 a#3@2 a#2 f3 a#3@2", J: "c3 f3 a3 f3 c3 f3 a3 e3", K: "f2 f3 c3 a2", L: "a#3!2", M: "a3!2",
  N: "a2 e3 a3@2 d3 f3 a3@2", O: "a#2 f3 a#3@2 c3 g3 c4@2", P: "f2@2 f3@2 f2 c3 a3@2", Q: "a#2@2 a#3@2 c3 g3 c4@2",
  R: "a2 e3 a3 c4 d3 f3 a3@2", S: "a#2 d3 f3 a#3 c3 e3 g3 c4", T: "a3 g3", U: "e3", V: "a3", W: "f3 a#3", X: "g#3",
  Y: "f2@2 f3@2 f2 c3 f3@2", Z: "a2 e3 a3 e3 a2 d3 g3 d3", AA: "a#2 f3 a#3 f3 g3@4", AB: "a#2@2 f3@2 c3 g3 c4@2",
  AC: "a2",
})).s("gm_cello").gain(0.3)

// chords · piano
const piano = note(`<
  A B C@2 D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC@2 AD AE AF AG AH AI AJ AK AL AM U V AN
>`.pickRestart({
  A: "~ [d4,a4,f5,a5]", B: "[c4,a4,e5,a5] [b3,g4,d5,f5]",
  C: "[[a#3,f4,c#5,f5]@8 [f2,c3,e3,a4,c5,f5]@15 ~ [f2,c3,e3,a4,c5,f5]@8]/2", // A#m Fmaj7
  D: "[c3,f3,a3,c4,f4,a4,c5]@2 [f2,f3,a3,c4] [g2,f3,a#3,f4]", E: "[a2,f3,c4,f4]@2 [a#2,f3,a#3,d4] [c3,g3,d4,f4]",
  F: "d4 e4 [e3,a#3,d4,e4] [c#3,a3,e4,a4], [d3,g3,g4] ~", // Em7b5 A G5
  G: "[d3,a3,d4,f4]@2 [c3,c4,f4,g4,a4]@2 a#2 f3 d4 f4, ~@2 [c4,d4] a#3", // Dm F Csus2
  H: "[c4,d4] g3 c3@2 [f2,f3,a3,c4]@2 [g2,f3,a#3,f4]@2, g4 ~, ~ e4@3 ~@4", // Csus2 F Gm7
  I: "[a2,f3,c4,f4]@2 [a#2,f3,a#3,d4] [b2,g3,d4,f4]", J: "d4 e4 [e3,a#3,d4,e4] [c#3,a3,e4,a4], [c3,g3,g4] ~",
  K: "[d3,a3,d4,f4]@2 [c3,c4,f4,g4,a4]@2 c3 f3 ~ a#4, ~@4 [c4,d4]@3 ~, ~@3 f3", // Dm F Csus2
  L: "~ f3 f3@2 ~ f3 ~@2, [c3,a4] [c3,a#3,g4], ~@2 c4 ~@5", M: "[f2,c3,e3,a4,c5,f5] [c3,f3,a3,c4,f4,a4,c5]",
  N: "[f4,d5] [a#4,f5]!2 [f4,e5]!2 [f4,d5] [f4,d5]@2, [a#2,f3]@15 ~", // Dm A#5 Fmaj7 Dm A#5
  O: "[c3,a3,f4,c5] [a#2,g3,d#4,d5] [a2,f3,d#4,c5] [a#2,f3,d4,f4]", // F D#maj7 F7 A#
  P: "[c3,f3,f4,a4] [a#2,f3,d4,a#4] [c3,f3,c4,a4] [d3,g3,a#3,d4]", Q: "[a2,g3,d4,f4]@4 d4 e4@3, ~ [c3,g3,g4]",
  R: "[f2,c3,f3,a3,c4] [g2,f3,a#3,f4] [a2,f3,c4,f4]@2", S: "[a#2,f3,a#3,d4] [b2,g3,d4,f4] [d4,g4] [e4,g4], ~ [c3,g3]",
  T: "[a2,f3,d#4,f4,c5] [a#2,f3,d#4,a#4]", U: "[c3,f3,c4,a4] [c3,e3,a#3,g4]", V: "a4 c5!2 a#4!2 a4!2 g4, [f2,f4]@15 ~",
  W: "a4 c5!2 a#4!2 a4 g4@2, [f2,f4]@15 ~", X: "[d3,a3,d4,f4] [c#3,a#3,d#4,f4,g4]",
  Y: "[c3,c4,a4]@2 [b2,g3,d4,g4] [a#2,g3,c#4,g4]", Z: "[a2,f3,c4,f4] [g#2,f3,c4,d4] [a#2,g3,d#4,g4] [a2,g3,c#4,g4]",
  AA: "[d3,a3,d4,f4]@2 [c#3,a#3,f4,a#4] [c3,a#3,e4,a#4]", // Dm A#m C7
  AB: "[b2,g#3,d#4,g#4]@2 [d4,f4]@3 f4 g#4 c5, ~@4 [a#2,g#3]@11 ~", AC: "[c#3,a#3,f#4,a#4]@15 ~",
  AD: "[f2,f3,a3,c4] [g2,f3,a#3,f4] [a2,f3,c4,f4]@2", AE: "[a#2,f3,a#3,d4] [c3,g3,d4,f4] d4 e4, ~ [d3,g3,g4]",
  AF: "[e3,a#3,d4,e4] [c#3,a3,e4,a4] [d3,a3,d4,f4] [c3,c4,f4,g4,a4]", // Em7b5 A Dm F
  AG: "a#2 f3 d4 f4 [c4,d4] g3 c3@2, [c4,d4] a#3 g4@2, ~@5 e4@3", AH: "[c3,g3,e4,g4] [a2,f3,d#4,f4,c5]",
  AI: "[a#2,g3,a#3,d4,f4] [c3,f3,c4,f4,a4]", AJ: "[c2,g3,a#3,c4,e4]@2 [f2,c3,f3,a3,c4] [g2,f3,a3,f4]",
  AK: "[a2,f3,a#3,f4]@2 [a#2,f3,a#3,d4] [b2,g3,d4,f4]", AL: "[c3,g3,e4,g4]@2 [e3,a#3,d4,e4] [c#3,a3,e4,a4]",
  AM: "a#2 f3 d4 f4 [c4,d4] g3 ~ a#4, [c4,d4]@2 a#3@2 g4@3 ~, ~@5 e4@2 ~, ~@3 c3", AN: "[f2,c3,f3,a3,f4]@15 ~",
})).s("gm_piano").gain(0.3)

stack(cello, piano)

More by Sarah McLachlan