Strudelify

Who Wants to Be Lonely

Kiss

KeyE minorTempo105 bpm
0:00/0:00
// Who Wants to Be Lonely — Kiss
// 105 bpm, 4/4, key E minor. 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 5 "Solo 2" distortion guitar (copy of ch 4 "Solo 1" distortion guitar)
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/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@3 B C@4 D@2 E F C@4 D@2 G@2 H I J K H I J K L@2 B C@2 F D@2 E F C@4 D@2 G@2 H I J K H I J K M N O P M N G@2 Q@2 R@2
  Q@2 R@2 D@2 G@2 S@4 L@2 H I J K H I J K H I J K H I J K H I J K H I J K T
>`.pickRestart({
  A: "e2 ~ e2!4 ~ e2!2 ~ e2!2 d3 e3@3", B: "e2 ~ e2!4 ~ e2!2 ~ e2!6",
  C: "[e2 ~ e2!3 a3@2 e2!2 ~ e2!4 ~ e2 e2 ~ e2!4 ~ e2!2 ~ e2!4 ~ e2, f#4 ~@3, ~@3 d4@7 ~@22, ~@5 e2 ~@2 [e3,b3,e4]@24]/2", // E5
  D: "[c3,g3,c4]!8", E: "e2 ~ e2!4 ~ e2!2 ~ e2!4 ~ e2", F: "[d3,a3,d4]@2 e2!4 [d3,a3,d4] ~@3 e2!6, ~@7 [e3,b3,e4]@9",
  G: "[d3,a3,d4]!8", H: "[e2,b2,e3]@2 [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]@4 [e3,b3,e4]@4",
  I: "[e2,b2,e3]@2 [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]@2 [e3,b3,e4]@2 [d3,a3,d4]@2 [c3,g3,c4]@2", // E5 D5 E5 D5 C5
  J: "[c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4]@2 [d3,a3,d4]@2 [d3,a3,d4]@4", // C5 D5
  K: "[c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [e3,b3,e4]@4 [d3,a3,d4]@4", L: "[c3,g3,c4]/2",
  M: "[c3,g3,c4]", N: "~@5 g3@3 ~@5 c4@3, e4@11 e4@5, ~@3 c4@7 ~@6, ~ c3", O: "[d3,a3,d4]",
  P: "~@5 a3@3 ~@5 d4@3, f#4@11 f#4@5, ~@3 d4@7 ~@6, ~ d3",
  Q: "e2@2 [d3,a3,d4]!3 [d3,a3,d4]@2 [d3,a3,d4] [e3,b3,e4]@2 ~@6", // D5 E5
  R: "e2@2 [c3,g3,c4]!3 [c3,g3,c4]@2 [c3,g3,c4] [d3,a3,d4]@2 ~@6", S: "e2@2 e2!3 e2@2 e2 e2@2 e2!3 ~@3",
  T: "[e2,b2,e3]@2 [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]@4 [e3,b3,e4]@2 ~@2", // E5 D5 E5
})).s("gm_distortion_guitar").gain(0.39).pan(0)

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

// other · distortion guitar · "Solo 1"
const distortion_guitar_2 = note("<~@65 A B C@2 D@2 E F G H ~@30>".pickRestart({
  A: "e5", B: "e5@8 ~@2 e5 [b4,d5] e5@4",
  C: "[a5 [f#5,g5] g5 [e5,f#5] f#5 [d5,e5] e5 [c5,d5] g5@2 e5 d5 e5@6 c5 d5 e5 d5 c5 d5 b4 c5 b4 c5 a4@2 b4 c5]/2", // Gmaj7 Esus2 Dsus2 Csus2
  D: "[d5 e5 c5 d5 b4 c5 a4 b4 g4 a4 f#4 e4 d4@6 e4 [f4,g4] c5 [f4,g4] e4 [f4,g4] c5 [f4,g4] e4 [f4,g4] c5 [f4,g4] e4 [f4,g4]]/2", // Fsus2
  E: "e5 [f4,c5] e4 [f4,g4] c5 [f4,g4] e4 [f4,g4] c4 e4 g4 e4 g4@4", F: "d3!2 e3!2 f#3!2 g3!2 a3!2 d4 f#4@5",
  G: "f#4 g4 f#4 d4 a4 b4 a4 d4 d5 e5 d5 b4 d6@4", H: "b5",
})).s("gm_distortion_guitar").gain(0.64).pan(0.2)

// other · lead 2 sawtooth · "Chorus 1"
const lead_2_sawtooth = note(`<
  ~@12 A@2 B C ~@2 D ~ E F G H E F G H ~@2 I@2 B C ~@2 J ~ I@2 B C ~@2 D ~ E F G H E F G H K ~ K ~ K ~ D ~@13 B ~ B L M
  N E F G H E F G H E F G H E F G H E F G H E F G H O
