Strudelify
Nothing Compares 2 U cover art

Nothing Compares 2 U

Nothing Compares 2 U

Prince

KeyC majorTempo61 bpm
0:00/0:00
// Nothing Compares 2 U — Prince
// 61 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 79 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(61/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, A@4 for four bars: edit a riff to change every repeat.

// bass · contrabass · "NothingCm"
const bass = note(`<
  A@2 B C D E F C D E B C D E B C D G H@2 I@2 B C D E J@4 B C D E B C D K@2 L@3 B C D E B C D E B C D E B C M@5 N@7 O@2
  P@3 Q R@5
>`.pickRestart({
  A: "[f2@47 ~]/2", B: "f2@23 ~", C: "e2", D: "d2", E: "f1@12 c2@11 ~", F: "f2", G: "a1", H: "d#2@11 ~ a#1@12",
  I: "[c2@47 ~]/2", J: "[f2@23 e2@24 d2@23 ~ a#1@23 ~@2]/4", K: "[a1@23 d#2@11 ~@2 a#1@11 ~]/2",
  L: "[d2@11 ~ c2@54 d2@3 e2@3]/3", M: "[d2@23 a1@21 d2@3 d#2@11 ~ a#1@11 ~ d2@11 ~ c2@33 ~ d2@3]/5",
  N: "[d#2@11 a#1@9 c2@3 d2@11 ~ c2@36 d#2@11 ~ a#1@11 ~ d2@11 ~ c2@33 ~ d2@2 d#2@11 ~@2 a#1@9 c2@2 d2]/7",
  O: "[~@11 c2@33 ~ d2@3]/2", P: "[d#2@11 a#1@9 c2@3 d2@11 ~ c2@36 ~]/3", Q: "d#2@11 ~ a#1@8 c2@3 ~",
  R: "[d2@11 c2@32 ~ d2@3 d#2@11 ~@2 a#1@9 c2@2 d2@11 ~ c2@30 ~@7]/5",
})).s("gm_contrabass").gain(0.13)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A@2 B ~ C D B ~ C D B ~ C D E@4 F@2 G@2 H@3 I J@2 K L M@2 N O@6 P@5 Q@5 R@4 S@5 T@12 U@6 V@3
>`.pickRestart({
  A: "[f4@47 ~]/2", B: "a3@23 ~", C: "[f3,a3]@23 ~", D: "a3@11 ~ g3@11 ~",
  E: "[[a3,f4,a4] [g3,e4,g4] [f3,d4,f4] [e3,g3,c#4,g4], c4@36 e4@11 ~, ~@48 [a3,a4]@47 ~]/4", F: "[a#3@35 ~@13]/2",
  G: "[c4@23 ~]/2", H: "[[a3,f4,a4]@24 [g3,e4,g4]@24 [f3,a3,d4,f4,a4]@23 ~, c4]/3",
  I: "[a3,c4,a4] [g3,a#3,d4,g4,a#4], f4", J: "[[f4,a4]@23 [g3,g4]@22 ~@3, ~@23 e4@24 ~]/2", K: "[d4,f4,a4]@23 ~",
  L: "[f3,a#3,d4,f4]@23 ~", M: "[[a3,f4,a4]@23 ~ [e4,g4]@23 ~, c4@47 ~]/2", N: "[f3,a3,c4,d4,f4,a4]@23 ~",
  O: "[[a3,c4,a4]@11 ~ [g3,a#3,d4,g4]@12 [a3,a4]@23 ~ [g3,e4,g4]@23 ~ d4@24 [c#4,e4]@22 ~@14 [d4,f4,d5]@12, f4@48 ~@23 f4@24 ~ g4@36 ~@12, ~@12 c4@36 ~@11 d#4@6 ~@7, ~@72 a4@46 ~ [a#3,a#4]@24 ~]/6", // Am Gm A C C#m Dm A#
  P: "[[c4,d4,f4,a4,c5]@12 [g3,e4,g4]@59 ~ [a3,f4,a4]@23 ~ [e4,g4]@23 ~, ~@12 c4@107 ~]/5", // Dm7 C Dm Em
  Q: "[[f3,d4,f4,a4]@24 a4@12 [g3,a#3,d4,g4]@12 [a3,a4]@23 ~ [e4,g4]@23 ~ [f3,a3,d4,f4,a4]@23 ~, [a3,c4]@3 ~ c4@6, ~@24 f4@47 ~@49]/5", // Dm Gm A Em Dm Am
  R: "[[a3,a4]@12 [g3,a#3,d4,g4]@12 [a3,a4]@23 ~ [e4,g4]@23 ~ [f3,a3,d4,f4,a4]@23 ~, f4@47 ~@49, ~ c4@3]/4", // A Gm A Em Dm
  S: "[[a3,c4,a4]@11 ~ [g3,a#3,d4,g4]@12 [a3,a4]@24 [g3,e4,g4]@24 [f3,d4,f4]@24 [e3,g3,c#4,e4,g4]@24, f4@2 ~ [a3,a4]@2, ~ c4@3 ~]/5", // Am Gm A C Dm C#dim A
  T: "[d#4@12 d5@12 [a3,a4,c5]@11 ~ [g3,e4]@36 d#4@12 d5@12 [a3,a4,c5]@11 ~ [g3,e4,g4]@36, [a#3,a#4]@23 ~ c4@48 [a#3,a#4]@23 ~ c4@48, ~ [d4,f4]@2 g4@4 [d4,f4]@2 ~@3]/6", // Am C Am C A# Dm
  U: "[d#4 d5 [a3,c4,a4,c5] [g3,c4,e4]@3 d#4 d5 [a3,c4,a4,c5] [g3,c4,e4,g4]@3, [a#3,a#4]@23 ~@49 [a#3,a#4]@23 ~@49, ~ [d4,f4]@2 g4@4 [d4,f4]@2 ~@3]/6", // Am C Am C A# Dm
  V: "[d#4@12 d5@12 [a3,a4,c5]@11 ~ [g3,e4,g4]@35 ~, [a#3,a#4]@23 ~ c4@47 ~, ~ [d4,f4]@2 ~@3]/3", // Am C A# Dm
})).s("gm_string_ensemble_2").gain(0.2).pan(0.4)

// chords · piano
const piano = note(`<
  ~@9 A B C D A B C D E F@2 G ~ B C D A B C D H B C D A B C I E F J ~@2 B C D A B C D K B C D A B C D E F J ~ L M@2 L
  M@2 L M@2 L N@2 L N@2 L N@2
