Strudelify

God of Thunder

Kiss

KeyG majorTempo114 bpm
0:00/0:00
// God of Thunder — Kiss
// 114 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(114/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · lead 2 sawtooth · "Paul"
const lead_2_sawtooth = note(`<
  ~@13 A B C D A B C D A B A E A B C D A B C D A B C D A B C D F G H I F G J K A B C D A B A E A B C D A B C D A B C D A
  B C D F G H I F G J K B C D A B C D A B C D A B C D A B C D A B C D L
>`.pickRestart({
  A: "e1!2 e2 b1 d2 e2@2 e1", B: "~@2 e1@2 e2@2 b1@2 d2@2 e2@2 g2@3 ~", C: "e1!2 e2 b1 d2 e2@2 g2",
  D: "g2 e2 g2 a2 a#2 a2 g2 a2", E: "~ e1 e2 b1 d2 e2 d2 e2", F: "[c2,g2,c3]!2 ~@2 [g1,d2,g2,d3]!2 ~@2",
  G: "[d2,a2,d3]@2 [d2,a2,d3]@2 ~@2 [e2,b2,e3]@9 ~", H: "[c2,g2,c3]@2 [c2,g2,c3]@2 ~@4 [e2,b2,e3]@3 ~@5",
  I: "[a1,e2]@2 [a1,e2]@2 [a1,e2]@2 [a1,e2]@2 [a1,e2]@2 [b1,f#2,b2]@5 ~", // A5 B5
  J: "c2 b1 c2 b1 c2 [g1,d2,g2,d3,g3] ~ [d2,a2,d3]", K: "[d2,a2,d3] [d2,c3]!7", L: "[e2,b2,e3]!2 ~@6",
})).s("gm_lead_2_sawtooth").gain(0.56)

// chords · distortion guitar · "Ace"
const distortion_guitar = note(`<
  ~@13 A B C D A B C D A B A E A B C D A B C D A B C D A B C D F G H I F G J K A B C D A B A E A B C D A B C D A B C D A
  B C D F G H I F G J K B C D A B C D A B C D A B C D A B C D A B C D ~
>`.pickRestart({
  A: "e2!2 e3 b2 d3 e3@2 e2", B: "~@2 e2@2 e3@2 b2@2 d3@2 e3@2 g3@3 ~", C: "e2!2 e3 b2 d3 e3@2 [c4,e4]",
  D: "[c4,e4] a3 [c4,e4] [d4,f4] [d#4,g4] [d4,f4] [c4,e4] [d4,f4]", E: "~@2 e2@2 e3@2 b2@2 e3@3 ~ e3@3 ~",
  F: "[c3,g3,c4]!2 ~@2 [g2,d3,g3,d4]!2 ~@2", G: "[d3,a3,d4]@2 [d3,a3,d4]@2 ~@2 [e3,b3,e4]@9 ~",
  H: "[c3,g3,c4]@2 [c3,g3,c4]@2 ~@4 [e3,b3,e4]@3 ~@5", // C5 E5
  I: "[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [b2,f#3,b3]@5 ~", // A5 B5
  J: "c3 b2 c3 b2 c3 [g2,d3,g3,d4,g4] ~ [d3,a3,d4]", K: "[d3,a3,d4] [d3,c4]!7",
})).s("gm_distortion_guitar").gain(0.4)

// bass · slap bass 2 · "Gene"
const bass = note("<~@13 [e2@3 ~ e2@3 ~ e2@3 ~ e2@3 ~]!91 [e2!2 ~@6]>").s("gm_slap_bass_2").gain(0.8)

// other · distortion guitar · "Solo"
const distortion_guitar_2 = note("<~@80 A B C D E F G H I J K L ~@13>".pickRestart({
  A: "b2@7 b2", B: "b2@7 ~ d3@7 ~", C: "c#3@15 ~", D: "c#3@7 ~@5 [e4,g4]@2 [c4,e4]@2", E: "a3@3 ~ c#4@7 ~@3 a3@2",
  F: "d3@3 ~ a#3!12", G: "c#4@3 ~ e4@2 e4@2 e4@2 d4 b3 b3@2 b3@2", H: "b3 e4 g4 a4 b3 a3 g3 a3",
  I: "a3 c5@3 d#5@2 d#5@2 d#5@2 d5@2 b4@2 d5@2", J: "d5@2 d#5@5 ~ d#5@2 d5 d#5 d5 b4 g4 f#4",
  K: "f#4 e4 g4 b4 d#5@2 b4!2 d#5 d5 b4!2 b4@2 d5 b4", L: "b4 d5 b4 d5 b4 d5 b4!2 a4@2 g4@2 e4 g4 d4 b3",
})).s("gm_distortion_guitar").gain(0.48).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@11 A@2 B@7 C B@11 D B@19 C B@11 D B@15 E B F B@8 E B@12 G>".pickRestart({
  A: "~@3 x", B: "x ~@3 x ~@3 x ~ x!3 ~@3", C: "x ~@3 x ~ x!3 ~ x!3 ~@3", D: "x ~@3 x ~ x!3 ~ x!3 ~ x ~",
  E: "x ~@3 x ~@3 x ~ x!3 ~ x!2", F: "x ~@3 x ~@3 x ~ x!6", G: "x!2 ~@6",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@13 A@7 B A@11 C A@19 B A@11 C A@15 D A E A F G A@5 D A@12 H>".pickRestart({
  A: "~@10 x!3 ~@3", B: "~@6 x!3 ~ x!3 ~@3", C: "~@6 x!3 ~ x!3 ~ x ~", D: "~@10 x!3 ~ x!2", E: "~@10 x!6",
  F: "x ~@3 x ~@3 x ~ x!3 ~@3", G: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", H: "x!2 ~@6",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@88 [~@12 x!4] ~@16>").gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@88 [~@4 x!8 ~@4] ~@16>").gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@88 [x!4 ~@12] ~@16>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@11 [x!4]!2 [x!8]!91 [x!2 ~@6]>").gain(0.48)

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

More by Kiss