Strudelify

You Love Me to Hate You

Kiss

KeyC majorTempo120 bpm
0:00/0:00
// You Love Me to Hate You — Kiss
// 120 bpm, 4/4, key C 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)
// note: Full arrangement: all 124 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 · [...]/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@4 B C B C B C D E B C D E F G F G F H@2 I@6 J@8 K B C D E B C D E F G F G F H@2 I@6 J@8 K B C D E B C D E F G F G
  F H@2 L@8 J@8 M@8 N@6 O@7 P@2 Q
>`.pickRestart({
  A: "[[d3,a3,d4]@2 ~ [a#2,f3,a#3]@3 ~ [c3,g3,c4]@2 [c3,g3,c4]!7]/2", B: "d3!2 [d3,a3,d4]@2 e3!2 [e3,b3,e4]@2",
  C: "f3!2 [f3,c4,f4]@2 g3!2 [g3,d4,g4]@2", D: "a2!2 [a2,e3,a3]@2 c3!2 [c3,g3,c4]@2", E: "a2 c3 e3 g2 a2 d3 g2 a2",
  F: "[g2,d3,g3] [a2,e3,a3]", G: "[a#2,f3,a#3]@3 [c3,g3,c4]@5",
  H: "[[a#2,f3,a#3]@3 [c3,g3,c4]@4 [a2,e3,a3]@2 [a2,e3,a3]!7]/2", // A#5 C5 A5
  I: "[[a2,e3,a3]!7 [b2,f#3,b3]@5 [g2,d3,g3]@3 [a2,e3,a3]@8 [b2,f#3,b3]@5 [g2,d3,g3]@3 [a2,e3,a3]@8 [b2,f#3,b3]@5 [g2,d3,g3]@3 [a2,e3,a3]]/6", // A5 B5 G5 A5 B5 G5 A5 B5 …
  J: "[~ [a2,e3,a3]!6 [d3,a3,d4]@5 [a#2,f3,a#3]@3 [c3,g3,c4]@8 [d3,a3,d4]@5 [a#2,f3,a#3]@3 [c3,g3,c4]@8 [d3,a3,d4]@5 [a#2,f3,a#3]@3 [c3,g3,c4]@8 [d3,a3,d4]@4 [a#2,f3,a#3]@4 [c3,g3,c4]]/8", // A5 D5 A#5 C5 D5 A#5 C5 D5 …
  K: "~ [c3,g3,c4]!7", // C5
  L: "[[a2,e3,a3]!7 [b2,f#3,b3]@5 [g2,d3,g3]@3 [a2,e3,a3]@8 [b2,f#3,b3]@5 [g2,d3,g3]@3 [a2,e3,a3]@8 [b2,f#3,b3]@5 [g2,d3,g3]@3 [a2,e3,a3]@8 [b2,f#3,b3]@5 [g2,d3,g3]@3 [a2,e3,a3]]/8", // A5 B5 G5 A5 B5 G5 A5 B5 …
  M: "[~ [c3,g3,c4]!6 [d3,a3,d4]@5 [a#2,f3,a#3]@3 [c3,g3,c4]@8 [d3,a3,d4]@5 [a#2,f3,a#3]@3 [c3,g3,c4]@8 [d3,a3,d4]@5 [a#2,f3,a#3]@3 [c3,g3,c4]@8 [d3,a3,d4]@4 [a#2,f3,a#3]@4 [c3,g3,c4]]/8", // C5 D5 A#5 C5 D5 A#5 C5 D5 …
  N: "[~ [c3,g3,c4]!6 [d3,a3,d4]@5 [a#2,f3,a#3]@3 [c3,g3,c4]@8 [d3,a3,d4]@5 [a#2,f3,a#3]@3 [c3,g3,c4]@8 [d3,a3,d4]@5 [a#2,f3,a#3]@3 [c3,g3,c4]]/6", // C5 D5 A#5 C5 D5 A#5 C5 D5 …
  O: "[~ [c3,g3,c4]!6 [d3,a3,d4]@5 [a#2,f3,a#3]@3 [c3,g3,c4]@8 [d3,a3,d4]@5 [a#2,f3,a#3]@3 [c3,g3,c4]@8 [d3,a3,d4]@4 [a#2,f3,a#3]@4 [c3,g3,c4]@2 [c3,g3,c4]!7]/7", // C5 D5 A#5 C5 D5 A#5 C5 D5 …
  P: "[d3,a3,d4]/2", Q: "[d3,a3,d4] ~@3",
})).s("gm_distortion_guitar").gain(0.44).pan(0)

// bass · electric bass pick · "Gene"
const bass = note(`<
  ~ A@4 B C B C B C D E B C D E F G F G F H I J K J K J K L@8 M B C D E B C D E F G F G F H I J K J K J K L@8 M B C D E
  B C D E F G F G F H I J K J K J K J K L@8 N@8 O@6 P@7 Q@2 R
