Strudelify

Strangelove

Depeche Mode

KeyG majorTempo120 bpm
0:00/0:00
// Strangelove — Depeche Mode
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 34, 4/4 at bar 35) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 87 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 2
const bass = note(`<
  A@2 B C D A B E F G H I J G H I J K@2 I J L M N O@2 P@2 O@2 M Q R S T U V W X@2 Y Z X@2 Y Z X@2 Y Z X AA X AB X@2 Y AC
  X@2 Y AC AD AE AD AF AD AE AD AE AD AF AD AE AD AE AD AF AD AE AD AE AD AF AD AE ~
>`.pickRestart({
  A: "~@8 [e2,e3]@3 ~@3 [e2,e3]@2", B: "~@2 [e2,e3]@2 ~@4 [c2,c3]@3 ~@3 [c2,c3]@2", C: "~@8 a2@3 ~@3 a2@2",
  D: "~@2 g2@3 ~ d3@2 [e2,e3]@3 ~@3 [e2,e3]@2", E: "~@8 [a1,a2]@3 ~@3 [a1,a2]@2", F: "~@4 e2@2 ~ e2",
  G: "~@2 e2@2 e2@2 ~ e2", H: "~@2 e2@2 c2@2 ~ c2", I: "~@2 c2@2 d2@2 ~ d2", J: "~@2 b1@2 e2@2 ~ e2",
  K: "[~@2 e2@2 e2@2 ~ e2@3 e2@2 c2@2 ~ c2]/2", L: "~@2 e2@2 d2@2 ~ d2", M: "~@2 d2@2 e2@2 ~ e2",
  N: "~@2 e2@2 c2@2 ~ d2", O: "[~ d2@2 b1 e2 b1 d2 e2@3 ~@2 a1@2 ~ d2]/2",
  P: "[~@2 d2@2 e2 b1 d2 e2@3 ~@2 a1@2 ~ d2]/2", Q: "~@2 e2@2 a1@2 ~ d2", R: "~@2 d2@2 g2@2 ~ g2",
  S: "~@2 g2@2 c2@2 d2!2", T: "[e2,e3]@3 ~@3 [e2,e3]@2 ~@8", U: "[e2,e3]@3 ~@3 [e2,e3]@2 ~@2 [e2,e3]@2 ~@4",
  V: "[c2,c3]@3 ~@3 [c2,c3]@2 ~@8", W: "[a1,a2]@3 ~@3 [a1,a2]@2 ~@8", X: "e2@2 ~ e2 ~@2 e2@2", Y: "c2@2 ~ c2 ~@2 c2@2",
  Z: "d2@2 ~ d2 ~@2 b1@2", AA: "d2@2 ~ d2 ~@2 d2@2", AB: "c2@2 ~ d2 ~ d2@2 d2", AC: "a1@2 ~ a2 ~@2 g2@2",
  AD: "e2 b1 d2 e2@3 ~@2", AE: "a1@2 ~ d2 ~@2 d2@2", AF: "a1@2 ~ d2 ~ d2@2 b1",
})).s("gm_synth_bass_2").gain(0.31)

