Strudelify

Strange Ways

Kiss

KeyF♯ minorTempo97 bpm
0:00/0:00
// Strange Ways — Kiss
// 97 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(97/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
const distortion_guitar = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D C E C D C F A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D C E C D C F G H I
  J G H I J A@2 B@2 A@2 B@2 C D C E C D C F@2 G
>`.pickRestart({
  A: "[[f#2,c#3] [e2,b2] [f#2,c#3] [a2,e3] ~ [a2,e3]@5 ~@2 [a2,e3]!2 ~@2]/2", // F#5 E5 F#5 A5
  B: "[[b2,f#3] [a2,e3] [b2,f#3] [d3,a3] ~ [d3,a3]@5 ~@2 [c#3,g#3]!2 ~@2]/2", // B5 A5 B5 D5 C#5
  C: "[f#2,c#3,f#3] [e2,b2,e3] [f#2,c#3,f#3] ~@5", D: "[b2,f#3] [a2,e3]@3 [b2,f#3] [a2,e3]@3",
  E: "[e3,b3] [f#3,c#4]!2 ~ [e2,b2,e3]@4", // E5 F#5 E5
  F: "[f#3,c#4]@2 ~@2 [e3,b3]@3 ~ [b2,f#3]@3 ~ [f#3,c#4]@2 ~@2 [e3,b3]@3 ~ [b2,f#3]@3 ~", // F#5 E5 B5 F#5 E5 B5
  G: "[e2,b2,e3] [f#2,c#3,f#3]!2 ~@5", H: "~ [f#2,c#3,f#3] ~ [a2,e3,a3] [a2,e3,a3]@4",
  I: "[a2,e3] [b2,f#3]!2 [a2,e3] ~@4", J: "[e3,b3]@3 [f#3,c#4]@3 [f#3,c#4]@4 ~@2 [e2,b2,e3]@12",
})).s("gm_distortion_guitar").gain(0.46)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@9 A ~ B ~ A ~ B ~ C ~ D ~ A ~ E F ~ G ~ H ~ G ~@2 A ~ B ~ A ~ B ~ A ~ B ~ A ~ E I ~ J ~ I ~ J ~@17 K ~ L ~ K ~ L ~@3
>`.pickRestart({
  A: "~ c4 c#4 c4 c#4@2 f#3@2", B: "~ c4 c#4 c4 c#4 e4 c#4@2", C: "~ c4 c#4 c4 c#4 c4 c#4@2",
  D: "~@2 c#4 c4 c#4 e4 f#4@2", E: "~ c4 c#4 c4 c#4 e4 f#4@2", F: "~@6 [f#4,f#5,c#6]@2 ~ [f#4,f#5,c#6]@3",
  G: "~@12 [f#4,f#5,c#6]@2 ~ [f#4,f#5,c#6]@2 ~ [f#4,f#5,c#6]@6", H: "~@4 [f#4,f#5,c#6] ~ [f#4,f#5,c#6]@2",
  I: "~@4 [f#5,c#6] ~ [f#5,c#6]@2", J: "~@12 [f#5,c#6,f#6]@2 ~ [f#5,c#6,f#6]@2 ~ [f#5,c#6,f#6]@6",
  K: "~@4 [f#4,f#5] ~ [f#4,f#5]@2", L: "~@12 [f#4,f#5]@2 ~ [f#4,f#5]@2 ~ [f#4,f#5]@6",
})).s("gm_lead_2_sawtooth").gain(0.46)

// bass · electric bass pick
const bass = note(`<
  A@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 D E D F D E D G C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 D E D F D E D H I J K
  F I J K F C@2 B@2 C@2 B@2 D E D F D E D H@2 L
>`.pickRestart({
  A: "[~ e1 f#1 a1 ~ a1@5 ~@2 a1!2 ~@2]/2", B: "[b1 a1 b1 d2 ~ d2@5 ~@2 c#2!2 ~@2]/2",
  C: "[f#1 e1 f#1 a1 ~ a1@5 ~@2 a1!2 ~@2]/2", D: "f#1 e1 f#1 ~@5", E: "b1 a1@3 b1 a1@3", F: "e2 f#2!2 ~ e1@4",
  G: "f#2 ~@4 e2 ~@3 b1@3 f#2 ~@4 e2 ~@3 b1@3", H: "f#2 ~@4 e2 ~@2 b1@2 ~@2 f#2 ~@4 e2 ~@2 b1@2 ~@2", I: "d#1 f1!2 ~@5",
  J: "~ f1 ~ a1 a1@3 ~", K: "a1 b1!2 a1 ~@4", L: "e1 f#1!2 ~@5",
})).s("gm_electric_bass_pick").gain(0.46)

// drums · kick
const kick = s("bd").struct("<A@6 B C A@23 ~ A@19 D A@3 ~ A@17 E A E A E A ~@2 F>".pickRestart({
  A: "x!4", B: "x ~ x!6", C: "x!5 ~ x ~", D: "x ~@5 x ~@5 x!2 ~@5 x ~@4", E: "x ~ x ~ x ~ x!2", F: "x!3 ~@5",
})).gain(0.46)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B A C A B A B A B A C A B A D A B A C A B A ~ A B A C A B A B A B A C A B A D A B A C A B A ~ A B A C A B A B A
  B A C A B A B A D A E A D A ~@3
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x", B: "x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@5",
  C: "x ~ x!2 ~@2 x ~@5 x ~@2 x ~@2 x ~@5", D: "x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2",
  E: "x ~ x!2 ~@2 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<A B C D A B E F ~@74>".pickRestart({
  A: "~@6 x!2", B: "x ~@2 x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2", C: "~@18 x ~ x!2 ~ x",
  D: "~@3 x ~ x!2 ~ x!2 ~@8 x ~ x!2 ~ x", E: "x!4", F: "x ~@5 x ~@5 x ~@2 x ~@2 x ~@2 x ~ x",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@31 [~ x!2 ~ x!2] ~@23 [~ x!2 ~ x!2] ~@23 [~ x!2 ~ x!2] [x!2 ~ x!3] [x!3 ~@5]>")
  .gain(0.41)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5
>`.pickRestart({
  A: "x",
})).gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<~@31 [x!6] ~@23 [x!6] ~@23 [x!6]!2 [x!3 ~@5]>").gain(0.41)

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

// drums · cowbell
const cowbell = s("cb").struct("<~@56 [x!4]!8 ~@18>").gain(0.51)

stack(
  distortion_guitar, lead_2_sawtooth, bass, kick, snare, hihat, low_tom, mid_tom, open_hat, high_tom, crash, cowbell
)

More by Kiss