>`.pickRestart({
  A: "[a4@3 a4@2 a4@3 a4@4 g4@2 g4@4 ~@14]/2", B: "a4@3 a4@2 a4@3 a4@3 g4@2 g4@3", C: "g4 f#4 e4@3 ~@11",
  D: "~@2 f#4 f#4@2 f#4@2 f#4!5 g4@3 ~", E: "~@2 f#4 f#4@2 f#4 f#4@2 f#4@2 g4@2 g4@4",
  F: "~@2 f#4 f#4@2 f#4 f#4@2 g4@2 g4@2 f#4@2 e4@2", G: "~@5 e4 e4@2 g4@4 f#4@4, ~@2 g4@5 ~@9",
  H: "~@5 f#4 e4@2 g4@4 f#4@4, ~@2 g4@5 ~@9", I: "[a4@3 a4@2 a4@3 a4@4 g4@2 g4@4 ~@8 g4@3 ~ a4@2]/2",
  J: "d5@3 d5@2 d5@3 d5@3 e5@2 e5@3", K: "~@2 g4 g4@2 g4 g4@2 f#4@2 d4@2 d4@4", L: "g4 f#4 e4@4 ~@4 g4@3 ~ a4@2",
  M: "a4@3 b4@2 g4@3 c5@4 b4@2 a4@2", N: "b4 a4 g4@14", O: "~@2 a4 a4@2 a4 a4@2 a4@2 b4@2 b4 ~@3",
})).s("gm_lead_2_sawtooth").gain(0.58).pan(0.3)

// other · lead 2 sawtooth · "Chorus 2"
const lead_2_sawtooth_2 = note("<~@54 A ~ A ~ A ~@28 B C D B@2 C D B@2 C D B@2 C D B@2 E>".pickRestart({
  A: "~@2 g4 g4@2 g4 g4@2 f#4@2 d4@2 d4@4", B: "~@5 a4 g4@2 b4@4 a4@4, ~@2 b4@5 ~@9",
  C: "~@2 a4 a4@2 a4 a4@2 a4@2 b4@2 b4@4", D: "~@2 a4 a4@2 a4 a4@2 c5@2 b4@2 a4@2 g4@2",
  E: "~@2 f#4 f#4@2 f#4 f#4@2 f#4@2 g4@2 g4 ~@3",
})).s("gm_lead_2_sawtooth").gain(0.58).pan(0.8)

// drums · kick
const kick = s("bd").struct("<A@19 B A@9 B A@15 B A@15 B A@11 B A@5 B A@24 C>".pickRestart({
  A: "x ~ x!2 ~ x ~ x!2 ~ x!2 ~@4", B: "x ~ x!2 ~ x ~ x ~@2 x!2 ~@4", C: "x ~ x!2",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<A@19 B A@9 B A@15 B A@15 B A@11 B A@5 B A@24 C>".pickRestart({
  A: "~ x ~ x", B: "~ x!3", C: "~@2 x!2 ~ x!2 ~@9",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@14 B C ~@8 B C ~@14 B C ~@14 B C ~@10 B C ~@4 B C ~@25>".pickRestart({
  A: "~@15 x", B: "~@7 x", C: "x ~ x ~@4 x ~@3 x ~@3 x",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<[x!16]!62 [x!12 ~@4]!8 [x!16]!34 ~>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@14 B C ~@8 B C ~@14 B C ~@14 B C ~@10 B C ~@4 B C ~@25>".pickRestart({
  A: "~@13 x!2 ~", B: "~@7 x", C: "~@5 x!2 ~@2 x!3 ~ x!3",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@19 A ~@9 A ~@15 A ~@15 A ~@11 A ~@5 A ~@25>".pickRestart({
  A: "~@5 x ~@3 x ~@3 x ~@2",
})).gain(0.64)

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

stack(
  distortion_guitar, bass, distortion_guitar_2, lead_2_sawtooth, lead_2_sawtooth_2, kick, snare, low_tom, hihat,
  mid_tom, high_tom, crash
)

More by Kiss