Strudelify

(You Make Me) Rock Hard

Kiss

KeyF majorTempo120 bpm
0:00/0:00
// (You Make Me) Rock Hard — Kiss
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "Bruce" distortion guitar (copy of ch 1 "Paul" distortion guitar); ch 9 "Solo 2" distortion guitar (copy of ch 6 "Solo 1" distortion guitar)
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · distortion guitar · "Paul"
const distortion_guitar = note(`<
  A B C B C B C B C B D B D B D B E F@5 G H I J K H I J L M@2 B D B D B D B E F@5 G H I J K H I J L N O N O N O N P F@5
  G ~@3 Q R@2 J L H I J K H I J L H I J K H I J L H I J K H I J L N S
>`.pickRestart({
  A: "~@14 [d3,a3,d4]!2", B: "[d3,a3,d4]", C: "[bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [c3,g3,c4]@8 [d3,a3,d4]!2",
  D: "[bb2,f3,bb3]@6 [c3,g3,c4]@8 [d3,a3,d4]!2", E: "[bb2,f3,bb3]@3 [c3,g3,c4]@2 [c3,g3,c4]!3",
  F: "[[bb2,f3,bb3] [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [c3,g3,c4]@2 [c3,g3,c4]!7]/5", // Bb5 C5 D5 Bb5 C5
  G: "[c3,g3,c4]!8", H: "[ab3,eb4,ab4] [f3,c4,f4]",
  I: "[eb3,bb3,eb4]@2 [f3,c4,f4]@2 [f3,c4,f4]@4 [ab3,eb4,ab4]@6 [db3,ab3,db4]!2", J: "[db3,ab3,db4]!4",
  K: "[ab2,eb3,ab3]!2 [eb3,bb3,eb4]!2", L: "[eb3,bb3,eb4]!4",
  M: "[[f3,c4,f4]@26 [c3,g3,c4]@2 [c3,g3,c4]@2 [d3,a3,d4]!2]/2", N: "[f3,c4,f4]",
  O: "[db3,ab3,db4]@6 [eb3,bb3,eb4]@8 [f3,c4,f4]!2", P: "[db3,ab3,db4]@3 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!3",
  Q: "~@14 [f3,c4,f4]!2", R: "[[f3,c4,f4]@26 [f3,c4,f4]@2 [f3,c4,f4]@2 [db3,ab3,db4]!2]/2", S: "[f3,c4,f4] ~@3",
})).s("gm_distortion_guitar").gain(0.33).pan(0)

// bass · electric bass pick · "Gene"
const bass = note(`<
  ~@4 A B C B C B C B C B C B D E F G H@2 I J K L M J K L N O@2 B C B C B C B D E F G H@2 I J K L M J K L N J P J P J P
  J Q E F G H@2 I ~@3 R S@2 L N J K L M J K L N J K L M J K L N J K L M J K L N T U
>`.pickRestart({
  A: "~@14 d2!2", B: "d2!8", C: "bb1!3 c2!4 d2", D: "bb1!3 c2!5", E: "bb1!7 c2", F: "c2!7 d2", G: "d2!7 bb1",
  H: "[bb1!7 c2@2 c2!7]/2", I: "c2!8", J: "f2!8", K: "f2!7 db2", L: "db2!8", M: "ab1!4 eb2!4", N: "eb2!8",
  O: "[f2@13 c2!2 d2]/2", P: "db2!3 eb2!4 f2", Q: "db2!3 eb2!5", R: "~@14 f2!2", S: "[f2@26 f2@2 f2@2 db2!2]/2",
  T: "f2", U: "f2 ~@3",
})).s("gm_electric_bass_pick").gain(0.64)