>`.pickRestart({
  A: "[c4,f4,a4]@11 ~ [a#3,d4,f4,g4]@11 ~", B: "[c4,f4,a4]@11 ~@13", C: "[c4,e4,g4]@11 ~@13",
  D: "[c4,d4,f4,a4]@11 ~@13", E: "[g3,c#4,e4]@11 ~@13", F: "[a#4,d#5,g5]@4 ~@2 [a#4,d5,f5]@3 ~@3",
  G: "[g4,c5,e5]@5 ~@7", H: "[d4,f4,a#4]@11 ~@13", I: "a4@5 ~@7, f4 ~@2, c4@5 ~@19",
  J: "[c4,d4,f4,a4]@4 ~@2 [c4,e4,g4]@3 ~@3", K: "[c4,f4,a4]@11 ~ [d4,g4]@11 ~, ~@2 [a#3,f4] ~",
  L: "[d#4,g4,a#4]@12 [d4,f4,a#4]@11 ~", M: "[[d4,f4,a4]@11 ~ [c4,e4,g4]@33 ~@3]/2",
  N: "[[d4,f4,a4]@4 [c4,e4,g4]@11 ~]/2", // Dm C
})).s("gm_piano").gain(0.22).pan(0.7)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@3 B C D A B C D A B C D A B C E F@2 B@2 A B C G A B C H A B C ~ A B C E F I J@2 A B C ~ A B C D A B C ~ A B C E F I
  J F I J F I J F I J F I J F I J F I J
>`.pickRestart({
  A: "[f4,a4] c4 [f4,a4] c4 [f4,a4] c4 [f4,a4] c4", B: "[e4,g4] c4 [e4,g4] c4 [e4,g4] c4 [e4,g4] c4",
  C: "[d4,f4] c4 [d4,f4] c4 [d4,f4] c4 [d4,f4] c4", // Dm
  D: "[f4,a4]@3 c4@3 [f4,a4]@3 c4@3 [d4,f4,g4,a#4]@3 c4@3 [d4,f4,g4,a#4]@2 ~ c4@3", // F Gm7
  E: "[e4,g4]@3 c#4@3 [e4,g4]@3 c#4@3 [e4,g4]@3 c#4@3 [e4,g4]@3 c#4@2 ~", // Em
  F: "[d#4,g4] a#3 [d#4,g4] a#3 [d4,f4] a#3 [d4,f4] a#3", G: "[f4,a4] c4 [f4,a4] c4 [d4,f4] c4 [d4,f4] c4",
  H: "[d4,f4]@3 a#3@3 [d4,f4]@3 a#3@3 [d4,f4]@3 a#3@2 ~ [d4,f4]@3 a#3@2 ~", // Dm
  I: "[d4,f4] a3 [d4,f4] a3 [c4,e4] g3 [c4,e4] g3", J: "[c4,e4]@3 g3@3 [c4,e4]@3 g3@3 [c4,e4]@3 g3@3 [c4,e4]@3 g3@2 ~",
})).s("gm_string_ensemble_1").gain(0.05).pan(0.8)

// other · pad choir
const pad_choir = note("<~@25 A ~@7 A ~@11 A ~@7 A ~@25>".pickRestart({
  A: "~ a3 a#3 c4 g3@2 c4@2",
})).s("gm_pad_choir").gain(0.25)

