Strudelify

Demonoid Phenomenon

Rob Zombie

KeyD majorTempo135 bpm
0:00/0:00
// Demonoid Phenomenon — Rob Zombie
// 135 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 154 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/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 · distortion guitar
const distortion_guitar = note(`<
  ~@4 A B A B C D C D E@2 F@2 E@2 F@2 ~@13 G@2 H ~ G@2 H ~ C D C D C D C D E@2 F@2 E@2 F@2 ~@12 G@2 H ~ G@2 H ~ C D C D
  C D C D E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 ~@9 I@2 J@2 G@2 H ~ G@2 H ~ C D C D C D C D K@2 L@2 M@2 N@2 K@2 L@2 M@2 N@2
  ~@8
>`.pickRestart({
  A: "[a3,d4]!7 [a#3,d#4]", B: "[a3,d4]!7 [g#3,c#4]",
  C: "[a3,d4]@2 [a3,d4] ~ [a3,d4]!3 ~ [a3,d4]@2 [a3,d4] ~ [a3,d4]!2 [a#3,d#4]@2", // D5 D#5
  D: "[a3,d4]@2 [a3,d4] ~ [a3,d4]!3 ~ [a3,d4]@2 [a3,d4] ~ [a3,d4]!2 [g#3,c#4]@2", // D5 C#5
  E: "[[a3,d4]@4 [g#3,c#4]@3 [g3,c4]@7 [f#3,b3]@2]/2", F: "[[a3,d4]@4 [g#3,c#4]@3 [g3,c4]@7 ~@2]/2",
  G: "[d3,a3]@6 [d#3,a#3] ~", H: "[d3,a3]@6 [c#3,g#3] ~", I: "[~@3 a#5@5 ~@2 a#5@4 ~ c6@16 ~]/2",
  J: "[a#5@6 ~@2 a#5@5 ~ b5@14 ~@4]/2", K: "[e5@5 a5@6 c6@5]/2", L: "[e5@9 a5@17 c6@6]/2", M: "[e5@8 a5@17 c6@7]/2",
  N: "[e5@4 a5@9 c6@3]/2",
})).s("gm_distortion_guitar").gain(0.41)

// chords · electric bass finger
const electric_bass_finger = note(`<
  ~@4 A B A B C D C D E@2 F@2 E@2 F@2 ~ G@12 H@2 I@2 H@2 I@2 C D C D C D C D E@2 F@2 E@2 F@2 ~@4 G@8 H@2 I@2 H@2 I ~ C D
  C D C D C D E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 ~@9 C D C D H@2 I@2 H@2 I@2 C D C D C D C D E@2 F@2 E@2 F@2 E@2 F@2 E@2
  F@2 ~@8
>`.pickRestart({
  A: "[a3,d4]!7 [a#3,d#4]", B: "[a3,d4]!7 [g#3,c#4]",
  C: "[a3,d4]@2 [a3,d4] ~ [a3,d4]!3 ~ [a3,d4]@2 [a3,d4] ~ [a3,d4]!2 [a#3,d#4]@2", // D5 D#5
  D: "[a3,d4]@2 [a3,d4] ~ [a3,d4]!3 ~ [a3,d4]@2 [a3,d4] ~ [a3,d4]!2 [g#3,c#4]@2", // D5 C#5
  E: "[[a3,d4]@4 [g#3,c#4]@3 [g3,c4]@7 [f#3,b3]@2]/2", F: "[[a3,d4]@4 [g#3,c#4]@3 [g3,c4]@7 ~@2]/2",
  G: "e2@2 d2 e2@2 e2 d2 e2", H: "d2!12 ~@4", I: "d2!16",
})).s("gm_electric_bass_finger").gain(0.41)

