Strudelify
Where The Streets Have No Name cover art

1991

Where The Streets Have No Name

Pet Shop Boys

KeyB♭ majorTempo127 bpm
0:00/0:00
// Where The Streets Have No Name — Pet Shop Boys
// 127 bpm, 4/4, key Bb major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 185 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(127/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 · synth bass 1
const bass = note(`<
  ~@13 A@6 B@2 C@2 D@2 E@4 A@6 B@2 C@2 D@2 E@4 A@4 B@4 C@2 D@2 E@4 F@2 G@2 F@2 G A@2 F E G A B@2 E@2 A@6 B@2 C@2 D@2 E@4
  A@4 B@4 C@2 D@2 E@4 F@2 G A@2 F E G A B@2 E@2 H@54 I ~@7
>`.pickRestart({
  A: "bb2 ~ bb2 ~ bb2!2 ~ bb2 ~ bb2 ~ bb2!2 ~ bb2 ~", B: "eb3 ~ eb3 ~ eb3!2 ~ eb3 ~ eb3 ~ eb3!2 ~ eb3 ~",
  C: "g2 ~ g2 ~ g2!2 ~ g2 ~ g2 ~ g2!2 ~ g2 ~", D: "f2 ~ f2 ~ f2!2 ~ f2 ~ f2 ~ f2!2 ~ f2 ~",
  E: "ab2 ~ ab2 ~ ab2!2 ~ ab2 ~ ab2 ~ ab2!2 ~ ab2 ~", F: "gb2 ~ gb2 ~ gb2!2 ~ gb2 ~ gb2 ~ gb2!2 ~ gb2 ~",
  G: "db3 ~ db3 ~ db3!2 ~ db3 ~ db3 ~ db3!2 ~ db3 ~", H: "b2 ~ b2 ~ b2!2 ~ b2 ~ b2 ~ b2!2 ~ b2 ~", I: "b2@7 ~@9",
})).s("gm_synth_bass_1").gain(0.38).pan(0.6)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@5 A@8 ~@11 B C@2 D ~@12 B C@2 D E F G F ~@3 H I ~@3 J K L K ~@10 M N O P Q@2 R@2 ~@9 S T B C@2 D E F G F ~@3 H I ~@3
  J K L K ~@6 U V W@2 Q@2 R@2 ~@62
