Strudelify
Spit cover art

1992 · Revenge

Spit

Kiss

KeyE minorTempo100 bpm
0:00/0:00
// Spit — Kiss
// 100 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · overdriven guitar · "Guitar"
const overdriven_guitar = note(`<
  A ~ B ~ C D E F G ~ B ~ C D E F H I J K@2 L M L N L M O P ~ B ~ Q R S T U R S T V@2 W X W Y W X W Z AA AB AC AD AE AF
  R@2 AG AH R@2 AG AH V AI L M L N L M O AJ AK@2
>`.pickRestart({
  A: "a#2 b2 d3 b2 a#2 a2 g2@2 [e2,b2,e3]!2 ~@6", B: "~@8 [e2,b2,e3] ~@7", C: "~@8 e2!2 ~ e2 [c#3,g3]@3 ~",
  D: "e3 d3 b2 ~ a2 g2@3 e2!2 ~ e2 [c#3,g3]@3 ~", E: "e2!2 ~ e2!3 ~@2 e2!2 ~ e2 [c#3,g3]@3 ~",
  F: "a#2 b2 d3 a#2 b2 d3 e3@2 e2!2 ~ e2 [c#3,g3]@3 ~", G: "e2!2 ~ e2 [g2,d3] [f#2,c#3] [e2,b2]@2 ~@8",
  H: "[e2,b2,e3]@4 [g2,d3,g3]@4 a2!8", I: "a2!5 [a#2,f3]@2 ~ [a2,e3]@2 a2!6", J: "a2!5 [c3,g3]@2 ~ [b2,f#3]@2 b2!6",
  K: "[b2!5 [a2,e3]@2 ~ [b2,f#3]@2 b2!5 [d3,a3]@9 e2!2 ~ e2 [c#3,g3]@3 ~]/2", // A5 B5 D5 C#dim
  L: "e3 d3 b2 e3 ~ e3 g2@2 a2!2 ~ a2 [c#3,g3]@3 ~", M: "a#2 b2 d3 b2 a2 g2@3 e2!2 ~ e2 [c#3,g3]@3 ~",
  N: "[g2,d3]@4 [f#2,d3]@4 e2!2 ~ e2 [c#3,g3]@3 ~", O: "e3 d3 b2 e3 ~ e3 g2@2 [b2,f#3]@4 [a2,e3]@4",
  P: "[g2,d3]@4 [a2,e3]@4 [e2,b2]!2 ~@6", Q: "[e2,b2]@4 [g2,d3]@4 g2 g#2 a2 ~ g#2 a2@3",
  R: "g2 g#2 a2 ~ g#2 a2@3 g2 g#2 a2 ~ g#2 a2@3", S: "g2 g#2 a2 ~ g#2 a2@3 b2 g2 e2 b2 ~ b2 g2 e2",
  T: "b2 g2 e2 ~ [g2,d3]@4 b2 g2 e2 b2 ~ b2 g2 e2", // G5
  U: "[d3,a3,d4,g4] [d3,a3,d4,f#4]@2 [d3,a3,d4,g4] [d3,a3,d4,f#4]@2 [d3,a3,d4,g4] [d3,a3,d4,f#4] g2 g#2 a2 ~ g#2 a2@3", // Dsus4 D Dsus4 D Dsus4 D
  V: "[d3,a3,d4,g4] [d3,a3,d4,f#4]@2 [d3,a3,d4,g4] [d3,a3,d4,f#4]@2 [d3,a3,d4,g4] [d3,a3,d4,f#4] [d3,a3,d4,g4] [d3,a3,d4,f#4]@2 [d3,a3,d4,g4] [d3,a3,d4,f#4]@2 [d3,a3,d4,g4] [d3,a3,d4,f#4]", // Dsus4 D Dsus4 D Dsus4 D Dsus4 D …
  W: "e2!2 ~ e2 [c#3,g3]@3 ~ e3 d3 b2 e3 ~ e3 g2@2", X: "a2!2 ~ a2 [c#3,g3]@3 ~ a#2 b2 d3 b2 a2 g2@3",
  Y: "a2!2 ~ a2 [c#3,g3]@3 ~ [g2,d3]@4 [f#2,d3]@4", Z: "[b2,f#3] [a2,e3] [g2,d3] [a2,e3]",
  AA: "[e2,b2]!2 ~@6 b3@2 g#3@2 e3@4", AB: "g#3 b3 e4@2", AC: "[e2,b2,e3] ~@7", AD: "g#3 f#3 e3@2 g#2@2 a#2@2",
  AE: "b2", AF: "~@3 [g2,d3]", AG: "b2 g2 e2 b2 ~ b2 g2 e2 b2 g2 e2 ~ [g2,d3]@4",
  AH: "b2 g2 e2 b2 ~ b2 g2 e2 [d3,a3,d4,g4] [d3,a3,d4,f#4]@2 [d3,a3,d4,g4] [d3,a3,d4,f#4]@2 [d3,a3,d4,g4] [d3,a3,d4,f#4]", // Dsus4 D Dsus4 D Dsus4 D
  AI: "[d3,a3,d4,g4] [d3,a3,d4,f#4]@2 [d3,a3,d4,g4] [d3,a3,d4,f#4]@2 [d3,a3,d4,g4] [d3,a3,d4,f#4] e2!2 ~ e2 [c#3,g3]@3 ~", // Dsus4 D Dsus4 D Dsus4 D C#dim
  AJ: "[g2,d3]@4 [a2,e3]@4 e3 ~ [e2,e3]@2 a2@2 a#2@2", AK: "[b2 ~ c#3 d#3 e3 ~@3 [e2,b2]@24]/2",
})).s("gm_overdriven_guitar").gain(0.64).pan(0.7)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A ~ B ~ C D E F G ~ B ~ C D E F H I J K@2 L M L N L M O P ~ B ~ Q R S T U R S T V@2 W X W Y W X W Z AA ~@4 AB AC AD AE
  AF AC AD AE AF V AG AH AI AH AJ AH AI O AK AL@2
