Strudelify

More Human Than Human

White Zombie

KeyC♯ minorTempo105 bpm
0:00/0:00
// More Human Than Human — White Zombie
// 105 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 44 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(105/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.

// bass · lead 2 sawtooth
const bass = note("<~@4 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 ~ C ~ C ~@8>".pickRestart({
  A: "~ [c#1,c#2,c#3]@3 ~@2 [c#1,c#2,c#3]@2", B: "~ [c#1,c#2,c#3] [c#1,c#2,c#3]@6 ~@8",
  C: "~@12 [c#1,c#2,c#3] [c#0,c#1,c#2] [d1,d2,d3] [c#1,c#2,c#3]", // C# D C#
})).s("gm_lead_2_sawtooth").gain(0.55).pan(0.7)

// bass · lead 2 sawtooth · soft notes
const bass_soft = note("<~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@13>".pickRestart({
  A: "~@11 [c#1,c#2,c#3] ~@4", // C#
})).s("gm_lead_2_sawtooth").gain(0.27).pan(0.7)

// bass · synth bass 1 · "sargpepp67"
const bass_2 = note("<~@5 A ~ A ~ A ~@10 B C D E F G H@2 F G H@2 ~@12>".pickRestart({
  A: "~@8 c#3 c#1 c#2 c#1 c#3 c#1 c#2 c#1", B: "c#1 c#2 c#1 c#3 d1 d2 c#1 c#2 c#1 c#2 ~ c#3 ~@2 c#1 c#2",
  C: "c#1 c#2 c#1 c#2 d1 d2 c#1 c#2 c#1 c#2 c#1 c#3 c#1 c#2 ~ c#2",
  D: "c#1 c#2 c#1 c#2 d1 d2 c#1 c#2 c#1 ~ c#1 c#3 c#1 c#2 c#1 c#2",
  E: "c#1 c#2 c#1 c#2 d1 d2 c#1 c#2 c#1 c#2 c#1 c#3 c#1 ~ c#1 c#2",
  F: "c#1 c#2 c#1 c#2 d1 d2 c#1 c#2 c#1 c#2 c#1 c#3 ~ c#2 c#1 c#2",
  G: "c#1 c#2 c#1 c#2 d1 d2 c#1 c#2 c#1 ~ c#1 c#3 ~@2 c#1 c#2",
  H: "c#1 c#2 c#1 c#2 d1 d2 c#1 c#2 c#1 c#2 c#1 c#3 c#1 c#2 c#1 c#2",
})).s("gm_synth_bass_1").gain(0.37)

// bass · synth bass 1 · "sargpepp67" · soft notes
const bass_soft_2 = note("<~@20 A ~ B C D E ~@2 D E ~@14>".pickRestart({
  A: "~@10 c#1 ~ c#1 c#2 ~@2", B: "~@9 c#2 ~@6", C: "~@13 c#2 ~@2", D: "~@12 c#1 ~@3", E: "~@9 c#2 ~@2 c#1 c#2 ~@2",
})).s("gm_synth_bass_1").gain(0.26)

