Strudelify
Kiss Kiss cover art

1986 · Parade - Music from the Motion Picture Under the Cherry Moon

Kiss Kiss

Prince

KeyC majorTempo112 bpm
0:00/0:00
// Kiss Kiss — Prince
// 112 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// other · clavinet
const clavinet = note("<~@24 A B C ~@9 D ~ E ~@14 F G H I ~@2 J ~ K L ~@4 M N O ~@2 P ~@8 D ~ E ~@16>".pickRestart({
  A: "[a#2,a#3]@2 ~ [a2,a3] ~@10 [a#2,a#3] ~", B: "[a#2,a#3]@3 [a2,a3] ~@12",
  C: "[a#2,a#3]@3 [a2,a3] ~@10 c3@2, ~@14 c4 ~", D: "~@10 [d#2,d#3]@3 ~@3", E: "~@12 [d#2,d#3]@3 ~",
  F: "[a#2,a#3] [a2,a3] [a#2,a#3] [a2,a3] [a#2,a#3] [a2,a3] [a#2,a#3] [a2,a3] [a#2,a#3] [a2,a3] [a#2,a#3] [a2,a3] [a#2,a#3] [a2,a3] [a#2,a#3] [a2,a3]", // A# A A# A A# A A# A …
  G: "[a#2,a#3] [a2,a3] ~ a3@2 ~@9 [a#2,a#3] ~, ~@3 a2 ~@12", H: "[a#2,a#3] [a2,a3] ~ [a2,a3] ~@10 [f2,f3] ~",
  I: "[f2,f3] [e2,e3] ~ [e2,e3] ~@8 [c3,g3,c4]@2 ~@2", J: "~@2 [a#2,a#3] ~@3 [a#2,a#3] ~", K: "[d#2,d#3]",
  L: "[c3,c4] [f#2,f#3]@5 ~@2", M: "c1@6 d1 ~ d#1@2 ~@2 c1 ~@3", N: "f#1", O: "~@6 c3 c2", P: "a#2 ~@3",
})).s("gm_clavinet").gain(0.32).pan(0.2)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B A B A B A B C D C D A B A B E@2 C F E G C H ~@4 A B A B A B A B C D C D A B A B E@2 C F E G C H ~@5 I J K L M@2
  N@2 O P Q R S@3 T A B A B A B A B C D C D A B A B E@2 C F E G C H ~@3
