Strudelify

Hard Luck Woman

Kiss

KeyB majorTempo126 bpm
0:00/0:00
// Hard Luck Woman — Kiss
// 126 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Ace -12 string, Ace - 12 string.
setcpm(126/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 · electric guitar clean · "Ace -12 string"
const electric_guitar_clean = note("<A ~ B C ~@3 D E F G H ~@3 I ~ F G H ~@3 J@2 ~@20 F G H ~@3 I ~@30>".pickRestart({
  A: "~@6 f#4 ~ g#4 ~ b4 ~ c#5 ~ d#5 ~", B: "~ c#5@2 ~", C: "~@6 g#4@3 ~ f#4 ~@3 c#4 ~", D: "e6 ~@15", E: "b5 ~@15",
  F: "~@6 f#3 ~ f#3 ~ b3 ~ d#4@3 ~", G: "c#4@11 ~@5", H: "~@8 g#3 ~@3 c#4 ~ c#4 ~", I: "~@8 e6 ~ c#6 ~ b5 ~ f#5@2",
  J: "[~@8 e6 ~ c#6 ~ b5 ~ [f#5,d#6]@13 ~@5]/2", // D#m
})).s("gm_electric_guitar_clean").gain(0.36).pan(0.7)

// chords · acoustic guitar nylon · "Ace - 12 string"
const acoustic_guitar_nylon = note(`<
  ~ A B C D E F ~@2 G H I J E ~ K L M N I O P Q K ~ R S T U ~@12 R V ~@2 W N X Y Z Q AA ~ AB AC AD AE AF ~@2 AG ~ R AH
  AI ~ AJ AK AL ~ AJ AK AL ~ AJ AK AL ~ AJ AK AL ~
>`.pickRestart({
  A: "~@2 [c#4,e4] ~ d#4 ~@3 d#4 ~@3 d#4 ~@3", B: "d#4 ~ [c#4,e4] ~ e4 ~@3 e4 ~@5 g#3 ~", C: "g#3 ~ d#4 ~@13",
  D: "~@2 f#3 ~@13", E: "~@10 f#4 ~@5", F: "~@6 e4 ~@7 a#3 ~", G: "~@2 g#4 ~ e4 ~@5 e4 ~@5", H: "e4 ~ c#4 ~@9 e4 ~@3",
  I: "~@2 d#4 ~@3 f#3 ~@9", J: "~@2 d#4 ~@5 f#4 ~@7", K: "c#3 ~@15", L: "d#4 ~@15", M: "~@4 e4 ~@5 e4 ~@5",
  N: "~@2 c#4 ~@3 c#4 ~@3 c#4 ~@3 c#4 ~", O: "b2 ~ d#4 ~ b3 ~ d#4 ~ f#4 ~ b3 ~@3 b3 ~",
  P: "c#4 ~@3 c#4 ~@3 d#4 ~@3 d#4 ~@3", Q: "e4 ~ g#4 ~@3 e4 ~@3 a#4 ~ c#4 ~@3", R: "~@14 e4 ~",
  S: "~@2 g#4 ~ e4 ~@5 g#4 ~ e4 ~@3", T: "~@10 g#4 ~ e4 ~@3", U: "~@8 [e2,b2,e3,g#3,b3,e4]@5 ~@3",
  V: "c#4 ~@5 c#4 ~@3 g#4 ~@5", W: "c#4 ~ g#4 ~@3 c#4 ~@5 c#4 ~@3", X: "b2 ~ d#4 ~ b3 ~@5 b3 ~@3 b3 ~",
  Y: "~@2 d#4 ~@3 d#4 ~@3 b3 ~ d#4 ~ b3 ~", Z: "c#4 ~ g#4 ~ c#4 ~ g#3 ~@7 a#3 ~", AA: "c#3 ~@7 f#4 ~@7",
  AB: "~@14 e3 ~", AC: "~@2 g#3 ~ e3 ~@5 g#3 ~ e3 ~@3", AD: "~@2 [e2,b2,e3] ~@7 c#3 ~ e3 ~@3",
  AE: "~@2 c#3 ~ e3 ~@5 c#3 ~ e3 ~@3", AF: "~@8 b2 ~ c#3 ~@5", AG: "~@4 e4 ~@11",
  AH: "c#4 ~ g#4 ~ e4 ~ c#4 ~@3 g#4 ~ e4 ~ c#4 ~", AI: "~@8 a#3 ~@7", AJ: "~@4 d#4 ~@3 d#4 ~@3 d#4 ~@3",
  AK: "d#4 ~@3 e4@8 ~@4", AL: "~@6 [c#4,e4] ~@7 c#4 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.31).pan(0.7)

// chords · acoustic guitar nylon · "Ace - 12 string" · soft notes · B
const acoustic_guitar_nylon_2 = note("<~@64 [~@2 [b2,f#3,b3,d#4] ~@13] ~@17>")
  .s("gm_acoustic_guitar_nylon").gain(0.2).pan(0.7)

// bass · slap bass 2 · "Gene Simmons"
const bass = note(`<
  ~ A@2 B@2 C D E F A@2 B@2 C D E F G@2 H@2 G I E J G@2 H@2 G I E J G@2 H@2 G I E J G@2 H F G@2 H@2 G I E J G@2 K H G I
  E J G L H@3 G@2 M N G@2 M N G@2 M N G@2 M N
>`.pickRestart({
  A: "c#2@5 ~@3 c#2@5 ~@3", B: "b1@5 ~@3 b1@5 ~@3", C: "c#2@5 ~@3 d#2@5 ~@3", D: "e2@5 ~@3 f#2@5 ~@3",
  E: "b1@5 ~@3 f#3 ~ b2@4 ~@2", F: "b1@11 ~@5", G: "c#2@5 ~@3 c#2 ~ c#2@4 ~@2", H: "b1@5 ~@3 b1 ~ b1@4 ~@2",
  I: "e2@5 ~@3 f#2 ~ f#2@4 ~@2", J: "~@2 b1 ~ f#2 ~@3 e2 ~ d#2 ~ c#2 ~@3", K: "~@8 b1 ~ b1@4 ~@2",
  L: "e2@5 ~@3 e2 ~ e2@4 ~@2", M: "b1@5 ~ c#2 ~ d#2 ~ d#2 ~ b1 ~ a#1 ~", N: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
})).s("gm_slap_bass_2").gain(0.51).pan(0.3)

// chords · acoustic guitar nylon · "Paul"
const acoustic_guitar_nylon_3 = note(`<
  ~ A B C@2 D E F G H@2 I@2 J K F L@2 I@2 J K F@2 M N O N P I@2 H L Q R S T F@2 H@2 U K V W I@2 J K F@2 M@2 N O X O X Y
  F Z F U AA C G L@2 F@2 L@2 F@2 L@2 F@2 L@2 F@2
>`.pickRestart({
  A: "[c#4,g#4,c#5,g#5]@3 ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~", // C#5 C#sus4
  B: "[c#4,g#4,c#5,f#5]@3 ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ a#4 ~", // C#sus4
  C: "[b3,f#4,b4,d#5]@3 ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~", // B
  D: "[c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ a#4 ~ [d#4,a#4,d#5,a#5] ~ [d#4,a#4,d#5,a#5] ~ [d#4,a#4,d#5,a#5] ~ [d#4,a#4,d#5,a#5] ~", // C#sus4 D#5
  E: "[e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [a#3,d#4,b4] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ g#4 ~", // E Bmaj7 F#7
  F: "[b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~", // B
  G: "[b3,f#4,b4,d#5] ~@15", // B
  H: "[c#4,g#4,c#5,f#5]@3 ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~", // C#sus4
  I: "[b3,e4,g#4,d#5]@3 ~ [b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~", // Emaj7
  J: "[c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [d#4,a#4,d#5,a#5] ~ [d#4,a#4,d#5,a#5] ~ [d#4,a#4,d#5,a#5] ~ [d#4,a#4,d#5,a#5] ~", // C#sus4 D#5
  K: "[e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~", // E F#7
  L: "[c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~", // C#sus4
  M: "[b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~ [b3,e4,g#4,d#5] ~", // Emaj7
  N: "[e4,b4,a#5] ~ [e4,b4,a#5] ~ [e4,b4,a#5] ~ [e4,b4,a#5] ~ [c#4,g#4,c#5,f#5]@3 ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~", // E C#sus4
  O: "[c#4,g#4,c#5,f#5]@3 ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5]@3 ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~", // C#sus4
  P: "[e3,b3,e4,g#4,b4,e5]@3 ~@5 [f#3,c#4,f#4,a#4,c#5,f#5]@5 ~@3", // E F#
  Q: "[e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~", // E
  R: "[f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~", // F#7
  S: "[b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ c#4 ~", // B
  T: "e3 ~ e3 ~ g#3 ~@3 [e3,b3,e4,g#4,b4,e5] ~@3 [f#3,c#4,e4,a#4,c#5,f#5] ~@3", // E F#7
  U: "[e4,b4,a#5] ~ [e4,b4,a#5] ~ [e4,b4,a#5] ~ [e4,b4,a#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~", // E C#sus4
  V: "[b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ [b3,f#4,b4,d#5] ~ a#4 ~ d#4 ~ f#4 ~ d#5 ~", // B
  W: "[c#4,g#4,c#5,f#5]@3 ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~ [f#3,c#4,e4,a#4,c#5,f#5] ~", // C#sus4 F#7
  X: "[e4,b4,a#5]@3 ~ [e4,b4,a#5] ~ [e4,b4,a#5] ~ [c#4,g#4,c#5,f#5]@3 ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~", // E C#sus4
  Y: "[e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [e3,b3,e4,g#4,b4,e5] ~ [f#3,c#4,f#4,a#4,c#5,f#5] ~ [f#3,c#4,f#4,a#4,c#5,f#5] ~ [f#3,c#4,f#4,a#4,c#5,f#5] ~ [f#3,c#4,f#4,a#4,c#5,f#5] ~", // E F#
  Z: "[c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [c#4,g#4,c#5,f#5] ~ [e3,b3,e4,g#4,b4,e5] ~@3 [f#3,c#4,f#4,a#4,c#5,f#5] ~ [f#3,c#4,f#4,a#4,c#5,f#5] ~", // C#sus4 E F#
  AA: "[e3,b3,e4,g#4,b4,e5]@3 ~@5 [f#3,c#4,f#4,a#4,c#5,f#5]@3 ~@5", // E F#
})).s("gm_acoustic_guitar_nylon").gain(0.26)

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

// drums · snare
const snare = s("sd").struct("<~@16 [~@3 x] [~ x ~ x]!47 [~ x!3] [x!2 ~ x] [~ x ~ x]!16>").gain(0.51)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 A ~@7 B ~@18 A ~@8 C ~@17>".pickRestart({
  A: "~@4 x!2 ~@2", B: "~@9 x ~@6", C: "~@3 x",
})).gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<~@28 A ~@7 A ~@18 A ~@8 B ~@17>".pickRestart({
  A: "~@7 x ~@8", B: "~ x",
})).gain(0.51)

// drums · crash
const crash = s("cr").struct("<~@16 [~@3 x] [x!4]!65>").gain(0.51)

// drums · ride
const ride = s("rd").struct("<~@16 A ~@7 B ~@3 C ~@7 D ~@6 A ~@11 A ~@4 D ~@21>".pickRestart({
  A: "~@3 x", B: "x", C: "x!2", D: "~@2 x!2",
})).gain(0.51)

stack(
  electric_guitar_clean, acoustic_guitar_nylon, acoustic_guitar_nylon_2, bass, acoustic_guitar_nylon_3, kick, snare,
  low_tom, mid_tom, high_tom, crash, ride
)

More by Kiss