Strudelify
Plaster Caster cover art

1997 · Love Gun

Plaster Caster

Kiss

KeyG majorTempo137 bpm
0:00/0:00
// Plaster Caster — Kiss
// 137 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "Ace" distortion guitar (copy of ch 2 "Paul" distortion guitar)
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(137/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 · electric bass pick · "Gene"
const bass = note("<A@11 B@8 C@8 D@8 E@8 F@7 G H@8 I@8 J@8 K@7 A L@8 M@8 N@8 O@3 P>".pickRestart({
  A: "a1!8",
  B: "[a1 g2 e2 d2!2 c2 b1 a1@2 a1!4 c2 c#2 d2@2 d2!4 g1 g#1 a1@2 a1!4 c2 c#2 d2@2 d2!4 c2 a1 f1@2 f1!6 g1@2 g1!6 d2@2 d2!6 c3]/8",
  C: "[~ c3@2 a2!2 g2 e2 a1@2 a1!4 c2 c#2 d2@2 d2!4 a1 c2 a1@2 a1!4 c2 c#2 d2@2 d2!6 f2@2 f2!6 g2@2 g2!6 d2@2 d2!6 g2]/8",
  D: "[~ g2 ~ d2!2 e1 f#1 g1@2 g1!4 b1 c2 d2@2 d2!4 e1 f#1 g1@2 g1!4 b1 c2 d2@2 d2!5 c2 f1@2 f1!6 g1@2 g1!6 a1@2 a1!7]/8",
  E: "[a1!5 c2!2 d2@2 d2!4 c2 a1 g1@2 g1!4 c2!2 d2@2 d2!4 c2 a1 g1@2 g1!6 f1@2 f1!6 c2@2 c2!4 b1 a1 g1@2 g1!6 c2]/8",
  F: "[~ c2 ~ g1!2 a1 c2 a1@2 a1!4 c2 c#2 d2@2 d2!4 g1 g#1 a1@2 a1!4 c2 c#2 d2@2 d2!6 f2@2 f2!6 g2@2 g2!6 d2]/7",
  G: "d2!7 g2",
  H: "[~ g2 ~ d2!2 e1 f#1 g1@2 g1!4 b1 c2 d2@2 d2!4 e1 f#1 g1@2 g1!4 b1 c2 d2@2 d2!4 c2 a1 f1@2 f1!6 g1@2 g1!6 a1@2 a1!7]/8",
  I: "[a1!5 c2!2 d2@2 d2!4 c2 a1 g1@2 g1!4 a1 c2 d2@2 d2!4 c2 a1 g1@2 g1!6 f2@2 f2!4 e2 d2 c2@2 c2!4 b1 a1 g1@2 g1!6 c2]/8",
  J: "[~ c2 ~ g1!2 a1 c2 a1@2 a1!4 c2 c#2 d2@2 d2!4 a1 c2 a1@2 a1!4 c2 c#2 d2@2 d2!4 c2 a1 f2@2 f2!6 g2@2 g2!6 d2@2 d2!6 g2]/8",
  K: "[~ g2 ~ d2!2 e1 f#1 g1@2 g1!4 b1 c2 d2@2 d2!4 e1 f#1 g1@2 g1!4 b1 c2 d2@2 d2!4 c2 a1 f1@2 f1!6 g1@2 g1!6 a1]/7",
  L: "[a1!5 c2!2 d2@2 d2!4 c2 a1 g1@2 g1!4 c2!2 d2@2 d2!4 c2 a1 g1@2 g1!6 f1@2 f1!6 c2@2 c2!6 g1@2 g1!6 c2]/8",
  M: "[~ c2 ~ g1!2 c2!2 d2@2 d2!4 c2 a1 g1@2 g1!4 c2!2 d2@2 d2!4 c2 a1 g1@2 g1!6 f1@2 f1!6 c2@2 c2!6 g1@2 g1!6 c2]/8",
  N: "[~ c2 ~ g1!2 a1 c2 a1@2 a1!4 c2 c#2 d2@2 d2!4 g1 g#1 a1@2 a1!4 c2 c#2 d2@2 d2 g2 d2 a2 g2 e2 a1@2 a1!4 c2 c#2 d2@2 e1@2 e1 f#1@2 g1 a1@2 a1!4 c2 c#2 d2]/8",
  O: "[~ d2 ~ d2 a2 ~ e2 a1@17]/3", P: "a1 ~@3",
})).s("gm_electric_bass_pick").gain(0.42)

// chords · distortion guitar · "Paul"
const distortion_guitar = note("<~@4 A@7 B@8 C@8 D@7 E@6 F@3 G@8 D@7 H I@8 G@8 D@7 J@4 K@5 L@8 M@8 N@3 O>".pickRestart({
  A: "[[e3,a3]@8 ~ g4 f#4 d4 g4 f#4 d4 [e3,a3]@9 ~ g4 f#4 d4 g4 f#4 d4 [e3,a3]@9 ~ g4 f#4 d4 g4 f#4 d4 [a2,e3,a3]@9, a2@15 a2@16 a2@16 ~@9, ~@9 d4@2 ~ d4@2 ~@11 d4@2 ~ d4@2 ~@11 d4@2 ~ d4@2 ~@10]/7", // A5
  B: "[~ g4 f#4 d4 g4 f#4 d4 [e3,a3]@9 ~ g4 f#4 d4 g4 f#4 d4 [e3,a3]@9 ~ g4 f#4 d4 g4 f#4 d4 [f3,c4]@8 [g3,d4]@8 [d3,a3]@8 [g3,d4], ~@2 d4@4 ~@2 d4@4 ~@2 a2@32 a2@31 ~@51, ~@17 d4@2 ~ d4@2 ~@11 d4@2 ~ d4@2 ~@26]/8", // A5 F5 G5 D5 G5
  C: "[~ [g3,d4] ~ [d3,a3] [d3,a3]@3 [e3,a3]@9 ~ g4 f#4 d4 g4 f#4 d4 [e3,a3]@9 ~ g4 f#4 d4 g4 f#4 d4 [f3,c4]@8 [g3,d4]@8 [d3,a3]@8 [g3,d4], ~@14 a2@32 a2@31 ~@51, ~@17 d4@2 ~ d4@2 ~@11 d4@2 ~ d4@2 ~@26]/8", // G5 D5 A5 F5 G5 D5 G5
  D: "[~@2 [g3,d4]@2 ~@2 [d3,a3]@2 [d3,a3]@2 e2@2 f#2@2 g2@6 [g2,d3,g3,d4,g4]@6 b2@2 c3@2 d3@6 [d3,a3,d4]@6 e2@2 f#2@2 g2@6 [g2,d3,g3,d4,g4]@6 b2@2 c3@2 d3@6 [d3,a3,d4]@6 d3 ~ d3 ~ [f3,c4]@16 [g3,d4]@16 [a2,e3]@2]/7", // G5 D5 G5 D5 G5 D5 F5 G5 …
  E: "[~ [a2,e3] [a2,f#3] [a2,e3]!3 [a2,f#3] [a2,e3,a3]@6 [c3,g3,c4]!2 [d3,a3,d4]@8 [g2,d3,g3,d4,g4]@6 [c3,g3,c4]!2 [d3,a3,d4]@8 [g2,d3,g3,d4,g4]@8 [f3,c4]]/6", // A5 D A5 D A5 C5 D5 G5 …
  F: "[~@7 [c3,g3,c4]@8 [g2,d3,g3]@8 [c3,g3,c4]]/3", // C5 G5 C5
  G: "[~ [c3,g3,c4] ~ [g2,d3,g3] [g2,d3,g3]@3 [e3,a3]@9 ~ g4 f#4 d4 g4 f#4 d4 [e3,a3]@9 ~ g4 f#4 d4 g4 f#4 d4 [f3,c4]@8 [g3,d4]@8 [d3,a3]@8 [g3,d4], ~@7 a2@16 a2@16 ~@25, ~@17 d4@2 ~ d4@2 ~@11 d4@2 ~ d4@2 ~@26]/8", // C5 G5 A5 F5 G5 D5 G5
  H: "~ [a2,e3] [a2,f#3] [a2,e3]!3 [a2,f#3] [a2,e3]", // A5 D A5 D A5
  I: "[~@5 [c3,g3,c4]!2 [d3,a3,d4]@8 [g2,d3,g3,d4,g4]@6 [c3,g3,c4]!2 [d3,a3,d4]@8 [g2,d3,g3,d4,g4]@8 [f3,c4]@8 [c3,g3,c4]@8 [g2,d3,g3]@8 [c3,g3,c4]]/8", // C5 D5 G5 C5 D5 G5 F5 C5 …
  J: "[~ [a2,e3] [a2,f#3] [a2,e3]!3 [a2,f#3] [a2,e3]@6 [c3,g3,c4]!2 [d3,a3,d4]@2 [d3,a3] [d3,b3] [d3,a3] [d3,a3]@3 [g2,d3,g3,d4,g4]@6 [c3,g3,c4]!2 [d3,a3,d4]]/4", // A5 D A5 D A5 C5 D5 G …
  K: "[~ [d3,a3] [d3,b3] [d3,a3] d3@3 [g2,d3,g3,d4,g4]@8 [f3,c4]@5 f3 e3 d3 [c3,g3]@5 c3 b2 a2 [g2,d3,g3]@8 [c3,g3,c4], ~ a3 ~@8]/5", // D5 G D5 G5 F5 C5 G5 C5
  L: "[~ [c3,g3,c4] ~ [g2,d3,g3]!2 [c3,g3,c4]!2 [d3,a3,d4]@2 [d3,a3] [d3,b3] [d3,a3] [d3,a3]@3 [g2,d3,g3,d4,g4]@6 [c3,g3,c4]!2 [d3,a3,d4]@2 [d3,a3] [d3,b3] [d3,a3] d3@3 [g2,d3,g3,d4,g4]@8 [f3,c4]@5 f3 e3 d3 [c3,g3]@5 c3 b2 a2 [g2,d3,g3]@8 [c3,g3,c4], ~@7 a3 ~@8]/8", // C5 G5 C5 D5 G D5 G5 C5 …
  M: "[~ [c3,g3,c4] ~ [g2,d3,g3] [g2,d3,g3]@3 [e3,a3]@9 ~ g4 f#4 d4 g4 f#4 d4 [e3,a3]@9 ~ g4 f#4 d4 g4 f#4 d4 [e3,a3]@9 ~ g4 f#4 d4 g4 f#4 d4 [a2,e3,a3]@9, ~@14 a2@31 ~ a2@32 a2@32 ~@18, ~@17 d4@2 ~ d4@2 ~@11 d4@2 ~ d4@2 ~@11 d4@2 ~ d4@2 ~@10]/8", // C5 G5 A5
  N: "[~ g4 f#4 d4 d4@2 [a2,e3,a3] [a2,e3,a3]@17, ~ d4@2 ~ g4 ~@19]/3", O: "[a2,e3,a3] ~@3",
})).s("gm_distortion_guitar").gain(0.28).pan(0.1)

// other · distortion guitar · "Ace lead"
const distortion_guitar_2 = note("<~@58 A@2 ~@7 B@4 C@4 D@2 ~@5 E@2 ~@27>".pickRestart({
  A: "[~@4 g4@3 g4@3 g4@5 ~]/2",
  B: "[~@14 g4@6 g4@4 g4@4 ~@2 d4@4 d4@2 c4@3 a3 c4@2 d4@2 a3@2 g4@6 g4@4 g4@4 e4 g4 e4 d4]/4",
  C: "[e4 g4!2 g4@4 g#4@2 c5 f5 d#5@4 a#4@2 d5 g5 f5@4 f4@2 a4 d5 f5@3 f5@2]/4",
  D: "[d5 f5 d5 c5 d5@2 c5@6 c5@2 b4@18]/2", E: "[~@4 g4@3 g4@3 a4@5 ~]/2",
})).s("gm_distortion_guitar").gain(0.42)

// other · distortion guitar · "Solo (Bends)"
const distortion_guitar_3 = note("<~@58 A@2 ~@7 B@4 ~@11 C@2 ~@27>".pickRestart({
  A: "[~@4 f4@3 f4@3 f4@5 ~]/2", B: "[~@7 d4@3 d4@2 d4@2 ~@2]/2", C: "[~@4 f4@3 f4@3 g4@5 ~]/2",
})).s("gm_distortion_guitar").gain(0.42).pan(0.9)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B A ~ A@6 B C A@6 B ~ A@7 B A@6 B C A@7 C A@7 B A@6 B C A@6 B C A@15 C A@7 C A@7 D ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x", D: "~ x ~@2 x ~@3",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@4 [~ x ~ x]!3 [~ x ~@2] ~@66 [~@10 x!3 ~@3] ~@36>").gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 A ~ B ~@6 C ~@7 C ~@15 C ~@23 D ~@44>".pickRestart({
  A: "~ x ~@6", B: "~@4 x!3 ~ x ~ x ~ x ~@3", C: "~@8 x ~ x!3 ~@3", D: "~@8 x!5 ~@3",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@32 A B C D ~@14 E ~@17 F@2 ~@2 G H@2 ~@36>".pickRestart({
  A: "x!2 ~@3 x ~@2", B: "~ x", C: "~@5 x ~@2", D: "~ x ~ x ~@4", E: "~@5 x!2 ~", F: "~ x!2 ~@2 x ~@2",
  G: "~@4 x!2 ~@2", H: "~ x ~@3 x ~@2",
})).gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@9 [~@5 x!3] ~@101>").gain(0.35)

// drums · ride bell
const ride_bell = s("rd").struct("<~@51 A B@7 C ~@15 D B@14 E D B@6 E D E@4 B@3 F ~@3>".pickRestart({
  A: "~@7 x", B: "x!8", C: "x!5 ~@3", D: "~@6 x!2", E: "x!7 ~", F: "x!4 ~@4",
})).gain(0.35)

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

stack(
  bass, distortion_guitar, distortion_guitar_2, distortion_guitar_3, kick, snare, low_tom, hihat, mid_tom, open_hat,
  high_tom, ride_bell, crash
)

More by Kiss