// other · violin
const violin = note("<~@42 A B C D E F G H@2 ~@28>".pickRestart({
  A: "a4@3 a#4 a4 c5 d5@2", B: "c5@3 d5", C: "a5@12 g5@11 ~", D: "f5 d5", E: "a5@6 g5@6 f5@6 d5@5 ~", F: "c5@2 d5 e5",
  G: "f5", H: "[f5@3 f5@44 ~]/2",
})).s("gm_violin").gain(0.06)

// other · string ensemble 2
const string_ensemble_2_2 = note(`<
  A@2 B@2 C D B@2 C D B@2 C D E@3 F G H I@2 E@3 J E@3 K L@2 M N O@3 F P Q@3 L@2 M N L@2 M N L@2 M N E@3 F P R@2 P R@2 P
  R@2 P R@2 P R@2 P R@2 P R@2
>`.pickRestart({
  A: "[a4@47 ~]/2", B: "[c4@47 ~]/2", C: "c4@23 ~", D: "c4@11 ~ a#3@11 ~", E: "[c5@71 ~]/3", F: "c#5@23 ~",
  G: "d#4@11 ~ d4@11 ~", H: "d#4 [a#3,d4]", I: "[e4@23 ~]/2", J: "c5 ~", K: "a#4@23 ~", L: "[c5@47 ~]/2", M: "c5@23 ~",
  N: "c5@11 ~ a#4@11 ~", O: "[~@47 d5@24 ~, c5@71 ~]/3", P: "d#5 ~", Q: "[d5@6 c5@29 ~]/3", R: "[d5@11 ~ c5@35 ~]/2",
})).s("gm_string_ensemble_2").gain(0.15).pan(0.3)

// other · string ensemble 2
const string_ensemble_2_3 = note(`<
  A@2 B C D E B C D E B C D E F G H ~ I J K@2 B G D E L@3 D B C D E F G M ~ J N@3 B C D E B C D E B C D E F G H ~ J O@2
  J O@2 J O@2 J O@2 J O@2 J O@2 J O@2
>`.pickRestart({
  A: "[[f3,c4]@47 ~]/2", B: "f3@23 ~", C: "[e3,g3]@23 ~", D: "d3@23 ~", E: "~@12 d3@11 ~, f3@23 ~", F: "f3", G: "e3",
  H: "d3", I: "g3@11 ~ f3@11 ~", J: "g3 f3", K: "[g3@23 ~]/2", L: "[[f3,a3]@23 e3@24 ~ [d3,f3,a3]@23 ~, c4@71 ~]/3",
  M: "d3@2 ~ d3@2 ~ d3@2 ~ d3@2 ~ d3@2 ~ d3@2 ~ d3@2 ~ d3@2 ~", N: "[[f3,a3]@6 e3@29 ~]/3", O: "[f3@12 e3@35 ~]/2",
})).s("gm_string_ensemble_2").gain(0.2).pan(0.4)

// chords · string ensemble 1 · F C#dim
const string_ensemble_1_2 = note(`<
  ~@36
  [[f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~@2]
  [[e3,g3,c#4] ~@2 [e3,g3,c#4] ~@2 [e3,g3,c#4] ~@2 [e3,g3,c#4] ~@2 [e3,g3,c#4] ~@2 [e3,g3,c#4] ~@2 [e3,g3,c#4] ~@2 [e3,g3,c#4] ~@2]
  ~@41
>`).s("gm_string_ensemble_1").gain(0.17).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@14 A@3 B A@3 C A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@21
>`.pickRestart({
  A: "x ~@10 x ~@3 x ~@8", B: "x ~@10 x ~@3 x ~@5 x ~@2", C: "x ~@4 x ~@9 x ~@5 x ~@2",
})).gain(0.48)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@16 A ~@3 A B ~@2 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 A ~@2 A ~@2 A ~@2 A ~@2 A ~@3
>`.pickRestart({
  A: "~@23 x", B: "~@11 x ~@12",
})).gain(0.18)

// drums · snare
const snare = s("sd").struct("<~@14 [~ x ~ x]!7 [~ x!3] [~ x ~ x]!57>").gain(0.42)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@17 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@21
>`.pickRestart({
  A: "~@5 x",
})).gain(0.18)

// drums · hihat
const hihat = s("hh").struct("<~@14 [x!4]!65>").gain(0.3)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@14 [~ x ~ x ~ x ~ x]!65>").gain(0.12)

// drums · crash
const crash = s("cr").struct("<~@30 x ~@11 x ~@7 x ~@28>").gain(0.42)

stack(
  bass, string_ensemble_2, piano, string_ensemble_1, pad_choir, violin, string_ensemble_2_2, string_ensemble_2_3,
  string_ensemble_1_2, kick, kick_soft, snare, snare_soft, hihat, hihat_soft, crash
)

More by Prince