// chords · pad poly · "PolySynth"
const pad_poly = note(`<
  A B C D E B C D F G H@3 I J K@2 L@2 M@2 N O@2 P Q R S T U V W X@2 Y Z AA AB@3 AC@4 AD@3 AE AF AG AH AI AJ AK AL AM@2
  AN AL AM@2 AN AO AP AQ AR AS AT AO AP AQ AR AS AT AO AP AQ AR AS AT AO AP AQ AR AS AU@2
>`.pickRestart({
  A: "~@4 e3 e4 g4 [e3,e4]", B: "a4@2 g4 e4 e3 e4 g4 [e3,e4]", C: "a4 [e3,a4] g4 e4 c3 e4 g4 [c3,e4]",
  D: "a4@2 g4 e4 a2 e4 g4 [a2,e4]", E: "d5!2 b4 [d3,g4] e3 e4 g4 [e3,e4]", F: "d5 e4!2 [e4,g4,b4]@5",
  G: "~ e4!2 [e4,g4,b4]@5", // Em
  H: "[~@2 e4 [e4,g4,d5]@2 [e4,g4,c5]@2 [e4,g4,b4]@2 e4@2 e4 [d4,f#4,d5] [d4,f#4,c5]@2 [d4,f#4,b4]@2 e4!2 [e4,g4,b4]@5]/3", // Em7 C Em D D7 Bm Em
  I: "~@2 e4 [e4,g4,b4]@5", J: "~ e4!3 [e4,g4,d5]!2 [e4,g4,c5]@2",
  K: "[[e4,g4,b4]@2 e4@2 [d4,g4] [d4,f#4,a4]@2 [d4,f#4,b4]@2 e4!3 [b3,e4,g4]!2 [b3,f#4]!2]/2", // Em G5 D Bm Em B5
  L: "[[b3,e4]@2 b3!2 [b3,e4,g4] [b3,f#4]@2 [b3,e4]@3 b3 [c4,e4,a4]@2 [c4,e4,a4] [c4,e4,g4]!2]/2", // E5 Em B5 E5 Am C
  M: "[[c4,f#4] [c4,d4]@3 [d4,f#4,a4] [d4,g4]@2 [d4,f#4]@2 b4@2 a4 [e4,g4,b4]@4]/2", N: "e4 [e4,g4,b4] [d4,f#4,a4]@2",
  O: "[[f#3,a3,d4]@4 [g3,b3,e4]@8 [d4,g4,d5]@2 [e4,g4,c5] d5]/2", P: "[d4,f#4,b4]@2 g4 e4 [e4,g4,b4]@4",
  Q: "~@2 f#4@2 g4@2 b4@2 e4@3 f#4@2 g4@3, e4 c4", R: "[d4,f#4]@2 d4 b3 ~ [e4,g4,b4]@3",
  S: "~@2 f#4@2 g4@2 a4@2 [b4,d5]@3 [a4,c5]@2 [b4,d5]@3, e4!2", T: "[d4,f#4,b4]@2 g4 e4 ~ [e4,g4,b4]@3",
  U: "~ f#4 g4 a4 ~@2 [c4,e4]!2, e4 ~", V: "[d4,b4] a4 e4 [e4,g4,b4]@3 e4!2", W: "f#4@2 g4 [c4,e4]@3 [c4,e4] e4",
  X: "[[d4,f#4]@2 g4 [b3,d4]@3 d4 [b3,f#4]@2 f#4 [b3,g4] c4@3 d4!2]/2", Y: "[e3,d4] [d4,e4] [d4,g4] [e3,e4] a4@2 g4 e4",
  Z: "e3 e4 g4 [e3,e4] a4 [e3,a4] g4 e4", AA: "c3 e4 g4 [c3,e4] a4@2 g4 e4",
  AB: "[a2 e4 g4 [a2,e4] d5 e4!2 [e4,g4,b4]@5 ~ e4!2 [e4,g4,b4]@5 ~ e4!3]/3", // A5 Em
  AC: "[[e4,g4,d5]@2 [e4,g4,c5] [e4,g4,b4]@2 e4!2 [f#4,a4,d5]@2 d5 c5 [d4,f#4,b4]@2 e4!2 [e4,g4,b4]@5 ~@2 e4 [e4,g4,b4]@5 ~ e4!3]/4", // Em7 C Em D Bm Em
  AD: "[[e4,g4,d5]@2 [e4,g4,c5] [e4,g4,b4]@2 e4@2 [e4,g4]@2 [f#4,a4]@2 [f#4,b4]@2 e4!2 [b3,e4,g4]@2 g4 f#4 [b3,e4]@2 b3!3]/3", // Em7 C Em F#m B5 Em E5
  AE: "[b3,e4,g4]@2 f#4 [b3,e4]@2 b3!3", AF: "[c4,e4,a4]!2 g4 [c4,e4,f#4]@2 d4!3",
  AG: "[d4,f#4,a4]!2 g4 [d4,f#4]@2 [d4,f#4,b4]@2 a4", AH: "[e4,g4,b4]@2 e4 [e4,g4,b4]", AI: "[d4,f#4,a4] [f#3,a3,d4]",
  AJ: "[g3,b3,e4]", AK: "[e4,g4,d5]@2 [e4,g4,c5] d5 [d4,f#4,b4]@2 g4 e4", AL: "e4@2 ~ b3 d4!3 e4",
  AM: "[~@3 b3 d4!3 [c4,e4]@3 ~ [e4,g4]@3 ~@2]/2", AN: "~ e4 g4 [a2,e4] d5!2 b4 g4",
  AO: "[e4,g4,b4]@4 ~ f#4 g4 b4, ~ e4", AP: "e4@3 f#4@2 g4@3 [d4,f#4]@4 d4@2 b3@2, c4 ~",
  AQ: "~ [e4,g4,b4]@3 ~ f#4 g4 a4, ~ e4", AR: "[b4,d5]@3 [a4,c5]@2 [b4,d5]@3 [d4,f#4,b4]@4 g4@2 e4@2, e4 ~",
  AS: "~ [e4,g4,b4]@3 ~ f#4 g4 c5, ~ e4", AT: "~@2 [c4,e4]!2 [d4,b4] a4 e4 b4",
  AU: "[~@2 [c4,e4]!2 [d4,b4] a4 e4 b4@3 ~@6]/2", // C G
})).s("gm_pad_poly").gain(0.36).pan(0.4)

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

// drums · rim
const rim = s("rim").struct("<~@17 [~@2 x!3 ~@11] ~@27 [~@10 x!3 ~@3] ~@41>").gain(0.51)

// drums · snare
const snare = s("sd").struct("<A B@22 C B@9 D E B@18 F B@3 G B@3 G B@24 ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~ x!3 ~", D: "~ x!3", E: "x!2 ~ x", F: "x!3 ~@3 x ~", G: "~@4 x ~@4 x ~@2 x ~@3",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<[~@4 x!4] [x!8]!53 ~@8 [x!8]!24 ~>").gain(0.51)

stack(bass, pad_poly, kick, rim, snare, hihat)

More by Depeche Mode