Strudelify
West End Girls cover art

1986 · Please

West End Girls

Pet Shop Boys

KeyE minorTempo115 bpm
0:00/0:00
// West End Girls — Pet Shop Boys
// 115 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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 · slap bass 2 · "SLAPBASS 2"
const bass = note(`<
  ~@15 A@4 B C D E F C D E G H I E J H I K A@4 B C D E F C D E G H I E J H I K A@2 L@2 C D E M C D E F C D E G H I E J H
  I K A@2 L@2 C D E F C D E G H I E J H I K A@2 N@2 O P Q P Q P Q P Q P R
>`.pickRestart({
  A: "[d2@4 d#2@4 e2!2 ~@4 e1 e1@2 e1 e1@2 ~@12]/2", B: "~@4 d1 e1 ~ d1", C: "e1@2 d1 e1 ~@4 d1@2 e1@2 ~@2 d1@2",
  D: "e1@2 ~@2 g1@2 ~@2 a1!2 ~@4 g1@2", E: "a1@2 g1 a1 ~@4 g1@2 a1@2 ~@2 g1@2", F: "a1@2 a1@2 b1@4 e1!2 ~@4 d1@2",
  G: "a1@2 ~@2 b1@2 ~@2 b1!2 ~@4 a1@2", H: "b1@2 b1!2 ~@4 a1@2 b1@2 ~@2 a1@2", I: "b1@2 ~@2 g1@4 a1!2 ~@4 g1@2",
  J: "a1@2 ~@2 a1@4 b1!2 ~@4 a1@2", K: "a1@2 g1 a1 ~@4 g1@2 a1@2 ~@2 a1@2",
  L: "[d2@4 d#2@4 e2!2 ~@4 e1 e1@2 e1 e1@2 ~@4 d1@2 e1@2 ~@2 d1@2]/2", M: "a1!2 b1@2 d1 e1 ~ d1",
  N: "[d2@4 d#2@4 e2!2 ~@4 e1 e1@2 e1 e1@2 ~@10 a1@2]/2", O: "d2@2 d#2@2 e2@3 c1", P: "d1 ~@3 d1 e1 ~ d1",
  Q: "e1@2 d1 e1 ~@4 e2@6 c1@2", R: "e1@2 d1 e1 ~@12",
})).s("gm_slap_bass_2").gain(0.6)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<~@68 A@2 ~@36 B@2 ~@4>".pickRestart({
  A: "[~@10 g4@3 ~ f#4@4 e4@4 b4@10, ~@22 a#4 ~@9]/2", B: "[~@5 g5@2 a5@2 g5 f#5 g5 f#5 e5@2 ~]/2",
})).s("gm_lead_2_sawtooth").gain(0.33)

