Strudelify

Rave On

DJ Paul Elstak

KeyE♭ minorTempo167 bpm
0:00/0:00
// Rave On — DJ Paul Elstak
// 166.5 bpm, 132/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 12 orchestra hit (copy of ch 5 lead 2 sawtooth)
// note: Full arrangement: all 5 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(166.5/132)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.

// chords · piano · Abm Bbm Ebm Abm Bbm7 Ebm Abm Bbm …
const piano = note(`<
  [~@5 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,db2,bb2,db3,bb3,db4,f4,ab4,bb4,db5] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] eb4 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@3 ~@7, ~@15 [eb2,eb3,gb4,bb4,eb5]@2 ~ [db2,db3,db4,f4,ab4,db5] ~@13]
  [~@17 [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4], ~@25 [db2,db3,db4,f4,ab4,db5] ~@6]
  [[bb1,db2,bb2,db3,bb3,db4,f4,ab4,bb4,db5] ~@2 [eb3,eb4,gb4,bb4,eb5]!2 [ab2,eb3,b3,eb4,gb4,ab4,bb4,b4,eb5] [ab2,bb2,b3,db4,eb4,f4,ab4,bb4,b4,db5] [db3,eb3,db4,eb4,f4,gb4,bb4,db5,eb5] [eb3,eb4,gb4,bb4,eb5] [ab2,b3,eb4,gb4,ab4,bb4,b4,eb5] [bb2,b3,db4,eb4,f4,ab4,bb4,b4,db5] [db3,eb3,eb4,gb4,bb4,eb5] [eb3,eb4,gb4,bb4,eb5] [ab2,b3,eb4,ab4,b4] [bb2,db3,db4,f4,bb4,db5] [eb3,eb4,gb4,bb4,eb5] [ab2,eb3,eb4,gb4,bb4,eb5] [ab2,bb2,b3,eb4,ab4,b4] [bb2,db4,f4,bb4,db5] ~@13]
  [~@10 [eb3,eb4,gb4,bb4,eb5]!2 [ab2,b3,eb4,gb4,ab4,bb4,b4,eb5] [bb2,db3,db4,f4,bb4,db5] [eb3,eb4,gb4,bb4,eb5]!2 [ab2,bb2,b3,eb4,ab4,b4] [bb2,db3,eb3,db4,f4,bb4,db5] [eb3,eb4,gb4,bb4,eb5] [ab2,eb3,eb4,gb4,bb4,eb5] [ab2,bb2,b3,db4,eb4,f4,ab4,bb4,b4,db5] [bb2,db3,eb3,db4,eb4,f4,gb4,bb4,db5,eb5] [eb3,eb4,gb4,bb4,eb5] [ab2,eb3,b3,eb4,gb4,ab4,bb4,b4,eb5] [ab2,bb2,b3,db4,eb4,f4,ab4,bb4,b4,db5] [eb3,db4,eb4,f4,gb4,bb4,db5,eb5] [eb3,eb4,gb4,bb4,eb5] [ab2,eb3,b3,eb4,gb4,ab4,bb4,b4,eb5] [ab2,bb2,b3,db4,eb4,f4,ab4,bb4,b4,db5] [bb2,db3,eb3,db4,eb4,f4,gb4,bb4,db5,eb5] [eb3,eb4,gb4,bb4,eb5] [ab2,eb3,b3,eb4,gb4,ab4,bb4,b4,eb5]]
  [[ab2,bb2,b3,db4,eb4,f4,ab4,bb4,b4,db5] [bb2,db3,eb3,db4,eb4,f4,gb4,bb4,db5,eb5] [eb3,eb4,gb4,bb4,eb5] [ab2,eb3,b3,eb4,gb4,ab4,bb4,b4,eb5] [ab2,bb2,b3,db4,eb4,f4,ab4,bb4,b4,db5] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,db2,bb2,db3,bb3,db4,f4,ab4,bb4,db5] [eb2,eb3,eb4,gb4,bb4,eb5]@2 ~@17, ~@5 [db3,db4,f4,db5] ~@26]
>`).s("gm_piano").gain(0.25)

// bass · synth bass 1 · Eb Eb5 Eb Ab5 Absus2 Dbsus2 Eb Ab5 …
const bass = note(`<
  ~
  [~@2 [eb2,eb3] [eb2,bb2,eb3]!15 ~@14]
  [~@3 [eb2,eb3]!2 [ab1,eb2,ab2,eb3] [ab1,bb1,ab2,bb2] [db2,eb2,db3,eb3] [eb2,eb3] [ab1,ab2,eb3] [bb1,db2,ab2,bb2] [eb2,db3,eb3] [eb2,eb3] [ab1,ab2,eb3] [bb1,db2,ab2,bb2,db3] [eb2,eb3] [ab1,eb2,eb3] [ab1,bb1,ab2] [bb1,db2,eb2,bb2,db3] [eb2,eb3] [ab1,eb2,ab2,eb3] [ab1,bb1,ab2,bb2] [bb1,eb2,bb2,eb3] [eb2,gb2,eb3,gb3] [db2,gb2,db3,gb3] [db2,db3] db3 ~@5]
  [~@2 [eb2,eb3] [db2,eb2,eb3] [db2,eb2,db3,eb3] [eb2,ab2,eb3,ab3] [eb2,e2,gb2,eb3,e3,gb3,ab3] [db2,eb2,db3,eb3]!2 eb3 [eb2,eb3]!2 [ab1,ab2,eb3] [bb1,db2,ab2,bb2,db3] [eb2,db3,eb3] [eb2,eb3] [ab1,bb1,ab2] [bb1,db2,eb2,bb2,db3] [eb2,eb3] [ab1,eb2,eb3] [ab1,bb1,ab2,bb2] [bb1,db2,eb2,bb2,db3,eb3] [eb2,eb3] [ab1,eb2,ab2,eb3] [ab1,bb1,ab2,bb2] [bb1,db2,eb2,bb2,db3,eb3] [eb2,eb3] [ab1,eb2,ab2,eb3] [ab1,bb1,ab2,bb2] [bb1,db2,eb2,bb2,db3,eb3] [eb2,eb3] [ab1,eb2,ab2,eb3]]
  [[ab1,bb1,ab2,bb2] [db2,eb2,bb2,db3,eb3] [eb2,eb3] [ab1,eb2,ab2,eb3] [ab1,bb1,ab2,bb2] [db2,bb2,db3] ~@26]
>`).s("gm_synth_bass_1").gain(0.4)

