Strudelify

Strutter

Kiss

KeyD majorTempo136 bpm
0:00/0:00
// Strutter — Kiss
// 136 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(136/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 · overdriven guitar · "Gtr 1"
const overdriven_guitar = note(`<
  A B C D E B C F G H I J K H L M N H O J K H L M P Q R S R T U V W T U V W T U V X H I J K H L M N H O J K H L M P Q R
  S R T U V W T U V W T U V X H I J K H L M N H O J K H L M P Q R S R T U V W T U V W T U V X Y Z
>`.pickRestart({
  A: "~@14 [a#2,f3]!2", B: "[a#2,f3]@3 ~ [a#2,g3] ~ [a#2,f3] ~ [a#2,g3] ~ [a#2,f3] ~ [a#2,f3] ~ [f#3,c#4] ~",
  C: "[f#3,c#4] ~ [f#3,c#4] ~ [f#3,d#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [c#3,g#3]!2", // F#5 D#m F#5 C#5
  D: "[c#3,g#3] ~ [c#3,g#3] ~ [c#3,a#3] ~ [c#3,g#3] ~ [c#3,a#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [g#2,d#3] ~", // C#5 F# C#5 F# C#5 G#5
  E: "[g#2,d#3] ~ [g#2,d#3] ~ [g#2,f3] ~ [g#2,d#3] ~ [g#2,f3] ~ [g#2,f3] ~ [g#2,d#3] ~ [a#2,f3]!2", // G#5 C# G#5 C# G#5 A#5
  F: "[c#3,g#3] ~ [c#3,g#3] ~ [c#3,a#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,a#3] ~ [c#3,g#3] ~", // C#5 F# C#5 F# C#5
  G: "~@2 [c#3,g#3] ~ [c#3,a#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [a#2,f3,a#3,d4,f4,a#4]!2", // C#5 F# C#5 A#
  H: "[a#2,f3,a#3,d4,f4,a#4]@5 ~@3 [a#2,f3,a#3,d4,f4,a#4] ~ [a#2,f3,a#3,d4,f4,a#4]!3 ~ d#3 ~", // A#
  I: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,d#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,d#3] ~ [c#3,g#3] ~", // F#5 D#m F#5 D#m C#5
  J: "[c#3,g#3] ~ [c#3,g#3] ~ [c#3,a#3] ~ [c#3,g#3] ~ [c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~@3 [g#3,c#4,f4] ~", // C#5 F# C#5 C#
  K: "[a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~ [g#3,c#4,f4] ~@3 [a#2,f3,a#3,d4,f4,a#4]!2", // F# C# A#
  L: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,d#3] ~ [f#2,c#3] ~ [f#2,d#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [c#3,g#3] ~", // F#5 D#m F#5 D#m F#5 C#5
  M: "[c#3,g#3] ~ [c#3,g#3] ~ [c#3,a#3] ~ [c#3,g#3] ~ [c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~ [g#2,d#3] ~", // C#5 F# C#5 G#5
  N: "[g#2,d#3] ~ [g#2,d#3] ~ [g#2,f3] ~ [g#2,d#3] ~ [g#2,f3] ~ [g#2,d#3] ~ [g#2,d#3] ~ [a#2,f3,a#3,d4,f4,a#4]!2", // G#5 C# G#5 C# G#5 A#
  O: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,d#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [c#3,g#3] ~", // F#5 D#m F#5 C#5
  P: "[g#2,d#3] ~ [g#2,d#3] ~ [g#2,f3] ~ [g#2,d#3] ~ [g#2,f3] ~ [g#2,d#3] ~ [g#2,f3]@3 ~", // G#5 C# G#5 C# G#5 C#
  Q: "[a#2,f3,a#3]@3 ~@3 [a#2,f3,a#3] ~ [a#2,f3,a#3] ~ [a#2,f3,a#3] ~@5", // A#5
  R: "[f#2,c#3,f#3] ~ [f#2,c#3,f#3] ~@3 [f#2,c#3,f#3] ~ [f#2,c#3,f#3] ~ [f#2,c#3,f#3] ~@5", // F#5
  S: "[a#2,f3,a#3] ~ [a#2,f3,a#3] ~@3 [a#2,f3,a#3] ~ [a#2,f3,a#3] ~ [a#2,f3,a#3] ~@5", // A#5
  T: "[g#2,d#3] ~ [a#2,f3] ~@3 [a#2,f3]@5 ~@3 [g#2,d#3] ~", // G#5 A#5 G#5
  U: "[a#2,f3] ~ [a#2,f3] ~@3 [g#2,d#3] ~ [a#2,f3] ~ [a#2,f3] ~@3 [a#2,f3] ~", // A#5 G#5 A#5
  V: "[c#3,g#3] ~ [d#3,a#3] ~@3 [d#3,a#3]@5 ~@5", W: "[c#3,g#3,c#4] ~ [a#2,d#3,a#3,d#4] ~@5 [g#2,d#3] ~ [c3,f3] ~@5",
  X: "[f#2,c#3] ~ [c#3,f#3,c#4] ~@5 [c#3,g#3,c#4] ~ [g#2,d#3,g#3] ~@3 [a#2,f3,a#3,d4,f4,a#4]!2", // F#5 C#5 G#5 A#
  Y: "[a#2,f3,a#3,d4,f4,a#4]@11 ~@5", Z: "[a#2,f3,a#3,d4,f4,a#4]@3 ~@13",
})).s("gm_overdriven_guitar").gain(0.36)

