Strudelify

Kiss You All Over

EXILE

KeyC majorTempo101 bpm
0:00/0:00
// Kiss You All Over — EXILE
// 101 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(101/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 · string ensemble 2 · "Synth2"
const string_ensemble_2 = note(`<
  A B A B C D E@3 B A B A B A B A B A B C D C D C D C D F D F D G@4 H@6 I@3 J@2 K@2 L@2 K@2 M@2 F N F O@5 H@6 P@2 Q R D
  R D R D R D R D R D R D R D
>`.pickRestart({
  A: "[e3,g3,c4]", B: "[f3,a3,c4]", C: "[c4,e4,g4,c5]", D: "[c4,f4,a4]", E: "[[e4,g4,c5] [f4,a4] [e3,g3], c4]/3",
  F: "[d4,g4,b4]", G: "[c4@2 [c5,e5] [c4,e4], a4, f4@3 ~]/4", H: "[[c4,a4]@47 [b3,g4]]/6", I: "[~@2 c4, [a3,f4]]/3",
  J: "[[g3,c4,e4]@6 [c4,e4,g4,c5] [d4,e4,g4,d5]]/2", K: "[f4,a4]/2", L: "[[c4,e4]@6 [c4,e4,g4,c5] [d4,e4,g4,d5]]/2",
  M: "[[c4,e4]@3 ~]/2", N: "[f4,a4,c5]", O: "[c5 c4@2 [c5,e5] [c4,e4], a4, f4@4 ~]/5", P: "[a3,f4]/2", Q: "[a3,f4]",
  R: "[c4,e4,g4]", // C
})).s("gm_string_ensemble_2").gain(0.48)

// bass · synth bass 2 · "Base2"
const bass = note(`<
  A B C B D E F B A G A H A G A I A E A E A J A B A J A K L K M N E G O@2 P Q P R P S T U V W X Y@2 Z@2 Y@2 Z AA AB B AC
  AD E G O@2 P Q P R P AE T U V AF AG AH T AF AG AH T AF AG AH T AF AG AH T
>`.pickRestart({
  A: "c2@15 ~", B: "f1@15 ~", C: "c2@5 ~ c2@2 a2@4 g2@4", D: "c2@7 ~@3 d2@4 e2@2", E: "f2@15 ~", F: "c2@9 ~ g1@4 f#1@2",
  G: "f1@15 f1", H: "f1@10 d#2 d2@5", I: "f1@10 d#2 d2@4 ~", J: "f1@13 ~ g1@2", K: "f1@7 ~ f1@3 ~ f1@2 f1@2",
  L: "g1@7 ~ g2@3 ~ g2@3 ~", M: "g1@3 ~ g1@3 ~ g1@3 ~ g1@3 ~", N: "f1@5 a1 b1 c2", O: "[f1@31 ~]/2",
  P: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~", Q: "a1@3 ~ a1@3 ~ g2 a2@3 d2 e2@3", R: "a1@3 ~ a1@3 ~ c3 d3@3 d2 e2@3",
  S: "a1@3 ~ a1@3 ~ a1@3 ~ a1@2 g1@2", T: "f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~", U: "f1@3 ~ f1@3 ~ f1@2 a1@2 c2@2 d2@2",
  V: "f2@3 ~ f1@3 ~ f1@3 ~ f1@3 ~", W: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", X: "c2@3 ~ c2@3 ~ c2@3 ~ d2@3 ~", Y: "f1!4",
  Z: "c2@3 ~ c2@2 c2@2 a2@4 g2@3 ~", AA: "c2@3 ~ c2@2 c2@2 a2@4 g2@4", AB: "g1@15 ~", AC: "g1@8 g2@3 ~ g2@3 ~",
  AD: "f1@5 a1 c2 d2", AE: "a1@3 ~ a1@3 ~ a1@2 a1@4 g1@2", AF: "c2@3 ~ c2@3 ~ c2@3 ~ c2@2 g1@2",
  AG: "f1@3 ~ f1@3 ~ f1@3 ~ f1@2 g1@2", AH: "c2@3 ~ c2@3 ~ c2@2 d2@2 e2@2 c2@2",
})).s("gm_synth_bass_2").gain(0.72)