// chords · blown bottle · "BOTTLEBLOW"
const blown_bottle = note("<~@55 A B C D ~@19 E B C D ~@15 E B C B F ~@10>".pickRestart({
  A: "~@10 e4 ~ [e4,f#4] ~ [e4,f#4]!2", B: "~ [e4,f#4]!4 ~ [e4,f#4] ~ [e4,f#4] ~ [e4,f#4] ~ [e4,f#4] ~ [e4,f#4]!2",
  C: "~ [e4,f#4] ~@8 [e4,f#4] ~ [e4,f#4] ~ [e4,f#4]!2", D: "~ [e4,f#4]!4 ~ [e4,f#4] ~@9",
  E: "~@10 [e4,f#4] ~ [e4,f#4] ~ [e4,f#4]!2", F: "~ [e4,f#4] ~@14",
})).s("gm_blown_bottle").gain(0.38)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@2 A@7 B@8 C@8 D@2 E@8 F@2 C@8 D@2 E@8 F@2 G@7 H@6 E@8 F@2 G@7 D@2 E@8 F@2 I@3 J@8 K@2
>`.pickRestart({
  A: "[~@2 [b3,d4,e4]@16 ~ g3 a3 f#3 [e3,g#3,b3]@4 ~ g3, ~@9 e4@4 ~, ~@9 [c3,b3] [d3,d4] ~@2 [c3,b3,e4]]/7", // E7 E Cmaj7 D Cmaj7
  B: "[a3 f#3 [e3,g#3,b3]@4 ~ g3 a3 f#3 [e3,g#3,b3]@4 ~ g3 a3 f#3 [f#3,a3,d4,f#4]@6 [a3,b3,f#4]@2 [g#3,b3,e4]@6, [d3,d4] ~@2 e4@4 e4@2 ~@7, ~@3 [c3,b3] [d3,d4] ~@2 [c3,b3] d3@5 ~@3, ~@8 d4 ~@7]/8", // E D B7 E D Cmaj7 D Cmaj7
  C: "[[a3,b3,f#4] [g#3,b3,e4]@4 [b3,d4,f#4]@4 [c4,e4,g4]@4 [b3,d4,f#4]@3]/8", D: "[~ [c4,e4,g4]@3]/2",
  E: "[~ [a3,b3,d4,f#4]@4 [g3,a3,c4,e4]@4 [a3,b3,d4,f#4]@4 [g3,a3,c4,e4]@3]/8", F: "[[a3,b3,f#4] [g#3,b3,e4]@3]/2",
  G: "[[a3,b3,f#4] [g#3,b3,e4]@2 [b3,d4,f#4]@4 [c4,e4,g4]@4 [b3,d4,f#4]@3]/7", // B7 E Bm C Bm
  H: "[~ [c4,e4,g4]@4 [b3,d4,f#4]@4 [c4,e4,g4]@3]/6", I: "[[a3,b3,f#4] [g#3,b3,e4]@4 [g3,b3,e4]]/3",
  J: "[[f#3,a3,d4] [g3,b3,e4]@2 [g3,b3,e4]]/2", K: "[[f#3,a3,d4] [g3,b3,e4]@2 ~]/2",
})).s("gm_string_ensemble_2").gain(0.29)

// other · trumpet
const trumpet = note("<~@60 A@3 ~ B C D E@2 F@2 G@2 ~@34 H I@2 J K>".pickRestart({
  A: "[~@6 e5@2 g5@2 g5@2 g5@2 g5 e5@3 g5@3 ~ d5@2 e5 ~ g5 ~ g5@2 g5 e5@4 ~ e5 g5@2 ~@9]/3",
  B: "~@4 d5 e5@2 g5@3 b4 ~ c5 ~ b4 ~", C: "e5 ~ b4 e5 a5 b5 a5@5 ~@3 g5 ~", D: "g5 b4 ~@5 g5 e5 g5 b5 a5@2 ~@3",
  E: "[~@2 e5 f#5 g5@2 e5 f#5 g5 b5 a5@8 g5 ~ g5@2 f#5 ~ f#5@2 e5 ~@5]/2",
  F: "[~@6 e4 f#4 b4@2 a4 ~ a4@2 g4 g4@2 f#4 f#4@2 e4@2 ~@10]/2", G: "[~@8 a4@2 g4 ~ g4@2 f#4 f#4@3 e4 ~ e4 ~@11]/2",
  H: "~@14 a5 ~", I: "[a5@2 g5 ~@3 g5 f#5 e5@12 ~@10 g5 ~]/2", J: "g5@2 f#5 ~ f#5@2 e5 e5@7 g5 ~",
  K: "a5@2 g5 ~@3 g5 ~@9",
})).s("gm_trumpet").gain(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~@2 B C@3 B C@3 D C@3 D C@3 D C@3 B C@7 D C@3 D C@3 D C@3 B C@6 D C@3 D C@3 D C@3 D C@3 B
  C@6 D C@3 D C@3 D C@3 B C@13 E
>`.pickRestart({
  A: "~@3 x!2 ~@3", B: "x!3 ~", C: "x!2", D: "x!2 ~@2 x ~@3", E: "x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@14 A@2 B@19 A B@3 C B@15 A B@2 C B@19 A B@2 C B@15 A B@13 D>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~ x!2 ~@4 x ~@3", D: "~ x ~@2",
})).gain(0.35)

// drums · clap
const clap = s("cp").struct("<~@19 A@7 ~@8 A@4 ~ A@7 ~ A@22 ~ A@18 ~ A@11 ~ A@10 ~>".pickRestart({
  A: "~@3 x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<[~@8 x!8] [x!16]!110 [x!8 ~@8]>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@58 [~ x] ~@53>").gain(0.25)

// drums · cowbell
const cowbell = s("cb").struct("<~@35 A B C B D ~@15 A B C E ~@19 A B C E ~@15 A B C B D ~@10>".pickRestart({
  A: "~@10 x ~ x ~ x!2", B: "~ x!4 ~ x ~ x ~ x ~ x ~ x!2", C: "~ x ~@8 x ~ x ~ x!2", D: "~ x ~@14", E: "~ x!4 ~ x ~@9",
})).gain(0.35)

// drums · congas
const congas = s("conga:13").struct("<~@39 A@8 ~@11 A@12 ~@11 A@8 ~@12 A@10 ~>".pickRestart({
  A: "~@5 x ~ x",
})).gain(1.43)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@40
  [~@2 x!2 ~@12]!8
  ~@11
  [~@2 x!2 ~@12]!12
  ~@11
  [~@2 x!2 ~@12]!8
  ~@12
  [~@2 x!2 ~@12]!10
>`).gain(1.43)

// drums · triangle
const triangle = s("triangles:35").struct("<~@20 A@5 B A@2 ~@12 A@5 B A@2 ~@34 A@5 B A@2 ~@22>".pickRestart({
  A: "~ x ~@2", B: "~ x ~@6",
})).gain(3.46)

stack(
  bass, lead_2_sawtooth, blown_bottle, string_ensemble_2, trumpet, kick, snare, clap, hihat, crash, cowbell, congas,
  congas_2, triangle
)

More by Pet Shop Boys