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: edit a riff to change every repeat.

// bass · contrabass · "NothingCm"
const bass = note(`<
  A@2 B C D E F C D G B C D E B H D I J@2 K@2 F C D L M@4 B C D G B H D N@2 O@3 B C D E B C D G B C D G B H P@5 Q@7 R@2
  S@3 T U@5
>`.pickRestart({
  A: "[f2@47 ~]/2", B: "f2@23 ~", C: "e2", D: "d2", E: "f1 c2", F: "f2", G: "f1@12 c2@11 ~", H: "e2@23 ~", I: "a1",
  J: "d#2@11 ~ a#1@12", K: "[c2@47 ~]/2", L: "f1@11 ~ c2@11 ~", M: "[f2@23 e2@24 d2@23 ~ a#1@23 ~@2]/4",
  N: "[a1@23 d#2@11 ~@2 a#1@11 ~]/2", O: "[d2@11 ~ c2@54 d2@3 e2@3]/3",
  P: "[d2@23 a1@21 d2@3 d#2@11 ~ a#1@11 ~ d2@11 ~ c2@33 ~ d2@3]/5",
  Q: "[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",
  R: "[~@11 c2@33 ~ d2@2 ~]/2", S: "[d#2@11 a#1@9 c2@3 d2@11 ~ c2@35 ~@2]/3", T: "d#2@11 ~ a#1@8 c2@3 ~",
  U: "[d2@11 c2@32 ~ d2@3 d#2@12 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@6 U@6 V@6 W@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] [g3,e4,g4] [f3,a3,d4,f4,a4], c4@71 ~]/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, ~@24 c4@71 ~]/4", // A Gm A Em Dm
  S: "[[a3,c4,a4] [g3,a#3,d4,g4] [a3,a4]@2 [g3,e4,g4]@2 [f3,d4,f4]@2 [e3,g3,c#4,e4,g4]@2, 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, ~@12 [d4,f4]@24 g4@48 [d4,f4]@23 ~@37]/6", // Am C Am C A# Dm
  U: "[d#4@12 d5@12 [a3,a4,c5]@12 [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
  V: "[d#4@12 d5@12 [a3,c4,a4,c5]@12 [g3,c4,e4]@36 d#4@12 d5@12 [a3,c4,a4,c5]@11 ~ [g3,c4,e4,g4]@36, [a#3,a#4]@24 ~@48 [a#3,a#4]@23 ~@49, ~ [d4,f4]@2 g4@4 [d4,f4]@2 ~@3]/6", // Am C Am C A# Dm
  W: "[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 B C D E F C D E F C D E F C D E G H@2 D I C D J K C L M N C D M ~ C D E G H O P Q C D E ~ C D E F C D E ~ C D E G H
  O Q H O Q H O Q H O Q H O Q H O Q H O Q
>`.pickRestart({
  A: "[f4,a4]@3 c4@3 [f4,a4]@2 ~ c4@3 [f4,a4]@3 c4@3 [f4,a4]@3 c4@3", // F
  B: "[f4,a4]@3 c4@3 [f4,a4]@3 c4@3 [f4,a4]@3 c4@2 ~ [f4,a4]@2 ~ c4@3", // F
  C: "[f4,a4] c4 [f4,a4] c4 [f4,a4] c4 [f4,a4] c4", D: "[e4,g4] c4 [e4,g4] c4 [e4,g4] c4 [e4,g4] c4",
  E: "[d4,f4] c4 [d4,f4] c4 [d4,f4] c4 [d4,f4] c4", // Dm
  F: "[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
  G: "[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
  H: "[d#4,g4] a#3 [d#4,g4] a#3 [d4,f4] a#3 [d4,f4] a#3", // D# Dm
  I: "[e4,g4]@2 ~ c4@3 [e4,g4]@3 c4@3 [e4,g4]@2 ~ c4@3 [e4,g4]@3 c4@2 ~", // Em
  J: "[d4,f4]@3 c4@3 [d4,f4]@3 c4@2 ~ [d4,f4]@3 c4@3 [d4,f4]@3 c4@3", K: "[f4,a4] c4 [f4,a4] c4 [d4,f4] c4 [d4,f4] c4",
  L: "[e4,g4]@3 c4@3 [e4,g4]@3 c4@3 [e4,g4]@3 c4@3 [e4,g4]@3 c4@2 ~", // Em
  M: "[d4,f4]@3 c4@3 [d4,f4]@3 c4@3 [d4,f4]@3 c4@3 [d4,f4]@3 c4@2 ~", // Dm
  N: "[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
  O: "[d4,f4] a3 [d4,f4] a3 [c4,e4] g3 [c4,e4] g3", P: "[c4,e4] g3 [c4,e4] g3 [c4,e4] g3 [c4,e4] g3",
  Q: "[c4,e4]@3 g3@3 [c4,e4]@3 g3@3 [c4,e4]@3 g3@3 [c4,e4]@3 g3@2 ~", // C
})).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 J@3 K J@3 L M@2 N O P@3 F Q R@3 M@2 N O M@2 N O M@2 N O E@3 F Q S@2 Q S@2 Q
  S@2 Q S@2 Q S@2 Q S@2 Q S@2
>`.pickRestart({
  A: "[a4@47 ~]/2", B: "[c4@47 ~]/2", C: "c4@23 ~", D: "c4@11 ~ a#3@11 ~", E: "c5/3", F: "c#5@23 ~",
  G: "d#4@11 ~ d4@11 ~", H: "d#4 [a#3,d4]", I: "[e4@23 ~]/2", J: "[c5@71 ~]/3", K: "c5 ~", L: "a#4@23 ~",
  M: "[c5@47 ~]/2", N: "c5@23 ~", O: "c5@11 ~ a#4@11 ~", P: "[~@47 d5@24 ~, c5@71 ~]/3", Q: "d#5 ~",
  R: "[d5@6 c5@29 ~]/3", S: "[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@2 J@2 F G H K L@3 D B C D E F G M ~ N O@3 B C D E B C D E B C D E F G H ~ N P@2
  N P@2 N P@2 N P@2 N P@2 N P@2 N P@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@23 ~]/2", K: "~ d3, f3", 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: "g3 f3", O: "[[f3,a3]@6 e3@29 ~]/3",
  P: "[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