Strudelify
Shock Me cover art

1997 · Love Gun

Shock Me

Kiss

KeyD majorTempo132 bpm
0:00/0:00
// Shock Me — Kiss
// 132 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "Paul" distortion guitar (copy of ch 2 "Ace" distortion guitar); ch 7 "Rhythm 2 add. notes" distortion guitar (copy of ch 6 "Rhythm 1 add. notes" distortion guitar)
// note: Full arrangement: all 119 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · "Ace"
const distortion_guitar = note(`<
  ~ A@2 B@2 A@2 C@2 D@2 C@2 D@2 E@2 F G H I J@2 K L J@2 K L J@2 M@2 N A@2 C@2 D@2 C@2 O@2 E@2 F G H I J@2 K L J@2 K L
  J@2 M@2 N A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 P Q P Q P Q P Q H R J@8 K L J@2 K L J@2 K L J@2 K L J@2 K L S@4
>`.pickRestart({
  A: "[[a2,f#3,a3,d4] [a2,e3,a3,c#4] ~ [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4] [a2,f#3,a3,d4] [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4] [a2,f#3,a3,d4] [a2,e3,a3,c#4] f#2@2 f#2@2]/2", // D A D A D A
  B: "[~ [a2,a3,d4,f#4]!3 [a2,b3,d4,g4] [a2,a3,d4,f#4] ~ f#2@2 g3 f#2@2 [a2,e3,a3]@2 ~@2]/2", // D G D A5
  C: "[~@2 [a2,a3,d4,f#4]@2 [a2,a3,d4,f#4]@2 [a2,a3,d4,f#4]@2 [a2,b3,d4,g4]@2 [a2,a3,d4,f#4]@2 ~@2 f#2@4 g3@2 f#2@4 [a2,e3,a3]@4 ~@2 [a2,e3,a3]!2]/2", // D G D A5
  D: "[a2,e3,a3]/2", // A5
  E: "[~@2 [a2,a3,d4,f#4]@2 [a2,a3,d4,f#4]@2 [a2,a3,d4,f#4]@2 [a2,b3,d4,g4]@2 [a2,a3,d4,f#4]@2 ~@2 f#2@4 g3@2 f#2@4 [a2,e3,a3]@4 a2 ~ a2 ~]/2", // D G D A5
  F: "[a2,e3,a3] [b2,f#3,b3]!2 [a2,e3,a3] [b2,f#3,b3] [a2,e3,a3] [b2,f#3,b3] ~", // A5 B5 A5 B5 A5 B5
  G: "[e3,b3,e4]@2 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]@2 [e3,b3,e4]@2 [f#3,c#4,f#4]@2 [e3,b3,e4]@2 [f#3,c#4,f#4]@2 [d3,a3,d4,f#4]!2", // E5 F#5 E5 F#5 E5 F#5 D
  H: "[d3,a3,d4,f#4]", I: "[c3,g3,c4,e4] [b2,f#3,b3,d4]", J: "[[a2,e3,a3] ~ [a2,e3,a3]@4 ~ [a2,d3,g3,d4,g4]@8 ~]/2",
  K: "[d3,a3,d4,f#4] ~@3 [d3,a3,d4,f#4]!2 ~@2", L: "[d3,a3,d4,f#4] ~@3 [c3,g3,c4,e4]!2 ~@2",
  M: "[[d3,a3,d4,f#4] ~@3 [d3,a3,d4,f#4]!2 ~ [d3,a3,d4,f#4]@2 [e3,b3,e4,g#4]!7]/2", N: "[e3,b3,e4,g#4] ~@7",
  O: "[[a2,e3,a3]@31 ~]/2", P: "[a2,e3,a3] [b2,f#3,b3]!2 [a2,e3,a3] [b2,f#3,b3] [a2,e3,a3] ~@2",
  Q: "[a2,e3,a3] [b2,f#3,b3]!2 [a2,e3,a3] [b2,f#3,b3] [a2,e3,a3]@3", R: "[c3,g3,c4,e4]@4 [b2,f#3,b3,d4] e2 g2 g#2",
  S: "[~ [a2,e3,a3]@51 [a2,e3,a3]@4 ~@8]/4", // A5
})).s("gm_distortion_guitar").gain(0.29).pan(0.1)