>`.pickRestart({
  A: "[[d5,eb5,g5]@16 ~@3 g4@3 f4@2 [d4,f4]@3 ~@5 [eb5,g5]@16 bb5@3 [g4,g5]@3 f4@2 [d4,f4]@3 ~@5, c5@38 c5@64 c5@25 ~, ~@32 d5@64 d5@16 d5@15 ~, ~ f5 ~@2, ~@32 bb4@12 bb4@20 ~@32 [bb4,f5]@12 [bb4,f5]@19 ~]/8", // Ebmaj7 Dm Eb G Dm Bb5
  B: "~@10 bb4@3 bb4@2 ~", C: "[c5@3 bb4@2 ~ a4@2 bb4@14 ~@8 bb4@2]/2", D: "c5@2 bb4@13 ~",
  E: "~@2 f5@2 ~ f5@2 ~ f5@3 eb5@3 d5 eb5", F: "d5@7 ~", G: "~@2 f5@3 f5@3 f5@3 eb5@3 d5 eb5", H: "bb5@3 g5@3 f5@2",
  I: "d5@3 ~@5", J: "~@5 bb4@2 bb4", K: "c5@2 bb4 a4 bb4@4", L: "~@8 bb4@3 bb4@2 ~ bb4@2", M: "[gb4,bb4,db5]",
  N: "[eb4,ab4,c5]@15 ~", O: "[eb4,ab4,c5]", P: "[db4,f4,bb4]@3 ~",
  Q: "[[db5,gb5,bb5]@6 [db5,gb5,bb5]@6 [bb4,db5,gb5]@6 [db5,gb5,bb5]@2 ~@4 [db5,gb5,bb5]@3 ~ [db5,gb5,bb5]@4]/2", // Gb
  R: "[[gb5,bb5,db6]@3 [eb5,ab5,c6]@7 ~@6]/2", S: "~@3 g5@2 g5@2 g5", T: "g5 f5 f5@3 ~@3", U: "bb4 c5 db5 bb5",
  V: "ab5 f5 eb5 db5", W: "[[ab4,eb5,ab5,c6]@8 [bb4,db5,f5,bb5]@7 ~, f4@15 ~]/2",
})).s("gm_string_ensemble_2").gain(0.22)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@29 A@3 B A@2 C@2 D E F G H@2 I@2 A@3 B C@4 D E F G H@2 I@2 J@2 K L J@2 K M@2 ~@8 A@3 B A@2 C@2 D E F G H@2 I@2 A@3 B
  C@4 D E F G H@2 I@2 J@2 K M@2 ~@16 N@3 O N@3 O N@3 O N@3 O N@3 O N@3 O N@3 O N@3 O N@3 O N@3 O N@3 O N P@8 ~
>`.pickRestart({
  A: "[f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5]!2 ~ [f4,bb4,d5]!2 ~ [f4,bb4,d5] ~", // Bb
  B: "[f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5]!2 ~ [f4,bb4,d5] [f4,bb4,d5]@2 [f4,bb4,d5] ~", // Bb
  C: "[g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3 [g4,bb4,eb5]!2 ~ [g4,bb4,eb5]!2 ~ [g4,bb4,eb5] ~", // Eb
  D: "[g4,bb4,d5] ~@3 [g4,bb4,d5] ~@3 [g4,bb4,d5]!2 ~ [g4,bb4,d5]!2 ~ [g4,bb4,d5] ~", // Gm
  E: "[g4,bb4,d5] ~@3 [g4,bb4,d5] ~@3 [g4,bb4,d5]!2 ~ [g4,bb4,d5] [g4,bb4,d5]@2 [g4,bb4,d5] ~", // Gm
  F: "[f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5]!2 ~ [f4,a4,c5]!2 ~ [f4,a4,c5] ~", // F
  G: "[f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5]!2 ~ [f4,a4,c5] [f4,a4,c5]@2 [f4,a4,c5] ~", // F
  H: "[eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3 [eb4,ab4,c5]!2 ~ [eb4,ab4,c5]!2 ~ [eb4,ab4,c5] ~", // Ab
  I: "[eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3 [eb4,ab4,c5]!2 ~ [eb4,ab4,c5] [eb4,ab4,c5]@2 [eb4,ab4,c5] ~", // Ab
  J: "[bb4,db5,gb5]!4 [bb4,db5,gb5]@2 [bb4,db5,gb5] [bb4,db5,gb5]@2 [bb4,db5,gb5]!3 [bb4,db5,gb5]@2 [bb4,db5,gb5] ~", // Gb
  K: "[ab4,db5,f5]!4 [ab4,db5,f5]@2 [ab4,db5,f5]!2 ~ [ab4,db5,f5]!3 [ab4,db5,f5]@2 [ab4,db5,f5] ~", // Db
  L: "[ab4,db5,f5]!4 [ab4,db5,f5]@2 [ab4,db5,f5]!2 ~ [ab4,db5,f5]!3 [ab4,db5,f5]@2 [ab4,db5,f5]@2", // Db
  M: "[[bb4,f5]@29 ~@3]/2", N: "[gb4,b4,eb5] ~@3 [gb4,b4,eb5] ~@3 [gb4,b4,eb5]!2 ~ [gb4,b4,eb5]!2 ~ [gb4,b4,eb5] ~",
  O: "[gb4,b4,eb5] ~@3 [gb4,b4,eb5] ~@3 [gb4,b4,eb5]!2 ~ [gb4,b4,eb5] [gb4,b4,eb5]@2 [gb4,b4,eb5] ~", // B
  P: "[[gb4,b4,eb5] ~@3 [gb4,b4,eb5] ~@3 [gb4,b4,eb5]!2 ~ [gb4,b4,eb5] [gb4,b4,eb5]@2 [gb4,b4,eb5]@114]/8", // B
})).s("gm_electric_guitar_clean").gain(0.26).pan(0.4)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@53 A@2 B@2 C@4 D@2 ~@15 E@6 F@2 A@2 B@2 C@4 G@4 H@4 A@2 B@2 C@4 ~@13 I@8 J@2 ~@40 K@2 L M@2 ~@7
>`.pickRestart({
  A: "[g2,d3]/2", B: "[f2,c3]/2", C: "[[ab2,eb3]@63 ~]/4", D: "[[gb2,db3]@15 ~]/2", E: "[bb2,f3]/6", F: "[eb3,bb3]/2",
  G: "[[bb2,f3]@63 ~]/4", H: "[[eb3,bb3]@63 ~]/4", I: "[b2,gb3]/4", J: "[b2,gb3]/2",
  K: "[~@3 [gb2,b2] [a2,d3]@2 [gb2,b2] [a2,d3]@2 [gb2,b2] [a2,d3]@2 [gb2,b2] [a2,d3]@2 [gb2,b2]]/2", // B5 D5 B5 D5 B5 D5 B5 D5 …
  L: "[a2,d3]@2 [gb2,b2] [a2,d3]@2 [gb2,b2] [a2,d3]@2", M: "[[gb2,b2] [a2,d3]@2 [gb2,b2] [a2,d3]@2 [gb2,b2]@4 ~@6]/2",
})).s("gm_overdriven_guitar").gain(0.59).pan(0.6)

// chords · lead 1 square
const lead_1_square = note(`<
  ~@21 A B C D E F E F ~@8 A B C D E F E F ~@8 A B C D E F E F ~@25 A B C D E F E F ~@8 A B C D E F E F ~@75