// chords · string ensemble 1 · Ebm Abm Bbm Ebm Abm Bbm7 Ebm Abm …
const string_ensemble_1 = note(`<
  [~@3 [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,db2,bb2,db3,bb3,db4,f4,ab4,bb4,db5] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] eb4 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4,ab6] [bb1,bb2,bb3,db4,f4,bb4,bb6] [eb2,eb3,eb4,gb4,bb4,eb5,eb6]@2 ~@8, ~@15 [eb2,eb3,gb4,bb4,eb5]@2 ~ [db2,db3,db4,f4,ab4,db5] ~@13]
  [~@17 [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4], ~@25 [db2,db3,db4,f4,ab4,db5] ~@6]
  [[bb1,db2,bb2,db3,bb3,db4,f4,ab4,bb4,db5] ~@2 [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,db2,bb2,db3,bb3,db4,f4,ab4,bb4,db5] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] eb4 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5] [gb2,gb3,gb4,bb4,db5,gb5] [db2,db3,db4,f4,ab4,db5] ~@7, ~@15 [eb2,eb3,gb4,bb4,eb5]@2 ~ [db2,db3,db4,f4,ab4,db5] ~@13]
  [~@10 [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,bb1,ab2,bb2,ab3,bb3,b3,db4,eb4,f4,ab4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4], ~@17 [db2,db3,db4,f4,ab4,db5] ~@7 [db2,db3,db4,f4,ab4,db5] ~@6]
  [[bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5]@2 [ab1,ab2,ab3,b3,eb4,ab4] [bb1,bb2,bb3,db4,f4,bb4] [eb2,eb3,eb4,gb4,bb4,eb5,eb6]@2 [ab1,ab2,ab3,b3,eb4,ab4,ab6] [bb1,bb2,bb3,db4,f4,bb4,bb6] [eb2,eb3,eb4,gb4,bb4,eb5,eb6]@2 [ab1,ab2,ab3,b3,eb4,ab4,ab6] [bb1,db2,bb2,db3,bb3,db4,f4,ab4,bb4,db5,ab6,bb6] [eb2,eb3,eb4,gb4,bb4,eb5,eb6]@2 ~@17, ~ [db2,db3,db4,f4,ab4,db5] ~@30]
>`).s("gm_string_ensemble_1").gain(0.17)

// other · timpani · E
const timpani = note("<[~@24 [e1,e2] ~ [e1,e2] ~@5] ~@3 [~@5 [e1,e2] ~@26]>").s("gm_timpani").gain(0.3)

// other · lead 1 square · Eb
const lead_1_square = note("<~ [~@10 [eb2,eb3]!8 ~@14] ~@3>").s("gm_lead_1_square").gain(0.14).pan(0.4)

// drums · kick
const kick = s("bd").struct("<[~@3 x ~@7 x ~@6 x ~@5 x!3 ~ x ~ x ~] [x!18 ~@7 x ~@6] [~ x!31] [x!32] [x!6 ~@26]>")
  .gain(0.36)

// drums · clap
const clap = s("cp").struct("<[~@26 x!6] [x!18 ~@14] [~@3 x!23 ~@6] [~@2 x!30] [x!6 ~@26]>").gain(0.36)

// drums · snare
const snare = s("sd").struct("<[~@22 x!3 ~@7] [~@28 x!4] [x!4 ~@22 x!6] [x!10 ~@22] ~>").gain(0.24)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<[~@20 x!2 ~@10] [~@26 x!2 ~@4] ~@3>").gain(0.12)

// drums · hihat
const hihat = s("hh").struct("<[~ x!2 ~@29] ~ [~@26 x!6] [x!2 ~@30] ~>").gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<[~@26 x!6] [x!18 ~@14] [~@3 x!24 ~@5] [~@2 x!30] [x!6 ~@26]>").gain(0.36)

// drums · crash
const crash = s("cr").struct("<[~@3 x ~@7 x ~@6 x ~@5 x!8] [x!18 ~@7 x ~@6] [~ x!26 ~@5] [~ x!31] [x!6 ~@26]>")
  .gain(0.24)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<[~@11 x ~@6 x!2 ~@12] [~@17 x!2 ~@6 x ~@6] ~@3>").gain(0.52)

stack(
  piano, bass, string_ensemble_1, timpani, lead_1_square, kick, clap, snare, snare_soft, hihat, open_hat, crash,
  woodblocks
)

More by DJ Paul Elstak