Strudelify

Can't Get Used To Losing You

Andy Williams

KeyA minorTempo95 bpm
0:00/0:00
// Can't Get Used To Losing You — Andy Williams
// 95 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 17, 4/4 at bar 18, 2/4 at bar 30, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 58 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B A B A B A B C D E F G H I J K L M L N O P Q R S T U V A B A B A B A B C D E F G H I J K W X S T U V A B A B Y ~
>`.pickRestart({
  A: "c2@6 ~@2 f1@3 ~ d2@3 ~", B: "g1@6 ~@2 d2@3 ~ f1@3 ~", C: "e2@2 ~@2 f2 ~ a1 ~", D: "d2@2 ~@2 a1 ~ a1 ~",
  E: "d2@2 ~@2 d2 ~ d2 ~", F: "g2@3 ~ g1@2 ~@10", G: "f2@5 ~ a2@2 c3@4 a2@2 f2 ~", H: "e2@6 g2@2 b2@4 g2@3 ~",
  I: "d2@6 f2@2 a2@4 f2@3 ~", J: "g2 ~ g1 ~@5", K: "~@2 g1 ~ a1 ~ b1 ~ c2@6 ~@2", L: "f1@3 ~ d2@3 ~ g1@6 ~@2",
  M: "d2@3 ~ f1@3 ~ c2@6 ~@2", N: "d2@3 ~ f1@3 ~ e2@4 ~@4", O: "f2 ~ a1 ~ d2@2 ~@2", P: "a1 ~ a1 ~ d2@2 ~@2",
  Q: "d2@2 ~@2 d2@2 ~@2 g2@3 ~ g1@2 ~@2", R: "~@8 f2@5 ~ a2@2", S: "c3@4 a2@2 f2 ~ e2@6 g2@2",
  T: "b2@4 g2@3 ~ d2@6 f2@2", U: "a2@4 f2@3 ~ g2@2 ~@2 g1@2 ~@2", V: "~@10 g1 ~ a1 ~ b1 ~", W: "f1@3 ~ d2@3 ~ g1@4 ~@4",
  X: "g1@3 ~ f#1@3 ~ f2@5 ~ a2@2", Y: "c2",
})).s("gm_acoustic_bass").gain(0.72)

// chords · slap bass 1 · "SLAPBASS 1"
const slap_bass_1 = note(`<
  A B A B A B A B C D E F ~@3 G H I J I K L M N ~@3 O ~ A B A B A B A B C D E F ~@3 G H P ~@3 O ~ A B A B ~@2
