Strudelify
Photographic cover art

Photographic

Depeche Mode

KeyE minorTempo146 bpm
0:00/0:00
// Photographic — Depeche Mode
// 146 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 6 "Ocarina" named as a pipe, played on ocarina (its lead 1 square patch is not one)
// note: duplicate parts dropped: ch 5 "Syn Strings 2" synth strings 2 (copy of ch 4 "Saw Synth" lead 7 fifths)
// note: Full arrangement: all 163 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(146/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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, A@4 for four bars: edit a riff to change every repeat.

// bass · synth bass 1 · "Bass"
const bass = note(`<
  A@5 B C A@2 B C A@2 B C A@2 B C A D E F G D E F G A@11 B C A@2 B C A@2 B C A@2 B C A D E F G D E F G A@11 B C A@2 B C
  A@2 B C A@2 B C A D E F G D E F G A@11 B C A@2 H@2 A I J C K@2 J C A@2 L@2 M A N C O@2 P Q A R B S T U P V R I P W T U
  X Y R Z P W T U X AA T U P W M ~
>`.pickRestart({
  A: "e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2",
  B: "c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2",
  C: "d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2",
  D: "e2 ~@2 e2@2 ~ e2 ~@2 e2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2",
  E: "a2 ~@2 a2 ~@2 a2 ~@2 a2 ~@2 a#2 ~@2 a#2 ~@2 a#2 ~@2 a#2 ~@2",
  F: "a2 ~@2 a2 ~@2 a2 ~@2 a2@2 ~ a2 ~@2 a2 ~@2 a2@2 ~ a2@2 ~",
  G: "g2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2 g2@2 ~ g2 ~@2",
  H: "[c2 ~ c2 ~@3 c2 ~@2 c2@2 c2 ~@2 c2 ~@3 c2 ~@2 c2 ~ d2@2 ~@2 d2 ~@2 d2 ~@2 d2 ~ d2 ~@3 d2 ~@2 d2 ~@2 d2 ~@2]/2",
  I: "e2 ~ e2 ~@3 e2 ~ e2 ~@3 e2 ~@2 e2 ~ e2@2 ~@2 e2 ~ c2", J: "~@3 c2@2 c2 ~@2 c2@2 ~@2 c2 ~@2 c2 ~ c2 ~@3 c2 ~@2",
  K: "[e2 ~ e2@2 ~@2 e2 ~@2 e2 ~@2 e2 ~ e2 ~@3 e2 ~ e2 ~@2 e2@2 ~ e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 c2]/2",
  L: "[c2 ~ c2 ~@3 c2 ~@2 c2@2 c2 ~@2 c2 ~@3 c2 ~@2 c2 ~ d2@2 ~ d2 ~@2 d2@2 ~ d2 ~@2 d2 ~@2 d2 ~@3 d2 ~ d2 ~@2 e2]/2",
  M: "~@2 e2@2 ~@2 e2 ~ e2 ~@2 e2 ~@2 e2 ~@3 e2 ~ e2 ~@3", N: "c2 ~@2 c2 ~ c2@2 ~ c2 ~@2 c2 ~@3 c2 ~ c2 ~@2 c2@2 ~@2",
  O: "[e2 ~ e2@2 ~@2 e2 ~@2 e2 ~@2 e2 ~ e2 ~@3 e2 ~ e2 ~@2 e2@2 ~ e2 ~@3 e2 ~@2 e2 ~ e2 ~@2 e2 ~@3 e2 ~@2 e2 ~ c2]/2",
  P: "~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 d2", Q: "~@3 d2 ~@2 d2 ~@2 d2 ~ d2 ~@3 d2 ~@2 d2 ~@2 d2 ~@2",
  R: "e2 ~ e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@3",
  S: "d2 ~ d2 ~@2 d2 ~@2 d2@2 ~ d2 ~@2 d2 ~@2 d2 ~@3 d2 ~ e2",
  T: "~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2@2 ~ e2 ~@2 e2 ~@2 e2",
  U: "~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 c2", V: "~@2 d2 ~@3 d2 ~ d2 ~@2 d2 ~@2 d2@2 ~@2 d2 ~ d2 ~@3",
  W: "~@2 d2 ~@2 d2@2 ~ d2 ~@2 d2 ~@2 d2 ~@3 d2 ~ d2 ~@2 e2", X: "~@2 c2@2 ~ c2 ~@2 c2 ~@2 c2@2 ~ c2 ~@2 c2 ~@2 c2 ~@3",
  Y: "d2 ~ d2@2 ~ d2 ~@2 d2 ~@2 d2@2 ~ d2 ~@2 d2 ~@2 d2@2 ~@2",
  Z: "e2 ~ e2 ~@2 e2 ~@2 e2@2 ~ e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2 c2",
  AA: "d2 ~ d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2@2 ~ e2",
})).s("gm_synth_bass_1").gain(0.27)

