Strudelify

A World Without Heroes

Kiss

KeyG majorTempo112 bpm
0:00/0:00
// A World Without Heroes — Kiss
// 112 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 16 "Lead Echo" distortion guitar (copy of ch 6 "Paul (Lead)" distortion guitar, 0.5 beats late)
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/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 · acoustic guitar steel · "Gtr Harmonics"
const acoustic_guitar_steel = note("<A B A B C@2 A B A B D B ~@63>".pickRestart({
  A: "[g4,b4,e5]", B: "[a4,d5,f#5]", C: "[[g5,b5,e6]@7 [a4,d5,f#5]]/2", D: "[g5,b5,e6]",
})).s("gm_acoustic_guitar_steel").gain(0.44).pan(0.3)

// other · vibraphone
const vibraphone = note("<A B C D E@2 F G F G H G@4 I J K L M N O N O ~@38 P@6 ~ Q R@5>".pickRestart({
  A: "~@4 e5 f#5 g5 a5", B: "b5", C: "e5 f#5 g5 a5 b5@2 e6@2", D: "d6@8 b5@3 a5@2 g5@3", E: "[e5@12 b5 f#5 d5 b4]/2",
  F: "g4", G: "d5", H: "g5", I: "~@3 b5, d5", J: "~@2 a4 c5, a5", K: "~@3 b4 d5@2 b5@2", L: "c6", M: "c5 d5 ~ d5 d5@4",
  N: "~ e5", O: "b4 d5@2 b4 d5@4",
  P: "[~@4 f#4@10 e4@11 b4@10 e4@11 e4@5 f#4@3 g4@3 a4@5 b4@5 ~@5 d4@3 e4@3 f#4@2 g4@3 ~@3 c5@2 a4@3 ~@5, ~@67 b4@21 ~@8, ~@67 d5@16 d5@5 ~@8]/6",
  Q: "~@2 b3@3 c#4@3 d#4@2 e4@3 f#4@3", R: "[g4@2 a4@3 d5@3 ~@5 [b4,e5]@42 ~@25, ~@12 g4@63 ~@5]/5",
})).s("gm_vibraphone").gain(0.49).pan(0.7)

