Strudelify
Can't Stand Losing You cover art

Outlandos D'Amour

Can't Stand Losing You

The Police

KeyF majorTempo140 bpm
0:00/0:00
// Can't Stand Losing You — The Police
// 140 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Electric Guitar.
setcpm(140/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 guitar muted · "Muted Electric Guitar"
const bass = note(`<
  ~ A B A C D E D E D E D E F@2 G H I@2 J@2 K@2 A C A B A B A B D E D E D E D E F@2 G H I@2 J@2 K@2 I@2 J@2 K L M N O P
  Q R P S@2 T@6 U F@2 G H I@2 J@2 K@2 I@2 J@2 K@2 V@2 K@2 I@2 V@2 K@2 I@2 V@2 ~
>`.pickRestart({
  A: "~@2 d2 ~ f2 ~ a2 ~ g2 ~ d2 ~ a2 ~ a2 ~", B: "~@2 d2 ~ f2 ~ a2 ~ g2 ~ d2 ~ e2 ~ d2 ~",
  C: "~@2 d2 ~ f2 ~ a2 ~ g2 ~ g2 ~ e2 ~ d2 ~", D: "~ d2!2 ~@5", E: "~ g1!2 ~@5", F: "bb1@3 f1 f1@2 ~@2",
  G: "c2@3 g1 g1@2 ~@2", H: "c2@3 a1!5", I: "a1 bb1!3 a1 bb1!3", J: "gb1 g1!3 gb1 g1!3", K: "ab1 a1!3 ab1 a1!3",
  L: "ab1 a1!3 ab1 a1!2 ~", M: "~ bb1 ~ bb1 d2@2 f2@2", N: "bb1@2 ~ bb1@2 ~ bb1@2 d2@4 f2@4", O: "~ c2 ~ c2 e2@2 g2@2",
  P: "c2@2 ~ c2@2 ~ c2@2 e2@4 g2@4", Q: "~@2 bb1@2 bb1@2 bb1@2 d2@4 f2@2 bb1!2", R: "bb1@2 bb1!4 bb1@2 d2@4 f2@4",
  S: "[~@2 a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2@4 g1@2 g1@2 d2@2 d2@2 d2@2 d2@2 d2@2]/2", T: "d2!8",
  U: "d2 ~ d3 ~ d3 ~ d3 d2, ~ d2@2 d2@2 d2@2 ~", V: "b1 c2!3 b1 c2!3",
})).s("gm_electric_guitar_muted").gain(0.56)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~ A@4 B C B C B C B C D@2 E F G@4 H@2 A@8 B C B C B C B C D@2 E F G@4 H@2 G@4 H@2 ~@16 D@2 E F G@4 H@2 G@4 H@6 G@2 H@4
  I G H@2 ~
>`.pickRestart({
  A: "~@4 [d3,a3,d4,f4] ~@7 [d3,bb3,d4,g4] ~@3", B: "[a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3",
  C: "[bb3,d4,g4] ~@3 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~@3", // Gm
  D: "[bb2,f3,bb3] ~@5 [f2,c3,a3] ~ [f2,c3,a3] ~@7", E: "[c3,g3,c4] ~@5 [g2,d3,b3] ~ [g2,d3,b3] ~@7",
  F: "[c3,g3,c4] ~@3 [c3,g3,c4] ~@3 [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~@3", // C5 A5
  G: "[f3,bb3,d4] ~@3 [f3,bb3,d4] ~@3 [f3,bb3,d4] ~@3 [f3,bb3,d4] ~@3", // Bb
  H: "[g3,c4,d4] ~@3 [g3,c4,d4] ~@3 [g3,c4,d4] ~@3 [g3,c4,d4] ~@3", // Gsus4
  I: "[f3,c4,d4] ~@3 [f3,bb3,d4] ~@3 [f3,bb3,d4] ~@3 [f3,bb3,d4] ~@3", // Dm7 Bb
})).s("gm_distortion_guitar").gain(0.15).pan(0.8)

// chords · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note("<~@58 A@3 B@3 ~@38>".pickRestart({
  A: "[~ g4@8 ~@3]/3", B: "[~ a4, ~@3 bb3@8 ~, ~ d4@2]/3",
})).s("gm_electric_guitar_clean").gain(0.25).pan(0.3)

// chords · electric guitar clean · "Electric Guitar" · soft notes
const electric_guitar_clean_2 = note("<~@55 A@7 B@2 ~@38>".pickRestart({
  A: "[~@3 f4, ~@3 ab3@8 bb3@8 ab3@8 ~, ~ c4@2 d4@2 c4@2, ~@5 f4@8 ~@15]/7", B: "[~ f4@7]/2",
})).s("gm_electric_guitar_clean").gain(0.15).pan(0.3)

// chords · electric guitar muted · "Muted Electric Guitar"
const electric_guitar_muted = note(`<
  ~@17 A@2 B@2 C@2 ~@20 A@2 B@2 C@2 A@2 B@2 C@2 ~@20 A@2 B@2 C@2 A@2 B@2 C@2 D@2 C@2 A@2 D@2 C@2 A@2 D@2 ~
>`.pickRestart({
  A: "[bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~", // Bb5
  B: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~", // G5
  C: "[a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // A5
  D: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~", // C5
})).s("gm_electric_guitar_muted").gain(0.36).pan(0.2)

// chords · acoustic bass
const acoustic_bass = note("<~@55 A B@8 ~@38>".pickRestart({
  A: "~@7 ab3, ~@5 f3@3",
  B: "[~@51 bb4@13, ~ eb4@16 f4@16 eb4@16 f4@15, ~@3 ab4@16 bb4@16 ab4@16 ~@13, ~@13 g3@16 f3@16 g3@16 ~@3, ~@15 c4@16 ab3@16 c4@16 ~]/8",
})).s("gm_acoustic_bass").gain(0.11).pan(0.7)

// other · epiano1 · "Rhodes Piano"
const epiano1 = note("<~@58 A@5 ~@39>".pickRestart({
  A: "[~ g4@9]/5",
})).s("gm_epiano1").gain(0.35).pan(0.4)

// chords · percussive organ
const percussive_organ = note(`<
  ~@17 A@2 B@2 C@2 ~@20 A@2 B@2 D@2 A@2 B@2 C@2 ~@9 E@7 ~@4 A@2 B@2 D@2 A@2 B@2 D@6 A@2 D@4 A@2 D@2 ~
>`.pickRestart({
  A: "[d5,f5,bb5]/2", B: "[d5,f5,g5]/2", C: "[[d5,e5,g5]@7 ~]/2", D: "[d5,e5,g5]/2", E: "d7/7",
})).s("gm_percussive_organ").gain(0.08).pan(0.3)

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

// drums · rim
const rim = s("rim").struct("<~@25 A ~ B A ~ C ~@26 D E ~@43>".pickRestart({
  A: "~@3 x ~ x ~@2", B: "~@4 x!2 ~ x", C: "~@3 x ~@2 x ~@9", D: "~@3 x ~@2 x ~@2 x ~@2 x ~@2 x",
  E: "~@2 x ~@2 x ~@2 x ~@7",
})).gain(0.25)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<[~@6 x!2 ~@8] ~@4 [~@3 x]!7 ~@19 [~@3 x]!7 ~@64>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<A B@3 C@9 ~@10 B@7 C@9 ~@16 B@3 C B@3 C@6 D@2 ~@32>".pickRestart({
  A: "x!2 ~@2", B: "x!4", C: "x!3 ~", D: "x",
})).gain(0.3)

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

// drums · low tom
const low_tom = s("lt").struct("<~@6 A ~ A ~ A ~@5 B ~@15 A ~ A ~ A ~@5 B ~@11 B ~@19 B ~@10 C@16 ~>".pickRestart({
  A: "~@3 x", B: "~@4 x!2 ~@2", C: "x!2",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@5 A ~ A ~ A ~ A ~@19 A ~ A ~ A ~ A ~@64>".pickRestart({
  A: "~@3 x",
})).gain(0.4)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@16 A ~@25 A ~@11 A ~@19 A ~@27>".pickRestart({
  A: "~@6 x!2 ~@8",
})).gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<A ~@12 B C D E ~@5 A ~@16 B C D E ~@11 A ~@8 F@5 B@2 G B C D E ~@27>".pickRestart({
  A: "~@7 x", B: "~ x!3", C: "x!3 ~", D: "x!4", E: "~ x ~@2", F: "~@3 x", G: "x ~ x ~ x!2 ~@2",
})).gain(0.3)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@6 A ~ A ~ A ~ A ~@19 A ~ A ~ A ~ A ~@29 B@2 C ~@31>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~ x ~ x ~@4",
})).gain(0.15)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 A ~@8 B A ~ B@2 ~@4 A ~@7 A ~@8 B A ~ B@2 ~@9 B ~@4 A ~@3 A ~@8 B A ~ B@2 ~@26
>`.pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.25)

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

stack(
  bass, distortion_guitar, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_muted, acoustic_bass,
  epiano1, percussive_organ, kick, rim, snare, snare_soft, hihat, hihat_soft, low_tom, mid_tom, mid_tom_soft, open_hat,
  open_hat_soft, crash, ride
)

More by The Police