>`.pickRestart({
  A: "c2 ~@2 c2 ~@4", B: "c2 ~@2 a#1 ~@4", C: "f2 ~@2 f2 ~@4", D: "f2 ~@2 d#2 ~@4", E: "g2 ~@2 g2 ~@4",
  F: "f2@2 ~@4 d#2@3 ~@7", G: "g2 ~@2 f2 ~@4", H: "g2 ~@7", I: "c3@3 ~@5 c3@2 ~@6", J: "c3@2 a#2@2 a2@2 g2@2 c3@3 ~@5",
  K: "a#2 ~@3 a#2 ~@3", L: "c3@5 ~@11", M: "[c3@2 ~@2 c3@2 ~@2 a#2@2 a2@2 ~@2 g2@4 ~@2 f2@2 g2 ~ a#2@4 g2@2 ~@2]/2",
  N: "[c3@2 ~@2 c3 ~@3 d3@2 a#2@2 ~@2 g2@14 ~@4]/2", O: "c3@4 g3@3 f3", P: "g3@15 ~", Q: "c4 g4", R: "f#5",
  S: "c3 ~ c3@2 d3@2 d3@2 d#3@2 d#3@2 f3@2 d#3@2", T: "c3@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.8)

// other · piano · "A.PIANO"
const piano = note("<~@72 A B C B C B C B C D E D E B C B C F@2 D G F H D I ~@3>".pickRestart({
  A: "~@4 a#2!2 b2 ~", B: "c3 ~@2 c3 ~@4", C: "c3 ~@2 a#2 ~@4", D: "f3 ~@2 f3 ~@4", E: "f3 ~@2 d#3 ~@4",
  F: "g3 ~@2 g3 ~@4", G: "f3@2 ~@4 d#3@3 ~@7", H: "g3 ~@2 f3 ~@4", I: "g3 ~@7",
})).s("gm_piano").gain(0.6)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@35 A ~@4 B C ~@2 D@2 E F G H E I ~@12 J ~@4 K@4 ~@6 L@2 ~@7 M N@2 O@2 P@2 Q R@4
>`.pickRestart({
  A: "~ [e3,a#3] ~ [e3,a#3] ~@4", B: "~@5 [e3,a#3] ~@2", C: "[e3,a#3] ~@7", D: "[g3,d4,g4] ~@2 [g3,d4,g4] ~@4",
  E: "[f3,c4,f4] ~@5 [f3,c4,f4]@2 ~@8", F: "[f3,c4,f4] ~@2 [d#3,c4,f4] ~@4", G: "[g3,d4,g4] ~@5 [g3,d4,g4] ~@9",
  H: "[g3,d4,g4] ~@5 [f3,d4,g4]@2 ~@8", I: "[g3,d4,g4] ~@7", J: "~@8 [f#4,a4] ~ c4 ~ c4@3 ~, ~@8 c5@7 ~, ~@9 g4@2 ~@5",
  K: "[~@2 c4@2 ~ g4 ~@8 [g4,c5]@4 c4@2 ~ g4 ~@8 [g4,c5]@4 c4@2 ~ g4 ~@4 c4@3 ~@3 [g4,c5]@2 ~@14, ~@4 [f#4,c5]@2 c4@3 ~ c4@7 ~@5 c4@3 ~ c4@7 ~@5 c4@3 ~@5 c4@4 ~@14, ~@7 [g4,c5]@6 ~@7 [f#4,c5]@2 ~ [g4,c5]@6 ~@7 [f#4,c5]@2 ~ [g4,c5]@8 ~@17]/4", // C5 F#dim C5 F#dim C5 F#dim C5
  L: "[[c4,f#4,c5] c4 [c4,c5]!4 c5 [c4,c5] c4 [c4,c5] c5!3 [c4,c5]!2 c4 [c4,c5] c5 [c4,c5] c4 [c4,c5] c5 [c4,c5]!2 c4 c5 [c4,c5] c4 [c4,c5]!2 c5 c4, g4]/2", // Cdim C
  M: "[g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5]@2 [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~", // C5
  N: "[g2@2 g3@2 [f4,b4,d5] ~ f4 ~ [f4,b4,d5] ~ [f4,b4,d5]@2 g3 ~ f4@2 ~@2 f4 ~ [f4,b4,d5]@2 [g3,f4]@2 [f4,b4,d5] ~ [f4,b4,d5]@2 [g2,f4]@2 [f3,f4,b4,d5]@2, ~@6 g2@5 ~@3 [b4,d5]@4 ~@14, ~@14 g3 ~ g2@4 ~@12]/2", // Bdim G7 Bdim G7 Bdim Bm
  O: "[f2@2 c4 ~ [d#4,a4,c5]@2 [f3,c4]@2 [d#4,a4,c5] ~ [d#4,a4,c5]@2 f2 ~ f2 ~ f3@2 c4 ~ [d#4,a4,c5]@2 [f2,c4]@2 [d#4,a4,c5] ~ [d#4,a4,c5]@2 f3@2 [d#4,a4,c5]@2, ~@7 [d#4,a4,c5]@2 ~@7]/2", // Adim F5 Adim F5 Adim
  P: "[~@2 d4 ~ [f4,b4,d5]@2 [g3,d4]@2 [f4,b4,d5] ~ [f4,b4,d5]@2 ~@4 g3@2 d4 ~ [f4,b4,d5]@2 ~@2 [f4,b4,d5] ~@3 g3@2 c4 ~, g2@6 ~@6 g2@4 ~@6 g2@5 ~@5, ~@7 [f4,b4,d5]@2 ~@4 [f4,b4,d5]@2 ~]/2", // Bdim G5 Bdim
  Q: "[d#4,a4,c5]@2 f3@2 ~@2 [d#4,a4,c5]@4 f3@2 [d#4,a4,c5] ~@3, ~@2 f2@5 ~", // Adim
  R: "[[f#5,c6] ~ c6 [f#5,c6]!3 f#5 [f#5,c6]!4 c6 [f#5,c6]!4 f#5 [f#5,c6]!2 c6 [f#5,c6] c6 [f#5,c6] c6!2 ~ c6!6 ~@2 c6 ~@29, [c2,c3,c5]@7 ~]/4", // F#dim C
})).s("gm_overdriven_guitar").gain(0.32).pan(0.2)

