Strudelify
Dragula cover art

1998 · Hellbilly Deluxe

Dragula

Rob Zombie

KeyC minorTempo125 bpm
0:00/0:00
// Dragula — Rob Zombie
// 125 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "synth" lead 5 charang (copy of ch 1 "synth" pad poly); ch 8 "guitar" distortion guitar (copy of ch 6 "guitar" overdriven guitar)
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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 · pad poly · "synth"
const pad_poly = note("<A B C D A B C D A B C D A B C D ~@56 E@4 ~@4 F@3 ~@25 G@3 H I@3 J>".pickRestart({
  A: "d4", B: "db4", C: "f4", D: "e4", E: "[~@4 db5@6 ~@5 db5@5 ~@5 db5@7, c5]/4", F: "[~@4 db5@6 ~@5 db5@5 ~@4, c5]/3",
  G: "eb2@2 c2!6", H: "eb2@2 ~@4 f3 ~",
  I: "[[eb2,eb3]@2 [c2,c3]!5 c2 eb2@2 [c2,c3]!5 c2 eb2@2 [c2,c3]!5 c2, ~@7 eb3@3 ~@5 eb3@3 ~@6]/3", // Eb C
  J: "f3 f3@2 g3 f3@3 ~",
})).s("gm_pad_poly").gain(0.47).pan(0.3)

// other · taiko drum · "percussion"
const taiko_drum = note("<~@4 A@23 ~ A@23 ~ A@31 ~ A@31 ~>".pickRestart({
  A: "c2 ~@3 c2 ~@3 c2 ~@3 c2 ~@3",
})).s("gm_taiko_drum").gain(0.8)

// bass · synth bass 1 · "synth bass"
const bass = note(`<
  ~@4
  [b2 a2!2 f3 a2 ~ b2 a2 b2 a2 b2@2 d3@4]!12
  ~@92
  [eb2@2 c2!6]!3
  [eb2@2 c2 ~ c2 ~@2 c2!2 ~ c2!6]
  [eb2@2 c2!6]!3
  ~
>`).s("gm_synth_bass_1").gain(0.57)

// bass · lead 8 bass lead · "bass"
const bass_2 = note(`<
  ~@12 A B A B ~@4 A B A B ~@4 B@8 ~@8 A B A B ~@4 B@8 C@2 A B C@2 A B@5 ~@4 A B A B ~@4 B@8 C@2 A B C@2 A B@9 ~@8
>`.pickRestart({
  A: "c2!6 db2@2", B: "c2!8", C: "bb1!8",
})).s("gm_lead_8_bass_lead").gain(0.47)

// chords · overdriven guitar · "guitar"
const overdriven_guitar = note(`<
  ~@20 A@4 ~@4 B C A@2 B C A@2 D@8 A@4 D@3 ~ B C A@2 B C A@2 E@2 A@2 E@2 A@2 B C A@2 ~@4 A@4 ~@4 B C A@2 B C A@2 E@2 A@2
  E@2 A@2 B C A@2 B C A@2 F@7 ~
>`.pickRestart({
  A: "[c3,g3,c4]!8", B: "[c3,g3,c4]!6 [c3,g3]!2, ~@3 eb4", C: "[c3,g3,c4]!6 g3!2, ~@3 [eb3,c4]",
  D: "[c2,c3] ~ [c2,c3]!7 ~ [c2,c3] ~ [c2,c3] ~ [c2,c3]!2", // C
  E: "[bb2,bb3] ~ [bb2,bb3]!7 ~ [bb2,bb3] ~ [bb2,bb3] ~ [bb2,bb3]!2", F: "[c3,eb3] ~@3",
})).s("gm_overdriven_guitar").gain(0.47).pan(0.3)

// chords · distortion guitar · "guitar"
const distortion_guitar = note(`<
  ~@8 A B A B A B A B ~@4 A B A B ~@4 C D E F C D E F ~@8 A B A B ~@4 C D E F C D E F G@2 A B G@2 A B C D E H ~@4 I@4
  ~@4 C D E F C D E F G@2 A B G@2 A B C D E F C D E F ~@8
>`.pickRestart({
  A: "c4!5 [bb3,c4] db4!2, ~@3 [c4,ab4]", B: "c4!5 [bb3,c4] c4@2, ~@6 db4 ~", C: "[g2,c3]!6 [g2,eb3]!2",
  D: "[g2,c3]!6 g2!2, ~@3 eb3", E: "[g2,c3]!8", F: "[g2,c3]!4 [d4,g4]@4, ~@4 [db4,gb4]@3 ~, ~@2 [c4,f4] ~",
  G: "[bb2,f3,bb3]!8", H: "[g2,c3]!4 [d3,g3]@4, ~@4 [db3,gb3]@3 ~, ~@2 [c3,f3] ~", I: "c4!6 c4@2",
})).s("gm_distortion_guitar").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@23 ~ B@8 A@15 ~ B@10 A@2 B@2 A@2 B@4 A@11 ~ B@10 A@2 B@2 A@2 B@8 A@7 ~
>`.pickRestart({
  A: "x!4", B: "x!8",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@20 A@4 ~@4 A@8 ~@8 A@4 ~@4 A@20 ~@4 A@4 ~@4 A@31 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A@12 B@4 C@4 B@3 ~ D@8 ~@4 B@4 C@4 B@3 ~ D@10 C@2 D@2 C@2 D@4 B@4 C@4 B@3 ~ D@10 C@2 D@2 C@2 D@8 B@7 ~
>`.pickRestart({
  A: "x ~@3 x ~ x!2 ~ x!4 ~@3", B: "x!4", C: "x!16", D: "x!8",
})).gain(0.8)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@16 A@4 ~@4 A@3 ~@21 A@3 ~@21 A@4 ~@4 A@3 ~@33>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@11 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@11
>`.pickRestart({
  A: "x",
})).gain(0.8)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@4 A@12 ~@4 A@4 ~@20 A@4 ~@14 A@2 ~@2 A@2 ~@8 A@4 ~@14 A@2 ~@2 A@2 ~@16
>`.pickRestart({
  A: "x ~@3 x ~ x!2 ~ x!4 ~@3",
})).gain(4.06)

stack(
  pad_poly, taiko_drum, bass, bass_2, overdriven_guitar, distortion_guitar, kick, snare, open_hat, open_hat_soft, crash,
  cabasa
)

More by Rob Zombie