// chords · overdriven guitar · "Gtr 2"
const overdriven_guitar_2 = note(`<
  A B C D E B C F G H ~@2 G H ~@2 I H ~@2 G H ~@2 J K L M L N O P Q N O P Q N O P R H ~@2 G H ~@2 I H ~@2 G H ~@2 J K L
  M L N O P Q N O P Q N O P R H ~@2 G H ~@2 I H ~@2 S H ~@2 T K L M L N O P Q N O P Q N O P R H U
>`.pickRestart({
  A: "~@14 [a#2,f3,a#3,d4,f4,a#4]!2", B: "[a#2,f3,a#3,d4,f4,a#4]@8 ~@6 [f#3,c#4,f#4,a#4]!2",
  C: "[f#3,c#4,f#4,a#4]@8 ~@6 [c#3,g#3,c#4,f4,g#4,c#5]!2", // F# C#
  D: "[c#3,g#3,c#4,f4,g#4,c#5]@8 ~@6 [g#2,d#3,g#3,c4,d#4,g#4]!2", // C# G#
  E: "[g#2,d#3,g#3,c4,d#4,g#4]@3 ~@3 [g#2,d#3,g#3,c4,d#4,g#4] ~@3 [g#2,d#3,g#3,c4,d#4,g#4] ~@3 [a#2,f3,a#3,d4,f4,a#4]!2", // G# A#
  F: "[c#3,g#3,c#4,f4,g#4,c#5]@11 ~@5", // C#
  G: "~@2 [c#3,g#3,c#4,f4,g#4,c#5] ~@5 [c#3,g#3,c#4,f4,g#4,c#5]@3 ~ [c#3,g#3,c#4,f4,g#4,c#5]@3 ~", // C#
  H: "[a#2,f3,a#3,d4,f4,a#4]@11 ~@5", // A#
  I: "~@2 [g#2,d#3,g#3,c4,d#4,g#4] ~@5 [g#2,d#3,g#3,c4,d#4,g#4]@3 ~ [g#2,d#3,g#3,c4,d#4,g#4]@3 ~", // G#
  J: "~@2 [g#2,d#3,g#3,c4,d#4,g#4] ~@5 [g#2,d#3,g#3,c4,d#4,g#4] ~ [g#2,d#3,g#3,c4,d#4,g#4] ~ [g#2,d#3,g#3,c4,d#4,g#4]@3 ~", // G#
  K: "[a#2,f3,a#3,c#4,f4]@3 ~@3 [a#2,f3,a#3,c#4,f4] ~ [a#2,f3,a#3,c#4,f4] ~ [a#2,f3,a#3,c#4,f4] ~@5", // A#m
  L: "[f#2,c#3,f#3,a#3,c#4,f#4] ~ [f#2,c#3,f#3,a#3,c#4,f#4] ~@3 [f#2,c#3,f#3,a#3,c#4,f#4] ~ [f#2,c#3,f#3,a#3,c#4,f#4] ~ [f#2,c#3,f#3,a#3,c#4,f#4] ~@5", // F#
  M: "[a#2,f3,a#3,c#4,f4] ~ [a#2,f3,a#3,c#4,f4] ~@3 [a#2,f3,a#3,c#4,f4] ~ [a#2,f3,a#3,c#4,f4] ~ [a#2,f3,a#3,c#4,f4] ~@5", // A#m
  N: "[g#2,d#3] ~ [a#2,f3] ~@3 [a#2,f3]@5 ~@3 [g#2,d#3] ~", // G#5 A#5 G#5
  O: "[a#2,f3] ~ [a#2,f3] ~@3 [g#2,d#3] ~ [a#2,f3] ~ [a#2,f3] ~@3 [a#2,f3] ~", // A#5 G#5 A#5
  P: "[c#3,g#3] ~ [d#3,a#3] ~@3 [d#3,a#3]@5 ~@5", Q: "[c#3,g#3] ~ [a#2,d#3] ~@5 [g#2,d#3] ~ [f2,c3] ~@5",
  R: "[f#2,c#3] ~ [c#3,f#3,c#4] ~@5 [c#3,g#3,c#4] ~ [g#2,d#3,g#3] ~@3 [a#2,f3,a#3,d4,f4,a#4]!2", // F#5 C#5 G#5 A#
  S: "[c#3,g#3,c#4,f4,g#4,c#5]@2 ~ [c#3,g#3,c#4,f4,g#4,c#5]@2 ~ [c#3,g#3,c#4,f4,g#4,c#5] ~ [c#3,g#3,c#4,f4,g#4,c#5] ~ [c#3,g#3,c#4,f4,g#4,c#5] ~ [c#3,g#3,c#4,f4,g#4,c#5] ~ [c#3,g#3,c#4,f4,g#4,c#5] ~", // C#
  T: "[g#2,d#3,g#3,c4,d#4,g#4]@2 ~ [g#2,d#3,g#3,c4,d#4,g#4]@2 ~ [g#2,d#3,g#3,c4,d#4,g#4] ~ [g#2,d#3,g#3,c4,d#4,g#4]@2 ~ [g#2,d#3,g#3,c4,d#4,g#4]@2 ~ [g#2,d#3,g#3,c4,d#4,g#4] ~", // G#
  U: "[a#2,f3,a#3,d4,f4,a#4]@3 ~@13", // A#
})).s("gm_overdriven_guitar").gain(0.31)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A B C D E B C F G B H I J B C D K B C I J B C D L M N O N P Q R S P Q R S P Q R T B H I J B C D K B C I J B C D L M N
  O N P Q R S P Q R S P Q R T B H I J U C D K U C I J U C D L M N O N P Q R S P Q R S P Q R T V W
