Strudelify
Black Celebration cover art

Black Celebration

Black Celebration

Depeche Mode

KeyD minorTempo120 bpm
0:00/0:00
// Black Celebration — Depeche Mode
// 120 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 157 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.

// chords · lead 1 square · "SQUAREWAVE"
const lead_1_square = note(`<
  A@2 B@2 C D E F G H I J C D E F G H I J K L@2 M@2 N L O P@2 Q E F G H I K R@2 S@2 T@2 U@2 V W X Y Z AA AB AC AD@2 AE
  AF AG AH AI AJ AK@2 AL AM AN AO AP AQ AR AS AT AU L@2 M@2 N L O P@2 Q E F G H I K R@2 S@2 T@2 U@2 V W X Y Z AA AB AC
  AD@2 AE AF AG AH AI AJ AK@2 AL AM AN AO AP AQ AR AS AT AU N L O AV AW AX O AY N L O AV AW AX O AY AZ BA AZ BA AZ BA AZ
  BA AZ BA AZ BA AZ BA AZ BA
>`.pickRestart({
  A: "[~@2 a4@2 bb4 a4@2 c5@3 f4@3 g4@2 a4]/2", B: "[~ a4@2 bb4 a4@2 c5@3 f4@3 g4@2 a4 ~]/2", C: "~ [d4,d5]",
  D: "[g4,g5] [d4,d5] [c5,c6]@2", E: "~ [c4,c5]", F: "[f4,f5] [c4,c5] [c4,c5]@2", G: "~ [bb3,bb4]",
  H: "[f4,f5] [bb3,bb4] [bb3,bb4]@2", I: "~ [a3,a4]", J: "[a4,a5] [f4,f5] [c5,c6]@2", K: "~ f4!2 g4, ~ [a3,c4]@2 ~",
  L: "[d4,f4,a4] f4", M: "[~ [f4,a4,f5]@2 ~]/2", N: "[d4,f4,a4]@2 f4 bb4", O: "~@2 [c4,f4,a4]@2 bb4 a4@2 [f4,a4,c5]",
  P: "[~ c4 d4 [a3,c4,d4]@3 [d4,d5]@2, ~ [f3,a3]@2 ~@5]/2", Q: "[a4,a5] [d4,d5] [c5,c6]@2",
  R: "[[d4,f4,a4]@3 [f4,a4,d5]@4 [f4,a4,c5]@3 ~@2 [d4,f4,a4]@2 g4@2]/2", // Dm F Dm
  S: "[[c4,f4,a4]@3 [f3,a3,c4]@4 [f3,a3,c4]@5 [d4,f4,a4]@2 [a3,c4,g4]@2]/2", // F Dm Am7
  T: "[[d4,f4,a4]@3 [g3,bb3]@4 [g3,bb3]@5 [a3,a4]@2 [f3,f4]@2]/2", // Dm Gm A F
  U: "[[bb3,d4,f4]@2 a4@2 bb4 a4@2 c5@3 f4@3 g4@2 a4]/2", V: "[a3,d4,f4]@2 ~ [f3,a3,d4]",
  W: "[a3,d4,f4]@3 g4@2 [d4,f4,a4]@3", X: "g4 [a3,c4,f4] [f3,a3,c4]@2", Y: "[a3,c4,f4]@2 ~ g4@2 [c4,f4,a4]@3",
  Z: "g4 [bb3,d4,f4] [bb3,d4]@2", AA: "[bb3,d4,f4]@3 g4@3 [d4,f4,a4]@2", AB: "[f4,a4,d5]@3 [f4,a4,c5]@2 [c4,f4,a4]@3",
  AC: "[c4,f4,bb4]@3 [c4,f4,a4]@3 f4@2", AD: "[[d4,f4,a4]@3 ~ [f4,a4]@3 c5@3 ~@2 a4@2 g4@2, ~@3 d5@4 ~@9]/2",
  AE: "[c4,f4,a4]@3 c4 [f3,a3,c4]@4", AF: "~@2 [c4,f4,a4] [a3,c4,g4]", AG: "[d4,f4,a4]@3 bb3 [g3,bb3]@4",
  AH: "~@2 [d4,f4,a4]!2", AI: "[a3,c4,f4]@3 [a3,c4]@4 ~, ~@3 g4@5", AJ: "~ [a3,c4,f4]@2 [a3,c4,f4]",
  AK: "[a4 a4@2 a4@2 d5@2 ~ [f4,a4]@4 [d4,f4,a4]@2 [a3,d4,g4]@2, [d4,f4]@4 ~ [f4,a4]@3 ~@8, ~@7 c5@3 ~@6]/2", // F Dm Dsus4 Dm F
  AL: "[c4,f4,a4]@3 ~ [f3,a3]@4, ~@3 c4@5", AM: "~ [f3,a3,c4]@2 [c4,f4,a4]", AN: "[d4,f4,a4]@3 ~ g4@4, ~@3 bb4@5",
  AO: "~ [g3,bb3,d4]@2 [d4,f4,a4]", AP: "[a3,c4,f4] [a3,c4,g4]", AQ: "~@2 [f3,a3,d4]@2 [f3,a3,d4] [f3,a3,c4]@3",
  AR: "[f3,bb3,d4]@2 c4@2 [f3,bb3,d4] [bb3,d4,f4]@3", AS: "[f3,bb3,d4]@4 ~@3 e4", AT: "e4 [g3,c4,e4] e4 [g3,c4,e4]",
  AU: "f4 [g3,c4,e4]@3 d4@2 c4 d4", AV: "[f4,a4,c5]@2 d4@2 e4 f4@3", AW: "[d4,f4,a4]@2 [d4,f4] [d4,f4,bb4]",
  AX: "[d4,f4,a4] [d4,f4]", AY: "~ c4 d4 [f3,a3,d4], ~ [f3,a3]@2 ~", AZ: "~@2 a4@2 bb4 a4@2 c5",
  BA: "c5@2 f4@3 g4@2 a4",
})).s("gm_lead_1_square").gain(0.64)