// bass · acoustic bass · "Bass 2"
const bass_2 = note(`<
  A@5 B C A@2 B C A@2 B C A@2 B C A D E F G D E F G A@11 B C A@2 B C A@2 B C A@2 B C A D E F G D E F G A@11 B C A@2 B C
  A@2 B C A@2 B C A D E F G D E F G A@11 B C A@2 H@2 A I@2 C J@3 C A@2 K@5 C L@6 B M@6 N@8 O@8 P@4 ~
>`.pickRestart({
  A: "e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~",
  B: "c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~",
  C: "d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~",
  D: "e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ g2@2 ~ g3@2 ~ g2@2 ~ g3@2 ~",
  E: "a2@2 ~ a3@2 ~ a2@2 ~ a3@2 ~ a#2@2 ~ a#3@2 ~ a#2@2 ~ a#3@2 ~",
  F: "a2@2 ~ a3@2 ~ a2@2 ~ a3@2 ~ a2@2 ~ a3@2 ~ a2@2 ~ a3@2 ~",
  G: "g2@2 ~ g3@2 ~ g2@2 ~ g3@2 ~ g2@2 ~ g3@2 ~ g2@2 ~ g3@2 ~",
  H: "[c2@2 c3@2 ~@2 c2@2 ~ c3@2 c2@2 ~ c3@2 ~@2 c2@2 ~ c3@2 d2@2 ~ d3@2 ~@2 d2@2 ~ d3@2 d2@2 ~@2 d3@2 ~ d2@2 ~ d3@2 ~]/2",
  I: "[e2@2 e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ c2@2 ~@2 c3@2 c2@2 ~ c3@2 ~@2 c2@2 ~ c3@2 c2@2 ~ c3@2 ~@2]/2",
  J: "[e2@2 e3@2 ~@2 e2@2 ~ e3@2 ~ e2@2 e3@2 ~@2 e2@2 e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ c2@2 ~@2 c3@2 c2@2 ~ c3@2 ~@2 c2@2 ~ c3@2 c2@2 ~ c3@2 ~@2]/3",
  K: "[c2@2 c3@2 ~@2 c2@2 ~ c3@2 c2@2 ~ c3@2 ~@2 c2@2 ~ c3@2 d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ c2@2 ~@2 c3@2 c2@2 ~ c3@2 ~@2 c2@2 ~ c3@2 c2@2 ~ c3@2 ~@2]/5",
  L: "[e2@2 e3@2 ~@2 e2@2 ~ e3@2 ~ e2@2 e3@2 ~@2 e2@2 e3@2 ~ e2@2 ~ e3@2 ~@2 e2@2 ~ e3@2 e2@2 ~ e3@2 ~@2 e2@2 ~ e3@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~@2]/6",
  M: "[d2@2 d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~@2]/6",
  N: "[e2@2 e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~@2]/8",
  O: "[e2@2 e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2]/8",
  P: "[~@2 e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ d2@2 ~ d3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~ e2@2 ~ e3@2 ~@2]/4",
})).s("gm_acoustic_bass").gain(0.27)

// other · lead 7 fifths · "Saw Synth"
const lead_7_fifths = note(`<
  ~@20 A B ~@2 A B ~@28 A B ~@2 A B ~@28 A B ~@2 A B ~@43 C@2 ~@6 D@2 ~@6 E@2 ~@8
>`.pickRestart({
  A: "e3@3 g3@5", B: "a3@9 a#3@14 ~", C: "[~@20 d3@3 e3@9 ~@16]/2", D: "[~@20 d3@3 e3@11 ~@14]/2",
  E: "[~@23 e3@10 ~@15, ~@10 d3@3 ~@11]/2",
})).s("gm_lead_7_fifths").gain(0.43)

// other · ocarina
const ocarina = note("<~@22 A@2 ~@2 A@2 ~@28 A@2 ~@2 A@2 ~@28 A@2 ~@2 A@2 ~@67>".pickRestart({
  A: "e4!2 ~ g4!2 ~ a4!2 ~ a#4!2 ~ e5!2 ~ a#4!2 ~ a4!2 ~ g4!2 ~",
})).s("gm_ocarina").gain(0.27).pan(0.8)