// chords · overdriven guitar · "OVERDRIVE" · soft notes
const overdriven_guitar_soft = note("<~@70 A@2 ~@7 B C ~@7 D ~@7 E F G@2>".pickRestart({
  A: "~@2 a4 ~@5", B: "~@10 c4!2 ~@4", C: "~@15 c5", D: "c4 ~@15", E: "~@2 f#5 ~@13", F: "~@3 f#5 ~@3 f#5!5 ~ f#5!3",
  G: "[f#5 [f#5,c6] ~ [f#5,c6]!2 f#5 ~ c6!2 ~ c6@14 ~@8, ~@6 [f#5,c6]@2 ~ f#5@15 ~@8]/2", // F#dim
})).s("gm_overdriven_guitar").gain(0.2).pan(0.2)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_2 = note(`<
  ~@8 A@2 B@2 C@4 D@2 E@2 F@2 G ~ H@3 ~@9 A@2 B@2 C@4 D@2 E@2 F@2 G ~@18 I@3 J ~@8 B@4 C@2 K@2 D@2 E@2 F@2 L M@3 ~
>`.pickRestart({
  A: "[[c3,a3,c4], g#3 ~@31]/2", B: "[[c3,a3,c4]@31 ~, g#3 ~@31]/2", C: "[[c3,g3,c4], f#3 ~@31]/2",
  D: "[[f3,b3,d4]@31 ~]/2", E: "[[d#3,a3,c4]@31 ~]/2", F: "[f3,b3,d4]/2", G: "[d#3,a3,c4]@15 ~",
  H: "[[g3,a#3] g3 a#3 g3 [g3,a#3]!2 a#3 g3 [g3,a#3] a#3 [g3,a#3] g3 [g3,a#3] a#3 g3 [g3,a#3] a#3 g3 [g3,a#3] a#3 g3 [g3,a#3] a#3 [g3,a#3] g3 [g3,a#3] a#3 g3 [g3,a#3] a#3 [g3,a#3] g3 a#3 [g3,a#3] g3 a#3 [g3,a#3] g3 [g3,a#3] a#3 g3 a#3 [g3,a#3] g3 a#3 [g3,a#3] ~ [c3,g3,c4], c3@23 ~]/3", // Gm C5
  I: "[[c4,g4,c5]@47 ~, f#4 ~@47]/3", J: "[c4,g4,c5] ~@7", K: "[[c3,g3,c4]@31 ~, f#3 ~@31]/2",
  L: "~ d#3@15, [a3,c4]@15 ~", M: "[[c3,g3,c4]@11 ~]/3",
})).s("gm_overdriven_guitar").gain(0.28).pan(0.9)

// chords · synth brass 1 · "SYNTHBRASS"
const synth_brass_1 = note(`<
  ~@16 A@2 B C A@2 D E ~@20 A@2 B F A@2 D G ~@5 H I J K ~@28 A@2 D L A@2 D G ~@3
>`.pickRestart({
  A: "[d4,f4,b4] ~@5 [d4,f4,b4] ~@9", B: "[d#4,a4] ~@5 [c4,d#4,a4] ~@9, c4 ~@7",
  C: "[c4,d#4] ~@2 [c4,a4] ~@4, a4 ~@5 d#4 ~@9", D: "[c4,d#4,a4] ~@5 [c4,d#4,a4] ~@9", E: "[d4,f4] ~@15, b4 ~@7",
  F: "[d#4,a4] ~@5 [c4,a4]@2 ~@8, c4@2 ~@4 d#4 ~@9", G: "[d4,f4,b4] ~@15", H: "[c3,g3,c4] ~@3 [c3,g3,c4] ~@3",
  I: "[c3,g3,c4] ~@3 [c3,g3,c4]@2 ~@2", J: "[a#2,f3,a#3]@3 ~@5 [a#2,f3,a#3]@2 ~@6", K: "[c3,g3,c4]@5 ~@11",
  L: "[c4,d#4,a4] ~@5 [c4,a4]@2 ~@8, ~@6 d#4 ~@9", // Adim F
})).s("gm_synth_brass_1").gain(0.32)