>`.pickRestart({
  A: "~@10 [g4,bb4,d5]@2 ~ [g4,bb4,d5]@2 ~", B: "[g4,bb4,d5]@3 ~@13", C: "~@10 [f4,a4,c5]@2 ~ [f4,a4,c5]@2 ~",
  D: "[f4,a4,c5]@3 ~@13", E: "~@10 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5]@2 ~", F: "[eb4,ab4,c5]@3 ~@13",
})).s("gm_lead_1_square").gain(0.19).pan(0.7)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  A@8 ~@21 B@3 ~@9 C@2 ~@2 B@3 ~ D E@2 F ~@4 G@2 ~@17 H@2 ~@10 I@2 ~@4 B@3 ~ D E@2 F ~@6 G@2 ~@5 J@3 K@2 ~@4 L M ~ N@4 ~
  L M ~@3 O@2 ~@2 P ~@3 O@2 ~@2 P ~@3 O@2 ~@2 P ~@3 O@2 ~@2 P ~@3 O@2 ~@2 O@2 ~@10
>`.pickRestart({
  A: "[~@5 c5@123]/8", B: "[bb4@19 ~@5]/3", C: "[~ bb4@25 ~@6]/2", D: "f6@3 eb6@3 d6@2",
  E: "[~@4 eb6@3 ~ eb6@3 ~ g5@4 f6@6 eb6@6 d6@4, bb5@6 eb6@5 ~@5]/2", F: "bb5@15 ~", G: "[bb4@25 ~@7]/2",
  H: "[~@12 ab6@19 ~]/2", I: "[f5@3 ~]/2", J: "[gb5@19 ab5@3 ab5@3 ab5@3 ab5@3 ab5@2 ~@15]/3",
  K: "[~@3 bb5@3 bb5@3 bb5@3 bb5@3 bb5@2 ~@15]/2", L: "b5@3 b5@3 b5@2 b5@3 b5@3 b5@2", M: "b5@3 b5@3 ~@10",
  N: "[b5@7 ~]/4", O: "[b5@15 ~]/2", P: "b5",
})).s("gm_lead_2_sawtooth").gain(0.54).pan(0.4)