// bass · electric bass finger
const bass_3 = note("<~@7 A@5 B C B C B C B C B D B E B E B E F E G@2 H I@3 J K J L M N ~ O>".pickRestart({
  A: "[~@12 f#1 g#1 b1@6 c#1@20 ~@4 f#1 g#1 b1@6 c#1@19 ~@9]/5", B: "c#1 ~ c#1@2 d1@2 c#1 ~ c#1 ~ c#1 ~ c#1 ~ c#1!2",
  C: "~ c#1 c#1@2 d1@2 c#1 ~ c#1 ~ c#1 ~ c#1 ~ c#1 ~", D: "~ c#1 c#1@2 d1@2 c#1 ~ c#1 ~ c#1 ~ f#1 g#1 b1@2",
  E: "~ c#1 c#1@2 d1@2 c#1 ~ c#1 ~ c#1@2 f#1 g#1 b1@2", F: "c#1@2 c#1@2 d1@2 c#1 ~ c#1@2 c#1@2 c#1 ~ c#1!2",
  G: "[c#1 ~ c#1@2 d1@2 c#1 ~ c#1 ~ c#1 ~ c#1 ~ c#1 c#1@2 c#1 c#1@2 d1@2 c#1 ~ c#1 ~ c#1@2 f#1 g#1 b1@2]/2",
  H: "c#1 ~ c#1@2 ~@4 c#1 ~ c#1@2 ~@4", I: "c#1 ~ c#1 ~@5 c#1 ~ c#1 ~@5", J: "c#1!3 d1 c#1!12",
  K: "c#1!3 d1 c#1!8 c#1@2 c#1!2", L: "c#1!3 d1 c#1@2 c#1!10", M: "c#1!3 d1 c#1!5 ~@2 c#1!2 ~ c#1 ~",
  N: "c#1!3 d1 c#1!4 c#1@2 c#1!6", O: "~ c#1!2 d1 c#1!4 c#1@2 c#1!6",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · distortion guitar
const distortion_guitar = note("<~@11 A@2 B C D C B E@2 F G F G F G H G I G J G K@4 L M L M@2 N ~ O>".pickRestart({
  A: "[~@2 c#2 ~@3 [e4,g#4,c#5]@6 [f#4,a#4,d#5]@4]/2", B: "[g#4,b4,e5] [a4,c#5,f#5]", C: "[e4,g#4,c#5] [f#4,a#4,d#5]",
  D: "[g#4,b4,e5]@8 [c#4,e4,f#4,a4]@2 ~ [c#4,e4,f#4,a4]@2 ~ [c#4,e4,f#4,a4]@2", E: "[[c#4,e4,g4]@7 ~]/2",
  F: "~@2 [c#2,g#2,c#3]@2 [d2,a2,d3]@2 [c#2,g#2,c#3]@2 ~@7 [c#2,g#2,c#3]", // C#5 D5 C#5
  G: "~ [c#2,g#2,c#3] [c#2,g#2,c#3]@2 [d2,a2,d3]@2 [c#2,g#2,c#3]@2 ~@8", // C#5 D5 C#5
  H: "~@2 [c#2,g#2,c#3]@2 [d2,a2,a#2,d3]@2 [c#2,g#2,c#3,d#3]@2 ~@7 [c#2,g#2,c#3]", // C#5 A#maj7 C#sus2 C#5
  I: "~@2 [c#2,g#2,c#3]@2 [d2,a2,d3]@2 [c#2,g#2,c#3]@2 ~@5 [c#2,c#3] g#2 [c#2,g#2,c#3]", // C#5 D5 C#5 C# C#5
  J: "~@2 [c#2,g#2,c#3]@2 [d2,a2,d3]@2 [c#2,g#2,c#3]@2 ~@6 [c#2,g#2,c#3]!2", // C#5 D5 C#5
  K: "[c#2,g#2,c#3] ~ [c#2,g#2,c#3]@2 ~@4 [c#2,g#2,c#3] ~ [c#2,g#2,c#3]@2 ~@4", // C#5
  L: "[c#3,g#3,c#4]!3 [d3,a3,d4] [c#3,g#3,c#4]!5 ~@2 [c#3,g#3,c#4] ~@2 [c#3,g#3,c#4] ~", // C#5 D5 C#5
  M: "[c#3,g#3,c#4]!3 [d3,a3,d4] [c#3,g#3,c#4]!4 [c#3,g#3,c#4]@2 ~ [c#3,g#3,c#4] ~@2 [c#3,g#3,c#4] ~", // C#5 D5 C#5
  N: "[c#3,g#3,c#4]!3 [d3,a3,d4] [c3,c#3,g#3,c#4] [c#3,g#3,c#4]!3 [c#3,g#3,c#4]@2 ~ [c#3,g#3,c#4] ~@2 [c#3,g#3,c#4] ~", // C#5 D5 C#maj7 C#5
  O: "~ [c#3,g#3,c#4]!2 [d3,a3,d4] [c#3,g#3,c#4]!4 [c#3,g#3,c#4]@2 ~ [c#3,g#3,c#4] ~@2 [c#3,g#3,c#4] ~", // C#5 D5 C#5
})).s("gm_distortion_guitar").gain(0.24).pan(0)

// chords · distortion guitar
const distortion_guitar_2 = note("<A@2 ~@26 B ~@15>".pickRestart({
  A: "[~@6 a3@5 ~ a3@18 ~@2]/2", B: "~@14 [c#3,c#4] ~",
})).s("gm_distortion_guitar").gain(0.24).pan(1)

// other · whistle
const whistle = note("<~@3 A@2 B C ~ D@2 ~@34>".pickRestart({
  A: "[~@11 e7@14 ~@7]/2", B: "e8@7 ~@9", C: "~ a7", D: "[~@10 d#7@9 ~@13]/2",
})).s("gm_whistle").gain(0.06)

// other · string ensemble 1
const string_ensemble_1 = note("<~@12 A B@3 A C D@2 E@4 ~@8 F@4 ~@8>".pickRestart({
  A: "[e4,g#4,c#5] [f#4,a#4,d#5]", // C#m D#m
  B: "[[g#4,b4,e5] [a4,f#5] [e4,g#4] [a#4,d#5] [b4,e5] [c#4,e4,f#4,a4], ~@8 c#5@16 f#4@11 ~@13, ~@16 g#4@3 ~@5]/3", // E D E D#5 E5 F#m7
  C: "[g#4,b4,e5] [c#5,f#5], ~@8 a4@5 ~@3", D: "[[c#4,e4,g4]@15 ~]/2",
  E: "[c#6,c#7] ~@3 [c#6,c#7] ~@3 [c#6,c#7] ~@3 [c#6,c#7] ~@3", // C#
  F: "[c#1,c#2,c#4,c#5] ~ [c#1,c#2,c#4,c#5] ~@5 [c#1,c#2,c#4,c#5] ~ [c#1,c#2,c#4,c#5] ~@5", // C#
})).s("gm_string_ensemble_1").gain(0.24).pan(0.6)

// other · melodic tom
const melodic_tom = note("<~@32 A@2 B C ~@8>".pickRestart({
  A: "[~@4 c#4 c#3 ~ c#3 ~@4 c#4 c#3 ~ c#3@2 ~@3 c#4 c#3 ~ c#3 ~@4 c#4 ~@3]/2", B: "~@4 c#4 ~@2 c#3 ~@4 c#4 c#3 ~ c#3",
  C: "~@4 c#4 c#3 ~ c#3 ~@4 c#4 c#3 c#4!2",
})).s("gm_melodic_tom").gain(0.72)

// other · melodic tom · soft notes
const melodic_tom_soft = note("<~@33 A@2 ~@9>".pickRestart({
  A: "[~@13 c#3 ~ c#3@2 ~@4 [c#3,d#3,e3] ~@10]/2", // C#m
})).s("gm_melodic_tom").gain(0.48)

// drums · kick
const kick = s("bd").struct("<~@8 A ~ A ~ B C B D B E B F G@3 F G@2 H F B@3 F I@4 J@6 ~ K>".pickRestart({
  A: "~ x ~@2", B: "x ~@6 x!2 ~@7", C: "x ~@6 x!2 ~@4 x ~@2", D: "x ~@6 x ~@3 x ~@4", E: "x ~@7 x ~@6 x",
  F: "x ~@7 x ~@2 x ~@4", G: "x ~@6 x ~@2 x ~@5", H: "x ~@6 x ~@2 x ~@2 x ~@2", I: "x!2 ~@2 x!2 ~@2",
  J: "x ~ x ~@3 x ~ x ~@2 x ~@2 x ~", K: "~@2 x ~@3 x ~ x ~@2 x ~@2 x ~",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@11 A B@3 C B@3 D B@3 E B@3 F B@3 E ~@4 B@3 G B@2 ~ H>".pickRestart({
  A: "~@12 x!3 ~", B: "~ x ~ x", C: "~@4 x ~@3 x!2 ~@2 x ~ x!2", D: "~@2 x ~ x ~@4 x ~@2 x ~ x!2",
  E: "~@4 x ~@4 x ~@2 x ~ x!2", F: "~@4 x ~@4 x ~@2 x!2 ~@2", G: "~@4 x ~@7 x!2 ~@2", H: "~@4 x ~@5 x ~@2 x ~@2",
})).gain(0.8)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@19 A B C D E F G H I J K L M ~@12>".pickRestart({
  A: "~@3 x", B: "~@9 x ~@3 x ~@2", C: "~ x ~@5 x ~ x ~@6", D: "~ x ~ x ~@5 x ~ x ~@3 x",
  E: "~ x ~ x ~@3 x ~ x ~ x ~@4", F: "~@3 x ~ x ~ x ~@3 x ~@3 x", G: "~@3 x ~ x ~@10", H: "~@5 x ~@3 x ~@3 x ~@2",
  I: "~ x ~ x ~ x ~@3 x ~ x ~@4", J: "~@3 x ~@9 x ~@2", K: "~@3 x ~ x ~ x ~@5 x ~@2", L: "~ x ~@5 x ~ x ~ x ~@4",
  M: "~ x ~@13 x",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@20 [~ x ~ x]!12 ~@6 [~@9 x ~@6] ~@5>").gain(0.72)

// drums · crash
const crash = s("cr").struct("<~@8 A ~ A ~@5 B ~@3 B ~@3 B ~@7 C@4 D E@5 ~ E>".pickRestart({
  A: "~ x ~@2", B: "x", C: "x!2 ~@2 x!2 ~@2", D: "x ~@7 x ~@2 x ~@2 x ~", E: "~@8 x ~@2 x ~@2 x ~",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@20 x ~@15 [~ x!3 ~@4] [x!4 ~@4]!5 ~ [~ x!3 ~@4]>").gain(0.72)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 [~ x ~ x]!12 ~@24>").gain(0.72)

// drums · cowbell
const cowbell = s("cb").struct("<~@8 [x!2 ~ x!2 ~@3] ~ [x!2 ~ x!2 ~@3] ~@33>").gain(0.64)

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

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@8 A B C ~ D E ~ D ~ F E ~@25>".pickRestart({
  A: "~ x ~@8 x ~@3 x ~", B: "~@9 x ~@3 x!2 ~", C: "~@3 x ~@3 x ~ x ~@6", D: "~@13 x ~@2", E: "~@3 x ~@4", F: "~@7 x",
})).gain(0.32)

stack(
  bass, bass_soft, bass_2, bass_soft_2, bass_3, distortion_guitar, distortion_guitar_2, whistle, string_ensemble_1,
  melodic_tom, melodic_tom_soft, kick, snare, hihat, hihat_soft, open_hat, crash, ride, tambourine, cowbell, shaker,
  shaker_soft
)

More by White Zombie