// bass · electric bass pick · "PICK BASS"
const bass = note(`<
  A@4 B@2 C@2 D@2 E F B@2 C@2 D@2 E F@2 B@2 C@2 D@2 E F B@2 C@2 D@2 E F B@2 C@2 D@2 G@2 B@2 C@2 D@2 E F B@2 C@2 D@2 E F
  B@2 C@2 D@2 E F H@2 I@2 B@2 C@2 D@2 E F B@2 C@2 D@2 E F B@2 C@2 D@2 G@2 B@2 C@2 D@2 E F B@2 C@2 D@2 E F B@2 C@2 D@2 E
  F H@2 I@2 B@2 C@2 D@2 E F B@2 C@2 D@2 E F A@16
>`.pickRestart({
  A: "d3!8", B: "[d2,d3]/2", C: "[f2,f3]/2", D: "[g2,g3]/2", E: "[f2,f3]", F: "[e2,e3]", G: "[bb2,bb3]/2", H: "bb2/2",
  I: "c3/2",
})).s("gm_electric_bass_pick").gain(0.73)

// bass · synth bass 2 · "SYN BASS 2"
const bass_2 = note("d2!8").s("gm_synth_bass_2").gain(0.73)

// drums · kick
const kick = s("bd").struct("<~@36 [x ~ x ~ x!2 ~ x]!16 [x ~ x!4 ~ x]!105>").gain(0.76)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A ~ A ~ A@5 B A B A B A B A B A B C A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "x!7 ~", B: "x!3 ~ x!3 ~", C: "~@3 x",
})).gain(0.76)

// drums · open hat
const open_hat = s("oh").struct("<[~@7 x] ~ [~@7 x] ~ [~@7 x]!4 [~@3 x ~@3 x]!12 ~ [~@3 x ~@3 x]!136>").gain(0.69)

// drums · crash
const crash = s("cr").struct(`<
  ~@36 A ~@15 A ~@13 A ~@6 A ~@3 A ~@3 A ~@6 A ~@6 A ~@2 A ~ A ~@4 A ~@5 A ~ A ~@5 A ~@9 A ~@6 A ~@2 A ~@2 A ~@14
>`.pickRestart({
  A: "x",
})).gain(0.76)

// drums · ride
const ride = s("rd").struct(`<
  ~@88 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A
>`.pickRestart({
  A: "x ~@3 x ~ x!2", B: "x!2",
})).gain(0.76)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@74 A B A B A B A B A B A B A B A B@2 A B A B A B A B A B A B A B A B A@2 B A B A B A B A B A B A B A B A B C B A B A
  B A B A B A@2 B A B A B A B A B A B C B A B C B A B
>`.pickRestart({
  A: "~@3 x ~@2 x ~", B: "x ~@3 x ~@2 x", C: "x ~@2 x ~@2 x ~",
})).gain(2.44)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@74 A B C B A B C B A B C B A B C D@2 A B C B A B C B A B C B A B C B A@2 B C B A B C B A B C B A B C B A B C B A B C
  B A B C B A@2 B C B A B C B A B C B A B C B A B C B
>`.pickRestart({
  A: "~@2 x ~@2 x ~ x", B: "~@3 x", C: "x ~@4 x ~ x", D: "x ~@2 x",
})).gain(2.44)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~@74 A B C B A B C B A B C B A B C D@2 A B C B A B C B A B C B A B C B A@2 B C B A B C B A B C B A B C B A B C B A B C
  B A B C B A@2 B C B A B C B A B C B A B C B A B C B
>`.pickRestart({
  A: "~@2 x ~@10 x ~@2", B: "~@9 x!2 ~@5", C: "~@13 x ~@2", D: "x ~@8 x!2 ~@5",
})).gain(2.44)

// drums · ht
const ht = s("ht").struct("<~@119 [~ x ~@2]!38>").gain(0.76)

// drums · mt
const mt = s("mt").struct("<~@129 [~@3 x]!28>").gain(0.76)

stack(lead_1_square, bass, bass_2, kick, snare, hihat, open_hat, crash, ride, congas, congas_2, congas_3, ht, mt)

More by Depeche Mode