Strudelify
What Have I Done To Deserve This? cover art

1988 · Actually

What Have I Done To Deserve This?

Pet Shop Boys

KeyC majorTempo114 bpm
0:00/0:00
// What Have I Done To Deserve This? — Pet Shop Boys
// 114 bpm, 4/4, key C major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: 
// note: duplicate parts dropped: ch 4 "MIDI" trumpet (copy of ch 3 "MIDI" brass section)
// note: Full arrangement: all 166 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/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 · synth strings 1 · "MIDI"
const synth_strings_1 = note("<~@88 A B C D C D C D C D C D C ~@32 E F ~@29 G E>".pickRestart({
  A: "~@2 [d2,d3] ~ a2 ~ c3 ~ d2 ~@3 d2 ~ a2 ~", B: "~@4 d2 ~ d3 ~@3 a2 ~@5", C: "~@4 a2 ~ c3 ~@7 a2 ~",
  D: "~@6 d3 ~@3 a2 ~@5", E: "~@6 d3 ~@9", F: "~@6 d3 ~@7 a2 ~", G: "~@14 a2 ~",
})).s("gm_synth_strings_1").gain(0.36)

// other · synth strings 1 · "MIDI" · soft notes
const synth_strings_1_soft = note("<~@88 A B C B C B C B C B C B C ~@33 D ~@31>".pickRestart({
  A: "~@10 c3 ~@5", B: "~@14 a2 ~", C: "~@2 d3 ~@7 c3 ~@5", D: "~@8 c3 ~@3 c3 ~@3",
})).s("gm_synth_strings_1").gain(0.2)

// chords · synth strings 1 · "MIDI"
const synth_strings_1_2 = note(`<
  ~@6 A B A B A B A B C D C D C D C D C D E F E F C D C D C D E F E F A B A B A B A B ~@2 G H@2 I G J@2 K L K G C D C D
  C D E F E M@8 ~@2 N@5 O@6 P@4 Q@8 R@32 S@5 ~@28
>`.pickRestart({
  A: "[a3,c4,f4]", B: "[g3,b3]@3 [a3,c4]@5, e4", C: "[d4,e4,g4] ~@5 [d4,e4,g4] ~@5 [d4,e4,g4] ~@3",
  D: "[c4,d4,f4] ~@5 [c4,d4,f4] ~@5 [c4,d4,f4] ~@3", E: "[a#3,d4,f4] ~@5 [a#3,d4,f4] ~@5 [a#3,d4,f4] ~@3",
  F: "[c4,e4,g4] ~@5 [c4,e4,g4] ~@5 [c4,e4,g4] ~@3", G: "[c4,e4,g4]", H: "[a3,d4,f4]/2", I: "[g3,b3,d4]",
  J: "[f4@14 e4 f4, [a3,d4,a4]]/2", K: "[a#3,d4,f4]", L: "e4@6 e4 f4, [c4,g4]",
  M: "[[c4,e4,g4] ~@5 [c4,e4,g4] ~ [a3,c4,f4]@16 [g3,b3]@6 [a3,c4]@10 [a3,c4,f4]@16 [g3,b3]@6 [a3,c4]@10 [a3,c4,f4]@16 [g3,b3]@6 [a3,c4]@10 [a3,c4,f4]@16 [g3,b3]@6 [a3,c4]@2, ~@3 e4@2 ~@2 e4@2 ~@2 e4@2 ~@2 e4]/8", // C F G Am F G Am F …
  N: "[~ [c4,e4,g4]@2 [a3,d4,f4]@4 [g3,b3,d4]@2 [c4,e4,g4]]/5", // C Dm G C
  O: "[~@4 f4@14 e4 f4 [a#3,d4,f4,d5]@8 [c4,e4,g4,e5]@8 [a#3,d4,f4,f5]@8 [c4,e4,g4,g5]@4, ~ [a3,d4,a4]@4 ~@7]/6", // A# C A# C D5
  P: "[~@2 e4 f4 [a#3,d4,f4,d5]@8 [c4,e4,g4,e5]@8 [a#3,d4,f4,f5]@8 [c4,e4,g4,g5]@4]/4", // A# C A# C
  Q: "[~@2 e4 f4 [a#3,d4,f4,d5]@8 [c4,e4,g4,e5]@8 [a#3,d4,f4,f5]@8 [c4,e4,g4,g5]@8 [a3,c4,f4]@8 [g3,b3]@3 [a3,c4]@5 [a3,c4,f4]@8 [g3,b3]@3 [a3,c4], ~@11 e4@2 ~@2 e4]/8", // A# C A# C F G Am F …
  R: "[~@4 [a3,c4,f4]@8 [g3,b3]@3 [a3,c4]@5 [a3,c4,f4]@8 [g3,b3]@3 [a3,c4]@5 [a3,c4,f4]@8 [g3,b3]@3 [a3,c4]@5 [a3,c4,f4]@8 [g3,b3]@3 [a3,c4], ~@3 e4@2 ~@2 e4@2 ~@2 e4@2 ~@2 e4]/8", // F G Am F G Am F G …
  S: "[~@4 [a3,c4,f4]@8 [g3,b3]@3 [a3,c4]@5 [a3,c4,f4]@8 [g3,b3]@3 [a3,c4]@5 ~@4, ~@3 e4@2 ~@2 e4@2 ~]/5", // F G Am F G Am
})).s("gm_synth_strings_1").gain(0.62)

