Strudelify

Take Me With U

Prince

KeyA majorTempo120 bpm
0:00/0:00
// Take Me With U — Prince
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 147 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · pad poly · "Moog"
const pad_poly = note(`<
  [f4 ~ b4 ~ c5 ~ e5 ~ f4 ~ b4 ~ c5 ~ e5 ~]!7
  [f#4 ~ b4 ~ c#5 ~ e5 ~ f#4 ~ b4 ~ c#5 ~ e5 ~]
  ~@90
  [f4 ~ b4 ~ c5 ~ e5 ~ f4 ~ b4 ~ c5 ~ e5 ~]!7
  [f#4 ~ b4 ~ c#5 ~ e5 ~ f#4 ~ b4 ~ c#5 ~ e5 ~]
  ~@41
>`).s("gm_pad_poly").gain(0.51).pan(0.1)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A@2 B@2 C@2 D E@16 F@2 G@2 E@2 H E@9 F@2 G@2 E@2 H E I@2 E@2 I@2 E@2 F G J@2 I K E@10 F@2 G@2 E@2 H E F@2 G@2 E@2 H
  E H E H E H E@5 ~ A@2 B@2 C@2 D E@32 L ~@8
>`.pickRestart({
  A: "[[f1,f2]@29 ~@3]/2", B: "[[d1,d2]@29 ~@3]/2", C: "[[g1,g2]@15 ~]/2", D: "[a1,a2]@7 ~",
  E: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", F: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  G: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", H: "f#1@3 ~ g1@3 ~ e1@3 ~ a1@3 ~",
  I: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~", J: "f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~",
  K: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", L: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~@3",
})).s("gm_electric_bass_finger").gain(0.51)

// bass · electric bass finger · "Bass" · soft notes
const bass_soft = note("<~@138 [~@14 a1 ~] [a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~]!7 ~>")
  .s("gm_electric_bass_finger").gain(0.2)

// chords · synth strings 1 · "Strings"
const synth_strings_1 = note(`<
  ~@8 A B A ~ A B A ~ C D C E C D C E F G F H C D I J C D C E C D C E F G F H C D I J K@2 A B K@2 A B L M N O L M C E C
  D C E C D C E F G F H C D I E F G F H C D I J I J I J I ~ A B A E ~@8 A B A E A B A E A B A ~ A B A ~ A B A ~ A B A ~
  A B A ~ A B A ~ A ~@8
