Strudelify

A Million to One

Kiss

KeyE minorTempo115 bpm
0:00/0:00
// A Million to One — Kiss
// 115 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 "Vinnie Rythm" distortion guitar (copy of ch 2 "Paul Rythm" distortion guitar)
// note: Full arrangement: all 126 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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 Lead"
const distortion_guitar = note(`<
  A B A B A B A B A B A B ~@7 C ~@6 D E ~@2 A B A B A B A B A B ~@7 C ~@6 D E ~@2 A B A B A B A B A B ~@9 F G@2 ~ F ~@3
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~ e4 ~ b3 ~ e4 ~ b3, b3@3 ~ b3@3 ~, ~ e4 ~ e4", B: "~ c4 ~ c4 ~ d4 ~ d4, g3@3 ~ a3@3 ~, ~ e4 ~ e4",
  C: "~@5 c4 ~ d4, ~@2 e4 f#4", D: "~ c4 e4 c4, g3", E: "~ d4 f#4 d4, a3", F: "~ c4 e4 c4 ~@2 f#4@2, a3 d4",
  G: "~ d4 ~ d4 ~ d4 ~ d4, g4 f#4!3",
})).s("gm_distortion_guitar").gain(0.64)

// chords · distortion guitar · "Paul Rythm"
const distortion_guitar_2 = note(`<
  ~@4 A B A C D E D F G@2 H@2 I@2 J@2 G@2 H@2 K L M H N O D E D E D E D P A C G@2 H@2 I@2 J@2 G@2 H@2 K L M H N O D E D
  E D E D P A C D E D E D E D E Q@2 R@2 Q@2 S@2 O A B A C D E D E D E D P T U T V T U T V D E D E D E D P T U T V T U T
  V A B A C A
>`.pickRestart({
  A: "[e3,b3,e4]!2 ~@6", B: "[c3,g3,c4]!2 ~@2 [d3,a3,d4]!2 ~@2", C: "[c3,g3,c4]!2 ~@2 [d3,a3,d4]@4",
  D: "[e3,b3,e4]!2 e2!6", E: "[c3,g3,c4]!2 e2!2 [d3,a3,d4]!2 e2!2", F: "[c3,g3,c4] [c3,g3,c4]@3 [d3,a3,d4]@4",
  G: "[e2,b2,e3]", H: "[d3,a3,d4]", I: "[[b2,f#3,b3]@6 [b2,f#3,b3] [d3,a3,d4]]/2",
  J: "[[e2,b2,e3]@6 [c3,g3,c4] [d3,a3,d4]]/2", K: "[a2,e3,a3]@3 [a2,e3,a3] [a2,e3,a3]@4",
  L: "[a2,e3,a3]@3 [a2,e3,a3] [a2,e3,a3]@2 [b2,f#3]@2", M: "[c3,g3,c4]",
  N: "[b2,f#3,b3]@2 [b2,f#3,b3]@3 ~ [a2,e3,a3]@2 [a2,e3,a3]@4 [a2,e3,a3]@4", O: "[b2,f#3,b3]",
  P: "[c3,g3,c4]!2 e2!2 [d3,a3,d4]@4", Q: "[a2,e3,a3]", R: "[e3,b3,e4] [d3,a3,d4] e2!6",
  S: "[[f#2,c#3,f#3]!4 [d3,a3,d4]@2 [a2,e3,a3] [b2,f#3,b3]@3 [b2,f#3,b3] [a2,e3,a3]@3 [a2,e3,a3]@2]/2", // F#5 D5 A5 B5 A5
  T: "[e3,b3,e4]@2 [e3,b3,e4]@3 ~ [f#3,d4,f#4]@2 [g3,d4,g4]@8", U: "[c3,g3,c4]!2 c3!2 [d3,a3,d4]!2 d3!2",
  V: "[c3,g3,c4]@2 [c3,g3,c4]@3 ~ [d3,a3] [e3,b3] [d3,a3,d4]@8", // C5 D5 E5 D5
})).s("gm_distortion_guitar").gain(0.33).pan(0)

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

// other · distortion guitar · "Vinnie Solo"
const distortion_guitar_3 = note("<~@68 A B C D E F G H I ~@49>".pickRestart({
  A: "e5@4 d5@2 e5@6 e5 d5 b4@2", B: "b4@4 d5@2 a4@6 f#4 g4 f#4 d4", C: "e4@4 d4 e4 f#4@6 ~@4",
  D: "d4 e4 c4 d4 g3 a3 b3@6 ~@4", E: "f#5@3 g5@3 a5@2", F: "e5@4 b4@2 a4@2 g4@6 d5 e5",
  G: "f#5 [d5,e5] f#5 [d5,e5] f#5 [d5,e5] f#5 [d5,e5] g5 [d5,e5] g5 [d5,e5] g5 [d5,e5] g5 [d5,e5]", // Dsus2
  H: "a5 [d5,e5] a5 [d5,e5] a5 [d5,e5] a5 [d5,e5] b5 [d5,e5] b5 [d5,e5] b5 [d5,e5] b5 [d5,e5]", I: "e6",
})).s("gm_distortion_guitar").gain(0.64)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@7 A ~@25 B ~@5 A ~@21 B ~@5 A ~@20 A ~@3 B ~@7 C ~@3 A ~@11 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~@14 x!2", B: "~@15 x", C: "~@7 x",
})).gain(0.64)

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

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

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@7 A ~@3 A ~@16 B ~@4 C ~@5 A ~@16 B ~@4 C ~@5 A ~@5 D ~@14 A ~@3 C ~@3 E ~@3 F ~@3 G ~@3 D ~@3 E ~@3 F ~@3 H ~@3 A ~
>`.pickRestart({
  A: "~@10 x!2 ~@4", B: "~ x", C: "~@13 x ~@2", D: "~@10 x ~ x!2 ~@2", E: "~@10 x!4 ~@2", F: "~@4 x!2 ~@2",
  G: "~@8 x!2 ~@6", H: "~@8 x!4 ~@4",
})).gain(0.64)

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

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

More by Kiss