// bass · fretless bass · "MIDI"
const bass = note(`<
  ~@2 A B C D E B F D E B F D ~@13 G H I H J H K H I H L E B F D E B F B M ~ N O@2 P N O Q R H R I H I H S H I H I H T
  U@2 V@2 U@2 W@2 X Y Z O AA AB Z O AC AD AE AF@2 AD AG AF@2 AD AG AH@2 U@2 AI@2 U@2 AI@2 U@2 AI@2 U@2 AI@2 U@2 AI@2 U@2
  AI@2 U@2 AI@2 U@2 AI@2 U@2 AJ@2 ~@32
>`.pickRestart({
  A: "f1@2 ~ f1@2 ~@9 f1@2", B: "e1@2 ~ e1@2 ~ a1@10", C: "f1@2 ~ f1@2 ~@9 f1!2", D: "e1@2 ~ e1@2 ~ a1@5 ~ a1@2 c2@2",
  E: "f1@2 ~ f1@2 ~ f1@2 f1@6 f1@2", F: "f1@2 ~ f1@2 ~ f1@2 f1@6 f1!2", G: "~@14 g1 a#1", H: "c2@2 ~ c2 ~@12",
  I: "c2@2 ~ c2 ~@10 g1 a#1", J: "c2@2 ~ c2 ~@2 c2@7 ~ g1 a#1", K: "c2@2 ~ c2 ~@8 a#1 c2 d2@2", L: "c2@2 ~ c2 ~@8 c2@4",
  M: "c1 ~ c1 ~@13", N: "c2 ~ c2 ~ g1@2 c2 ~ c2 ~ c2 ~ g1@2 c2 ~", O: "d2 ~ d2 ~ a1@2 d2 ~ d2 ~ d2 ~ a1@2 d2 ~",
  P: "g1 ~ g1 ~ d1@2 g1 ~ g1 ~ g1 ~ d1@2 g1 ~", Q: "d2 ~ d2 ~ a1@2 d2 ~ d2 ~ d2 ~ e2@2 f2@2", R: "a#1@2 ~ a#1 ~@12",
  S: "c2@2 ~ c2 ~@8 e2@2 d2@2", T: "c2@2 ~ c2 ~@4 f1@2 ~ f1@2 ~ f1@2",
  U: "[f1@6 f1@2 e1@2 ~ e1@2 ~ a1@10 f1@2 ~ f1@2 ~ f1@2]/2",
  V: "[f1@6 f1!2 e1@2 ~ e1@2 ~ a1@5 ~ a1@2 c2@2 f1@2 ~ f1@2 ~ f1@2]/2", W: "[f1@6 f1!2 e1@2 ~ e1@2 ~ a1@10 c1@2 ~@6]/2",
  X: "~@4 c1 ~@3", Y: "~@8 c2 ~ c2 ~ g1@2 c2 ~", Z: "c2 ~ c2 ~ g1@2 c2 ~ d2 ~ d2 ~ a1@2 d2 ~",
  AA: "d2 ~ d2 ~ a1@2 d2 ~ g1 ~ g1 ~ d1@2 g1 ~", AB: "g1 ~ g1 ~ d1@2 g1 ~ c2 ~ c2 ~ g1@2 c2 ~",
  AC: "d2 ~ d2 ~ e2@2 f2@2 a#1@2 ~ a#1 ~@4", AD: "~@8 c2@2 ~ c2 ~@4", AE: "~@8 a#1@2 ~ a#1 ~@4",
  AF: "[~@8 c2@2 ~ c2 ~@2 c2@5 ~ c2!2 d2@2 c2@2 ~ c2 ~@4]/2", AG: "~@6 g1 a#1 c2@2 ~ c2 ~@4",
  AH: "[~@8 c2@2 ~ c2 ~@2 c2@5 ~ c2!2 d2@2 f1@2 ~ f1@2 ~ f1@2]/2",
  AI: "[f1@6 f1!2 e1@2 ~ e1@2 ~ a1@10 f1@2 ~ f1@2 ~ f1@2]/2", AJ: "[f1@6 f1!2 e1@2 ~ e1@2 ~ a1@10 ~@8]/2",
})).s("gm_fretless_bass").gain(0.72)

