Strudelify

Got to Choose

Kiss

KeyG majorTempo117 bpm
0:00/0:00
// Got to Choose — Kiss
// 117 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(117/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 · "Ace"
const distortion_guitar = note(`<
  ~@5 A B C B C D@24 E@4 F@4 D@16 E@4 F@4 E@4 G@4 E@4 F@4 ~@3 A B C B C D@8 H@5 I J@2 K
>`.pickRestart({
  A: "~@2 d5!2", B: "d3!8", C: "d3!4 d5@2 d5@2",
  D: "[[d3,a3,d4]@2 ~@2 [d3,a3,d4]@6 a2@2 b2@2 [c3,g3,c4]@10 [g2,d3,g3] [g2,d3,g3]@2 ~ [g2,d3,g3]@4]/2", // D5 C5 G5
  E: "[[a#2,f3,a#3]@4 [a#2,f3,a#3]@2 a#2@2 c3 d3 [f3,a#3]@2 d3@2 [c3,g3,c4]@6 [c3,g3,c4]@2 c3@2 c3 d3 [f3,a#3]@2 d3@2 [c3,g3,c4]@6 [c3,g3,c4]@2 c3@2 d3 e3 [g3,c4]@2 e3@2 [d3,a3,d4]@10 d3 e3 g3@2 a3@2 e3@2]/4", // A#5 C5 A#5 C5 D5
  F: "[[a#2,f3,a#3]@4 [a#2,f3,a#3]@2 a#2@2 c3 d3 [f3,a#3]@2 d3@2 [c3,g3,c4]@6 [c3,g3,c4]@2 c3@2 c3 d3 [f3,a#3]@2 d3@2 [c3,g3,c4]@6 [c3,g3,c4]@2 c3@2 d3 e3 [g3,c4]@2 e3@2 [d3,a3,d4]@18]/4", // A#5 C5 A#5 C5 D5
  G: "[[a#2,f3,a#3]@4 [a#2,f3,a#3]@2 a#2@2 c3 d3 [f3,a#3]@2 d3@2 [c3,g3,c4]@6 [c3,g3,c4]@2 c3@2 c3 d3 [f3,a#3]@2 d3@2 [c3,g3,c4]@6 [c3,g3,c4]@2 c3@2 d3 e3 [g3,c4]@2 e3@2 [d3,a3,d4]@6 [d3,a3,d4]@12]/4", // A#5 C5 A#5 C5 D5
  H: "[[d3,a3,d4] ~ [d3,a3,d4]@3 a2 b2 [c3,g3,c4]@2 a2 b2 [c3,g3,c4]@2 a2 b2 [c3,g3,c4]@25]/5", // D5 C5
  I: "[c3,g3,c4]!2 ~@4 [c3,g3,c4]!2", J: "[~@2 [c3,g3,c4]!2 [d3,a3,d4]@12]/2", K: "[d3,a3,d4] ~@3",
})).s("gm_distortion_guitar").gain(0.3).pan(0.1)

// chords · distortion guitar · "Paul"
const distortion_guitar_2 = note(`<
  A@2 B@2 C@2 D@4 E@8 F@16 G@4 H@4 F@16 G@4 I@4 G@4 J@4 G@4 I@4 B@2 C@2 D@4 F@8 K@5 L M@2 N
>`.pickRestart({
  A: "[[e4,g4]@5 [c4,e4] ~ [d4,f#4]@2 [d4,f#4]!4 ~ [d4,f#4] d3, ~@13 d3@2 ~]/2", // Em C D
  B: "[[d3,e4,g4]!2 d3!3 [d3,c4,e4] d3!2 d3 [d3,d4,f#4] d3!2 [d3,d4,f#4] d3 [d3,d4,f#4] d3, ~@7 [d4,f#4]@2 ~@7]/2", // Em7 C D
  C: "[[d3,e4,g4]!2 d3!3 [d3,c4,e4] d3!2 d3 [d3,d4,f#4] d3!2 a4@2 a4@2, ~@7 [d4,f#4]@2 ~@7]/2", // Em7 C D
  D: "[[d3,e4,g4]!2 d3!3 [d3,c4,e4] d3 [d3,d4,f#4]@2 d3 [d3,d4,f#4] ~ a4@2 a4@2]/2", // Em7 C D
  E: "[[d3,a3,d4,f#4]@2 ~@2 [d3,a3,d4,f#4]@6 a2@2 b2@2 c3@4 g3@2 g4@2 d4@2 [g2,d3,g3,d4,g4] [g2,d3,g3,d4,g4]@2 ~ [g2,d3,g3,d4,g4]@4]/2", // D G5
  F: "[[d3,a3,d4]@2 ~@2 [d3,a3,d4]@6 a2@2 b2@2 c3@4 g3@2 g4@2 d4@2 [g2,d3,g3] [g2,d3,g3]@2 ~ [g2,d3,g3]@4]/2", // D5 G5
  G: "[[a#2,f3,a#3]@2 [a#2,f3,a#3] ~@4 [c3,g3,c4]@3 ~@5 [c3,g3,c4]@3 ~@5 [d3,a3,d4]@3 ~@6]/4", // A#5 C5 D5
  H: "[[a#2,f3,a#3]@2 [a#2,f3,a#3] ~@4 [c3,g3,c4]@3 ~@5 [c3,g3,c4]@3 ~@5 [d3,a3,d4]@9]/4", // A#5 C5 D5
  I: "[[a#2,f3,a#3]@2 [a#2,f3,a#3] ~@4 [c3,g3,c4]@3 ~@5 [c3,g3,c4]@4 ~@4 [d3,a3,d4]@9]/4", // A#5 C5 D5
  J: "[[a#2,f3,a#3]@2 [a#2,f3,a#3] ~@4 [c3,g3,c4]@3 ~@5 [c3,g3,c4]@4 ~@4 [d3,a3,d4]@3 [d3,a3,d4]@6]/4", // A#5 C5 D5
  K: "[[d3,a3,d4] ~ [d3,a3,d4]@3 a2 b2 [c3,g3,d4,g4]@2 a2 b2 [c3,g3,d4,g4]@2 a2 b2 [c3,g3,d4,g4]@25]/5", // D5 Csus2
  L: "[c3,g3,c4]!2 ~@4 [c3,g3,c4]!2", M: "[~@2 [c3,g3,c4]!2 [d3,a3,d4]@12]/2", N: "[d3,a3,d4] ~@3",
})).s("gm_distortion_guitar").gain(0.3).pan(0.9)