>`.pickRestart({
  A: "~@4 [c5,e5,g5] ~@5 [c5,f5,a5] ~@3 [d5,f#5,a5] ~", B: "~@4 [d5,g5,b5] ~@5 [d5,f#5,a5] ~@3 [c5,f5,a5] ~",
  C: "~@4 [g4,b4,e5] ~@5 [a4,c5,f5] ~@3 [a4,c#5,e5] ~", D: "~@4 [a4,d5,f5] ~@5 [a4,c#5,e5] ~@3 [a4,c#5,e5] ~",
  E: "~@4 [f#4,a4,c5,d5] ~@5 [f#4,a4,c5,d5] ~@3 [f#4,a4,c5,d5] ~", F: "[g4,d5,g5,b5] ~@3 [g4,d5,g5,b5] ~@11",
  G: "[f4,g4,b4] ~@3 [f4,g4,b4] ~@11", H: "~@12 [c5,e5,g5] ~@3", I: "~@2 [c5,f5,a5] ~@3 [d5,f#5,a5] ~@5 [d5,g5,b5] ~@3",
  J: "~@2 [d5,f#5,a5] ~@3 [c5,f5,a5] ~@5 [c5,e5,g5] ~@3", K: "~@2 [d5,f#5,a5] ~@3 [c5,f5,a5] ~@5 [g4,b4,e5] ~@3",
  L: "~@2 [a4,c5,f5] ~@3 [a4,c#5,e5] ~@5 [a4,d5,f5] ~@3", M: "~@2 [a4,c#5,e5] ~@3 [a4,c#5,e5] ~@5 [f#4,a4,c5,d5] ~@3",
  N: "~@2 [f#4,a4,c5,d5] ~@3 [f#4,a4,c5,d5] ~ [g4,d5,g5,b5] ~@3 [g4,d5,g5,b5] ~@3", // D7 G
  O: "~@8 [f4,g4,b4] ~@3 [f4,g4,b4] ~@3", P: "~@2 [c5,f5,a5] ~@3 [d5,f#5,a5] ~@5 [b4,d5,g5] ~@3",
})).s("gm_slap_bass_1").gain(0.48)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B A B A B A B C D E F G H I J K L M L N O P Q R@2 S@2 T A B A B A B A B C D E F G H I J K U V@2 S@2 T A B A B W ~
>`.pickRestart({
  A: "~@4 [c4,e4,g4] ~@5 [c4,f4,a4] ~@3 [d4,f#4,a4] ~", B: "~@4 [d4,g4,b4] ~@5 [d4,f#4,a4] ~@3 [c4,f4,a4] ~",
  C: "~@4 [g3,b3,e4] ~@5 [a3,c4,f4] ~@3 [a3,c#4,e4] ~", D: "~@4 [a3,d4,f4] ~@5 [a3,c#4,e4] ~@3 [a3,c#4,e4] ~",
  E: "~@4 [f#3,a3,c4,d4] ~@5 [f#3,a3,c4,d4] ~@3 [f#3,a3,c4,d4] ~", F: "[g3,d4,g4,b4] ~@3 [g3,d4,g4,b4] ~@11",
  G: "~@3 [a4,c5], [f2,a3,c4], f3@4 a4 f3@3, ~ c3@3, ~@3 f4@5", // Am F
  H: "[g4,b4]@3 [e4,g4,b4] ~@3 e4, [e3,b3,d4] [g4,b4], ~@4 e4@3 ~, ~@5 e3@3, ~@3 b3", // G Em E7 G
  I: "~@6 a4@2 f4@2 ~@2 d4@3 ~, d3@15 ~, [d4,f4,a4]@6 d4@4 f4@5 ~, ~@4 a3@11 ~, ~@8 a4@7 ~", // Dm
  J: "[f4,g4,b4] ~@3 [g2,b4]@2 ~@10, g2@2 ~@2 [f4,g4] ~@11", K: "~@2 g2@2 a2@2 b2 ~@5 [c4,e4,g4] ~@3",
  L: "~@2 [c4,f4,a4] ~@3 [d4,f#4,a4] ~@5 [d4,g4,b4] ~@3", M: "~@2 [d4,f#4,a4] ~@3 [c4,f4,a4] ~@5 [c4,e4,g4] ~@3",
  N: "~@2 [d4,f#4,a4] ~@3 [c4,f4,a4] ~@5 [g3,b3,e4] ~@3", O: "~@2 [a3,c4,f4] ~@3 [a3,c#4,e4] ~@5 [a3,d4,f4] ~@3",
  P: "~@2 [a3,c#4,e4] ~@3 [a3,c#4,e4] ~@5 [f#3,a3,c4,d4] ~@3", // A D7
  Q: "~@2 [f#3,a3,c4,d4] ~@3 [f#3,a3,c4,d4] ~ [g3,d4,g4,b4] ~@3 [g3,d4,g4,b4] ~@3", // D7 G
  R: "[~@10 [a4,c5]@2 [g4,b4]@3 [e4,g4,b4], ~ [f2,a3,c4]@2 ~, ~@4 f3@4 a4 f3@3 [e3,b3,d4]@4, ~@3 c3@3 ~@2, ~@7 f4@5 ~@4]/2", // Am G Em F E7
  S: "[~@6 e4@2 ~@6 a4@2 f4@2 ~@2 d4@3 ~ [f4,g4,b4] ~@3 [g2,b4]@2 ~@2, [g4,b4]@8 ~@8 a4@7 ~@9, e4@6 ~@2 [d4,f4,a4]@6 d4@4 f4@5 ~@5 [f4,g4] ~@3, ~@2 e3@6 d3@15 ~ g2@2 ~@6, ~@4 b3@4 ~@4 a3@11 ~@9]/2", // G7 G Dm Fsus2
  T: "~@10 g2@2 a2@2 b2 ~", U: "~@2 [c4,f4,a4] ~@3 [d4,f#4,a4] ~@5 [g3,d4,g4,b4] ~@3",
  V: "[~@2 [g3,d4,g4,b4] ~ [f#3,f#4,a#4,c#5]@3 ~@13 [a4,c5]@4 [g4,b4]@6 [e4,g4,b4]@2, ~ [f2,a3,c4]@2 ~, ~@4 f3@4 a4 f3@3 [e3,b3,d4]@4, ~@3 c3@3 ~@2, ~@7 f4@5 ~@4]/2", // G F# Am G Em F E7
  W: "[c3,g3,c4,e4]", // C
})).s("gm_epiano2").gain(0.47)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@12 A B C D ~@8 E@4 ~@5 F@4 G H I J A B C D ~ K L@4 ~@5 M ~>".pickRestart({
  A: "[f3,a4,c5]", B: "[e3,g4,b4]", C: "[d3,f4,a4]@15 ~", D: "[g3,f4,b4] ~ [g3,f4,b4] ~@5",
  E: "[~@8 [f3,a4,c5]@16 [e3,g4,b4]@16 [d3,f4,a4]@15 ~ [g3,f4,b4]@2 ~@2 [g3,f4,b4]@2 ~@2]/4", // F Em Dm G7
  F: "[e5@2 f5 f#5 g5@2 a5 f5, c5@12 d5@19 ~]/2", G: "[e4,g4,b4]@2 [f4,a4,c5] [c#4,e4,a4]", H: "[d4,f4,a4] [c#4,e4,a4]",
  I: "[d4,f#4,a4]@15 ~", J: "[d4,b4]@2 ~@2 [d4,g4] ~@11, g4 ~@3 b4@2 ~@10", K: "~@3 g5",
  L: "[[b5,d6]@4 [a#5,c#6]@3 ~ [f3,a4,c5,c6]@16 [e3,g4,b4,b5]@16 [d3,f4,a4,a5]@15 ~ [g3,f4,b4]@2 ~@2 [g3,f4,b4]@2 ~@2, ~@56 b5 ~@3 b5 ~@3]/4", // Bm A#m F Em Dm G7
  M: "[c3,g3,e4]", // C
})).s("gm_string_ensemble_2").gain(0.28)

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