// other · brass section · "MIDI"
const brass_section = note(`<
  ~@6 A B A C A B A C ~@24 D ~ D E D E D ~@23 F G H G I G H G ~@21 J ~ K ~ K ~ K ~ K ~ K ~ K ~ K ~ K ~ K ~ K ~ K ~ K ~ K
  ~ K ~ K ~ K ~ K ~ K ~ K ~ K ~@28
>`.pickRestart({
  A: "a4@2 ~ a4 ~@10 a4!2", B: "g4@2 ~ g4@2 ~ a4@2 ~@2 e4!2 g4 a4 ~@2", C: "g4@2 ~ g4@2 ~ a4@2 ~@8", D: "a4@3 a4 ~@12",
  E: "~@10 e4!2 g4 a4 ~@2", F: "~@8 a4@2 ~ a4 ~@4", G: "~@6 a4!2 g4@2 ~ g4@2 ~ a4@2",
  H: "~@2 e4!2 g4 a4 ~@2 a4@2 ~ a4 ~@4", I: "~@2 b4 ~@2 c5 ~@2 a4@2 ~ a4 ~@4", J: "~@8 g4!3 a4 ~@4",
  K: "~@2 e4!2 g4 a4 ~@2 g4!3 a4 ~@4",
})).s("gm_brass_section").gain(0.54).pan(0.4)

// other · music box · "MIDI"
const music_box = note(`<
  ~@2 A B A B A B A B A B A B ~@24 A B A B A B A B ~@22 C D@6 E@2 ~@20 C D@38 E@2 ~@28
>`.pickRestart({
  A: "~@2 c7@2 a6@5 ~ c7@2 a6@4", B: "~ e6 g6 a6@3 ~@2", C: "~@5 c7 a6@2",
  D: "[~@2 c7@2 a6@5 ~ e6@2 g6@2 a6@6 ~@6 c7@2 a6@4]/2", E: "[~@2 c7@2 a6@5 ~ e6@2 g6@2 a6@6 ~@12]/2",
})).s("gm_music_box").gain(0.41)