// chords · synth brass 1 · "synth 22"
const synth_brass_1 = note(`<
  ~@16 A B C D@5 E@4 ~@7 F G H I G I J K ~@19 F G H I G I L M ~@2 A B N ~ A B N ~ A B N ~ A B N ~
>`.pickRestart({
  A: "[e3,g3,c4]@5 [e3,g3,d4]@2 [e3,g3,c4,e4]", // C Em7 C
  B: "[f3,a3,d4]@3 [f3,a3,c4]@2 [f3,a3,c4]@3 [f3,a3,c4]@3 [f3,a3]@2 [f3,a3]@3", C: "[e3,g3]@3 [e3,g3,c4]",
  D: "[[f3,a3] ~@4, c4]/5", E: "c4/4", F: "~@14 g3 a3", G: "e3!2 c3 ~ e3 ~ c3 ~ e3!2 c3 ~ e3 ~ g2 a2",
  H: "e3!2 c3 ~ e3 ~ c3 ~ e3!2 c3 ~ e3 c3!2 e3", I: "e3!2 c3 ~ e3 ~ c3 ~ e3!2 c3 ~ e3 ~ c3!2",
  J: "e3!2 c3 ~ e3 ~ c3 ~ e3!2 c3 ~ e3@2 b2@2", K: "f2", L: "e3!2 c3 ~ e3 ~ c3 ~ e3!2 c3 ~ e3 ~ c3 b2", M: "a2",
  N: "[e3,g3]@15 ~", // Em
})).s("gm_synth_brass_1").gain(0.48)

// chords · piano · "piano2"
const piano = note(`<
  ~@27 A B C B D ~@5 E ~ E ~ F G H G I J K@2 L M K@2 L N O P O P ~@5 E ~ E ~ F G H G ~@2 Q R ~@2 S R ~@2 S R ~@4
>`.pickRestart({
  A: "~@10 [c4,f4,a4]@5 ~", B: "[d4,g4,b4]@11 ~ [d4,g4,b4]@3 ~", C: "[c4,f4,a4]@11 ~ [c4,f4,a4]@3 ~",
  D: "[c4,f4,a4]@15 ~", E: "~ a5, ~@3 a4@5, ~@7 [c5,e5]@9",
  F: "~@4 a5 [c4,e4,a4]@2 [b3,d4,g4], ~@3 a4@2 ~@3, ~@7 [c5,e5]@3 ~@6", G: "[a3,c4,f4]@15 ~",
  H: "~@6 [a3,c4,f4]@2 [a3,c4,f4]@5 ~ [a3,c4,f4]@2", I: "[e4,g4,c5]@2 [e4,g4,c5]@3 ~ [g3,c4,e4]@2 [g3,c4,e4]@7 ~",
  J: "[g3,c4,e4]@5 ~@3 [c4,e4,g4,c5]@4 [d4,e4,g4,d5]@4", // C Em7
  K: "[a4,c5,e5]@3 [a4,c5,e5]@2 [a4,c5,e5]@3 [a4,c5,e5]@3 [a4,c5,e5]@2 [a4,c5,e5]@3", // Am
  L: "[e4,g4,c5,e5]@3 [c4,e4,g4,c5] [c4,e4,g4,c5]@4", M: "[c4,e4,g4]@15 ~",
  N: "[c4,e4,g4]@5 ~ [g3,c4,e4]@2 [g3,c4,e4]@4 [e3,g3,c4]@4", O: "[g3,b3,d4]@15 ~", P: "[f3,a3,c4]@15 ~",
  Q: "~@6 [e3,g3,c4]@2 [e3,g3,c4]@2 [e3,g3,d4]@2 [e3,g3,c4,e4]@3 ~", R: "[f3,a3,c4,f4]@15 ~",
  S: "~@3 [e3,g3,c4]!2 [e3,g3,d4] [e3,g3,c4,e4]@2", // C Em7 C
})).s("gm_piano").gain(0.56)

// drums · kick
const kick = s("bd").struct("x!4").gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  ~@16
  [~ x ~ x]!19
  [~@4 x ~@5 x ~ x ~ x!2]
  [~ x ~ x]!26
  [~@4 x ~@5 x ~ x ~ x!2]
  [~ x ~ x]!25
>`).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  A@3 B A@3 B A@3 B A@3 B A@3 B A B A B A B A B A B A B A@4 C@6 A@21 C@6 A@19
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~@3 x ~ x!3 ~", C: "x!3 ~@3 x ~@3 x ~ x!3 ~",
})).gain(0.56)

stack(string_ensemble_2, bass, synth_brass_1, piano, kick, snare, hihat)