// other · distortion guitar · "Ace (Lead)"
const distortion_guitar_2 = note("<~@61 A B C@2 D E F G H I J K@2 L M N O P Q R S T U@2 V W X@2 Y@3 ~@27>".pickRestart({
  A: "[b4,e5]!6 ~ [b4,e5]!3 [b4,e5]@2 b4@2 e5@2", B: "d5@8 ~@2 e5 ~ g5 e5 ~ g5", C: "[g5@3 g5@3 g5@3 g5@3 g5@2 g5@2]/2",
  D: "~@2 g3@2 c4 ~ d4 ~ d4@4 d4@4", E: "d4@4 c4@3 a3 c4@8", F: "~@2 b4@2 g4 ~@3 f#4@2 d4 ~@3 b4@2",
  G: "g4 ~@3 f#4@2 d4 ~@3 b4@2 g4 ~ f#4@2", H: "d4 ~ b4@2 g4 ~ f#4@2 d4 ~ f#4@2 d4@2 e4@2",
  I: "d4!2 c4 a3 d4 a3 c4 d4 c4@2 a3 g3 a3@2 e4@2", J: "a4@2 f#4 a4 f5@4 e5 d#5 ~ d5 f5@4",
  K: "[e5 d#5 ~ d5 c5 d5 c5@2 a4 a4@3 f#4 c#5 e5 d5@2 e5 a5 g5 e5 d5 e5!2 a5 g5 e5 d5 e5!2 a5 g5]/2",
  L: "e5 d5 g5 e5 g5 e5 d5 e5 c6@4 c6@4", M: "c6@4 c6@2 c6 a5", N: "c6 a#5 g5 a5 d5 [e5,a5] d5 [e5,a5]",
  O: "d5@2 [e5,a5]@2 c6 a5 b5 a5 g5 e5 f#5 e5 d5 c5 a4 d5", P: "a4 c5 a4 g4 e4!2 e4@2 g4@4 ~@4", Q: "a4",
  R: "a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ g#4@4", S: "e4", T: "e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4@4",
  U: "[e4@2 f#4 b4 d5@2 d5@4 c5@2 a4 b4 a4@4 g4@2 e4 f#4 f4@2 d4 b3 e4 b3 d4 e4 d4 ~]/2",
  V: "f#4 g#4 a4 b4 ~@2 f#4 g#4 a4 b4@3 f#4 g#4 a4 b4", W: "a4 g#4 f#4 g#4 a4 b4 a4@2 g4@2 e4 ~ d4@2 b3 ~",
  X: "[e4@24 e4@4 e4 ~ e4@2]/2", Y: "a3/3",
})).s("gm_distortion_guitar").gain(0.64)

// bass · electric bass finger · "Gene"
const bass = note(`<
  ~ A@2 B@2 A@2 C@2 D@2 C@2 D@2 B@2 E F G H I@2 J K I@2 J K I@2 L@2 M A@2 C@2 N@4 D@2 B@2 E F O H I@2 J P I@2 J P I@2
  Q@2 M A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 R S R S R S R S G H I@8 J P I@2 J P I@2 J P I@2 J P I@2 J P T@4
>`.pickRestart({
  A: "[d2 a1 ~ a1@2 a1 d2 a1@2 a1 d2 a1 f#1@2 f#1@2]/2", B: "[~ d2!5 ~ f#1@2 e1 f#1@2 a1@2 ~@2]/2",
  C: "[~@2 d2@2 d2@2 d2@2 d2@2 d2@2 ~@2 f#1@4 e1@2 f#1@4 a1@4 ~@2 a1!2]/2", D: "a1/2", E: "a1@2 b1 a1 b1 a1 b1 ~",
  F: "e2@2 f#2 e2 f#2 e2 f#2 d2", G: "d2@15 ~", H: "c2@4 b1 e1 f#1 g1", I: "a1 ~ a1 ~ a1 ~ a1 e1", J: "d2 ~@3 d2!2 ~@2",
  K: "d2 ~@3 c2 e1 f#1 g1", L: "[d2 ~@3 d2!2 ~ d2@2 e2!7]/2", M: "e2 ~@7",
  N: "[a1@33 ~ d2@2 d2@2 d2@2 d2@2 d2@2 ~@2 f#1@4 e1@2 f#1@4 a1@4 ~@2 a1!2]/4", O: "d2", P: "d2 ~@3 c2!2 ~@2",
  Q: "[d2 ~@3 d2!2 ~ d2@2 e2!6 e1]/2", R: "a1@2 b1 a1 b1 a1 ~@2", S: "a1@2 b1 a1 b1 a1@3", T: "[~ a1@51 a1@2 ~@10]/4",
})).s("gm_electric_bass_finger").gain(0.48)

// other · distortion guitar · "Rhythm 1 add. notes"
const distortion_guitar_3 = note(`<
  ~@2 A B@2 ~ A B@2 ~@2 B@2 ~@2 B@2 ~@18 A B@2 ~@2 B@2 ~@2 B@2 ~@18 A B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~@40
>`.pickRestart({
  A: "~@2 d3!2", B: "[~@7 d3@2 ~ d3@2 ~@4]/2",
})).s("gm_distortion_guitar").gain(0.29).pan(0.1)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@2 B A C@2 D E F G D H I J K H K D B L M H N O M H O N D H P Q R M H D E S H I H C T U H U A V W M H O@2 M H X Y M
  H O A R M H M H M H M H M H M H M H M H A@8 R ~ D H D H D H U Z M AA@2 E A AB AC AD AE AF M E AG AH AI AJ AK AL AM ~
  AN AO
