Strudelify

Do Me, Baby

Prince

KeyB majorTempo76 bpm
0:00/0:00
// Do Me, Baby — Prince
// 75.6 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(75.6/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.

// chords · glockenspiel
const glockenspiel = note(`<
  A B C D E ~@15 A B F D G B F D E ~@19 A B F D G B H D E I J K L B F D G B H D E
>`.pickRestart({
  A: "~@12 [e6,f#6,g#6] [a#5,b5,c#6,d#6] [d#5,e5,f#5,g#5] [a#4,b4,c#5]", B: "g#4@8 ~@4 b4 ~ b4 ~",
  C: "[c#4,f#4,a#4] ~ b4 ~ f#4 ~ [b3,d#4,f#4] ~@7 [d#4,f#4,b4] c#5, d#5@2 ~ g#4@2 ~@3", // F# B
  D: "[d#4,f#4] ~@5 b4 d#5 e5 ~ f#5 ~ [f#4,b4,d#5,b5] ~ b4 ~, b4@3 ~@5", // D#m B
  E: "[a#3,c#4,g#4] ~ f#4@2 d#4 ~ [b3,d#4] ~@9, ~@6 f#4@9 ~", // A#m7 B
  F: "[c#4,f#4,a#4] ~@5 [b3,d#4,f#4] ~@5 [d#4,f#4,b4] ~ c#5 ~, d#5@2 ~ g#4@2 ~@3", // F# B
  G: "[a#3,c#4,g#4] ~ f#4@2 d#4 ~ [b3,d#4] ~@5 [d#4,b4] ~ c#5 ~, ~@3 f#4@3 f#4 ~", // A#m7 B G#m
  H: "[c#4,f#4,a#4] ~@5 [b3,d#4,f#4] ~@5 [d#4,f#4,c#5] ~ c#5 ~, d#5@2 ~ g#4@2 ~@3", I: "[d#4,f#4,b4] ~@3",
  J: "[a#3,c#4,f#4,b4]@2 ~ [b3,d#4,f#4,b4]@4 ~", K: "[a#3,c#4,f#4,b4] ~@3",
  L: "[e6,f#6,g#6] [a#5,b5,c#6,d#6] [d#5,e5,f#5,g#5] [a#4,b4,c#5] g#4 ~ d#4@2 ~@2 [e4,g#4]@2 [e6,f#6,g#6] [a#5,b5,c#6,d#6] [d#5,e5,f#5,g#5] [a#4,b4,c#5], [a#3,c#4,f#4,b4]@2 ~ b3@4 ~, ~@3 [f#4,b4]@3 [a#3,c#4,f#4,b4]@2, ~@4 d#4@3 ~", // E D#7 Emaj7 A#m E D#7 Emaj7 A#m …
})).s("gm_glockenspiel").gain(0.31)

