Strudelify

God Is A DJ

Faithless

KeyB♭ minorTempo130 bpm
0:00/0:00
// God Is A DJ — Faithless
// 130 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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.

// other · epiano2
const epiano2 = note(`<
  A@2 B@2 C@2 D@2 ~@12 E@4 ~@16 F@2 G@2 H@2 I@2 A@2 B@2 C@2 D@2 ~@12 E@4 ~@4 E@4 ~@2 J K A@2 B@2 C@2 D@2 F@2 G@2 H@2 I@2
  A@2 B@2 C@2 D@2
>`.pickRestart({
  A: "[~@4 c5 db5@2 bb4@25]/2", B: "[~@4 c5 db5@2 ab4@3 f4@22]/2", C: "[~@4 c5 db5@2 f4@25]/2",
  D: "[~@4 c5 db5@2 ab5@25]/2", E: "bb3@2 ~ bb4@2 ~ bb4@2 ~@8", F: "[~@4 g4 ab4@2 f4@25]/2",
  G: "[~@4 g4 ab4@2 eb4@3 c4@22]/2", H: "[~@4 g4 ab4@2 c4@25]/2", I: "[~@4 g4 ab4@2 eb5@25]/2", J: "c5!16", K: "c5",
})).s("gm_epiano2").gain(0.4)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@24 [~@4 c6 db6 ab5 bb5@5 ~@4]!8 ~@76>").s("gm_lead_2_sawtooth").gain(0.2)

// other · synth strings 1
const synth_strings_1 = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D E F G H E F G H A B C D A B C D ~@44 A
  B C D A B C D
>`.pickRestart({
  A: "bb3", B: "ab3@3 c4", C: "bb3@3 f3", D: "ab3 c4", E: "f3", F: "eb3@3 g3", G: "f3@3 c3", H: "eb3 g3",
})).s("gm_synth_strings_1").gain(0.11)

// bass · fretless bass
const bass = note(`<
  ~@8 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B C@3 D C@3 D A@3 B A@3 B E F E F E F E F G H G H E F E F G H G H E
  F E F ~@12 C@3 D C@3 D A@3 B A@3 B