>`.pickRestart({
  A: "[d2@2 ~ a#1@3 ~ c2@2 c2!7]/2", B: "d2!4 e2!4", C: "f1!4 g1!4", D: "a1!4 c2!4", E: "a1 c2 e2 g1 a1 d2 g1 a1",
  F: "g1!4 a1!4", G: "a#1!3 c2!5", H: "a#1!3 c2!4 a1", I: "a1!8", J: "a1!7 b1", K: "b1!4 g1!3 a1",
  L: "[a1!7 d2@5 a#1@3 c2@6 c2!2 d2@5 a#1@3 c2@6 c2!2 d2@5 a#1@3 c2@6 c2!2 d2@4 a#1@4 c2]/8", M: "~ c2!7",
  N: "[~ c2!6 d2@5 a#1@3 c2@6 c2!2 d2@5 a#1@3 c2@6 c2!2 d2@5 a#1@3 c2@6 c2!2 d2@4 a#1@4 c2]/8",
  O: "[~ c2!6 d2@5 a#1@3 c2@6 c2!2 d2@5 a#1@3 c2@6 c2!2 d2@5 a#1@3 c2]/6",
  P: "[~ c2!6 d2@5 a#1@3 c2@6 c2!2 d2@5 a#1@3 c2@6 c2!2 d2@4 a#1@4 c2@2 c2!7]/7", Q: "d2/2", R: "d2 ~@3",
})).s("gm_electric_bass_pick").gain(0.64)

// other · distortion guitar · "Solo Chorus"
const distortion_guitar_2 = note(`<
  ~@31 A B C B C B D@2 ~@22 A B C B C B D@2 ~@24 A B C B C B C B C B C B C B C B C B C B C B C B C B D@2 ~@3