// bass · electric bass pick
const bass = note(`<
  ~@4 A@3 B C D@2 E F@2 ~@27 A@3 B C D@2 E F@2 ~@26 A@3 B C D@2 E F@2 ~@23 A@3 B ~@8 A@3 B C D@2 E F@2 ~@14 G@2 H@2 I@4
>`.pickRestart({
  A: "d2@2 d3@2 d2 d3 d2@2 d3@2 d2 d3@2 d2 d3@2", B: "d2@2 d3@2 d2 d3@2 ~ d3@2 d2 d3@2 d2 d3@2, ~@7 d2@2 ~@7",
  C: "d2@2 d3@2 d2 d3 d2@2 d3@2 ~ d3@2 d2 d3@2, ~@5 d2 ~@2",
  D: "d2@2 d3@2 d2 ~ d2@2 d3@2 d2 d3@2 d2 d3@2, ~@5 d3@2 ~@9",
  E: "d2@2 d3@2 d2 d3@2 ~ d3@2 ~ d3@2 ~ d3 ~, ~@7 d2@2 ~ d2@2 ~ d2@2 ~", F: "[d2@7 ~]/2",
  G: "[[a3,d4]@4 [g#3,c#4]@3 [g3,c4]@7 [f#3,b3]@2]/2", H: "[[a3,d4]@4 [g#3,c#4]@3 [g3,c4]@7 ~@2]/2",
  I: "[[a3,d4]@8 [g#3,c#4]@5 ~@14 [f#3,b3]@4 [a3,d4]@8 [g#3,c#4]@6 [g3,c4]@14 ~@5, ~@13 [g3,c4]@17 ~@34]/4", // D5 C#5 B5 D5 C#5 C5
})).s("gm_electric_bass_pick").gain(0.41)

// other · bagpipe · "ShotguN GuarD"
const bagpipe = note(`<
  ~@24 A B C ~ D E F ~@2 G H I J K L M ~@22 N O P Q R S ~ G H I J K L M ~@38 G H I J K L M ~@33
>`.pickRestart({
  A: "~@9 d4@7", B: "f4@2 f4@3 ~ f4@6 ~@2 g#4 ~", C: "g#4 ~ g#4@2 ~@2 g4@8 ~@2", D: "~@14 e4 ~",
  E: "e4 ~ e4@3 ~ d#4@6 ~@2 g4 ~", F: "g4 ~ g4@2 ~@2 a#4@6 ~@4", G: "e4@3 ~ e4@2 f4@4 e4@2 ~@4",
  H: "e4 ~ e4@2 ~@2 f4@4 e4@2 ~@4", I: "e4@3 ~ e4@2 f4@5 ~ d#4@3 ~", J: "d#4@3 ~ d#4 ~ f4@3 ~ e4@2 ~@4",
  K: "e4@3 ~ e4@2 f4@4 ~ e4@2 ~@3", L: "e4 ~ e4@2 ~@2 f4@3 ~ e4@2 ~@4", M: "e4@3 ~ e4@2 f4@5 ~ d#4@2 ~@2", N: "~@15 c4",
  O: "d4@2 d4 ~ d4 ~ d4@2 ~@2 d#4@4 ~@2", P: "~@7 d#4", Q: "f4@2 f#4 ~ f#4 ~ f#4@2 ~@2 f#4@3 ~@3", R: "~@13 b4 ~ b4",
  S: "~ b4@2 ~ b4 ~ c5@3 ~ a#4@4 ~@2",
})).s("gm_bagpipe").gain(0.41)

// other · flute
const flute = note("<A@2 B ~@73 C ~@77>".pickRestart({
  A: "[~@9 f5@2 f#5@2 ~ d5 c#5@2 d5@2 ~@6 d5@2 c#5@3 d5@2, ~@13 f5@2 ~@17]/2", B: "~ c5@2 c#5 d5@4 ~@8",
  C: "~@2 e4 e4@2 d#4 ~ e4 d4 c#4@2 d4 ~@2 e4@2, ~@13 d#4@2 ~",
})).s("gm_flute").gain(0.41)

// chords · tuba
const tuba = note("<~@2 A B@2 ~@149>".pickRestart({
  A: "~@10 d5 ~ d5 ~ d5@2", B: "[~@6 [e5,f5] ~ [e5,f5] ~@2 b5 ~@20, ~@10 [e5,f5,a5,c6]@9 ~@13]/2",
})).s("gm_tuba").gain(0.41)