>`.pickRestart({
  A: "bb1!4 bb1@2 bb1 bb1@2 bb1!3 bb1@2 bb1!2", B: "bb1!4 bb1@2 bb1 ab2@2 ab2!3 ab2@2 ab2!2",
  C: "f2!4 f2@2 f2 f2@2 f2!3 f2@2 f2!2", D: "f2!4 f2@2 f2 eb2@2 eb2!3 eb2@2 eb2!2",
  E: "bb1@2 ~ bb1@2 ~ bb1 ~ ab2@3 ~ ab2@3 ~", F: "bb1@2 ~ bb1@2 ~ bb1 ~ bb1@2 ~ bb1@2 ~ ab1 ~",
  G: "ab1@3 f1@2 ~ f1 ~ f1@3 f1@2 ~ f1 ~", H: "f1@3 f1@2 ~ f1 ~ f1@3 f1@2 ~ f1 ~",
})).s("gm_fretless_bass").gain(0.2)

// chords · pad sweep
const pad_sweep = note("<~@39 A@7 B C@4 D@5 ~@7 E@3 F G H@6 I J@5 ~@11 A@7 K@7 ~@3>".pickRestart({
  A: "[~@10 [f3,ab3,c4,f4]@29 [f3,ab3,c4,f4]@40 [f3,ab3,c4,f4]@33]/7", B: "[f3,ab3,c4,f4]",
  C: "[~@11 [bb3,db4,f4]@31 [bb3,db4,f4,bb4]@22, ~@11 bb2@53]/4", // Bbm
  D: "[~@12 [bb3,db4,f4]@33 [bb3,db4,f4,bb4]@35, ~@3 bb2@17]/5", E: "[~@14 f3@9 ~ eb4@15 ab3@9]/3", F: "f3 ab3",
  G: "eb4@15 ~", H: "[bb3@21 f3@3 eb4@5 ab3@3]/6", I: "f3@7 ab3@9", J: "[eb4@15 bb3@64 ~]/5",
  K: "[f4@26 ~ db4@30 [db4,bb4]@48 ~@7, [f3,ab3,c4]@2 ~@5, ~@13 bb3@27 ~@16, ~@27 [bb2,f4]@54 ~@31]/7", // Gb Fm Bb5
})).s("gm_pad_sweep").gain(0.25)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@24 A@4 B@4 A@4 B@4 C@4 D@4 A@4 B@4 ~@20 E@8 A@4 B@4 C@4 D@4 A@4 B@4>".pickRestart({
  A: "[[bb2,db3,f3,bb3]@7 [c3,f3,ab3,c4]]/4", B: "[[db3,f3,bb3,db4]@7 [c3,f3,ab3,c4]]/4", C: "[ab2,c3,f3,ab3]/4",
  D: "[[ab2,c3,f3,ab3]@7 [c3,f3,ab3,c4]]/4", E: "[db4@6 ~ ab3, bb3@7 ~, ~@3 c4]/8",
})).s("gm_string_ensemble_1").gain(0.24)

// drums · kick
const kick = s("bd").struct("<~@16 [x!4]!16 ~@8 [x!4]!40 ~@4 x ~@7 [x!4]!16>").gain(0.14)

// drums · snare
const snare = s("sd").struct("<~@2 [~ x!15] [x!16]!5 ~@24 [~@2 x!14] [x!16]!7 ~@68>").gain(0.07)

// drums · clap
const clap = s("cp").struct("<~@40 [~ x ~ x]!40 ~@12 [~ x ~ x]!16>").gain(0.16)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!16
  [~@4 x!2 ~@2 x!2 ~@2 x!2 ~@2]
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!47
  ~@4
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!24
>`).gain(0.09)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@8 [~ x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2] [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!7 ~@92>")
  .gain(0.05)

// drums · open hat
const open_hat = s("oh").struct("<~@16 [~ x ~ x ~ x ~ x]!64 ~@4 [~ x ~ x ~ x ~ x]!24>").gain(0.09)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@8 [~ x ~ x ~ x ~ x]!8 ~@92>").gain(0.05)

// drums · crash
const crash = s("cr").struct("<A B C D E F G H I ~@22 J ~@8 I ~@43 I ~@23>".pickRestart({
  A: "x ~ x!2 ~@2 x ~@2 x!2 ~@2 x!3", B: "~ x!3 ~ x ~@10", C: "~ x ~@2 x!3 ~ x!3 ~ x!2 ~@2",
  D: "x!3 ~ x ~@2 x ~ x!3 ~@2 x!2", E: "x ~ x!3 ~ x!3 ~ x!5 ~", F: "~ x!3 ~@2 x ~@2 x!3 ~@2 x!2",
  G: "x ~@2 x ~@2 x ~ x ~ x!5 ~", H: "x!3 ~@2 x ~ x ~ x!3 ~@4", I: "x", J: "x!4",
})).gain(0.02)

// drums · cowbell
const cowbell = s("cb").struct("<A B C D E F G H ~@100>".pickRestart({
  A: "~ x ~@3 x ~ x ~ x ~ x ~@2 x ~", B: "~ x ~@3 x ~ x ~@8", C: "~@5 x ~@2 x ~ x ~ x ~ x ~",
  D: "x ~@3 x ~ x ~@3 x ~@4 x", E: "~ x ~ x!5", F: "~ x ~@3 x ~ x ~ x ~@4 x ~", G: "~@2 x ~ x ~@2 x ~@2 x ~ x ~ x ~",
  H: "x ~ x ~ x ~@2 x ~ x ~@6",
})).gain(0.02)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<A ~ B C D E F G ~@100>".pickRestart({
  A: "~@9 x ~@6", B: "~@3 x", C: "~@3 x ~@4", D: "~ x ~ x!3 ~ x", E: "~ x ~@12 x ~", F: "~@5 x ~ x", G: "~ x ~@2",
})).gain(0.21)

// drums · ride
const ride = s("rd").struct("<~ [~@7 x ~@8] ~@2 [~@3 x!2 ~@11] ~@103>").gain(0.02)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@72 [x!5 ~@2 x ~ x!2 ~@5]!8 ~@28>").gain(0.45)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@72 [~@3 x ~@4]!8 ~@28>").gain(0.27)

stack(
  epiano2, lead_2_sawtooth, synth_strings_1, bass, pad_sweep, string_ensemble_1, kick, snare, clap, hihat, hihat_soft,
  open_hat, open_hat_soft, crash, cowbell, vibraslap, ride, cabasa, cabasa_soft
)

More by Faithless