// other · distortion guitar · "Guitar 2 (Bends)"
const distortion_guitar_3 = note("<~@5 A ~ A ~ A ~@75 A ~ A ~ A ~@17>".pickRestart({
  A: "~@2 g4!2",
})).s("gm_distortion_guitar").gain(0.3).pan(0.9)

// other · distortion guitar · "Guitar 1 (Bends)"
const distortion_guitar_4 = note("<~@5 A ~ A ~ A ~@75 A ~ A ~ A ~@17>".pickRestart({
  A: "~@2 c5!2",
})).s("gm_distortion_guitar").gain(0.3).pan(0.1)

// bass · electric bass pick · "Gene"
const bass = note("<~@6 A@3 B C@24 D@4 E@4 C@16 F@4 E@4 D@4 E@4 D@4 E@4 ~@4 A@3 B C@8 G@5 H I@2 J>".pickRestart({
  A: "d2!8", B: "d2!3 a1 b1@2 c2@2", C: "[d2@2 ~@2 d2@6 a1@2 b1@2 c2@10 g1 g1@2 ~ g1@4]/2",
  D: "[a#1@4 a#1@2 ~@2 f1 g1 a#1@2 g1@2 c2@6 c2@2 ~@2 f#1 g1 a#1@2 g1@2 c2@6 c2@2 ~@2 g1 a1 c2@2 a1@2 d2@8 g1 a1 c2@2 d2@2 c#2@2 c2@2]/4",
  E: "[a#1@4 a#1@2 ~@2 f1 g1 a#1@2 g1@2 c2@6 c2@2 ~@2 f1 g1 a#1@2 g1@2 c2@6 c2@2 ~@2 g1 a1 c2@2 a1@2 d2@18]/4",
  F: "[a#1@4 a#1@2 ~@2 f1 g1 a#1@2 g1@2 c2@6 c2@2 ~@2 f1 g1 a#1@2 g1@2 c2@6 c2@2 ~@2 g1 a1 c2@2 a1@2 d2@8 g1 a1 c2@2 d2@2 c#2@2 c2@2]/4",
  G: "[d2 ~ d2@3 a1 b1 c2@2 a1 b1 c2@2 a1 b1 c2@25]/5", H: "c2!2 ~@4 c2!2", I: "[~@2 c2!2 d2@12]/2", J: "d2 ~@3",
})).s("gm_electric_bass_pick").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A@3 B C ~ C D E ~ C D F G F G F G H G H G H G H G H D C I@2 ~ C I@2 ~ J G H G H G K G H G H G H G H G C I@2 ~ C L
  I@2 F G@14 M ~@4 A@3 N C ~ C ~ C ~ C ~ C O P Q ~ R S ~ N