>`.pickRestart({
  A: "~@14 a#1!2", B: "a#1@3 ~ a#1@3 ~ d#1 ~ d#1 ~ f1 ~ f#1@2", C: "~@2 f#1 ~ a#1@3 ~ b1@3 ~ c2 ~ c#2@2",
  D: "~@2 c#2 ~ f2@3 ~ g#2@3 ~ f2 ~ g#1@2", E: "~@2 g#1 ~ c2@3 ~ d#2@3 ~ c2 ~ a#1!2",
  F: "~@2 c#2 ~ f2@3 ~ g#2@3 ~ f2 ~ c#2@2", G: "~@2 c#2 ~ f2@3 ~ g#2@3 ~ f2@3 ~",
  H: "~@2 f#1 ~ c2@3 ~ b1@3 ~ c2 ~ c#2@2", I: "~@2 c#2 ~ c2@3 ~ a#1@3 ~ g#1 ~ c#2@2",
  J: "~@2 c#2 ~ c2@3 ~ a#1@3 ~ g#1 ~ a#1!2", K: "~@2 g#1 ~ c2@3 ~ d#2@3 ~ c2@3 ~",
  L: "~@2 g#1 ~ f#1@3 ~ f1@3 ~ f#1 ~ g#1 ~", M: "a#1@3 ~@3 a#1 ~ a#1 ~ a#1 ~@5", N: "f#1 ~ f#1 ~@3 f#1 ~ f#1 ~ f#1 ~@5",
  O: "a#1 ~ a#1 ~@3 a#1 ~ a#1 ~ a#1 ~@5", P: "g#1 ~ a#1 ~@3 a#1@5 ~@3 g#1 ~",
  Q: "a#1 ~ a#1 ~@3 g#1 ~ a#1 ~ a#1 ~@3 a#1 ~", R: "c#2 ~ d#2 ~@3 d#2@5 ~@5", S: "c#2 ~ a#1 ~@5 g#1 ~ f1 ~@5",
  T: "f#1 ~ c2 ~@5 c#2 ~ g#1 ~@3 a#1!2", U: "a#1@3 ~ a#1@3 ~@5 f1 ~ f#1@2", V: "[a#1,a#2]@11 ~@5",
  W: "[a#1,a#2]@3 ~@13", // A#
})).s("gm_electric_bass_finger").gain(0.51)

// other · overdriven guitar · "Solo Guitar"
const overdriven_guitar_3 = note("<~@61 A B C D E F G H ~@24 I J K L M N O P Q R S@2 T U>".pickRestart({
  A: "d#4 f4@2 ~ d#4 f4@2 ~ d#4 f4@2 ~ d#4 f4@2 ~", B: "d#4 f4@2 ~ d#4 f4@2 ~ d#4 f4 d#4 f4 d#4 f4 d#4 f4",
  C: "d#4 f4 d#4 f4 d#4 f4 d#4 f4 d#4 c#4 a#3 ~ c#4@3 ~", D: "g#4 f4 g#4 f4 g#4 f4 g#4 f4 g#4 f4 g#4 f4 g#4 f4 g#4 f4",
  E: "g#4 a#4 ~ g#4 a#4 g#4 a#4 g#4 a#4 g#4 a#4 g#4 a#4 g#4 a#4 g#4",
  F: "a#4 g#4 a#4 g#4 a#4 g#4 a#4 g#4 a#4 g#4 a#4 g#4 a#4 g#4 a#4 g#4",
  G: "a#4 g#4 a#4 g#4 a#4@3 ~ g#4 ~ a#4@3 ~ g#4 ~", H: "g#4 a#4 g#4 ~ f4 ~ g#4 ~ g#4 f4 d#4 f4 d#4 ~ f4 ~",
  I: "d#4 f4!2 ~ [f4,a#4] ~ d#4 f4!2 ~ [f4,a#4] ~ d#4 f4!2 ~", // A#5
  J: "[f4,a#4] ~ d#4 f4!2 ~ [f4,a#4] ~ d#4 f4!2 ~ [f4,a#4] ~ d#4 f4", // A#5
  K: "f4 ~ [f4,a#4] ~ g#4 f4 d#4 f4 g#4 ~ g#4 f4 g#4 f4 d#4 f4", // A#5
  L: "g#4 f4 d#4 f4 d#4 f4 g#4 ~ g#4 f4 g#4 f4 g#4 f4 g#4 f4", M: "g#4 a#4 f4 ~ c#4@3 ~ a#3@3 ~ g#3 ~ a#3@2",
  N: "~@2 g#3 ~ f3 ~ d#3 ~ c#3@3 ~ g#2 a#2 c#3 ~", O: "d#3 ~ f3 ~ d#4 c#4 a#3 c#4 f4 d#4 c#4 a#3 c#4@3 ~",
  P: "g#4 f4 g#4 f4 g#4 ~ a#4 c#5@2 ~ a#4 c#5 a#4 c#5 a#4 c#5",
  Q: "a#4 c#5 a#4 c#5 a#4 c#5 a#4 c#5 a#4 c#5 a#4 ~ a#4 g#4 f4 g#4",
  R: "a#4@3 ~ c#5 d5 d#5 c#5 d5 d#5 c#5 d5 d#5 c#5 d5 d#5",
  S: "[c#5 d5 d#5 c#5 ~@4 c#5 d#5 c#5 a#4 c#5 ~ a#4 c#5@2 ~ a#4 ~ g#4 ~ f4 ~ e4 ~ d#4 ~ d#4 c#4@2 ~]/2",
  T: "a#3@11 ~@5", U: "a#3@3 ~@13",
})).s("gm_overdriven_guitar").gain(0.51)

// other · overdriven guitar · "Solo Guitar (High)"
const overdriven_guitar_4 = note(`<
  ~@69
  [d#5 ~ f5 ~ g#5 f5 d#5 f5 g#5 a#5@2 ~ g#5 a#5@2 ~]
  [g#5 a#5@2 ~ g#5 a#5@2 ~ g#5 a#5 g#5 a#5 g#5 a#5 g#5 a#5]
  [g#5 f5 d#5 f5 g#5 ~ g#5 f5 d#5 f5 g#5 ~ f5 ~ c#6 d#6]
  [d#6 ~ c#6 ~ a#5 ~ g#5 a#5 g#5 ~ f5 ~ d#5@3 ~]
  ~@30
  [~@4 d#5 f5 d#5 ~@9]
  ~@3
>`).s("gm_overdriven_guitar").gain(0.51)

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

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

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@11 B ~@3 B ~@3 B ~@15 C ~@3 B ~@3 B ~@3 B ~@7 D ~@3 E ~@3 E ~@11 B ~@3 A ~@11 E ~@14
>`.pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@12 x!3 ~", D: "~@14 x!2", E: "~@12 x!2 ~@2",
})).gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<A ~@35 B ~@3 C ~@15 D ~@3 E ~@19 F ~@26>".pickRestart({
  A: "~ x!2 ~", B: "~@11 x ~@4", C: "~@7 x", D: "~@13 x ~@2", E: "~@4 x!2 ~@2", F: "~ x",
})).gain(0.51)

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

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

stack(
  overdriven_guitar, overdriven_guitar_2, bass, overdriven_guitar_3, overdriven_guitar_4, kick, snare, low_tom, mid_tom,
  high_tom, china, ride_bell
)

More by Kiss