// chords · glockenspiel · soft notes
const glockenspiel_soft = note(`<
  ~ A ~@3 B C D E D F B G B H I J D F K L ~@8 B C B C M N O P Q R S C T U V W X Y Z C ~@20
>`.pickRestart({
  A: "~@6 b3!2", B: "[b3,d#4,f#4,b4] ~@15", C: "[a#3,c#4,f#4] ~@5 [b3,d#4,f#4] ~@9",
  D: "[b3,d#4,f#4,b4] ~@9 b3 ~ b3 ~@3", E: "[a#3,c#4,f#4] ~@3 g#4 ~ [b3,d#4,f#4] ~@5 f#5 d#5 b4 ~",
  F: "[a#3,c#4,f#4] ~@5 [b3,d#4,f#4] ~@5 g#4 b4 c#5 d#5", G: "[a#3,c#4,f#4] ~@3 g#4 ~ [b3,d#4,f#4] ~@5 c#5 ~@3",
  H: "[a#3,c#4,f#4] ~@5 [b3,d#4,f#4] ~@5 [d#4,f#4,b4] ~ c#5 ~", I: "[b3,d#4,f#4,b4] ~@11 [d#4,f#4,b4] ~ g#4 ~",
  J: "[a#3,c#4,f#4] ~@5 [b3,d#4,f#4] ~@5 f#5 d#5 b4 ~", K: "[b3,d#4,f#4,b4] ~@7 g#3@3 ~ g#3@3 ~",
  L: "[a#3,c#4,f#4] ~@3 g#4 ~ [b3,d#4,f#4] ~@9", M: "[b3,d#4,f#4,b4] ~@11 b3 ~ b3 ~",
  N: "[a#3,c#4,f#4] ~ b3 ~@3 [b3,d#4,f#4] ~@9", O: "[b3,d#4,f#4,b4] ~ f#5 ~@3 d#5 ~@3 a#4 ~@5",
  P: "[a#3,c#4,f#4] ~@5 [b3,d#4,f#4] ~@5 f#5 d#5 [b4,c#6] ~", Q: "[b3,d#4,f#4,b4] ~@7 b3 d#4 f#4 ~ f#5 ~@3",
  R: "[a#3,c#4,f#4] ~@5 [b3,d#4,f#4] ~ d#4 ~@3 f#5 ~@3", // F# B
  S: "[b3,d#4,f#4,b4] ~@7 [b3,d#4,g#4] ~ b4 ~ [c#4,e4,a#4] ~ f#4 ~", T: "[b3,d#4,f#4,b4] ~@11 f#5 ~@3",
  U: "[a#3,c#4,f#4] ~@5 [b3,d#4,f#4] ~@5 g#4 ~ c#5 ~", V: "[b3,d#4,f#4,b4,f#5] ~@7 c#4 ~ b3 ~ c#4 ~ b3 ~",
  W: "[a#3,c#4,f#4] ~@3 g#4 ~ [b3,d#4,f#4] ~@5 [d#4,f#4,b4,f#5] ~ [d#4,f#4,c#5,g#5] ~", // F# B D#m7
  X: "[b3,d#4,f#4,b4] ~@7 f#5 ~ d#5 ~ c#5 ~ b4 ~", // B
  Y: "[a#3,c#4,f#4,c#5] ~@5 [b3,d#4,f#4] ~@5 [d#4,f#4,b4,f#5] ~ [d#4,f#4,c#5,g#5] ~", // F# B D#m7
  Z: "[b3,d#4,f#4,b4,f#5] ~@7 [d#4,f#4,e5] ~@3 [d#4,f#4,f#5] ~@3", // B D#m
})).s("gm_glockenspiel").gain(0.1)

// chords · reed organ
const reed_organ = note(`<
  ~ A B A C A B A B A B A B A B A B A B A C A B A C A B A C A B A C A B A B A B A B A B A B A B A C A B A C A B A D E F
  G H A B A C A B A D
>`.pickRestart({
  A: "[g#3,b3,d#4,f#4] ~ [g#3,b3,d#4,f#4] ~ [g#3,b3,d#4,f#4] ~ [g#3,b3,d#4,f#4] ~ [g#3,b3,d#4,f#4] ~ [g#3,b3,d#4,f#4] ~ [g#3,b3,d#4,f#4] ~ [g#3,b3,d#4,f#4] ~", // G#m7
  B: "[a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~", // F# B
  C: "[a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~ [b3,d#4,f#4]@5 ~@5", // F# B
  D: "[a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~ [b3,d#4]@5 ~@5, ~@3 f#4@4 ~", E: "[g#3,b3,d#4,f#4] ~@3",
  F: "[a#3,c#4,f#4]@2 ~ [b3,d#4,f#4]@4 ~", G: "[a#3,c#4,f#4] ~@3",
  H: "[a#3,c#4,f#4]@2 ~ [b3,d#4] ~ [e4,g#4] [a#3,c#4,f#4]@2, ~@3 f#4@3 ~@2, ~@4 [b3,d#4]@3 ~", // F# B E F# B
})).s("gm_reed_organ").gain(0.2)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@5 A B C@2 D E F@2 G H I J K L M N O P Q R O P S T ~@4 U V W@2 X V Y@2 Z AA AB@2 AC AD AE@2 O P Q R O P S T AF AG AH
  AI@5 AJ@2 AK ~