// other · lead 2 sawtooth · "Saw Wave"
const lead_2_sawtooth = note(`<
  ~@72 A B C D A B C D A B C D A B C D ~@34 A E@4 B C F@5 G B H@6 I@7 D J@8 K@4 ~
>`.pickRestart({
  A: "e4@4 ~@5 g4@3", B: "c4@3 ~@3 b4@2", C: "a4 ~", D: "b4@11 ~@13",
  E: "[c4@9 ~@9 b4@5 a4@12 ~@12 b4@11 ~@13 e4@7 ~@12 g4@6]/4",
  F: "[b4@11 ~@12 e4@8 ~@11 g4@5 c4@9 ~@9 b4@6 a4@12 ~@12 b4@11 ~@14]/5", G: "e4@7 ~@10 g4@6 ~",
  H: "[a4@12 ~@11 b4@11 ~@13 e4@7 ~@11 g4@6 c4@9 ~@9 b4@6 a4@12 ~@12 b4@11 ~@14]/6",
  I: "[e4@7 ~@10 g4@6 c4@9 ~@9 b4@6 a4@12 ~@12 b4@11 ~@13 e4@7 ~@11 g4@6 c4@9 ~@9 b4@6 a4@12 ~@13]/7",
  J: "[e4@7 ~@10 g4@6 c4@9 ~@9 b4@6 a4@12 ~@12 b4@11 ~@13 e4@7 ~@11 g4@6 c4@9 ~@9 b4@6 a4@12 ~@12 b4@11 ~@13 e4]/8",
  K: "[~@17 g4@6 c4@9 ~@9 b4@6 a4@12 ~@12 b4@11 ~@14]/4",
})).s("gm_lead_2_sawtooth").gain(0.15)

// other · synth strings 2 · "Syn Strings 2"
const synth_strings_2 = note("<~@80 A B C D A B C D ~@26 E@2 C F@4 D A G@6 H@7 I@7 J@16 K@3 ~>".pickRestart({
  A: "b5@7 ~@11 c6@3 a5@3", B: "b5@3 g5@7 ~@14", C: "d6@7 ~@11 c6@3 b5@3", D: "g5@5 ~@7",
  E: "[b5@7 ~@10 c6@3 a5@3 b5@3 ~ g5@8 ~@13]/2",
  F: "[g5@10 ~@13 b5@8 ~@10 c6@3 a5@3 b5@3 g5@8 ~@13 d6@8 ~@10 c6@3 b5@3 ~]/4",
  G: "[b5@2 g5@8 ~@13 d6@7 ~@11 c6@3 b5@3 g5@10 ~@14 b5@8 ~@10 c6@3 a5@3 b5@3 g5@8 ~@13 d6@8 ~@10 c6@3 b5@3 ~]/6",
  H: "[g5@10 ~@13 b5@8 ~@10 c6@3 a5@3 b5@3 g5@8 ~@13 d6@8 ~@10 c6@3 b5@3 g5@10 ~@14 b5@8 ~@10 c6@3 a5@3 b5@3 ~ g5@8 ~@13]/7",
  I: "[d6@7 ~@10 c6@3 b5@3 g5@10 ~@14 b5@8 ~@10 c6@3 a5@3 b5@3 g5@8 ~@13 d6@8 ~@10 c6@3 b5@3 g5@10 ~@14 b5@8 ~@10 c6@3 a5@3 b5]/7",
  J: "[~@2 g5@8 ~@13 d6@8 ~@10 c6@3 b5@3 g5@10 ~@14 b5@8 ~@10 c6@3 a5@3 b5@3 g5@8 ~@13 d6@8 ~@10 c6@3 b5@3 g5@10 ~@14 b5@8 ~@10 c6@3 a5@3 b5]/8",
  K: "[~@2 g5@8 ~@13 d6@8 ~@10 c6@3 b5@3 g5@10 ~@15]/3",
})).s("gm_synth_strings_2").gain(0.15).pan(0.7)

// drums · kick
const kick = s("bd").struct("<A@105 B C A@4 B D C B C A B D@3 C A B D@4 C B D@31 C ~>".pickRestart({
  A: "x!4", B: "x ~@5 x ~@4 x ~@6 x ~@4 x", C: "~@5 x ~@5 x ~@5 x ~@6", D: "~@5 x ~@5 x ~@5 x ~@5 x",
})).gain(0.18)

// drums · snare
const snare = s("sd").struct("<~@38 A@24 ~@10 A@24 ~@10 A@21 B A@6 B A@4 B A@5 B@2 A@4 B@4 A@2 B@5 ~>".pickRestart({
  A: "~ x ~ x", B: "~@5 x ~@11 x ~@6",
})).gain(0.18)

stack(bass, bass_2, lead_7_fifths, ocarina, lead_2_sawtooth, synth_strings_2, kick, snare)

More by Depeche Mode