Strudelify

Thunder Kiss '65

White Zombie

KeyE minorTempo124 bpm
0:00/0:00
// Thunder Kiss '65 — White Zombie
// 124 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 1, 2/4 at bar 9, 4/4 at bar 10, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 4 "Shauna Reynolds -Bass-" named as a bass, played on electric bass finger (its cello patch is not one)
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(124/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 · distortion guitar · "Jay Yuenger -Guitar 1-"
const distortion_guitar = note(`<
  A B@3 C B@3 D B E B E B E B E F G F G F G F G B E B E B E B E F G F G F G F G H@4 I@2 J@6 K@2 L M L N L M L N O@3 P
  O@3 P O@3 P Q R S T U V U V U V U W X Y X Y X Y X Z AA@4 AB@2 AC AD AE@3
>`.pickRestart({
  A: "~@8 e2 ~ e2 ~ e2!2 ~ e2", B: "e2 ~ e2 ~ e2!2 ~ e2!2 ~ e2 ~ e2!2 ~ e2",
  C: "b2 ~ g2 ~ a#2 ~ f#2 ~ e2 ~ e2 ~ e2!2 ~ e2", D: "e2!2 [a#2,f3] ~ g2!2 [b2,f#3] ~ b2 ~ g2 ~ a#2 ~ f#2 ~",
  E: "e2 ~ e2 ~ e2!2 ~ e2 b2 ~ g2 ~ a#2 ~ f#2 ~", F: "e2@3 ~ [e3,d4,g4]@2 ~ e2!3 [d3,a3] ~ [d#3,a#3] ~ [e3,b3] ~",
  G: "e2@3 ~ [e3,d4,g4]@2 ~ e2!3 [a2,e3] ~ e2!2 [g2,d3] ~", // Em7 A5 G5
  H: "[[a2,e3]@3 ~ [c3,g3] ~ a2 ~ [d#3,a#3] ~ [d3,a3] ~ g2 ~ [g2,d3]@4 a2 ~ [a2,e3] ~ g2 ~ [g2,d3]@3 ~ [g#2,d#3] ~ [g2,d3] ~]/2", // A5 C5 D#5 D5 G5 A5 G5 G#5 …
  I: "[[f#2,c#3]@11 ~@3 [f2,c3]@12 ~@6]/2", J: "[[e2,b2]@24 ~@4 g2 ~ a2 ~]/2", K: "[[e2,b2]@24 ~@4 [e3,a3] ~@3]/2",
  L: "e2 ~ e2 ~ [e3,b3] ~ e2!2 [a2,d3] [a#2,d#3] [b2,e3] ~ [g2,d3,g3] ~ [a#2,f3,a#3] ~", // E5 D5 D#5 E5 G5 A#5
  M: "e2 ~ e2 ~ [f3,c4] ~ e2!2 [f#3,c4] ~ [d#3,a#3] ~ [b2,f#3] ~ [a#2,f3] ~", // F5 F#dim D#5 B5 A#5
  N: "e2 ~ e2 ~ [f3,c4] ~ e2!4 [a#2,f#3] ~ e2!2 [g2,d3] ~", O: "e2 ~ e2 ~ [g2,d3] ~ e2!5 ~ [g2,d3] ~ [a2,e3] ~",
  P: "e2 ~ e2 ~ [g2,d3] ~ e2!4 [g2,d3] ~ [f#2,c#3] ~ [f2,c3] ~", Q: "e2@3 ~ [g2,d3]@4 e2!2 [f#2,c#3] ~ e2!2 [f2,c3] ~",
  R: "e2@3 ~ [b2,f#3]@4 a#2!2 [a#2,f3] ~ a2!2 [a2,e3] ~", S: "e2@3 ~ [g2,d3]@3 ~ e2!2 [f2,c3] ~ e2!2 [g2,d3] ~",
  T: "~@4 e2 ~ e2 ~ e2!2 ~ e2!2 ~ e2 ~", U: "e2!2 ~ e2!2 ~ e2 ~ e2!2 ~ e2 b2 ~ g2 ~",
  V: "a#2 ~ f#2 ~ e2 ~ e2 ~ e2!2 ~ e2!2 ~ e2 ~", W: "a#2 ~ f#2 ~ e2@3 ~ [e3,d4,g4]@2 ~ e2!3 [d3,a3] ~",
  X: "[d#3,a#3] ~ [e3,b3] ~ e2@3 ~ [e3,d4,g4]@2 ~ e2!3 [a2,e3] ~", // D#5 E5 Em7 A5
  Y: "e2!2 [g2,d3] ~ e2@3 ~ [e3,d4,g4]@2 ~ e2!3 [d3,a3] ~", Z: "e2!2 [g2,d3] ~ [f#2,c#3]@11 ~",
  AA: "[~@2 [f2,c3]@16 ~@2 [f#2,c#3]@11 ~]/2", AB: "[~@2 [f2,c3]@16 ~@2 [f#2,c#3]@5 ~@3 [f#2,c#3]@3 ~]/2",
  AC: "[f#2,c#3] ~ [f2,c3]@4 f#2 ~ f2 ~ f#2 ~ f2 ~ f#2 ~", AD: "f2 ~ f#2 ~ f2 ~ f#2 ~ f2 ~ f#2 ~ f2 ~ f#2 ~",
  AE: "[f2 ~ f#2 ~ f2@32 ~@12]/3",
})).s("gm_distortion_guitar").gain(0.51)

// other · distortion guitar · "Jay Yuenger -Guitar 2 Sol"
const distortion_guitar_2 = note(`<
  ~@4 A ~@3 B ~@7 C D E F G H I J K ~@7 C L M N O P Q R S ~@14 T U V W X Y Z AA ~@12 AB AC AD ~@7 AE AF AG AH AI AJ AK
  AL AM@2 AN AO AP AQ AR AS AT AU AV@3
>`.pickRestart({
  A: "b3 ~ g3 ~ a#3 ~ f#3 ~@9", B: "~@2 [a#3,f4] ~@3 [b3,f#4] ~ b3 ~ g3 ~ a#3 ~ f#3 ~", C: "~@8 b3 ~ g3 ~ a#3 ~ f#3 ~",
  D: "d5!4", E: "d5@4 d5!2 a4 a4@4 ~ a4!2 g4 a4", F: "b4 ~ d5 ~ a4 ~ g4 ~ g4@3 ~ g4@2 d4!2",
  G: "d4 ~ e4 ~ a3!2 g3 ~ g3@4 g3@4", H: "[d4,e4] [e4,f#4]", I: "[f4,g4]@8 [g4,a4]@4 [g4,a4] ~ [g4,a4] ~",
  J: "a4 ~ b4 ~ a4 ~ d5 ~ a4 ~ a4 ~ g4@3 ~", K: "d5@3 ~ d5!2 b4 a5@8 ~", L: "d5@4 d5@4 d5@4 d5@3 ~",
  M: "d5@4 d5@4 d5@4 d5 b3 b4 ~", N: "[b3,a4]@8 ~@4 a4!2 g4!2", O: "b4 g4!2 a4!2 ~ g4 ~ g4@4 b3!3 ~",
  P: "a5@3 ~ a5!2 g5 e5 e5@3 ~ e5!2 d5 e5", Q: "e5@3 ~ a4!3 g4 g4@3 ~ g4@3 ~",
  R: "e4 ~ b3 ~ a4 ~ g4 ~ e4!2 ~ e4!2 ~ g3 ~", S: "d5!2 ~ g4 a4!2 ~ g4 g4@2 g4@2 g4@4", T: "[d4,e4]!4",
  U: "[e4,f#4]@4 [e4,f#4]@2 ~ [e4,f#4] [e4,f#4]@2 [e4,f#4]@2 [e4,f#4]@4", // Esus2
  V: "[d4,e4]@4 [d4,e4]@4 [d4,e4]@2 ~ [g4,a4] [g4,a4]@4", W: "[a4,b4]@4 a4 a4@2 g4 g4@4 g4@2 b4@2",
  X: "e5 d5 b4 g5 e5!2 g5 e5 g5 d5 [b4,d5] b4 a4!4", Y: "a4@4 ~@2 e4!2 e4@8",
  Z: "[a4,b4]@4 ~ [b4,c5] [b4,c5]@4 [b4,d5]@4 ~@2", AA: "[d5,e5]@4 g5 ~ g5 e5 b5@4 b5@4",
  AB: "e5 g5 e5 d5 e5 g5 e5 d5 g5@3 ~ b4 d5!3", AC: "d5!2 a4 b4 a4!4 a4@4 g4@2 e4@2",
  AD: "g4 ~ e4 ~ e4!2 d4!3 e4@2 ~ d4 e4!2 ~", AE: "~@12 b3 ~ g3 ~", AF: "a#3 ~ f#3 ~ d5@4 d5@4 d5@4",
  AG: "d5@2 d5!2 d5@4 d5@4 d5@4", AH: "d5 d5@2 ~ e4 ~ a4 ~ e4 ~ e4!3 ~ g4 ~", AI: "a4 ~ a4 ~ a4!2 g4 a4 g4 e4!3 g4@4",
  AJ: "g4 b3!2 ~ g5@8 ~@4", AK: "e5 g5 e5 d5 e5 ~ d5 ~ d5 ~ a4!3 ~ a4 ~", AL: "~@2 g4 a4 a4@2 ~ a4 g4@4 g4 e4 d4 ~",
  AM: "[g4 a4 g4 a4 a4@2 ~ a4 g4@4 e4@8 [f#2,c#3]@3 ~ [f#2,c#3]@3 ~ [f#2,c#3]@3 ~]/2", // F#5
  AN: "[f#2,c#3]@2 [f2,c3]@5 ~ [f2,c3]@8", AO: "~@4 [f#3,f#4]@3 ~ [f#3,f#4]@3 ~ [f#3,f#4] ~ [f#3,f#4] [g#3,g#4]",
  AP: "[f#3,f#4] ~ [f3,f4]@5 ~ [f3,f4]@8", AQ: "~@4 f#4@4 f#4@4 f#4 ~ f#4 g#4", AR: "f#4 ~ f4@11 ~@3",
  AS: "f4@3 ~ f#4@5 ~@3 f#4 ~ f#4 ~", AT: "f#4 ~ f4 ~ f4 ~ f#4 ~ f4 ~ f#4 ~ f4 ~ f#4 ~",
  AU: "f4 ~ f#4 ~ f4 ~ f#4 ~ f4 ~ f#4 ~ f4 ~ f#4 ~", AV: "[f4 ~ f#4 ~ f4@32 ~@12]/3",
})).s("gm_distortion_guitar").gain(0.51).pan(1)

// bass · electric bass finger · "Shauna Reynolds -Bass-"
const bass = note(`<
  ~@4 A B@3 C B D B D B D B D E F E F E F E F B D B D B D B D E F E F E F E F G@4 H@2 I@6 J@2 K L K L K L K M N@3 O N@3
  O N@3 O P Q R S T U T U T U T V W X W X W X W Y Z@2 AA@2 Z@2 AB AC AD@2 ~
>`.pickRestart({
  A: "b1 ~ g1 ~ a#1 ~ f1 ~ e1 ~ e1 ~ e1!2 ~ e1", B: "e1 ~ e1 ~ e1!2 ~ e1!2 ~ e1 ~ e1!2 ~ e1",
  C: "e1!2 a#1 ~ e1!2 b1 ~ b1 ~ g1 ~ a#1 ~ f#1 ~", D: "e1 ~ e1 ~ e1!2 ~ e1 b1 ~ g1 ~ a#1 ~ f#1 ~",
  E: "e1@3 ~ e2@2 ~ e1!3 d2 ~ d#2 ~ e2 ~", F: "e1 ~ e1 ~ e2@2 ~ e1!3 a1 ~ e1!2 g1 ~",
  G: "[a1@3 ~ c2 ~ a1 ~ d#2 ~ d2 ~ g1 ~ g1@4 a1 ~ a1 ~ g1 ~ g1 ~ g1 ~ g#1 ~ g1 ~]/2",
  H: "[f#1@3 ~ f#1@3 ~ f#2@3 ~ f#1 ~ f1@5 ~ f1@3 ~ f#1@2 ~ f#1!5]/2", I: "[e1@24 ~@4 g1 ~ a1 ~]/2", J: "e1/2",
  K: "e1 ~ e1 ~ e2 ~ e1!2 d2 d#2 e2 ~ g2 ~ a#2 ~", L: "e1 ~ e1 ~ f2 ~ e1!2 f#2 ~ d#2 ~ b1 ~ a#1 ~",
  M: "e1 ~ e1 ~ f2 ~ e1!4 a#1 ~ e1!2 g1 ~", N: "e1 ~ e1 ~ g1 ~ e1!5 ~ g1 ~ a1 ~",
  O: "e1 ~ e1 ~ g1 ~ e1!4 g1 ~ f#1 ~ f1 ~", P: "e1@3 ~ g1@3 ~ e1!2 f#1 ~ e1!2 f1 ~", Q: "e1@3 ~ b1@3 ~ a#1!3 ~ a1!3 ~",
  R: "e1@3 ~ b1@3 ~ e1!2 f1 ~ e1!2 g1 ~", S: "~@4 e1 ~ e1 ~ e1!2 ~ e1!2 ~ e1 ~",
  T: "e1!2 ~ e1!2 ~ e1 ~ e1!2 ~ e1 b1 ~ g1 ~", U: "a#1 ~ f#1 ~ e1 ~ e1 ~ e1!2 ~ e1!2 ~ e1 ~",
  V: "a#1 ~ f#1 ~ e1@3 ~ e2@2 ~ e1!3 d2 ~", W: "d#2 ~ e2 ~ e1 ~ e1 ~ e2@2 ~ e1!3 a1 ~",
  X: "e1!2 g1 ~ e1@3 ~ e2@2 ~ e1!3 d2 ~", Y: "e1!2 g1 ~ f#1@3 ~ f#1@3 ~ f#1@3 ~",
  Z: "[f#1 ~ f1@16 ~@2 f#1@3 ~ f#1@3 ~ f#1@3 ~]/2",
  AA: "[f#1 ~@11 f2!3 ~ f2!4 f#1@3 ~ f#1@3 ~ a1 ~ f#1 ~, ~ f1@8 ~@7]/2", AB: "f#1 ~ f1@4 f#1 ~ f1 ~ f#1 ~ f1 ~ f#1 ~",
  AC: "f1 ~ f#1 ~ f1 ~ f#1 ~ f1 ~ f#1 ~ f1 ~ f#1 ~", AD: "[f1 ~ f#1 ~ f1@28]/2",
})).s("gm_electric_bass_finger").gain(0.51)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B@2 C D B@7 E F G F G F G F G B@7 E F G F G F G F G H@4 I J K ~@5 L M N@3 O N@3 O P@7 O N@3 O Q@3 R S@6 T U V U
  V U V U V W X Y X Y X Y Z L AA ~@2
>`.pickRestart({
  A: "x ~@3 x ~@3 x ~ x ~@4 x", B: "x ~ x ~@4 x!2 ~ x ~@4 x", C: "x ~ x ~@4 x!2 ~ x ~@5",
  D: "x!2 ~@2 x!2 ~@2 x ~@3 x ~@3", E: "x ~ x ~@4 x!9", F: "x ~@3 x ~@2 x!4 ~ x ~ x ~", G: "x ~@3 x ~@2 x!9",
  H: "x ~@3 x!2 ~ x", I: "x ~@6 x ~@8", J: "x ~@7 x!2 ~ x ~ x!2 ~", K: "x", L: "x!8", M: "x ~ x ~ x ~ x ~ x!8",
  N: "x ~ x ~@5 x!3 ~ x ~ x ~", O: "x ~ x ~@5 x!8", P: "x ~ x ~ x ~@2 x ~@2 x ~ x ~ x ~", Q: "x ~@3 x ~@3 x!3 ~ x!3 ~",
  R: "~@4 x ~ x ~@4 x!2 ~ x ~", S: "~@3 x!2 ~ x ~@4 x!2 ~ x ~", T: "~@3 x!2 ~ x ~@4 x!5", U: "x!5 ~@3 x ~@2 x!4 ~",
  V: "x ~ x ~ x ~@3 x ~@2 x!5", W: "x!5 ~@6 x ~@4", X: "~@4 x ~@7 x!2 ~ x", Y: "~ x!2 ~ x ~@6 x ~@4", Z: "~ x!7",
  AA: "x!3 ~@5",
})).gain(0.51)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B@3 C B@7 D E D E D E D E D B@7 D E D E D E D E D B@4 F G H ~@5 I J K@3 D K@3 D K@7 D K@3 D L@3 I M@6 N O P O P
  O P O P Q R S R S R S T ~ U ~@2
>`.pickRestart({
  A: "x!2 ~ x", B: "~ x ~ x", C: "~ x ~ x!2 ~ x ~", D: "~@4 x ~@3 x!8", E: "~@4 x ~@3 x!3 ~ x ~ x ~",
  F: "~@4 x ~@3 x!7 ~", G: "~@4 x ~@3 x!2 ~@6", H: "x", I: "~ x", J: "x ~@7 x!8", K: "~@2 x ~@3 x!2",
  L: "~@2 x ~@2 x ~ x", M: "x!2", N: "x ~@7 x ~@3 x!4", O: "x!4 ~@4 x ~@3 x!3 ~", P: "x ~ x ~@5 x ~@3 x!4",
  Q: "x!4 ~@4 x ~@3 x!4", R: "x!3 ~@5 x ~@3 x!2 ~@2", S: "~@8 x ~@3 x!4", T: "x!3 ~@13", U: "~ x ~@2",
})).gain(0.51)

// drums · low tom
const low_tom = s("lt").struct("<~@103 [~ x ~@2] ~@2>").gain(0.51)

// drums · open hat
const open_hat = s("oh").struct("<~@47 [x!4]!7 [x!2 ~@2] ~@51>").gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<~@75 [~@2 x ~@2 x ~ x]!3 ~@25 [~ x ~@2] ~@2>").gain(0.51)

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

// drums · ride bell
const ride_bell = s("rd").struct("<~@76 [~ x ~@2] ~@29>").gain(0.51)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 A@7 B ~@8 A@7 B ~@45 C A@6 D ~@20>".pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", B: "x ~ x!3 ~ x!2 ~@8", C: "~@4 x ~ x!3 ~ x!3 ~ x!2", D: "x ~ x!3 ~ x!3 ~ x!2 ~@4",
})).gain(0.51)

stack(
  distortion_guitar, distortion_guitar_2, bass, kick, snare, low_tom, open_hat, high_tom, china, ride_bell, tambourine
)

More by White Zombie