// other · lead 2 sawtooth · soft notes
const lead_2_sawtooth_soft = note("<~@142 A ~@7 A ~@7 A ~@7 A ~@18>".pickRestart({
  A: "b5",
})).s("gm_lead_2_sawtooth").gain(0.3).pan(0.4)

// chords · brass section
const brass_section = note("<~@28 A ~@15 A ~@16 B C D C E C D F ~@24 A ~@16 E C G H@2 ~@4 I@2 ~@64>".pickRestart({
  A: "[ab4,c5,eb5]@5 ~@3 [ab4,c5,eb5]@5 ~@3", // Ab
  B: "[f4,a4,f5,a5]@4 [gb4,bb4,gb5,bb5] ~@3 [f4,a4,f5,a5]@4 [gb4,bb4,gb5,bb5] ~@3", // F Gb F Gb
  C: "[f4,a4,f5,a5]@4 [gb4,bb4,gb5,bb5]@2 [bb4,db5,bb5,db6] ~@3 [ab4,c5,ab5,c6] ~@3 [gb4,bb4,gb5,bb5] ~", // F Gb Bbm Ab Gb
  D: "[f4,a4,f5,a5]@4 [gb4,bb4,gb5,bb5] ~@3 [f4,a4,f5,a5]@4 [gb4,gb5]@2 ~@2, ~@12 [bb4,bb5] ~@3", // F Gb F Gb Bb
  E: "[f4,a4,f5,a5]@4 [gb4,gb5]@2 ~@2 [f4,a4,f5,a5]@4 [gb4,bb4,gb5,bb5] ~@3, ~@4 [bb4,bb5] ~@11", // F Gb F Gb Bb
  F: "[d4,ab4,db5,d5,ab5,db6]", G: "[f4,a4,f5,a5]@4 [gb4,bb4,gb5,bb5] ~@3 [f4,a4,f5,a5]@4 [bb4,gb5,bb5] ~@3, ~@6 gb4 ~",
  H: "[d4,ab4,db5,d5,ab5,db6]/2", I: "[db5@3 ~@3 bb4@4 ~@2 db5@2 ~@2]/2",
})).s("gm_brass_section").gain(0.54)

// chords · brass section · soft notes
const brass_section_soft = note("<~@62 A ~@3 A ~@44 A ~@7 B C D@2 ~@62>".pickRestart({
  A: "~@6 [eb5,eb6] ~@9", B: "~@3 eb5@3 ~@2", C: "~ c5 ~ bb4", D: "[~@6 eb5@25 ~, db5]/2",
})).s("gm_brass_section").gain(0.36)