>`.pickRestart({
  A: "x!2", B: "x!2 ~@6", C: "x ~@6 x", D: "~ x ~@6", E: "x ~ x ~@4 x", F: "x ~@3 x!2 ~ x", G: "~ x ~@2 x!2 ~ x",
  H: "x!2 ~@2 x!2 ~ x", I: "~@7 x", J: "x ~@4 x ~ x", K: "x!2 ~@3 x ~ x", L: "~@6 x!2", M: "~ x ~@2 x!2 ~@2", N: "x",
  O: "~@3 x ~@3 x", P: "x ~ x ~ x!12", Q: "x!8 ~@8", R: "x!2 ~@4 x!2", S: "~@2 x!3 ~@3",
})).gain(0.42)

// drums · snare
const snare = s("sd").struct("<~@6 A B@2 C ~@8 B@15 C ~@8 B@15 C ~@8 B@16 D ~@3 A B@2 ~@18>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "x",
})).gain(0.37)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@10 A B ~ C A B D ~@16 E F@3 ~ F@3 ~@17 F@3 G ~ H F I ~@24 A J A K ~ L ~ M F N ~@7
>`.pickRestart({
  A: "~@5 x!2 ~", B: "~@11 x!4 ~", C: "~@10 x ~ x!3 ~", D: "~@2 x!2 ~ x!2 ~", E: "~@7 x", F: "~@3 x", G: "~@12 x!3 ~",
  H: "~@5 x ~@2", I: "~@8 x!6 ~@2", J: "~@7 x!8 ~", K: "~@5 x!3", L: "~@8 x!3 ~ x!3 ~", M: "~@10 x!6", N: "~ x ~ x",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@11 A B C ~ A ~ D E C F G F C F G F H F H F H F I J K@2 C J L@2 ~ M N O P F Q F H F H F H F H F R J L@2 C L S L@2 M T
  U F T@2 U F T@2 U F T@3 ~@5 V W X Q Y C J C B C J Q ~@4 Z ~@2 V ~
>`.pickRestart({
  A: "~@3 x!5", B: "~@2 x!4 ~@2", C: "~ x!7", D: "~@3 x!4 ~", E: "~ x!3", F: "x!5 ~ x ~", G: "x ~@2 x!5", H: "x!8",
  I: "x!4 ~@4", J: "~@2 x!5 ~", K: "x!7 ~", L: "~ x!6 ~", M: "~ x!2 ~", N: "x ~ x ~ x ~ x!2", O: "x ~ x!3 ~ x ~",
  P: "x ~ x!6", Q: "~@2 x!6", R: "x ~ x!4 ~@2", S: "~ x!5 ~@2", T: "~@2 x!3 ~ x ~", U: "~@2 x!3 ~ x!2", V: "~@3 x",
  W: "~ x ~ x", X: "~@2 x!2 ~@2 x ~", Y: "~@4 x!2 ~@2", Z: "x!4",
})).gain(0.42)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@6 A B@2 C D E F G H E H I ~@15 J K L@2 M N L O ~@16 P L Q R S F T R U ~@16 V ~@3 A B@2 W D X D T F U F Y L Z ~@7
>`.pickRestart({
  A: "~@2 x ~@3 x!2", B: "x!8", C: "x ~ x ~ x ~ x ~ x!3 ~ x!3 ~", D: "~@4 x ~@2 x!2 ~@7", E: "~@2 x ~ x ~ x!5 ~@5",
  F: "~@4 x ~@2 x!6 ~@3", G: "~ x!2 ~", H: "~ x", I: "~@4 x ~ x!3 ~ x ~ x!3 ~", J: "~@8 x!3 ~ x ~@3",
  K: "~@4 x ~ x!6 ~@4", L: "~@4 x ~@2 x!2 ~ x ~@5", M: "~@2 x ~ x!2 ~@2 x ~ x ~ x!3 ~", N: "~@4 x ~ x!3 ~ x!2 ~@4",
  O: "~@2 x ~ x!3 ~ x ~ x ~@5", P: "~@3 x", Q: "~@4 x!3 ~ x!2 ~@6", R: "~@2 x ~ x ~@2 x!5 ~@4", S: "~@4 x!3 ~ x!3 ~@5",
  T: "~ x!4 ~@3", U: "~@2 x ~ x!3 ~@9", V: "x", W: "x ~ x ~ x!5 ~ x ~ x!3 ~", X: "~ x!2 ~@5", Y: "~@2 x ~ x!6 ~@6",
  Z: "~ x ~@3 x ~@2",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@20 A ~ A ~ A ~ A ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~@10 A@14 B ~@25
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@2 x!5 ~",
})).gain(0.42)

// drums · high tom
const high_tom = s("ht").struct("<~@13 A ~@21 B@2 ~@2 B ~@19 B ~ B ~@45>".pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@6",
})).gain(0.42)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@3 B ~ B ~ B ~ B ~ C ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~ C D@2 ~ C D@2 E F ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~ C D@2 ~ C
  D@2 ~ C D ~ D@3 ~ D@3 ~ D@4 ~@5 A ~@3 B ~ C ~ C ~ C ~ C G H I ~ J K L A
>`.pickRestart({
  A: "x", B: "x ~ x ~@4 x", C: "x ~@6 x", D: "~@7 x", E: "~@14 x!2", F: "x!4 ~@10 x ~", G: "~@3 x ~@3 x", H: "~@2 x!14",
  I: "x!16", J: "x!2 ~@4 x!2", K: "~@4 x ~ x ~ x ~@3 x!4", L: "x!5 ~@11",
})).gain(0.37)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@41 [x!14 ~@2] ~@58 [x!2 ~@4 x ~@3 x ~@5] ~@6>").gain(0.21)

// drums · cowbell
const cowbell = s("cb").struct("<~@66 [x!4]!16 ~@25>").gain(0.42)

stack(
  distortion_guitar, distortion_guitar_2, distortion_guitar_3, distortion_guitar_4, bass, kick, snare, low_tom, hihat,
  mid_tom, open_hat, high_tom, crash, crash_soft, cowbell
)

More by Kiss