>`.pickRestart({
  A: "~@4 b4@2 g#4@2 f#4@4 ~@2 d#4!2", B: "c#4 c#4@2 c#4@2 f#4 c#4 b3@4 ~@5",
  C: "[~@8 g#4!2 g#4@2 g#4@2 f#4 f#4@3 g#4 ~@13]/2", D: "~ b4 g#4!6", E: "f#4@4 b4@2 g#4 f#4@4 ~@5",
  F: "[~@2 g#4!3 f#4!2 f#4@2 g#4 ~@6]/2", G: "~@2 [d#4,f#4,b4,f#5] [d#4,f#4,g#4,d#5] [d#4,f#4,c#5] [d#4,g#4,d#5] ~@2",
  H: "d#4 f#4!2 f#4@2 g#4 ~@2", I: "~@4 g#4 f#4 g#4 f#4", J: "~ e4 d#4@2 ~@12",
  K: "~@2 b4@2 b4@2 b4@2 b4@2 b4@2 b4@3 d#4", L: "g#4@2 f#4 e4 d#4@2 g#4@6 f#4 g#4 b4 g#4",
  M: "b4@2 d#5 ~@3 g#4@4 b4@3 ~ c#5@2", N: "~@2 d#5@8 d#5@2 c#5 b4 g#4@2",
  O: "[f#4,g#4,b4,d#5]@2 [f#4,g#4,c#5]@2 [f#4,g#4,b4]@2 [f#4,g#4] f#4@2 ~@5 b4!2", // G#m7 F#sus2 G#m7 F#sus2
  P: "[c#4,f#4,a#4]@2 g#4 f#4@2 d#4 [b3,d#4,f#4,g#4]@2 ~@8", // F# G#m7
  Q: "~@4 [d#4,f#4,b4,f#5]@4 [d#4,f#4,a#4,e5]!2 [g#4,d#5] [b3,d#4,f#4]@2 ~ f#4 d#4", // B D#m G#5 B
  R: "g#4@2 f#4@2 f#4@2 c#5@2 ~ g#4@2 ~ g#4 b4@2 c#5, ~@4 [d#4,f#4,b4] ~@3", // B
  S: "~@4 [b3,d#4,f#4,b4,f#5]@3 [b3,d#4,f#4,b4,f#5] [b3,d#4,f#4,a#4]@2 [b3,d#4,g#4]@2 f#4 d#4 ~ f#4, ~@8 e5 ~ d#5 ~@5", // B Bmaj7 G#m
  T: "[a#3,c#4,g#4]@2 [a#3,c#4,f#4]@2 [a#3,c#4,f#4]@2 [b3,d#4,f#4]@2 [b3,d#4,f#4]@2 [b3,d#4,f#4]@2 [b3,d#4,f#4]@2 f#4 g#4", // A#m7 F# B
  U: "~@2 b4 g#4 f#4@2 ~@2", V: "d#4 f#4@2 f#4@2 d#4 f#4@3 g#4 ~@6",
  W: "[~@7 f#4 g#4@2 g#4@2 a#4 g#4 f#4 f#4@3 g#4 ~@13]/2", X: "~@2 e4 f#4 b4@2 g#4@2 f#4 g#4 f#4@4 ~ b3",
  Y: "[~@3 f#4 g#4!2 ~@2 g#4@2 b4@2 g#4@2 f#4 f#4@2 e4 d#4 ~@13]/2",
  Z: "[b3,d#4,g#4,f#5] ~@3 [d#4,f#4,b4,f#5]@2 [b3,d#4,g#4,d#5] [b3,d#4,g#4,d#5]@2 ~@5 [b3,d#4,f#4,a#4] [b3,d#4,f#4,b4]", // G#m7 B G#m Bmaj7 B
  AA: "[a#3,c#4,f#4,c#5] [a#3,c#4,f#4,c#5]@2 [a#3,c#4,f#4,c#5]@2 [d#4,f#4,b4,f#5]@2 ~ [d#4,f#4,g#4,c#5]@4 [d#4,f#4,b4]@4", // F# B D#m7 B
  AB: "[~@6 f#4!2 g#4@2 g#4@2 a#4 g#4 f#4 f#4@2 e4 d#4 ~@13]/2", AC: "~@3 b4!2 b4@2 ~ b4@2 ~@4 b4@2",
  AD: "a#4 g#4 f#4 f#4@2 d#4 f#4@3 g#4@2 ~@5",
  AE: "[~@5 b4 c#5@2 [d#4,f#4,d#5,a#5]@2 [d#4,f#4,e5,b5]@2 [d#4,f#4,f#5,c#6]@2 d#4@2 ~@12 b5@4, ~@7 [f#4,f#5]@9, ~@7 c#6@5 c#6@4, ~ d#4]/2", // D#m B D#m7 F#
  AF: "d#5 ~@3", AG: "c#5 d#5 g#5@2 ~@12", AH: "g#5 f#5 g#5 b5@4 ~@9",
  AI: "[~@6 b5@6 ~@4 [f#4,g#4,b4,d#5]@2 [f#4,g#4,c#5]@2 [f#4,g#4,b4]@2 [f#4,g#4] f#4@2 ~@15 [d#5,d#6]!3 d#6 [c#5,c#6]@2 b4@2 [g#4,g#5] [f#4,g#5] ~@2 [d#4,f#4,b4,f#5]@4 [d#4,f#4,a#4,e5]!2 [g#4,d#5] [b3,d#4,f#4]@2 ~@5 b5@4 b5@4 b5@4 [b4,b5]@2, a#5@16 ~@27 d#5@2 ~@21 b4@2 ~@2 b4@2 ~@2 b4@2 ~@4, ~@6 b5@17 b5@10 ~@7]/5", // G#m7 F#sus2 G#m7 F#sus2 D# C# G# F#sus2 …
  AJ: "[[f#4,g#4,b4,d#5]@2 [f#4,g#4,c#5]@2 [f#4,g#4,b4]@2 [f#4,g#4] f#4@2 ~@15 [c#5,c#6]@8, b5, ~ b4]/2", // G#m7 F#sus2 G#m7 F#sus2 C#
  AK: "~@4 [b3,d#4,f#4,b4,f#5]@3 [b3,d#4,f#4,b4,f#5] [b3,d#4,f#4,a#4]@2 [b3,d#4,g#4]@2 ~@4, d#6, d#5@5 d#5@3, ~@8 e5 ~@7", // B Bmaj7 G#m
})).s("gm_synth_brass_1").gain(0.41)

// bass · epiano1 · "Controversy Music"
const bass = note(`<
  ~ A B A B A B A C A B A D A B A C A B A E A B A B A B A B A B A F A B A C A B A D A B A C A B A E A B A B A B A B G H
  G I A B A B A B A J