// chords · string ensemble 2
const string_ensemble_2_2 = note(`<
  ~@13 A@8 B@8 C@8 B@8 D@8 E@2 F@6 G@7 H@2 I J@2 K@3 J@2 L@8 M@8 N@8 O@2 P@6 Q@3 H@2 I J@2 K@3 R@8 ~@2 S@2 ~@2 T@36 U@6
  ~@8
>`.pickRestart({
  A: "[[f3,d4]@3 [g3,eb4], bb3]/8", B: "[~ [f3,a3] [ab3,eb4]@2, d4, ~@32 c4 ~@95]/8", C: "[f3@3 [g3,eb4], [bb3,d4]]/8",
  D: "[f3 [g3,eb4], [bb3,d4]]/8", E: "d4/2", F: "[[f3,a3] [ab3,eb4]@2, c4]/6",
  G: "[[gb4,bb4]@32 f4@32 gb4 ~@31 f4@15 ~, db4@111 ~, ~@32 ab4@64 ab4 ~@15, ~@64 bb4@47 ~]/7", // Gb
  H: "[d4,f4,ab4,bb4,db5]/2", I: "[bb3,db4,f4]", J: "[ab3,c4,eb4]/2",
  K: "[f3@15 ~ bb3@32, db4, ab3@23 ~, ~@16 gb3 ~@31]/3", L: "[[f4,d5]@3 [g4,eb5], bb4]/8",
  M: "[~ [f4,a4] [ab4,eb5]@2, d5, ~@32 c5 ~@95]/8", N: "[f4 [g4,eb5], [bb4,d5]]/8", O: "d5/2",
  P: "[[f4,a4] [ab4,eb5]@2, c5]/6", Q: "[gb4@32 f4@15 ~, bb4@47 ~, ~@32 ab4 ~@15]/3",
  R: "[[c4,eb4] b3@3, ab3, ~ eb4 ~@2, ~@32 gb3 ~@95]/8", S: "[gb3,b3,eb4]/2", T: "[gb3,b3,eb4]/4", U: "[gb3,b3,eb4]/6",
})).s("gm_string_ensemble_2").gain(0.33).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@5 [x!2]!4 [x!9 ~@2 x!2 ~ x ~]!2 [x!2]!159 ~@15>").gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A@11 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@6 B A@3 B A@3 B A@3 B A@3 B
  A@3 B A@3 B A@3 B A@3 B A@3 B A@8 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3
  ~@9
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2",
})).gain(0.45)

// drums · clap
const clap = s("cp").struct("<~@11 A ~@8 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@24 A ~@15 A ~@7 A ~@75>".pickRestart({
  A: "~@8 x!2 ~ x ~ x!2 ~",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@5 [x!16]!165 ~@15>").gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  ~@21 A B A B A B C B ~@8 A B A B A B C B@2 ~@3 B ~ B ~@3 B ~ B ~@3 B ~@8 B ~@3 B ~ B ~ B ~@7 A B A B A B C B@2 ~@3 B
  ~@3 B ~ B ~@5 B ~@4 B ~@3 B ~ B ~ B ~ B ~ B ~ B D B ~ B D B ~ B D B ~ B ~ B ~ B ~ B ~ B D B ~ B ~ B ~ B ~ B ~ B ~ B ~
  B ~ B ~ B ~ B ~@13
>`.pickRestart({
  A: "x ~@9 x ~@2 x ~@2", B: "x", C: "~@10 x ~@2 x ~@2", D: "~@3 x",
})).gain(0.45)

// drums · congas
const congas = s("conga:13").struct("<~@5 [~@3 x ~@3 x]!8 ~@172>").gain(0.86)

// drums · congas
const congas_2 = s("conga:18").struct("<~@5 [~ x ~ x]!8 ~@172>").gain(0.86)

// drums · congas
const congas_3 = s("conga:33").struct("<~@5 [x ~@3 x!2 ~@2]!8 ~@172>").gain(0.86)

// drums · ht
const ht = s("ht").struct("<~@12 A ~@11 A ~@15 A ~@7 A ~@7 A ~@32 A ~@7 A ~@16 A ~@70>".pickRestart({
  A: "~@6 x!4 ~ x!2 ~ x!2",
})).gain(0.41)

// drums · ht · soft notes
const ht_soft = s("ht").struct("<~@12 A ~@11 A ~@15 A ~@7 A ~@7 A ~@32 A ~@7 A ~@16 A ~@70>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.18)

stack(
  bass, string_ensemble_2, electric_guitar_clean, overdriven_guitar, lead_1_square, lead_2_sawtooth,
  lead_2_sawtooth_soft, brass_section, brass_section_soft, string_ensemble_2_2, kick, snare, clap, hihat, crash, congas,
  congas_2, congas_3, ht, ht_soft
)

More by Pet Shop Boys