// bass · electric bass finger · "Gene"
const bass = note(`<
  A@10 B C A@4 B D E F G H G H I J K A@3 B C A@4 B D J L G H G H M J K A@3 B D B D A@4 B D E N@3 ~@11
>`.pickRestart({
  A: "e1!2 ~ e1!2 ~@3", B: "a1!2 ~ a1!2 ~@3", C: "b1!2 ~ b1!2 ~ b1@2", D: "b1!2 ~ b1!2 ~@3", E: "c2!2 ~ c2!2 ~@3",
  F: "c2 d2 ~ d2!2 ~@3", G: "e1!4 e2@4", H: "e1!2 ~ e1 b1@4", I: "d2!2 ~ d2 d2@4", J: "c2!2 ~ c2 c2@4",
  K: "d2 e2 ~ e2 e2@4", L: "c2 d2 ~ d2 d2@2 ~@2", M: "a#1!2 ~ a#1 a#1@4",
  N: "[d2@2 d2@2 ~@3 d2@2 d2@3 ~@3 d2@5 e1@21 ~@7]/3",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · acoustic guitar steel · "Gtr 2"
const acoustic_guitar_steel_2 = note(`<
  ~@12 A B A B C B D E F G H G I J K ~ L ~ M N O P O P Q P R S F G H G T U K V@3 W X Y X V@2 Z V Y X AA AB@5 AC@7 ~@2
>`.pickRestart({
  A: "[e3,b3,e4,g4]", B: "[b2,f#3,b3,d4]", C: "[a2,e3,a3,c4]", D: "[c3,e3,g3,c4]",
  E: "[c3,g3,c4] [d3,a3,d4] ~ [d3,a3,d4] [d3,a3,d4]@4", F: "~@2 [e3,b3,e4,g4]!2", G: "[b2,f#3,b3,d4]!4",
  H: "[e3,b3,e4,g4]!4", I: "[d3,a3,d4,f4]!2 ~ [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [d3,a3,d4,f4]@2",
  J: "[c3,g3,c4,e4]!2 ~ [c3,g3,c4,e4]!3 [c3,g3,c4,e4]@2", // C
  K: "[d3,a3,d4] [e3,b3,e4] ~ [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]@2", L: "~ [e3,b3,e4,g4,b4]", M: "[a2,e3,a3,c4,e4]",
  N: "[b2,f#3,b3,d4,f#4]", O: "~@3 e4, e3, ~ b3@7, ~ b4@3, ~@3 e4 g4@4", P: "~@3 d4, d3, ~ a3@7, ~ b4@3, ~@3 d4 f#4@4",
  Q: "~@3 a3, a2, ~ e3@7, ~ a4@3, ~@3 a3 e4@4", R: "[c3,g3,c4]!2 ~ [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4]@2",
  S: "[c3,g3,c4] [d3,a3,d4] ~ [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]@2", // C5 D5
  T: "[a#2,f3,a#3]!2 ~ [a#2,f3,a#3] [a#2,f3,a#3]@2 [a#2,f3,a#3]@2", U: "[c3,g3,c4]!2 ~ [c3,g3,c4]!3 [c3,g3,c4]@2",
  V: "[e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2", W: "[a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2",
  X: "[b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]!2 [b2,f#3,b3]@2", // B5
  Y: "[a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2", Z: "[e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2",
  AA: "[c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]!2 [c3,g3,c4]@2", // C5
  AB: "[[d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@5 [d3,a3,d4]@5 ~ [d3,a3,d4]@5 [e3,b3,e4,g4]@21 [d3,a3,d4,f#4]@21 [e3,b3,e4,g4]@18]/5", // D5 Em D Em
  AC: "[~@3 [d3,a3,d4,f#4]@21 [a2,e3,a3,c4]@21 [b2,f#3,b3,d4]@21 ~@11 [e3,b3,e4,g4]@21 ~@14]/7", // D Am Bm Em
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(0.4)

// other · distortion guitar · "Paul (Lead)"
const distortion_guitar = note("<~@45 A@3 B C D E F G H I H J K L M N@2 ~@12>".pickRestart({
  A: "[~@3 d5@9 ~ d5@7 ~@4]/3", B: "a4 d5 a4@2 d5 a4@3", C: "a4 a4@2 d4 g4 a4!2 g4", D: "a4@2 ~ d4 g4 a4!2 g4", E: "d5",
  F: "~@3 f#5@2 g5@3 f#5@3 d5@2 a4@3", G: "d5@3 e5@5", H: "~@2 d3@2 g3@2 b3@2 e4@2 e4 b3 d4@2 g4@2", I: "a4",
  J: "~@2 c5 a4@3 a4@2, a4@3 ~@5", K: "b4!2 c5 d5", L: "d5@8 d5@3 e5@2 f#5@3", M: "g5@3 f#5 g5 f#5 a5@2",
  N: "[a5@7 a5@2 a5@11 ~@12]/2",
})).s("gm_distortion_guitar").gain(0.78)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@20 A@5 B@3 C@2 D E F G H G D E I J K@5 L M N O P Q R S T M N O P U V W X Y@6 Z@7
>`.pickRestart({
  A: "[~@4 f#6@4 ~@4 b5@4 a5@3 f6, e6@3 ~@2, ~@8 g6@11 ~]/5", B: "[e5, e6 ~@2]/3", C: "b4/2", D: "a2", E: "b2",
  F: "~ e6, e2", G: "f#6", H: "~ g6", I: "c3", J: "c3 d3 ~ d3 d3@4", K: "[~@4 a#3, ~ d6@8 ~]/5", L: "c4",
  M: "d4 e4 ~ e4 e4@4", N: "d4", O: "[d4,f#4] [e4,g4] ~ [e4,g4] [e4,g4]@4", P: "[d4,f#4,a4]", Q: "[e4,g4]",
  R: "[f#4,a4]", S: "[a4,c5]", T: "[b4,d5]", U: "[e4,g4,e6]", V: "[f#4,a4,f#6]", W: "[g4,c5,g6]", X: "[a4,d5,f#6]",
  Y: "[~@4 [g4,b4,e6]@21 [f#4,a4,d6]@21 b6@11 e6@5 ~@5 [d4,f#4]@21 a3@8, ~@46 [e4,g4]@21 ~@29, ~@31 f#6@13 ~@4]/6", // Em D Em
  Z: "[~@8 g6@5 [b3,f#6]@32 [e2,g6]@63 ~@4]/7", // B5 Em
})).s("gm_string_ensemble_1").gain(0.54).pan(0.7)

// chords · french horn · "Brass"
const french_horn = note("<~@42 A B C D E F ~@2 G H G H E F ~@19>".pickRestart({
  A: "~ g4", B: "f#4 b3", C: "a#2", D: "c3", E: "[d3,f#4] [e3,g4] ~ [e3,g4] [e3,g4]@4", F: "f#4", G: "[a3,c4]",
  H: "[b3,d4]", // Bm
})).s("gm_french_horn").gain(0.42).pan(0.3)

// other · vibraphone · "Vibraphone (Echo)"
const vibraphone_2 = note("<~@3 A B@2 ~@69>".pickRestart({
  A: "~@9 b5@2 a5 a5@2 g5@2", B: "[~ e5@24 ~@7]/2",
})).s("gm_vibraphone").gain(0.4).pan(0.3)

// drums · kick
const kick = s("bd").struct("<A@20 ~ B ~ B@3 C A@13 ~ B ~ B@18 D E ~@12>".pickRestart({
  A: "x!2 ~ x!2 ~@3", B: "x!2 ~ x ~@4", C: "~ x ~ x!2 ~@3", D: "x ~ x ~@4 x ~@8", E: "~ x ~@2",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<[~@3 x]!20 [~ x]!6 [x ~@2 x] [~@3 x]!13 [~ x]!21 [~@9 x ~@6] ~@13>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@20 A B A B@3 A C@13 A C A B@3 A B@7 A B D C B@3 E ~@13>".pickRestart({
  A: "~@3 x", B: "x!2 ~ x", C: "x!4", D: "~ x ~ x", E: "x ~@3 x ~@10 x",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@19 A B A B ~@16 A B A B ~@12 C ~ C ~@17>".pickRestart({
  A: "~@7 x", B: "x!4 ~@4", C: "~@6 x!2",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@20 A@6 B ~@13 A@6 C A@7 C A D ~ A@3 E ~@13>".pickRestart({
  A: "~ x", B: "~ x ~@2 x ~@3", C: "x!2 ~ x ~@4", D: "x!2", E: "~@9 x ~@6",
})).gain(0.64)

stack(
  acoustic_guitar_steel, vibraphone, bass, acoustic_guitar_steel_2, distortion_guitar, string_ensemble_1, french_horn,
  vibraphone_2, kick, snare, hihat, low_tom, crash
)

More by Kiss