>`.pickRestart({
  A: "~ d4 d5 d4 a4 d4 g4 d4", B: "d5 d4 a4 d4 g4 d4 a4 g4", C: "d4!2 d5 d4 a4 d4 g4 d4",
  D: "[d4!2 d5 d4 a4 d4 g4@10]/2",
})).s("gm_distortion_guitar").gain(0.57).pan(0.6)

// other · distortion guitar · "Solo 1"
const distortion_guitar_3 = note("<~@3 A@2 ~@2 B C ~@60 D E F@2 G H I J K@6 L M@8 N@3 ~@29>".pickRestart({
  A: "[d3@2 ~ a3@3 ~ c4@9]/2", B: "~@2 d5@6 d5 c5 a4 f4 d4!2 f4 a4", C: "g4@4 f4 g4 f4 g3 f3@2 f3@2 f3@4",
  D: "~@2 d4@2 d4@2 c4 d4", E: "f4!2 d4 d4@3 c4@2", F: "[~@2 a3 g3 c4 c4@2 a3@8 ~]/2", G: "~ a3 d4 a3 d4@4",
  H: "f4 ~ g4 ~ a4 g4 f4 ~ d4@4 f4@4", I: "~@2 g5@6 e5 d5 c5 d5 g4 a4 c5 d5",
  J: "c5@4 d5 c5 a4 g4 a4 ~ a4 ~ a4 g4 f4@2", K: "[g4@13 f4 e4 d4@14 c4!2 d4@8 d5@8 ~]/6", L: "e5 f5 e5 f5 e5 f5 e5 f5",
  M: "[e5!7 f#5@3 f#5!5 e5@6 d5 c#5 b4@8 c#5@6 b5 a5 b5@8 c#6@6 d6 c#6 d6@3 d6!3 e6 f#6 e6]/8",
  N: "[~@2 e6!5 f6@16 ~]/3",
})).s("gm_distortion_guitar").gain(0.64).pan(0.1)

// other · distortion guitar · "Solo 2"
const distortion_guitar_4 = note("<~@3 A@2 ~@2 B C ~@60 D E F@2 G H I J K@6 L M@8 N@3 ~@29>".pickRestart({
  A: "[d3@2 ~ a3@3 ~ c4@9]/2", B: "~@2 d5@6 d5 c5 a4 f4 d4!2 f4 a4", C: "g4@4 f4 g4 f4 g3 f3@2 f3@2 f3@4",
  D: "~@2 d5@2 d5@2 c5 d5", E: "f5!2 d5 d5@3 c5@2", F: "[~@2 a4 g4 c5 c5@2 a4@8 ~]/2", G: "~ a4 d5 a4 d5@4",
  H: "f5 ~ g5 ~ a5 g5 f5 ~ d5@4 f5@4", I: "~@2 g5@6 e5 d5 c5 d5 g4 a4 c5 d5",
  J: "c5@4 d5 c5 a4 g4 a4 ~ a4 ~ a4 g4 f4@2", K: "[g4@13 f4 e4 d4@14 c4!2 d4@8 d5@8 ~]/6", L: "e5 f5 e5 f5 e5 f5 e5 f5",
  M: "[e5!7 f#5@3 f#5!5 e5@6 d5 c#5 b4@8 c#5@6 d5 c#5 d5@8 e5@6 f#5 e5 f#5@3 f#5!3 g5 a5 g5]/8",
  N: "[~@2 g5!5 a5@16 ~]/3",
})).s("gm_distortion_guitar").gain(0.64).pan(0.9)

// other · lead 2 sawtooth · "Chorus"
const lead_2_sawtooth = note(`<
  ~@9 A B C@2 D B E@2 F G H G I J@2 K@8 L@7 M B C@2 M B E@2 N O P O N Q@2 R@8 L@7 ~@8 F G H G I J@2 S@8 T@7 U@8 V@8 W@6
  X ~@2