// chords · epiano2 · "MIDI"
const epiano2 = note(`<
  ~@6 A B A B A B A B C D C D C D C D C D E F E F C D C D C D E F E F A B A B A B A B ~@2 F G@2 H F I G E F E F C D C D
  C D E F E J K@6 L@2 ~ M N O P Q R S T U V U V U V U V U V U W K@30 L@2 ~@36
>`.pickRestart({
  A: "~@2 c5@2 a4@5 ~ c5@2 a4@4", B: "~ e4 g4 a4@3 ~@2", C: "[d4,e4,g4] ~@5 [d4,e4,g4] ~@5 [d4,e4,g4] ~@3",
  D: "[c4,d4,f4] ~@5 [c4,d4,f4] ~@5 [c4,d4,f4] ~@3", E: "[a#3,d4,f4] ~@5 [a#3,d4,f4] ~@5 [a#3,d4,f4] ~@3",
  F: "[c4,e4,g4] ~@5 [c4,e4,g4] ~@5 [c4,e4,g4] ~@3", G: "[a3,d4,f4] ~@5 [a3,d4,f4] ~@5 [a3,d4,f4] ~@3",
  H: "[g3,b3,d4] ~@5 [g3,b3,d4] ~@5 [g3,b3,d4] ~@3", I: "[d4,f4,a4] ~@5 [d4,f4,a4] ~@5 [d4,f4,a4] ~@3",
  J: "[c4,e4,g4] ~@5 [c4,e4,g4] ~@3 c5@2 a4@4", K: "[~@2 c5@2 a4@5 ~ e4@2 g4@2 a4@6 ~@6 c5@2 a4@4]/2",
  L: "[~@2 c5@2 a4@5 ~ e4@2 g4@2 a4@6 ~@12]/2", M: "~@8 [c4,e4,g4] ~@5 [c4,e4,g4] ~",
  N: "~@4 [c4,e4,g4] ~@3 [a3,d4,f4] ~@5 [a3,d4,f4] ~", O: "~@4 [a3,d4,f4] ~@3 [a3,d4,f4] ~@5 [a3,d4,f4] ~",
  P: "~@4 [a3,d4,f4] ~@3 [g3,b3,d4] ~@5 [g3,b3,d4] ~", Q: "~@4 [g3,b3,d4] ~@3 [c4,e4,g4] ~@5 [c4,e4,g4] ~",
  R: "~@4 [c4,e4,g4] ~@3 [d4,f4,a4] ~@5 [d4,f4,a4] ~", S: "~@4 [d4,f4,a4] ~@3 [a3,d4,f4] ~@5 [a3,d4,f4] ~",
  T: "~@4 [a3,d4,f4] ~@3 [a#3,d4,f4] ~@5 [a#3,d4,f4] ~", U: "~@4 [a#3,d4,f4] ~@3 [c4,e4,g4] ~@5 [c4,e4,g4] ~",
  V: "~@4 [c4,e4,g4] ~@3 [a#3,d4,f4] ~@5 [a#3,d4,f4] ~", W: "~@4 [c4,e4,g4] ~@5 c5@2 a4@4",
})).s("gm_epiano2").gain(0.64)

// other · synth bass 2 · "MIDI"
const synth_bass_2 = note(`<
  ~@14 A@10 B A B A@7 B A B A@2 C A C A C A C A@5 D A@3 B A B A@7 B A B A E A E A E A E A@5 F G A@2 H I H I H I H I H I
  H I A E A E A E A E A E A E A E A E A E A E A E A E A E A E A E A E J ~@36
>`.pickRestart({
  A: "c4!16", B: "a#3!16", C: "b3!6 c4!10", D: "b3!16", E: "c4!8 b3!6 c4!2", F: "c4!8 b3!8", G: "b3!8 c4!8",
  H: "c4!8 a#3!8", I: "a#3!8 c4!8", J: "c4!8 ~@8",
})).s("gm_synth_bass_2").gain(0.18)