>`.pickRestart({
  A: "a#1 b1 d2 b1 a#1 a1 g1@2 e1!2 ~@6", B: "~@8 e1 ~@7", C: "~@8 e1!2 ~ e1 e2@3 ~",
  D: "e2 d2 b1 ~ a1 g1@3 e1!2 ~ e1 e2@3 ~", E: "e1!2 ~ e1!3 ~@2 e1!2 ~ e1 e2@3 ~",
  F: "a#1 b1 d2 a#1 b1 d2 e2@2 e1!2 ~ e1 e2@3 ~", G: "e1!2 ~ e1 g1 f#1 e1@2 ~@8", H: "e1@4 g1@4 a1!8",
  I: "a1!5 a#1@3 a1@2 a1!6", J: "a1!2 ~ a1!2 c2@2 ~ b1@2 b1!6", K: "[b1!5 a1@2 ~ b1@2 b1!5 d2@9 e1!2 ~ e1 e2@3 ~]/2",
  L: "e2 d2 b1 e2 ~ e2 d2 b1 a1!2 ~ a1 e2@3 ~", M: "a#1 b1 d2 b1 a1 g1@3 e1!2 ~ e1 e2@3 ~",
  N: "g1@4 f#1@4 e1!2 ~ e1 e2@3 ~", O: "e2 d2 b1 e2 ~ e2 d2 b1 b1@4 a1@4", P: "g1@4 a1@4 e1!2 ~@6",
  Q: "e1@4 g1@4 g1 g#1 a1 ~ g#1 a1@3", R: "g1 g#1 a1 ~ g#1 a1@3 g1 g#1 a1 ~ g#1 a1@2 ~",
  S: "g1 g#1 a1 ~ g#1 a1@3 b1 g1 e1 b1 ~ b1 g1 e1", T: "b1 g1 e1 ~ g1@4 b1 g1 e1 b1 ~ b1 g1 e1",
  U: "d2!8 g1 g#1 a1 ~ g#1 a1@3", V: "d2!16", W: "e1 e1@2 e1 e2@4 e2 d2 b1 e2 ~ e2 d2 b1",
  X: "a1 a1@2 a1 e2@4 a#1 b1 d2 b1 a1 g1@3", Y: "a1 a1@2 a1 e2@4 g1@4 f#1@4", Z: "b1 a1 g1 a1", AA: "e1!2 ~@14",
  AB: "~@3 g1", AC: "g1 g#1 a1 ~ g#1 a1@3 g1 g#1 a1 ~ g#1 a1@3", AD: "g1 g#1 a1 ~ g#1 a1@2 ~ g1 g#1 a1 ~ g#1 a1@3",
  AE: "b1 g1 e1 b1 ~ b1 g1 e1 b1 g1 e1 ~ g1@4", AF: "b1 g1 e1 b1 ~ b1 g1 e1 d2!8", AG: "d2!8 e1 e1@2 e1 e2@4",
  AH: "e2 d2 b1 e2 ~ e2 d2 b1 a1 a1@2 a1 e2@4", AI: "a#1 b1 d2 b1 a1 g1@3 e1 e1@2 e1 e2@4",
  AJ: "g1@4 f#1@4 e1 e1@2 e1 e2@4", AK: "g1@4 a1@4 e2 ~ e1@2 a1@2 a#1@2, ~@10 e2 ~@5",
  AL: "[b1 ~ c#2 d#2 e2 ~@3 e1@24]/2",
})).s("gm_electric_bass_pick").gain(0.8)

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

// drums · rim
const rim = s("rim").struct("<~@52 x ~@23>").gain(0.64)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@55 [~@3 x] ~@20>").gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@19 B ~ C ~ C ~ C ~@16 D ~ D ~ D ~@7 E ~@9 C ~ C ~ C ~ C ~@4>".pickRestart({
  A: "~@4 x!3 ~@9", B: "~@3 x!4 ~@9", C: "~@4 x!4 ~@8", D: "~@12 x!4", E: "~@4 x!9 ~@3",
})).gain(0.8)

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

// drums · high tom
const high_tom = s("ht").struct("<A ~@18 B C ~ D ~ D ~ D ~@16 E ~ E ~ E ~@7 F ~@9 D ~ D ~ D ~ D ~@4>".pickRestart({
  A: "~@2 x!2 ~@12", B: "~@15 x", C: "x!3 ~@13", D: "x!4 ~@12", E: "~@8 x!4 ~@4", F: "x!5 ~@7 x ~@3",
})).gain(0.8)

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

// drums · ride
const ride = s("rd").struct("<~@32 A B C D A B C D ~@15 E B@2 E@2 B@2 E@2 ~@10 D ~>".pickRestart({
  A: "~@4 x!4", B: "x!8", C: "x!5 ~@3", D: "~ x", E: "x",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct("<~@74 [~ x] ~>").gain(0.8)

stack(overdriven_guitar, bass, kick, rim, snare, hihat, low_tom, mid_tom, open_hat, high_tom, crash, ride, tambourine)

More by Kiss