>`.pickRestart({
  A: "~@4 [f#4,a4,c#5] ~ [f#4,a4,c#5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~@5", // F#m G
  B: "[a4,c#5,e5] ~ [a4,c#5,e5] ~@3 [g4,b4,d5]@3 ~@7", // A G
  C: "~@4 [f#3,a3,c#4] ~ [f#3,a3,c#4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~@5", // F#m G
  D: "[a3,c#4,e4] ~ [a3,c#4,e4] ~@3 [g3,b3,d4]@3 ~@7", E: "~@4 e5 d5 c#5 b4 c#5 ~ f#5 ~ b5@3 ~",
  F: "~@4 [a3,d4] ~ [a3,d4] ~ [b3,e4] ~ [b3,e4] ~@5", G: "[d4,f#4] ~ [d4,f#4] ~@3 [b3,e4]@3 ~@7",
  H: "[b3,d4,g#4]@3 ~ [c#4,a4]@3 ~ [e4,e5]@3 ~ [c#4,c#5]@3 ~", // G#dim F#m E C#
  I: "[a3,c#4,e4]@3 ~ [d4,e4,a4]@3 ~ [g#3,c#4]@3 ~ [a3,c#4,e4]@3 ~", J: "~@6 [a3,e4] ~ [a3,e4] ~ [a3,e4] ~@5",
  K: "[e3,f3,a3,c4] ~ [e3,f3]@2 ~@12, ~@2 [a3,c4] ~@13", L: "[c4,d4,g4]@11 ~@5", M: "[d4,e4,a4]@11 ~@5",
  N: "~@4 [e3,a3] ~ [e3,a3] ~ [f#3,b3] ~ [f#3,b3] ~@5", O: "[a3,c#4] ~ [a3,c#4] ~@3 [b3,e4]@3 ~@7",
})).s("gm_synth_strings_1").gain(0.51).pan(0.1)

// chords · synth strings 1 · "Strings" · soft notes · A G F#m G F#m G A G …
const synth_strings_1_soft = note(`<
  ~@139
  [[a4,c#5,e5] ~ [a4,c#5,e5] ~@3 [g4,b4,d5]@3 ~@7]
  [~@4 [f#4,a4,c#5] ~ [f#4,a4,c#5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~@5]
  [~@4 e5 d5 c#5 b4 c#5 ~ f#5 ~ b5@3 ~]
  [~@4 [f#4,a4,c#5] ~ [f#4,a4,c#5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~@5]
  [[a4,c#5,e5] ~ [a4,c#5,e5] ~@3 [g4,b4,d5]@3 ~@7]
  [~@4 [f#4,a4,c#5] ~ [f#4,a4,c#5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~@5]
  ~@2
>`).s("gm_synth_strings_1").gain(0.2).pan(0.1)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@19 A ~@3 A ~@3 B ~@2 C ~@4 A ~@3 A ~@3 B ~@2 C ~@9 D E ~@2 D E ~ F ~@3 A ~@3 A ~@3 B ~@2 C A ~@3 B ~@2 C ~ C ~ C ~ C
  ~@4 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5
>`.pickRestart({
  A: "~@4 e5 d5 c#5 b4 c#5 ~ f#5 ~ b5@3 ~", B: "[b3,d4,g#4]@3 ~ [c#4,a4]@3 ~ [e4,e5]@3 ~ [c#4,c#5]@3 ~",
  C: "[a3,c#4,e4]@3 ~ [d4,e4,a4]@3 ~ [g#3,c#4]@3 ~ [a3,c#4,e4]@3 ~", D: "[c4,d4,g4]@11 ~@5", E: "[d4,e4,a4]@11 ~@5",
  F: "~@4 e5 d#5 c#5 b4 c#5 ~ f#5 ~ b5@3 ~",
})).s("gm_string_ensemble_1").gain(0.51).pan(0.9)

// other · electric guitar muted · "Guitar"
const electric_guitar_muted = note("<~@11 A ~@3 A ~@93 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@9>".pickRestart({
  A: "~@6 e3!2 f#3 a3!2 f#3 a3@3 ~",
})).s("gm_electric_guitar_muted").gain(0.51).pan(1)

// other · electric guitar muted · "Guitar" · soft notes
const electric_guitar_muted_2 = note("<~@141 [~@6 e3!2 f#3 a3!2 f#3 a3@3 ~] ~@3 [~@6 e3!2 f#3 a3!2 f#3 a3@3 ~] ~>")
  .s("gm_electric_guitar_muted").gain(0.2).pan(1)

// other · tinkle bell · "Bell"
const tinkle_bell = note("<~ A ~ B@2 C@2 D ~@91 E@2 F@2 G ~ H ~@41>".pickRestart({
  A: "f6@15 ~", B: "[d6@7 ~]/2", C: "[g6@15 ~]/2", D: "a6@7 ~", E: "[f6@15 ~]/2", F: "[d6@29 ~@3]/2", G: "g6",
  H: "a6@13 ~@3",
})).s("gm_tinkle_bell").gain(0.51)

// other · overdriven guitar · "Solo a la O(+>"
const overdriven_guitar = note("<~@114 A@2 B@2 C D E F G@2 H@2 I J@2 K L M N O P Q R@2 S T U V ~@5>".pickRestart({
  A: "[a3@20 ~ a3@2 e4@3 ~@4 e4@2, ~@26 a4@5 ~, ~@29 a3@2 ~]/2",
  B: "[~@2 a3@2 e4@2 a4@5 ~@5 d4@2 e4@2 d4 ~ c#4@2 b3@2 a3@2 b3@2 a3@2, a4@4 ~@7 g4@2 e4@4 ~@15, ~@12 f#4@2 ~ f#4@2 ~@15]/2",
  C: "~@8 d3 ~ f#3@2 e3@2 d3@2", D: "[e3,f#3]@2 d3@2 c#3@2 a2@2 a3 ~ g3 ~@5",
  E: "a5@4 g5@2 f#5@2 [e5,f#5] ~ [d5,d#5] ~ d5@2 e5 ~, ~@9 e5@2 ~@5", F: "~@2 g4@7 ~ c#5@2 ~ [b4,c#5] c5 a4, ~@6 a4 ~",
  G: "[g5 ~ a4@2 e5@2 a5@3 ~@7 e5@2 a5@4 g5@2 [e5,f#5] f#5 e5 ~ c#5@4, a5 ~@2 a5 ~@4, ~@14 a4@4 ~@9 d5@2 ~@3]/2", // Esus2
  H: "[a4@2 b4@2 c#5 b4 a4 ~ g4 ~ f#4 ~ [g4,a4]@2 f#4@3 d4@3 ~ g4@3 ~ f#4@2 ~@5, ~@10 f#4 ~ e4 ~@3]/2", // Gsus2
  I: "~@2 e3@2 f#3 g3 ~@2", J: "[e3@4 f#3@2 g3@14 e3 ~ e3@2 g3 ~ g3@4 ~@2]/2", K: "e3@4 f#3@2 g3@5 ~ g3@2 ~@2",
  L: "a3@3 ~ a3@5 ~ a3@3 ~ a3@2", M: "f#4@2 e4@2 d4@2 [e4,f#4] d4 c#4@2 a3@2 c#4@2 e4@2",
  N: "a4@4 e4@2 ~@2 a3@2 e4 ~ a4@4, ~@3 a4@2 ~@3", O: "~ g4 ~ d4 ~ f#4@2 e4, ~@4 f#4@3 ~ g4@6 ~@2, ~@5 e4@2 ~@9",
  P: "d4@2 a4 ~ [g4,a4] ~ c#5@4 a4 ~ b4@2 a4@2, ~@11 c#5@2 ~@3", Q: "d5@2 c#5@2 a4 c#5 ~ f#5 ~ a4@2 ~@5, ~@3 a4 ~@4",
  R: "[d5@4 ~ e5@2 ~ c#5@2 b4@2 ~ d5 c#5 ~ a4@2 g4@2 f#4@2 [e4,f#4] ~@2 e4@2 ~ d4@2 ~@2, ~@4 f#5@2 ~ d5@2 ~@3 c#5@2 ~ b4@2 ~@7 d4@2 ~@6]/2", // Esus2
  S: "a4@4 a5@6 a5@3 ~ a5 ~", T: "a5@4 g#5@2 f#5@4 e5@2 f#5 [e5,f#5]@2 ~", U: "d5@4 c#5@7 a4@3 c#5@2", V: "b4 ~@7",
})).s("gm_overdriven_guitar").gain(0.36)

// other · overdriven guitar · "Solo a la O(+>" · soft notes
const overdriven_guitar_soft = note("<~@115 A B C ~@4 D@2 ~@8 E F G ~@6 H@2 I J K L>".pickRestart({
  A: "~@6 c#4@3 ~@5 c#4@2", B: "~@3 c#4@2 ~@11", C: "~@13 c#4 ~@2",
  D: "[~@3 c#5 d#5@2 ~ a4@2 ~ e5@3 ~@2 c#5@3 ~@14, ~@9 c#5@3 ~@20]/2", E: "~@3 c#4@2 ~@4 c#4@2 ~@5, ~ a3 ~@6",
  F: "~@8 e4 ~@7", G: "f#4 ~@15",
  H: "[~@2 a4@2 b4@2 ~@4 a4@2 ~ d5@2 ~ a4@2 f5@2 a4@2 [d5,e5]@2 a4@2 c#5@2 a4 d5@2 a4, ~@6 d5@2 b4@4 ~@3 c#5@2 ~@15, ~@7 c#5@3 ~@2 e5@2 ~@18]/2", // Dsus2
  I: "c#5 a4 [g5,a5] g5@2 e5@3, ~@5 f5 ~@2", J: "c#5@4 a4@2 ~ e5@3 a5@3 a4 c#5@2, ~@6 c#5@3 ~@7",
  K: "a5@3 a4 c#5@2 ~@4 a4@2 a5@2 g5@2, ~@6 a5@5 ~@5, ~@2 c#5 ~", L: "f#5@3 ~@13",
})).s("gm_overdriven_guitar").gain(0.15)

// drums · kick
const kick = s("bd").struct(`<
  A B C@2 D B C D E@18 F E@13 F@3 E@2 F E G E H E@2 H@3 E@8 F@2 E@2 F@2 E H E@2 F@3 E@5 F E F@3 E@3 F H E@3 I E F H A B
  C@2 D B C D E@4 F E@2 F E@4 F E@2 F E@4 F E@2 F E@4 F E@2 F@2 E@2 F@2 E@2 F ~
>`.pickRestart({
  A: "x", B: "x ~@6 x!2 ~@7", C: "x ~@2 x!2 ~@3", D: "x ~@5 x!2 ~@8", E: "x!2 ~@2 x!2 ~@2", F: "x ~@3 x!2 ~@2",
  G: "x!2 ~@2 x!2 ~ x", H: "x!2 ~@2 x ~@3", I: "x!2",
})).gain(0.51)

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~ A ~@3 B C@7 D C@3 D C@19 D C@3 E C@11 E C@3 D C@3 D C@7 D C@7 D C@7 D C@3 D C F C@4 ~ A ~ A ~@3 B C@3 D C@3 D
  C@3 D C@3 D C@3 D C@3 D C@3 D C@3 D C ~@8
>`.pickRestart({
  A: "~@6 x!2 ~@8", B: "~@3 x", C: "~ x ~ x", D: "~@4 x ~@7 x ~ x!2", E: "~@4 x ~@7 x!2 ~@2", F: "~@2 x ~@3 x!2",
})).gain(0.51)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@139 [~ x ~ x]!2 [~@4 x ~@7 x ~ x!2] [~ x ~ x]!3 [~@4 x ~@7 x ~ x!2] ~>").gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<A B A B ~ C D ~@91 A B A B ~ C D ~@42>".pickRestart({
  A: "~@11 x ~ x!2 ~", B: "x ~@5 x!2 ~@8", C: "x ~@6 x!2 ~@7", D: "~@9 x ~@6",
})).gain(0.51)

// drums · mid tom
const mid_tom = s("mt").struct("<A B C ~ D E F E ~@90 A B C ~ D E F E ~@41>".pickRestart({
  A: "~ x ~ x ~ x!2 ~ x!2 ~ x ~@4", B: "~@7 x ~@8", C: "x!2 ~ x ~ x!2 ~ x!2 ~@6", D: "x!4 ~ x!2 ~ x ~@2 x ~ x!2 ~",
  E: "~ x", F: "x!4 ~ x!2 ~ x ~ x!2 ~ x!2 ~",
})).gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<A B C D E D F D ~@90 A B C D E D F D ~@41>".pickRestart({
  A: "x ~@7 x!2 ~@3 x!2 ~", B: "x ~@6 x!2 ~@6 x", C: "x!2 ~@2 x!3 ~@9", D: "x ~@5 x!2 ~@8",
  E: "x!2 ~ x ~ x!2 ~@2 x!2 ~ x!2 ~@2", F: "x!2 ~ x ~ x!2 ~@3 x ~ x!3 ~",
})).gain(0.51)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ A ~ A ~ A ~@4 A ~@3 A ~@10 A ~@8 A ~@2 B ~@6 A ~ A ~@2 B ~@4 A ~@3 A ~ A ~@5 A ~@3 A ~@2 B ~@2 A ~@4 B ~@4 A ~ A
  ~ B ~@4 B ~ A ~ A ~ A ~ A@2 ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.51)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 A@82 B A B A@5 ~@8 A@40 ~>".pickRestart({
  A: "x!8", B: "x!7 ~",
})).gain(0.46)

stack(
  pad_poly, bass, bass_soft, synth_strings_1, synth_strings_1_soft, string_ensemble_1, electric_guitar_muted,
  electric_guitar_muted_2, tinkle_bell, overdriven_guitar, overdriven_guitar_soft, kick, snare, snare_soft, low_tom,
  mid_tom, high_tom, crash, tambourine
)

More by Prince