// other · string ensemble 1 · "MIDI"
const string_ensemble_1 = note("<~@48 A@2 B@2 A@2 B ~@23 C D@2 E@2 D@2 F ~@80>".pickRestart({
  A: "~@6 g4 ~ g5 ~ g5 ~ e5 ~@3", B: "~@6 g4 ~ g5 ~ g5 ~ d5 ~@3", C: "~@14 g4 ~", D: "g5 ~ g5 ~ e5 ~@9 g4 ~",
  E: "g5 ~ g5 ~ d5 ~@9 g4 ~", F: "g5 ~ g5 ~ d5 ~@11",
})).s("gm_string_ensemble_1").gain(0.56)

// other · pad new age · "MIDI"
const pad_new_age = note(`<
  ~@18 A B A C ~@2 D E D E A B ~@2 F C D E D E ~@17 D E G H A I ~@2 A J D E G K ~@16 L M@2 N@2 M@2 N@2 M@2 O@2 ~@68
>`.pickRestart({
  A: "~@2 d5 ~ d5@2 d5 ~ d5 ~ d5@2 e5@2 d5@2", B: "c5@9 ~@7", C: "c5 ~", D: "~@4 a#4 ~ a#4@3 ~ a#4@3 ~ a#4 ~",
  E: "a#4@4 c5@11 ~", F: "~@4 d5@2 d5 ~ d5 ~ d5@2 e5@2 d5@2", G: "~@4 d5 ~ d5@3 ~ d5@3 ~ d5 ~", H: "d5@4 e5@11 ~",
  I: "c5@4 c5@2 g4 ~ g4@2 c5@2 a4@2 g4@2", J: "c5@4 ~ c5 a4 g4", K: "d5 e5 ~@2", L: "~@12 a#4 ~ a#4@2",
  M: "[~@2 a#4@3 ~ a#4 ~ a#4@4 c5@11 ~@5 d5 ~ d5@2]/2", N: "[~@2 d5@3 ~ d5 ~ d5@4 e5@11 ~@5 a#4 ~ a#4@2]/2",
  O: "[~@2 d5@3 ~ d5 ~ d5@4 e5@11 ~@9]/2",
})).s("gm_pad_new_age").gain(0.51).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B A B A B A B A@2 B A B A B A B A@2 B A B A B A B A@2 B A B A B A B A@2 B A B A B A B A@2 B A B A B A B A@2 B A
  B A B A B A@2 B A B A B A B A@2 B A B A B A B A@2 B A B A B A B A@2 B A B A B A B A@2 B A B A B A B A@2 B A B A B A B
  A@2 B A B A B A B A@2 B A B A B A B A ~@29
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@5 x ~@3 x ~@2 x ~@2",
})).gain(0.46)

// drums · rim
const rim = s("rim").struct("<~@2 [x!5 ~@11]!135 ~@29>").gain(0.2)

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!135 ~@29>").gain(0.46)

// drums · hihat
const hihat = s("hh").struct("<~@2 [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!135 ~@29>").gain(0.31)

// drums · tambourine
const tambourine = s("tb").struct("<[x!4]!130 [x!3 ~] ~@35>").gain(0.26)

// drums · cowbell
const cowbell = s("cb").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A@2 ~ A ~ A ~ A
  ~ A ~ A ~ A B C B C B C B C B C B C B C B C B D C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B C B C B C B C B C ~@36
>`.pickRestart({
  A: "~ x!2 ~", B: "~@3 x", C: "x", D: "x ~@2 x",
})).gain(0.15)

stack(
  synth_strings_1, synth_strings_1_soft, synth_strings_1_2, bass, brass_section, music_box, epiano2, synth_bass_2,
  string_ensemble_1, pad_new_age, kick, rim, snare, hihat, tambourine, cowbell
)

More by Pet Shop Boys