Strudelify

Calling Dr. Love

Kiss

KeyE minorTempo127 bpm
0:00/0:00
// Calling Dr. Love — Kiss
// 127 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "Guitar 2" overdriven guitar (copy of ch 2 "Guitar 1" distortion guitar); ch 5 "Solo #2" tremolo strings (copy of ch 4 "Solo guitar" distortion guitar); ch 7 "The Punisher" slap bass 1 (copy of ch 6 "Bass" electric bass pick)
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(127/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 · "Guitar 1"
const distortion_guitar = note(`<
  A@8 B@7 C D E F@5 G@8 H@5 I J K L I M N D E O P Q R@2 S T@4 U@5 S I J K L I J K V W X K V I Y N D E F@5 Z@2
>`.pickRestart({
  A: "[~@14 [e3,b3,e4]@5 ~@7 [e3,b3,e4] ~ [d3,g3]@2 [g3,d4,g4]@5 ~@7 [g3,d4,g4] ~ [d3,g3] ~ [d3,a3,d4]@5 ~@7 [d3,a3,d4] ~ [d3,g3] ~ [a2,e3,a3]@5 ~@7 [a2,e3,a3] ~ [g2,d3,g3] ~ [e3,b3,e4]@5 ~@7 [e3,b3,e4] ~ [d3,g3] ~ [g3,d4,g4]@5 ~@7 [g3,d4,g4] ~ [d3,g3] ~ [d3,a3,d4]@5 ~@7 [d3,a3,d4] ~ [d3,g3] ~ [a2,e3,a3]@2]/8", // E5 G5 D5 G5 A5 G5 E5 G5 …
  B: "[~@10 [a2,e3,a3] ~ [g2,d3,g3] ~ [e3,b3,e4]@5 ~@7 [e3,b3,e4] ~ [d3,g3] ~ [g3,d4,g4]@5 ~@7 [g3,d4,g4] ~ [d3,g3] ~ [d3,a3,d4]@5 ~@7 [d3,a3,d4] ~ [d3,g3] ~ [a2,e3,a3]@5 ~@7 [a2,e3,a3] ~ [g2,d3,g3] ~ [e3,b3,e4]@5 ~@7 [e3,b3,e4] ~ [d3,g3] ~ [g3,d4,g4]@5 ~@7 b3 ~ c4 ~@3, ~@14 g#4 ~@97]/7", // A5 G5 E5 G5 D5 G5 A5 G5 …
  C: "[d4,g4,b4]@5 ~@3 [a3,d4,f#4]@3 ~@5", D: "[c3,g3,c4]!2 ~ [c3,g3,c4]!2 ~ [c3,g3,c4]!2",
  E: "~@2 [c3,g3,c4]@2 ~@2 [a3,d4,f#4] ~ [a3,d4,f#4]@3 ~@5", // C5 D
  F: "[e3@3 ~ e2 ~@5 e2 ~ e3 ~ d3@5 ~ b2 ~@3 a2 ~ g2 ~ e2 ~ e3@5 ~@7 e2 ~ e3 ~ d3@5 ~ b2 ~@3 a2 ~ g2 ~ e2 ~ e3@5 ~ e2 ~@5 e2 ~ e3 ~ c3@2]/5",
  G: "[~@2 b2 ~ a2 ~ d3@3 ~ b2 ~ a2 ~ [e3,b3,e4,g4]@15 ~ [g3,d4,g4,b4]@15 ~ [d3,a3,d4]@15 ~ [a2,e3,a3]@15 ~ [e3,b3,e4]@5 ~@7 [e3,b3,e4] ~ [d3,g3] ~ [g3,d4,g4]@5 ~@7 [g3,d4,g4] ~ [d3,g3] ~ [d3,a3,d4]@5 ~@7 [d3,a3,d4] ~ d3 ~ [a2,e3,a3]@2]/8", // Em G D5 A5 E5 G5 D5 A5
  H: "[~@10 [a2,e3,a3] ~ [g2,d3,g3] ~ [e3,b3,e4]@5 ~@7 [e3,b3,e4] ~ [d3,g3] ~ [g3,d4,g4]@5 ~@7 [g3,d4,g4] ~ [d3,g3] ~ [d3,a3,d4]@5 ~@7 [d3,a3,d4] ~ [d3,g3] ~ [a2,e3,a3]@5 ~@7 g2 ~ f#2 ~ e2 ~]/5", // A5 G5 E5 G5 D5 G5 A5
  I: "e2@3 ~ [b3,e4]@4 ~@2 e2 ~ f#2 ~ g2@2", J: "g2@3 ~ [d4,g4]@4 ~@2 b2 ~ c3 ~ d3@2",
  K: "d3@3 ~ [d4,f#4]@4 ~@2 c3 ~ b2 ~ a2@2", L: "a2@3 ~ [g3,c4,e4]@4 ~@2 g2 ~ f#2 ~ e2@2",
  M: "g2@3 ~ [d4,g4]@4 ~@2 b2 ~ c3 ~@3", N: "[d4,g4]@5 ~@3 [a3,d4,f#4]@3 ~@5", O: "e3@3 ~ e2 ~@5 e2 ~ e3 ~ d3@2",
  P: "d3@3 ~ b2 ~@3 a2 ~ g2 ~ e2 ~ e3@2", Q: "e3@3 ~@7 e2 ~ e3 ~ d3@2",
  R: "[d3@3 ~ b2 ~@3 a2 ~ g2 ~ e2 ~ e3@5 ~ e2 ~@5 e2 ~ e3 ~ c3@2]/2", S: "~@2 b2 ~ a2 ~ d3@3 ~ b2 ~ a2 ~ e3 ~",
  T: "[e3@56 [e3,b4]@5 ~@3]/4", // E5
  U: "[e3@3 ~ e2 ~@5 e2 ~ e3 ~ d3@5 ~ b2 ~@3 a2 ~ g2 ~ e2 ~ e3@5 ~@7 e2 ~ e3 ~ d3@5 ~ b2 ~@3 a2 ~ g2 ~ e2 ~ d3@5 ~ e2 ~@5 e2 ~ e3 ~ c3@2]/5",
  V: "a2@3 ~ [g3,c4,e4,g4]@4 ~@2 g2 ~ f#2 ~ e2@2", W: "e2@3 ~ [b3,e4,f#4]@4 ~@2 e2 ~ f#2 ~ g2@2",
  X: "g2@3 ~ d4@4 ~@2 b2 ~ c3 ~ d3@2", Y: "g2@3 ~ [d4,g4]@5 ~ b2 ~ c3 ~@3",
  Z: "[~@2 b2 ~ a2 ~ d3@3 ~ b2 ~ a2 ~ [e3,b3,e4,g4]@13 ~@5]/2", // Em
})).s("gm_distortion_guitar").gain(0.46).pan(0.2)

// bass · electric bass pick · "Bass"
const bass = note("<A@8 B@7 C D E F@5 G@8 H@4 I@7 C D E F@5 J@4 ~ F@5 K@8 L@7 C D E M@7>".pickRestart({
  A: "[~@7 e1@2 ~@6 g1@2 ~@6 d2@2 ~@6 a1@2 ~@6 e1@2 ~@6 g1@2 ~@6 d2@2 ~@6 a1]/8",
  B: "[~@7 [e1,e2]@2 ~@4 e1 f#1 [g1,g2]@2 ~@4 g1 e1 [d1,d2]@2 ~@4 d2 g1 a1@2 ~@4 a1 g1 [e1,e2]@2 ~@4 e1 f#1 [g1,g2]@2 ~@4 b1 c2 ~]/7", // E G D E G
  C: "d2 a1", D: "c2!2 ~ c2!2 ~ c2!2", E: "~ c2 ~ d2!2 ~@3",
  F: "[e2@2 e1 ~@2 e1 e2 d2@2 ~ b1 ~ a1 g1 e1 e2@2 ~ e1 ~@2 e1 e2 d2@2 ~ b1 ~ a1 g1 e1 e2@2 ~ e1 ~@2 e1 e2 c2]/5",
  G: "[~ b1 a1 d2@2 c2 b1 [e1,e2]@2 ~@4 e1 f#1 [g1,g2]@2 ~@4 g1 e1 [d1,d2]@2 ~@4 d2 g1 a1@2 ~@4 a1 g1 [e1,e2]@2 ~@4 e1 f#1 [g1,g2]@2 ~@4 b1 g1 d2@2 ~@4 c2 b1 a1]/8", // E G D E G
  H: "[~@5 a1 g1 [e1,e2]@2 ~@4 e1 f#1 g1@2 ~@4 b1 c2 [d1,d2]@2 ~@4 c2 b1 a1]/4", // E D
  I: "[~@5 g1 f#1 e1@3 e2@3 e1 f#1 g1@3 g2@3 b1 c2 d2@3 d3@3 c2 b1 a1@3 a2@3 g1 f#1 e1@3 e2@3 e1 f1 g1@3 g2@3 b1 c2 ~]/7",
  J: "[~@2 b1@2 a1@2 d2@4 c2@2 b1@2 e1@49 ~, ~@7 e2@9 ~@16]/4",
  K: "[~ b1 a1 d2@2 [g1,c2] [f#1,b1] e1@3 e2@3 e1 f#1 g1@3 g2@3 b1 c2 d2@3 d3@3 c2 b1 a1@3 a2@3 g1 f#1 e1@3 e2@3 e1 f1 g1@3 g2@3 b1 c2 d2@3 d3@3 c2 b1 a1]/8", // C5 B5
  L: "[~@2 a2@3 g1 f#1 e1@3 e2@3 e1 f1 g1@3 g2@3 b1 c2 d2@3 d3@3 c2 b1 a1@3 a2@3 g1 f#1 e1@3 e2@3 e1 f1 g1@3 g2@3 ~@3]/7",
  M: "[e2@2 e1 ~@2 e1 e2 d2@2 ~ b1 ~ a1 g1 e1 e2@2 ~ e1 ~@2 e1 e2 d2@2 ~ b1 ~ a1 g1 e1 e2@2 ~ e1 ~@2 e1 e2 c2@2 b1 a1 d2@2 c2 b1 [e1,e2]@2 ~@7]/7", // E
})).s("gm_electric_bass_pick").gain(0.51)

// other · agogo · "Criss"
const agogo = note("<~ A@15 ~@2 A@23 ~@4 A@7 ~@3 A@11 ~@12 A@6 ~>".pickRestart({
  A: "~@4 f#5@3 ~@9",
})).s("gm_agogo").gain(0.41).pan(0.6)

// drums · kick
const kick = s("bd").struct("<[x!4] [x!3 ~@2 x!3]!83 x>").gain(0.51)

// drums · snare
const snare = s("sd").struct("<A B@40 C B@9 D E@2 B@12 C B@5 C B C B@9 F>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "~ x ~@4 x ~", C: "~@2 x ~@5 x!7 ~", D: "~@2 x ~@5 x!8", E: "x!16", F: "x",
})).gain(0.51)

// drums · low tom
const low_tom = s("lt").struct("<A ~@15 B C ~@23 B ~ B C ~@9 D ~@11 B ~@5 B ~ B ~ B C ~@7>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@12 x!3 ~", C: "~@13 x!3", D: "~@3 x",
})).gain(0.51)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!4]!84 x>").gain(0.51)

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

// drums · high tom
const high_tom = s("ht").struct("<A ~@15 B C ~@23 D ~ B C ~@9 E ~@11 D ~@5 D ~ D ~ B C ~@7>".pickRestart({
  A: "x!4 ~@12", B: "x!3 ~ x!3 ~@9", C: "~ x!3 ~ x!3 ~@8", D: "x!6 ~@10", E: "~@8 x!2 ~@4 x!2",
})).gain(0.51)

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

// drums · ride bell
const ride_bell = s("rd").struct("<[~@3 x] [x!4]!83 x>").gain(0.51)

stack(distortion_guitar, bass, agogo, kick, snare, low_tom, pedal_hat, mid_tom, high_tom, crash, ride_bell)

More by Kiss