// other · taiko drum
const taiko_drum = note("<~@57 [e2@2 d2 e2@2 e2 d2 e2]!3 [e2 ~@3 d2@2 e2@4 e2@2 d2@2 e2@2] ~@93>")
  .s("gm_taiko_drum").gain(0.41)

// chords · orchestra hit · "INDUSTRIAL SOUND-"
const orchestra_hit = note("<~@33 A@2 ~@2 B@2 ~@30 A@2 ~@2 B@2 ~@39 A@2 ~@2 B@2 ~ C ~@18 D E F G H G ~@8>".pickRestart({
  A: "~@6 [a#3,d#4] ~", B: "~@12 [a#3,d#4]@3 ~", C: "[a#3,d#4]@4 ~@4 [a#3,d#4]@3 ~@5", D: "~@4 a#3 ~@3, ~@7 d#4@3 ~@6",
  E: "[a#3,d#4]@3 ~@5 [a#3,d#4]@3 ~@5", F: "~@4 [a#3,d#4]@3 ~@5 [a#3,d#4]@2 ~@2", G: "~@2 [a#3,d#4] ~@5",
  H: "~@2 [a#3,d#4] ~@3 [a#3,d#4] ~", // D#5
})).s("gm_orchestra_hit").gain(0.41)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@9 B A C A C A C ~@13 C@7 ~ A@9 B A C A C A C ~@12 C@7 ~ A@9 B A C A C A C A B A C A C A C ~@9 A@4 C@7 ~ A@9 B A
  C A C A C A B A C A C A C ~@8
>`.pickRestart({
  A: "x!2", B: "x ~@3 x!2 ~@2", C: "x ~@3 x!2 ~ x",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@11 B A B A B ~ C A@11 B@7 ~ A@11 B A B A B C A@11 B@7 ~ A@11 B A B A B A@3 B A B A B ~@9 A@4 B@7 ~ A@11 B A B A
  B A@3 B A B A B ~@8
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!2 ~@2", C: "~@3 x",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A@16 ~ B@12 A@7 ~ A@16 B@12 A@7 ~ A@24 C D E F G H I J K A@11 ~ A@24 ~@8
>`.pickRestart({
  A: "x!8", B: "x!16", C: "~@5 x ~@5 x ~@4", D: "~@2 x ~@3 x ~@6 x ~@2", E: "~@3 x ~@4 x ~@5 x ~",
  F: "~@5 x ~@3 x ~@5 x", G: "~@3 x ~ x ~@2", H: "~ x ~@5 x ~@4 x ~@3", I: "~@2 x ~@6 x ~@3 x ~@2",
  J: "~@3 x ~@5 x ~@4 x ~", K: "~@4 x ~@6 x ~@3 x",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@11 [x!8] ~@142>").gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 A@8 ~@29 A@8 ~@28 A@8 ~@25 A@4 ~@8 A@8 ~@24>".pickRestart({
  A: "~@2 x!2 ~@2 x!2",
})).gain(0.41)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@101 A B C D E F G H I ~@44>".pickRestart({
  A: "~@5 x ~@10", B: "x ~@3 x ~@8 x ~@2", C: "~@3 x ~@4 x ~@5 x ~", D: "~@5 x ~@3 x ~@5 x", E: "~@3 x ~ x ~@2",
  F: "~ x ~@3 x ~@3 x ~@6", G: "~@2 x ~@6 x ~@3 x ~@2", H: "~@3 x ~@5 x ~@3 x ~@2", I: "~@4 x ~@6 x ~@3 x",
})).gain(2.08)

// drums · shaker
const shaker = s("sh").struct("<~@101 A B C D E F G F H ~@44>".pickRestart({
  A: "~@11 x ~@4", B: "~ x ~ x ~@4", C: "~ x ~@3 x ~@10", D: "~@3 x ~@3 x ~@8", E: "~ x!2 ~", F: "~@7 x ~@3 x ~@4",
  G: "~@6 x ~@4 x ~@4", H: "~@8 x ~@4 x ~@2",
})).gain(0.41)

stack(
  distortion_guitar, electric_bass_finger, bass, bagpipe, flute, tuba, taiko_drum, orchestra_hit, kick, snare, hihat,
  mid_tom, tambourine, cabasa, shaker
)

More by Rob Zombie