// other · acoustic guitar steel · "Effects 2"
const acoustic_guitar_steel = note("<~@17 A B C D ~@20 A B C D ~@18 A B C D ~@36>".pickRestart({
  A: "bb3 f4 bb3 e4 bb3 f4 e4 d4", B: "c4 e4 c4 f4 c4 e4 c4 f4", C: "d4 e4 d4 f4 d4 e4 d4 f4",
  D: "bb3 f4 bb3 e4 bb3 f4@3",
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(0.8)

// other · lead 2 sawtooth · "Chorus"
const lead_2_sawtooth = note(`<
  ~@16 A B@6 C D ~ E C D F G H ~ I J ~@2 K L ~ A B@6 C D ~ E C D F G H ~@6 M B@6 C D ~ E C D F G C D ~ E C D F G H N@4
  ~@2 E C D ~ E C D F G H ~
>`.pickRestart({
  A: "~@7 g4", B: "[g4 a4@2 a4@2 a4@2 g4@2 a4@2 a4@2 a4@2 g4@2 a4@2 a4@2 a4@2 g4@2 bb4@2 bb4@2 c5@2 c5@10 ~@4 ab4!3]/6",
  C: "c5 ~ ab4 ~", D: "g4 ab4 ab4@2 c5@2 ~@2", E: "~@5 ab4!3", F: "~ db5 db5@2 db5!2 db5@2",
  G: "db5@2 db5@2 db5 c5 eb5@2", H: "c5 bb4 ab4@3 ~@3", I: "~@2 a4@2 g4 f4@2 e4", J: "e4 f4!2 a4@3 ~@2",
  K: "~ a4!3 g4 f4@2 ~", L: "e4 f4@2 a4@3 ~@2", M: "~@7 f4", N: "[~@5 eb5@2 c5@2 bb4 ab4@3 ~@3]/2",
})).s("gm_lead_2_sawtooth").gain(0.64)

// other · distortion guitar · "Solo 1"
const distortion_guitar_2 = note("<~@55 A B C D E F G H I@2 ~@38>".pickRestart({
  A: "~@2 f5@3 f5@3 f5@6 c5 db5", B: "eb5 db5 ~ db5 bb4 c5 ab4 bb4 g4@8, ~ c5 ~@6", C: "c4 db4 eb4@10 db4 c4 db4 bb3",
  D: "c4 ab3 bb3 c4 db4 c4 bb3 c4 g3@6 c5 eb5", E: "f5 eb5 c5 eb5 f5@6 f5@3 g5@3", F: "ab5@3 g5@2 f5@3 eb5@6 f5 g5",
  G: "ab5 f5 ab5 bb5 c6@6 c6@3 db6@3", H: "eb6@3 db6@2 c6@3 bb5@3 ab5@2 f5@3", I: "[e5@3 f5@20 ~@9]/2",
})).s("gm_distortion_guitar").gain(0.58).pan(0)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A B@2 C A B@6 C A B@3 ~@2 A D@2 E A D@2 C A C A B@6 C A B@3 ~@2 A D@2 E A D@2 C A B@6 C A B@3 ~@8 F C A D@2 E A
  D@2 C A D@2 E A D@2 C A D@2 E A D@2 C ~@2
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!5 ~@3", D: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", E: "x!7 ~",
  F: "~@2 x ~ x ~ x ~ x ~ x ~ x ~ x!2",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@3 A ~@7 A ~@3 A ~ A ~@3 A ~@3 A ~ A ~@7 A ~@3 A ~ A ~@3 A ~@3 A ~@7 A ~@3 A ~ A ~@5 A ~ A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A@2
>`.pickRestart({
  A: "x",
})).gain(0.64)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~@23 A B@3 A B@2 C A C ~@14 A B@3 A B@2 C ~@20 B C A B@3 A B@2 C A B@3 A B@2 C A B@3 A B@2 C ~@2
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!3 ~",
})).gain(1.68)

stack(
  distortion_guitar, bass, acoustic_guitar_steel, lead_2_sawtooth, distortion_guitar_2, kick, snare, hihat, crash,
  bongos
)

More by Kiss