>`.pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x!2 ~@3 x ~ x", C: "x!2 ~@3 x ~@2", D: "x!2 ~@2 x!2 ~ x", E: "~ x ~@2 x!2 ~ x",
  F: "x!2 ~@5 x", G: "~@3 x ~@4", H: "~ x ~@2 x!2 ~@2", I: "x ~@4 x ~ x", J: "~@3 x ~ x ~ x", K: "x ~@4 x ~@2",
  L: "~ x ~ x!2 ~@3", M: "x ~@3 x!2 ~ x", N: "x ~ x ~@5 x ~ x!2 ~@4", O: "x ~@2 x ~@4 x ~ x!2 ~@4",
  P: "x ~@2 x ~@2 x ~", Q: "x!3 ~@5", R: "x", S: "x!2 ~ x ~ x ~@2", T: "~ x ~ x ~ x ~ x", U: "x ~@3 x!2 ~@2",
  V: "x!2 ~ x ~ x ~ x", W: "x!8", X: "x ~@2 x ~ x!2 ~", Y: "x!2 ~ x ~@4", Z: "x!2", AA: "~ x ~ x!3 ~ x",
  AB: "x ~@2 x ~@4 x ~ x ~@5", AC: "x ~@2 x ~@4 x ~ x ~@3 x ~", AD: "~@2 x ~@5 x!4 ~@2 x ~", AE: "x ~@2 x ~@4 x!4 ~@4",
  AF: "x ~@2 x ~@4 x!4 ~@2 x!2", AG: "~ x!2 ~ x!2 ~ x", AH: "x ~ x!2 ~ x ~ x", AI: "x ~@2 x!3 ~ x",
  AJ: "~@2 x ~@5 x ~@2 x ~ x!2 ~", AK: "x ~@2 x ~@4 x ~@2 x ~@4", AL: "x!2 ~@6", AM: "~ x ~@14", AN: "~@12 x!2 ~@2",
  AO: "x ~@2 x!2 ~@11",
})).gain(0.4)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A ~@11 B ~@10 C@2 ~@26 D C@2 ~@6 E ~@58>".pickRestart({
  A: "~ x ~@2 x ~@3", B: "~@14 x!2", C: "~@7 x ~ x ~@5 x", D: "~@15 x", E: "~@9 x ~@5 x",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@88 [x!16] ~@28 [~@7 x!5 ~@4] ~>").gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@32 B ~@15 C ~@7 D ~@29 E ~@8 F ~@17 G ~ H I ~>".pickRestart({
  A: "x ~@2 x ~@2 x!2", B: "~@9 x ~@2 x ~@3", C: "~ x!7", D: "~@6 x!2", E: "~ x!3 ~ x!11", F: "~@5 x ~@5 x ~@4",
  G: "~@14 x!2", H: "~@15 x", I: "x!8 ~@8",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@20 A ~@10 B C ~@10 D ~@4 E F ~@6 G H ~@61>".pickRestart({
  A: "x!5 ~@3", B: "x!2 ~@4 x!2 ~@8", C: "~@3 x ~@4", D: "~ x ~ x ~ x ~@2", E: "~@5 x!3", F: "x", G: "x ~@2 x ~@2 x ~",
  H: "~ x ~@2 x ~@3",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@57 [~@5 x ~@2] ~@56 [~@13 x ~@2] ~ [~@11 x!4 ~] ~@2>").gain(0.35)

// drums · china
const china = s("cr").struct(`<
  ~ A ~@19 A ~@11 A@2 ~@11 A ~@3 A ~@7 B ~@4 A ~@14 C ~@18 A ~@9 A ~@3 A ~@2 D E ~ F G
>`.pickRestart({
  A: "x", B: "x ~@6 x", C: "~@3 x", D: "~ x ~@2", E: "~ x ~@14", F: "~@6 x!2", G: "x!2 ~@2",
})).gain(0.45)

// drums · cowbell
const cowbell = s("cb").struct("<~@34 [~ x ~ x]!4 ~@59 [~ x ~ x]!3 ~@9 [~ x ~ x] [~ x ~@2] ~@8>").gain(0.45)

// drums · ride
const ride = s("rd").struct("<~@63 A B@14 C ~@18 A B@9 D B ~@2 A B@2 E ~@4>".pickRestart({
  A: "~@2 x!6", B: "x!8", C: "x!6 ~@2", D: "~ x!7", E: "x!2 ~@6",
})).gain(0.45)

stack(
  distortion_guitar, distortion_guitar_2, bass, distortion_guitar_3, kick, snare, snare_soft, low_tom, hihat, mid_tom,
  open_hat, high_tom, china, cowbell, ride
)

More by Kiss