Strudelify

I Could Never Take the Place of Your Man

Prince

KeyC majorTempo148 bpm
0:00/0:00
// I Could Never Take the Place of Your Man — Prince
// 148 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: track names are the Roland MT-32 patch names at their program numbers ("Slap Bass" on 68, "Sax" on 78), so with no bank select the whole file is read through the MT-32 patch table: ch 2 "Slap Bass" Slap Bass 1 -> slap bass 1; ch 4 "Brass" Sax 1 -> soprano sax; ch 5 "Sax" Sax 1 -> soprano sax; ch 6 "Synth??" School Daze -> lead 3 calliope
// note: duplicate parts dropped: ch 6 "Synth??" lead 3 calliope (copy of ch 7 "GezPiano" piano)
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(148/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 · slap bass 1 · "Slap Bass"
const bass = note(`<
  ~ A B C D A B C D E F G@2 E F G@2 E F G@2 E F G@2 A B C@2 A B C@2 H I H I H I H I J K L M N O A B C D A B G P E F G@2
  E F G@2 E F G@2 E F G@2 A B C@2 A B C@2 H I H I H I H I J K L M N O A B C D A B G P G P Q@4 R@12 S@5 T U P
>`.pickRestart({
  A: "c2@3 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", B: "g1@3 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  C: "f1@3 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~", D: "f1@3 ~ f1 ~ f1 ~ f2 ~ e2 ~ d2 ~ e2 ~",
  E: "c2@3 ~ c2@3 ~@3 c2@3 ~ c2 ~", F: "g1@3 ~@3 g1@3 ~ f1 ~ g1 ~ g1 ~", G: "f1@3 ~ f1@3 ~ f1 ~ f1@3 ~ f1 ~",
  H: "f1 e1 d1 c1", I: "d1 e1 d1 c1", J: "f1@2 f1@2 f1 f1@2 f1", K: "f1@3 f1@3 f1!2",
  L: "e1@3 ~ e1@3 ~ e1 ~ e1@3 ~ e1 ~", M: "d2@4 d2@5 ~@3 d2@3 ~", N: "d2@3 ~ d2@3 ~ d2 ~ d2@3 ~ d2 ~",
  O: "g1@3 ~ g1@3 ~@9", P: "f1@3 ~ f1@3 ~ f2 ~ e2 ~ d2 ~ e2 ~",
  Q: "[c2@3 ~ c2@3 ~ c2 ~@7 g1@3 ~ g1@3 ~ g1 ~ g1 ~ g1@3 ~ f1@3 ~ f1@3 ~ f1 ~ f1 ~ f1@3 ~ f1@3 ~ f1@3 ~ f2 ~ e2 ~ d2 ~ e2 ~, ~@5 c2@27]/4",
  R: "[c2@4 c2@4 c2@2 c2@2 ~@4 g1@3 ~ g1@3 ~ g1 ~ g1 ~ g1@3 ~ f1@3 ~ f1@3 ~ f1 ~ f1 ~ f1@3 ~ f1@3 ~ f1@3 ~ f2 ~ e2 ~ d2 ~ e2 ~, ~@3 c2@13]/4",
  S: "[c2@4 c2@4 c2@2 c2@2 ~@4 g1@3 ~ g1@3 ~ g1 ~ g1 ~ g1@3 ~ f1@3 ~ f1@3 ~ f1 ~ f1 ~ f1@3 ~ f1@3 ~ f1@3 ~ f2 ~ e2 ~ d2 ~ e2 ~@17, ~@12 c2@65 ~@3]/5",
  T: "g1@3 ~ g1@3 ~ g1 ~ g1 ~ g1@3 ~", U: "f1@3 ~ f1@3 ~ f1 ~ f1 ~ f1@3 ~",
})).s("gm_slap_bass_1").gain(0.38)

// chords · soprano sax · "Sax"
const soprano_sax = note(`<
  ~@8 A B C@2 A D E F A G H@3 I@4 J K@8 L M ~ N L M O P Q R S T@3 ~@6 O U V@3 W X@3 G H@3 Y@7 Z AA AB@2 AC AD L M ~ N L
  M O P Q R S T@3 ~@33
>`.pickRestart({
  A: "~@12 c5 ~ c5 ~", B: "b4 ~ c5 ~ c5@3 ~ c5@3 ~ c5 ~ c5 ~", C: "[b4@3 ~ c5@3 ~ c5@3 ~ c5 ~ a4@5 ~@13]/2",
  D: "b4 ~ c5 ~ c5@3 ~ c5 ~ c5 ~ c5 ~ c5 ~", E: "b4@3 ~ c5 ~ c5 ~ c5@4 ~@2 d5@2", F: "~ a4@2 ~@5",
  G: "b4@2 ~@2 c5 ~ c5 ~ c5@2 ~@2 c5 ~ c5 ~, ~ b4@4 b4@3", H: "[~@4 c5@3 ~ c5@3 ~ c5 ~ a4@5 ~@25 c5@2 c5@2, b4]/3",
  I: "[~@2 c5@2 c5@2 c5@2 c5@4 ~@4 c5@4 c5@2 ~@2 c5@2 c5@2 d5@6 a4@4 ~@24 c5 ~, b4@11 b4@21]/4",
  J: "~@2 c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5@2, b4",
  K: "[~@2 c5@2 c5@2 c5@4 c5@4 ~@4 c5@4 c5@4 c5 ~ c5 ~ c5 ~ d5@3 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ d5@3 ~ c5 ~@9 c5@2 a4@2 c5@2 a4@2 c5@4 c5@4 c5@2 a4@4 g4@6 ~@14 g4 ~ a4 ~ c5@4 ~@2 f5@3 ~ e5@3 ~@5 e5@3 ~, ~@7 b4@57]/8",
  L: "d5@9 ~ e5@3 ~ d5@2", M: "~ c5@2 ~@5", N: "f5@3 ~ e5@3 ~@5 d5 ~ c5 ~", O: "~@14 c5 ~",
  P: "e5@3 ~ d5@3 ~ d5 ~ d5@3 ~ d5@2", Q: "~@2 c5@4 ~@6 a4 ~ c5 ~", R: "d5@5 ~@3 e5@4 ~@2 d5@2",
  S: "~ c5@2 ~@2 g4 a4 c5", T: "[e5@2 d5@4 d5@4 c5@3 ~ g4@5 ~ g4@3 ~ e5@3 ~ d5 ~ c5@5 ~@13]/3",
  U: "~@2 c5 ~ c5@3 ~ c5@3 ~ c5 ~ c5 ~, b4", V: "[~@4 c5@3 ~ c5@3 ~ c5 ~ a4@5 ~@25 c5 ~ c5 ~, b4]/3",
  W: "~@2 c5 ~ c5@3 ~ c5 ~ c5 ~ c5 ~ c5 ~, b4", X: "[~@4 c5 ~ c5 ~ c5@4 ~@2 d5@3 ~ a4@4 ~@22 c5 ~ c5 ~, b4]/3",
  Y: "[~@2 c5@2 c5@2 c5@2 c5@4 ~@4 c5@4 c5@2 ~@2 c5@2 c5@2 d5@6 a4@4 ~@24 c5 ~@3 c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5@3 ~ c5@2 c5@2 c5@4 c5@4 ~@4 c5@4 c5@4 c5 ~ c5 ~ c5 ~, b4@11 b4@38 ~@7]/7",
  Z: "d5@3 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ d5@2", AA: "~@2 c5 ~@9 c5@2 a4@2", AB: "[c5 a4 c5@2 c5@2 c5 a4@2 g4@3 ~@4]/2",
  AC: "~@6 g4 ~ a4 ~ c5@4 ~@2", AD: "f5@3 ~ e5@3 ~@5 e5@3 ~",
})).s("gm_soprano_sax").gain(0.24).pan(0.4)

// chords · piano · "GezPiano"
const piano = note(`<
  ~ A B C@2 A B D@2 E F@3 G H I@2 E J@3 K L M@2 N O P Q@2 R S@2 T U@3 V W@3 X@2 Y@2 Z@2 A B C@2 A B AA AB E F@3 G H I@2
  E J@3 K L M@2 N O P Q@2 R S@2 T U@3 V W@3 X@2 Y@2 Z@2 A B C@2 A B AA AB AC@2 AD AE AC@2 AD AE AC@2 AD AE AC@2 AD AE
  AC@2 AD AE AC@2 AD AE AC@2
>`.pickRestart({
  A: "[g4,c5,f5]@3 ~ [g4,c5,e5]@3 ~ [g4,d5]@3 ~ [g4,c5]@3 ~", // Csus4 C G5 C5
  B: "[g4,b4,d5]@3 ~ [g4,b4,e5]@3 ~ [g4,b4,d5] ~ e5 d5 c5@3 ~", C: "[[f4,a4,c5]@24 f4 ~ e4 ~ d4 ~ e4 ~]/2",
  D: "[[f4,a4,c5]@24 ~@4 c5 ~ c5 ~]/2", E: "b4 ~ c5 ~ c5@3 ~ [e4,g4,c5]@3 ~ c5 ~ c5 ~, [e4,g4]@5 ~@11",
  F: "[[d4,g4]@4 c5@3 ~ [d4,g4,c5]@3 ~ c5 ~ [c4,g4]@7 ~@3 f4@8 e4@8 [d4,f4] ~ e4 ~ d4 ~ c5 ~, b4@3 ~@11 a4@26 ~@8]/3", // G5 Csus2 C5 Dm
  G: "b4 ~ c5 ~ c5@3 ~ c5 ~ c5 ~ c5 ~ c5 ~, [e4,g4]@5 ~@3 [e4,g4]@5 ~@3", // Em
  H: "[d4,g4]@4 c5 ~ c5 ~ [d4,g4,c5]@4 ~@2 d5@2, b4@3 ~@13", // G5 Csus2
  I: "[~@4 [c4,g4]@4 f4@5 ~@3 e4@5 ~@3 d4@3 ~ c5 ~ c5 ~, ~@4 a4@17 ~@11]/2", // C5
  J: "[[d4,g4]@4 c5@3 ~ [d4,g4,c5]@3 ~ c5 ~ [c4,g4]@7 ~@3 f4@8 e4@8 d4@3 ~ c5 ~ c5 ~, b4@3 ~@11 a4@26 ~@8]/3", // G5 Csus2 C5
  K: "b4 ~ c5 ~ c5 ~ c5 ~ [e4,g4,c5]@5 ~@3, [e4,g4]@5 ~@11", L: "[d4,g4,b4]@3 ~ c5 ~ b4 ~ c5 ~ c5 ~ d5@4",
  M: "[~@2 [c4,g4,a4]@4 ~@2 c5@4 ~@2 [e4,a4,c5]@7 ~@3 f5 ~ e5 ~ d5 ~ c5 ~]/2", // Am7 Am
  N: "[g4,b4] ~ [g4,c5] ~ [g4,c5] ~ [g4,c5] ~ [g4,c5] ~ [g4,c5] ~ [g4,c5] ~ [g4,c5]@2", // G C5
  O: "~@2 [g4,c5]@2 [g4,c5]@2 [g4,c5]@4 [g4,c5]@3 ~ [f4,b4]@2", // C5 Fdim
  P: "~@2 [f4,c5]@3 ~ [f4,c5]@4 [f4,c5]@2 [f4,c5] ~ [f4,c5] ~", // F5
  Q: "[[f4,d5]@4 [f4,c5]@2 [f4,c5]@2 [f4,c5]@2 [f4,c5]@2 [f4,c5]@2 d5@3 ~ c5@4 ~@6 [g4,c5] ~ a4 ~, ~@14 g4@7 ~@11]/2", // Dm F5 C5
  R: "[g4,c5] ~ a4 ~ [g4,c5]@3 ~ [g4,c5]@3 ~ [g4,c5] ~ [c4,f4,a4]@2", S: "[~@2 g4@4 ~@8 c5@6 ~@2 g4 ~ b4 ~ c5@4 ~@2]/2",
  T: "[g4,c5,f5]@3 ~ [g4,c5,e5]@5 ~@3 [g4,c5,e5]@3 ~", // Csus4 C
  U: "[[g4,b4,d5]@9 ~ [g4,b4,e5]@3 ~ [a4,d5]@3 ~@7 f4@5 ~@3 e4@5 ~@3 d4@8, ~@14 g4@7 ~@27, ~@18 [a4,c5]@25 ~@5]/3", // G Em D5 Am
  V: "[g4,c5,f5]@2 [g4,c5,e5]@4 d5 c5", // Csus4 C
  W: "[[g4,b4,d5]@10 [g4,b4,e5]@4 [a4,d5]@4 ~@6 f4@8 e4@5 ~@3 d4@4 ~@2 c5 ~, ~@7 g4@5 ~@12, ~@18 [a4,c5]@19 ~@11]/3", // G Em D5 Am
  X: "[[f4,a4]@4 d5@3 ~ [f4,a4,d5] ~ [f4,a4,d5]@3 ~ d5@3 ~ c5@3 ~ [f4,g#4,c5]@5 ~ a4@2 c5@2, e5@3 ~@11 [f4,g#4]@6 ~@12]/2", // F Dm Fm
  Y: "[[e4,g4,d5]@8 [e4,g4,e5]@6 d5@3 ~ c5@4 ~@4 g4 ~ a4 ~ c5 ~, ~@14 [d4,f#4]@7 ~@11]/2", // Em7 Em D
  Z: "[[f4,a4,e5] ~ [f4,a4,e5]@3 ~ [f4,a4,e5]@3 ~ [f4,a4,c5]@3 ~ [b3,f4,g4]@5 ~ [b3,f4,g4]@3 ~ e5@3 ~ d5 ~ c5 ~]/2", // Fmaj7 F G7
  AA: "g4@5 ~@3 f4@5 ~@3, [a4,c5]@11 ~@5", AB: "f4 ~ g4 ~ c5 ~ f4 ~ f4 ~ e4 ~ d4 ~ c5 ~",
  AC: "[g4@5 ~@3 f4@5 ~@3 e4@5 ~@3 [d4,f4] ~ e4 ~ d4 ~ e4 ~, [a4,c5]@21 ~@11]/2", // Dm Am
  AD: "[e4,g4,c5]@3 ~ [e4,g4,c5]@3 ~ [e4,g4,c5]@3 ~ [e4,g4,c5]@3 ~", // C
  AE: "[d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~", // G
})).s("gm_piano").gain(0.31)

// drums · kick
const kick = s("bd").struct(`<
  ~ 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@3 B A@3 B A B 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 B A@3 B A@3 C A B A D A B A D A B A D A B A D A B A D A B A D A B
>`.pickRestart({
  A: "x!2", B: "x ~@3 x!2 ~@2", C: "x ~@3 x!2 ~ x", D: "x ~@3 x ~@2 x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<[~@6 x!2] [~ x ~ x]!45 [~ x ~@2] [~ x ~ x]!45 [~ x ~@2] [~ x ~ x]!34>").gain(0.64)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~ [x!4]!45 [x!3 ~] [x!4]!45 [x!3 ~] [x!4]!34>").gain(0.64)

// drums · ht
const ht = s("ht").struct("<[~@6 x!2] [~ x ~ x]!45 [~ x ~@2] [~ x ~ x]!45 [~ x ~@2] [~ x ~ x]!34>").gain(0.64)

stack(bass, soprano_sax, piano, kick, snare, pedal_hat, ht)

More by Prince