// drums · rim
const rim = s("rim").struct("<~@12 A@3 ~ B C@6 D E B@2 F G H@11 I A@3 ~ B C J A@2 K G H@4 ~@2>".pickRestart({
  A: "~@2 x ~@3 x!2", B: "~@2 x!2 ~@2 x ~", C: "~ x ~ x ~@2 x ~", D: "~ x ~ x!2 ~ x ~", E: "~@3 x", F: "~@2 x!2 ~@4",
  G: "~@6 x!2", H: "~@2 x ~@2 x ~ x", I: "x!2 ~@2", J: "~ x ~ x ~@2 x!2", K: "~ x ~@2",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<A@11 B C@3 D E F@6 G H C@3 E C@11 I C@3 D E F J C@2 K E A@3 L ~@2>".pickRestart({
  A: "~@2 x ~@2 x ~ x", B: "x ~@3 x ~@6 x ~@4", C: "x!4", D: "x!2 ~ x", E: "~ x ~ x", F: "~ x ~ x ~@2 x ~",
  G: "~ x ~ x ~@4", H: "~@3 x ~ x ~@2 x ~@3 x ~@3", I: "~@11 x ~ x ~@2", J: "~ x ~ x!2 ~ x ~", K: "x ~@2 x!2 ~ x ~",
  L: "~@4 x ~@5 x ~@2 x ~@2",
})).gain(0.71)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@11 A B@3 ~ C ~@7 D B@2 E A B F B F B F B F B F B A B@3 ~ C ~ G B@2 H A ~@3 I ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~ x ~ x ~ x", C: "~ x ~@6", D: "~ x ~@3 x ~ x", E: "~ x ~ x ~@4", F: "~ x ~ x ~ x ~@2",
  G: "~@5 x ~ x", H: "~@2 x ~ x!2 ~@10", I: "~@3 x",
})).gain(0.21)

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

stack(bass, slap_bass_1, epiano2, string_ensemble_2, kick, rim, hihat, hihat_soft, open_hat)

More by Andy Williams