// other · baritone sax · "BARITONSAX"
const baritone_sax = note(`<
  ~@15 A B C D A E F G ~ H I J ~@9 K ~ L ~@4 A B C G A E F G ~@2 M N O P ~@2 Q ~ R S ~@4 T U V@2 ~ W ~@8 K ~ L ~@4 A B C
  D A E F G ~@4
>`.pickRestart({
  A: "~@7 f#2", B: "g2 ~@5 g2 ~@9", C: "~@6 g2 f#2 g2 ~@5 g2 f#2", D: "f2 ~@15", E: "g2 ~@15",
  F: "~@10 g2 f#2 g2 ~ g2 f#2", G: "f2 ~@7", H: "a#2@3 a2 ~@10 a#2 ~", I: "a#2@3 a2 ~@12", J: "a#2@3 a2 ~@10 c3@2",
  K: "~@10 [d#4,d#5]@3 ~@3", L: "~@12 [d#4,d#5]@3 ~", M: "a#2 a2 a#2 a2 a#2 a2 a#2 a2 a#2 a2 a#2 a2 a#2 a2 a#2 a2",
  N: "a#2 a2 ~ a2 ~@12", O: "~@8 a#2 a2 ~ a2 ~@4", P: "~@6 f2 e2 ~ e2 ~@6", Q: "~@2 a#2 ~@3 a#2 ~", R: "d#4",
  S: "c5@2 f#4@11 ~@3", T: "c3@6 d3 ~ d#3 ~@3 c3 ~@3", U: "f#3", V: "[~@6 c5 c4@2 ~@7]/2", W: "a#3@3 ~@13",
})).s("gm_baritone_sax").gain(0.54).pan(0.6)

// other · french horn · "FR.HORN"
const french_horn = note("<~@42 A@2 ~@6 B@2 ~@15 C D E ~@2 F ~@14 A@2 ~@6 G@4 ~>".pickRestart({
  A: "[a#4@7 ~]/2", B: "[~@7 a#4@7 ~@2]/2", C: "c4@6 d4@2 d#4 ~@3 c4@2 ~@2", D: "f#4@15 ~", E: "~@6 c6 c5",
  F: "a#5 ~@3", G: "[~@14 a#4@41 ~@9]/4",
})).s("gm_french_horn").gain(0.6)

// bass · synth bass 1 · "SYNTH BASS"
const bass_2 = note("<~@27 A B@8 C@4 B@4 ~@13 D E F G H@2 I@2 J K L M N@3 O B@8 C@4 B@4 ~@11>".pickRestart({
  A: "~@12 a#2!2 b2!2", B: "c3!2 a#2 ~ a2 ~ a2 ~ g2 ~ g2 ~@5", C: "f3!2 d#3 ~ d3 ~ d3 ~ c3 ~ c3 ~@5",
  D: "c3@3 ~@5 c3@2 ~@6", E: "c3@2 a#2@2 a2@2 g2@2 c3@3 ~@5", F: "a#2 ~@3 a#2 ~@3", G: "c3@5 ~@11",
  H: "[c3@2 ~@2 c3@2 ~@2 a#2@2 a2@2 ~@2 g2@4 ~@2 f2@2 g2 ~ a#2@4 g2@2 ~@2]/2",
  I: "[c3@2 ~@2 c3 ~@3 d3@2 a#2@2 ~@2 g2@14 ~@4]/2", J: "c3@4 g3@3 f3", K: "g3@15 ~", L: "c4 g4", M: "f#5",
  N: "c3 ~ c3@2 d3 ~ d3@2 d#3@2 d#3@2 f3@2 d#3@2", O: "c3@3 ~@13",
})).s("gm_synth_bass_1").gain(0.4).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  A@23 B A@2 C ~ D@23 B@2 A@5 E F G A E F G A E F G A E F B@10 H B H B H B H B H B H B H B@2 ~@3
>`.pickRestart({
  A: "x!2", B: "x", C: "x ~@3 x ~@2 x", D: "x ~@2 x ~@4", E: "x ~@3 x!4", F: "x ~@3 x!2 ~@2",
  G: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~ x ~", H: "x ~@4 x ~ x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<A@23 B A@2 C ~ A@23 B@2 A@19 B A@23 B ~@3>".pickRestart({
  A: "~ x ~ x", B: "x", C: "~@2 x ~@3 x!2",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<A@23 B A C@2 ~ D@22 E F B G@19 B ~@23 B ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x", C: "x!3 ~ x ~ x ~@3 x ~@3 x ~", D: "x!8", E: "~ x!7", F: "x!5 ~@3",
  G: "x ~ x ~@2 x!2 ~ x ~ x ~@2 x!2 ~",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@53 [~ x ~ x]!19 ~@28>").gain(0.4)

stack(
  clavinet, bass, piano, overdriven_guitar, overdriven_guitar_soft, overdriven_guitar_2, synth_brass_1, baritone_sax,
  french_horn, bass_2, kick, snare, hihat, open_hat
)

More by Prince