>`.pickRestart({
  A: "e2@4 ~@2 e2@7 ~@3", B: "d#2@4 ~@2 g#2@7 ~@3", C: "d#2@4 ~@2 g#2@6 f#2 g#2 f#2 g#2",
  D: "d#2@4 ~@2 g#2@6 g#2 f#2 d#2 b1", E: "d#2@4 ~@2 g#2@6 g#2 f#2 d#2 c#2",
  F: "~ e2 ~ e2 d#2 e2 d#2 e2 d#2 e2 d#2 e2 d#2 ~@3, d#2@2 d#2@2 ~@2 g#2@7 ~@3", G: "e2 ~@3", H: "d#2@2 ~ g#2@4 ~",
  I: "d#2@4 ~@2 g#2@6 ~ f#2 d#2 c#2, ~@6 g#2 ~", J: "g#2 ~ f#2 ~ g#2 ~ f#2@5 ~@5",
})).s("gm_epiano1").gain(0.41)

// bass · electric bass pick
const bass_2 = note(`<
  ~ A ~ A ~@3 A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@2 e2 ~@13",
})).s("gm_electric_bass_pick").gain(0.36)

// drums · kick
const kick = s("bd").struct("<A B@3 C B@7 C B@7 C B@7 C B@3 C B@7 C B@7 C B@7 C B@3 C B@7 D>".pickRestart({
  A: "~@3 x", B: "x!2", C: "x ~@5 x ~@4 x!2 ~@3", D: "x ~@2 x ~@4",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct("<A B@3 C B@7 C B@7 C B@7 C B@3 C B@7 C B@7 C B@7 C B@3 C B@7 C>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@3 x ~@12",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@4 A ~@7 A ~@7 A ~@7 A ~@3 A ~@7 A ~@7 A ~@7 A ~@3 A ~@7 A>".pickRestart({
  A: "~@3 x ~@12",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<A B@3 ~ C@7 ~ C@7 ~ B@7 ~ C@3 ~ C@7 ~ C@7 ~ B@7 ~ C@3 ~ B@7 ~>".pickRestart({
  A: "~@3 x", B: "x!16", C: "x!8",
})).gain(0.41)

stack(glockenspiel, glockenspiel_soft, reed_organ, synth_brass_1, bass, bass_2, kick, snare, low_tom, hihat)

More by Prince