>`.pickRestart({
  A: "d5@2 d5@2 d5@2 d5!2", B: "f5 d5@2 d5@3 ~@2", C: "[a4@2 a4 g4 c5 c5@2 a4@3 ~@6]/2", D: "~@2 d5!2 d5@2 d5!2",
  E: "[a4!3 g4 c5 c5@2 a4@3 ~@6]/2", F: "~@2 g4 f4 g4@2 g4@2", G: "g4!2 f4 g4@3 ~@2", H: "g4 g4@2 g4@3 ~@2",
  I: "g4!2 f4 g4@3 g4 f4", J: "[g4@2 g4 f4 g4 g4@2 a4@8 ~]/2",
  K: "[~@2 a4!5 a4@2 ~ b4!5 c#5@2 ~ c#5!5 d5@2 ~ d5!5 e5@2 ~ c#5!5 b4@2 ~ d5!5 c#5@2 ~ b4 c5!4 c5@2 a4@6 g4]/8",
  L: "[~@2 c5!5 a5@2 g5@2 f5@2 e5@2 e5@2 ~ c5!5 c5@2 a4@6 g4@2 ~ c5!5 a5@2 g5@2 f5@2 e5@2 e5@9]/7",
  M: "~ d5!3 d5@2 d5!2", N: "~ g4!2 f4 g4@2 g4 f4", O: "g4@2 f4 g4@3 ~@2", P: "~@2 g4 f4 g4@2 g4 f4",
  Q: "[g4@2 g4 f4 g4@2 g4 a4@8 ~]/2",
  R: "[~@2 a4!5 a4@2 ~ b4!5 c#5@2 ~ c#5!5 d5@2 ~ d5!5 e5@2 ~ c#5!5 b4@2 ~ d5!5 e5@2 ~ b4 c5!4 c5@2 a4@6 g4]/8",
  S: "[~@2 a4!5 a4@2 ~ b4!5 c#5@2 ~ c#5!5 d5@2 ~ d5!5 e5@2 ~ c#5!5 b4@2 ~ b4!5 c#5@2 ~ c#5!3 d5 c#5 d5@2 ~ d5!5 e5]/8",
  T: "[~@2 b4 c5!4 c5@2 a4@6 g4@2 ~ c5!5 a5@2 g5@2 f5@2 e5@2 e5@2 ~ c5!5 c5@2 a4@6 g4@2 ~ c5!5 a5]/7",
  U: "[~ g5@2 [d4,f5]@2 [f4,e5]@2 [g4,e5]@2 ~ c5!5 c5@2 a4@6 g4@2 ~ c5!5 a5@2 g5@2 f5@2 e5@2 e5@2 ~ c5!5 c5@2 a4@6 g4@2 ~ c5!5 a5]/8", // Dm Fmaj7 C
  V: "[~ g5@2 [d4,f5]@2 [f4,e5]@2 [g4,e5]@2 ~ c5!5 a5@2 g5@2 [d4,f5]@2 [f4,e5]@2 [g4,e5]@2 ~ c5!5 a5@2 g5@2 [d4,f5]@2 [f4,e5]@2 [g4,e5]@2 ~ c5!5 a5@2 g5@2 [d4,f5]@2 [f4,e5]@2 [g4,e5]@2 ~ c5!5 a5]/8", // Dm Fmaj7 C Dm Fmaj7 C Dm Fmaj7 …
  W: "[~ g5@2 [d4,f5]@2 [f4,e5]@2 [g4,e5]@2 ~ c5!5 a5@2 g5@2 [d4,f5]@2 [f4,e5]@2 [g4,e5]@2 ~ c5!5 a5@2 g5@2 [d4,f5]@2 [f4,e5]@2 [g4,e5]@9]/6", // Dm Fmaj7 C Dm Fmaj7 C Dm Fmaj7 …
  X: "[d5,f5]", // Dm
})).s("gm_lead_2_sawtooth").gain(0.56).pan(0.6)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A ~@19 B ~@5 C ~@5 D E A ~@15 B ~@5 C ~@5 D E A ~@15 B ~@5 F G H ~@5 D E F ~@7 I ~@9 D E A ~@3
>`.pickRestart({
  A: "~@7 x!2 ~@7", B: "~@3 x", C: "~@9 x!2 ~ x ~@3", D: "~@11 x!2 ~@3", E: "~@3 x!2 ~@6 x!2 ~@3", F: "~@5 x!2 ~",
  G: "~@4 x!4", H: "~@2 x!2 ~@2 x!2 ~@8", I: "~@10 x!4 ~@2",
})).gain(0.64)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@2 A ~ B ~@19 C ~@5 D ~@5 E F B ~@15 C ~@5 D ~@5 E F B ~@15 G ~@5 H I J ~@5 E F H ~@7 K ~@9 E F B ~@3
>`.pickRestart({
  A: "~@12 x!4", B: "~@7 x ~@8", C: "~@4 x!3 ~", D: "~@6 x ~ x!2 ~@6", E: "~@10 x!2 ~@4", F: "~@2 x!2 ~@6 x!2 ~@4",
  G: "~@2 x!5 ~", H: "~@5 x ~@2", I: "x!6 ~@2", J: "~ x ~ x ~@4", K: "~@8 x!4 ~@4",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~@8 B ~@3 C ~ B ~ B ~@21 B ~@3 C ~ B ~ B ~@21 B ~@3 C ~ B ~ B ~@43
>`.pickRestart({
  A: "~ x", B: "~@7 x", C: "~@5 x ~@2",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@2 A ~@21 B ~@5 C ~@23 B ~@5 C ~@23 D ~@6 E ~@32>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~ x", C: "~@5 x!2 ~@9", D: "~@2 x!4 ~@2", E: "x!2 ~@6",
})).gain(0.64)

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

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@31 A@3 B A B ~@24 A@3 B A B ~@26 A@3 B A B ~@2 A@3 B A B ~@2 A@5 ~ A@3 B ~@5
>`.pickRestart({
  A: "x!4", B: "x!3 ~",
})).gain(0.64)

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

More by Kiss