Strudelify
1999 cover art

1982 · 1999

1999

Prince

KeyF majorTempo118 bpm
0:00/0:00
// 1999 — Prince
// 118 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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 · electric bass finger · "BASS"
const bass = note(`<
  ~ A@2 B@2 A@2 C@2 D@2 E F G H I J D@2 E F G H I J D@2 E F G H I J K L E F K L E F D@2 E F G H I J D@2 E F G H I J K L
  E F K L E F E F E F D@2 E F G H I J D@2 E F G H I J K L E F K L E F K L E F K L E F E F E F E F E F M N@3
>`.pickRestart({
  A: "[c2@25 ~@4 g1 bb1 g1]/2", B: "[c2@15 ~]/2", C: "[c2@5 ~@3]/2",
  D: "[f1@4 f2 ~@3 f2 f1 f2 ~ f2 ~@3 f2 ~@3 f2 ~@4 f1 f2 ~ f2 eb2 d2 c2, ~@15 f1@2 ~@15]/2",
  E: "f1@4 f2 ~@3 f2 f1 f2 ~ f2 ~ f2 ~", F: "f1 f2 ~@2 f2@3 ~@2 f2 c2 ~ eb2 d2 c2 ~",
  G: "f1@4 f2 ~@3 f2 f1 c2 ~ f2@2 ~@2", H: "~ f1 f2 ~ f2@2 ~@2 f2 f1 f2 ~ eb2 d2 eb2 d2",
  I: "f1@4 f2 ~@4 f1 f2 ~ f2@3 ~", J: "f2 f1 f2 ~ f2@5 f1 f2 ~ eb2 d2 c2 f1", K: "bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~",
  L: "d2@3 ~ d2@3 ~ d2@3 ~ d2@2 ~@2", M: "f1@4 ~ f2 ~@2",
  N: "[f2 f2@3 f2@2 ~@24 f1 ~ f1@2 ~@14, ~@6 f1@3 f1@14 ~@25, ~@7 f2@4 ~ f2@22 ~@14]/3",
})).s("gm_electric_bass_finger").gain(0.41)

// bass · electric bass finger · "BASS" · soft notes
const bass_soft = note(`<
  ~@9 A ~ B C ~@4 A ~ B C ~@4 A ~ B C ~@6 B C ~@2 B C A ~ B C ~@4 A ~ B C ~@6 B C ~@2 B C B C B C A ~ B C ~@4 A ~ B C
  ~@6 B C ~@2 B C ~@2 B C ~@2 B C B C B C B C B C D@2 ~@2
>`.pickRestart({
  A: "~@14 d2 ~", B: "~@15 d2", C: "~@7 f2 ~@4 d2 ~@3",
  D: "[~@8 f1@3 ~@4 f2 ~@3 f1@3 ~@10, ~@7 f2@3 ~ f1@2 f1@5 ~@14, ~@6 f2 ~@9]/2",
})).s("gm_electric_bass_finger").gain(0.2)

// chords · piano
const piano = note(`<
  ~ A B C D E F G H I J I K I J I K I J I K I J I K I J I K I J I K L M I K L M I K I J I K I J I K I J I K I J I K L M
  I K L M I K I K I K I J I K I J I K I J I K I J I K L M I K L M I K L M I K L M I K I K I K I K I K N@3 O
>`.pickRestart({
  A: "c4 g3 c3 c4 ~@2 c4 ~ c4 ~ c4 c3 ~ c3 c4 ~", B: "c4 ~ c4 g3 c3 ~ c4 c3 ~ c3 c4 ~ c4 g3 c3 ~",
  C: "c4 ~ c4 c3 ~ c3 c4 ~ c4 ~ c4 c3 ~ c3 c4 ~", D: "c4 ~ c4 g3 c3 ~ c4 ~ c4 g3 c3 ~ c4 c3 [g3,c4] c3",
  E: "~@2 c4 ~ c4 c3 ~ c3 c4 ~ c4 ~ c4 c3 ~ c3", F: "c4 ~ c4 ~ c4 c3 ~ c3 ~ c3 c4 ~ c4 g3 c3 c4",
  G: "c3 ~ c4 ~ c4 c3 ~ c3 c4 ~ c4 ~ c4 c3 ~ c3", H: "c4 ~ c4 ~ c4 g3 c3 c4 ~ c4 ~@2 c4 c3 c4 c3",
  I: "~@4 [c4,d4,f4,a4] ~@3 [c4,eb4,f4,g4,bb4]@6 ~@2", J: "[c4,d4,f4,a4]@3 [c4,f4,g4,bb4] ~@4, ~@6 eb4 ~@9",
  K: "[c4,d4,f4,a4]@3 ~ [c4,eb4,f4,g4,bb4]@2 ~ [c4,d4,f4,a4] ~@8", // Dm7 Cm7 Dm7
  L: "[bb2,f3,bb3]@9 ~ [bb2,f3,bb3] ~@2 [bb2,f3,bb3] ~@2", // Bb5
  M: "[c4,d4,f4,a4]@7 ~ [c4,d4,f4,a4] ~ [c4,d4,f4,a4] ~ [c4,d4,f4,a4] d3 ~@2", // Dm7
  N: "[[eb4,f4]@11 ~@28 g4@7 [a4,a5] ~, bb4@16 bb4@11 bb4@10 bb4@9 ~@2, g4@13 f4@6 f4@5 f4@7 f4@15 ~@2, ~@11 eb4@6 eb4@5 eb4@7 eb4@6 eb4@11 ~@2, ~@14 g4@6 g4@5 g4@7 ~ g4@6 ~@9]/3", // Ebsus2 A
  O: "[a4,a5] ~@15", // A
})).s("gm_piano").gain(0.36)

// other · electric guitar jazz · "LEAD GUITAR"
const electric_guitar_jazz = note(`<
  ~@9 A B C D E F G H A B C D E F G H A B C D E F G H I J C D I J C D A B C D E F G H A B C D E F G H I J C D I J C D C
  D C D A B C D E F G H A B C D E F G H I J C D I J C D I J C D I J C D C D C D C D C D K L@3
>`.pickRestart({
  A: "~ f3 eb3 ~ f3 ~@5 f3 eb3 f3 ~ f3 ~", B: "~@2 f3 ~@6 f3 eb3 ~ f3@2 d3 c3", C: "f3 ~@5 f3 ~@3 f3 ~ f3 eb3 f3 ~",
  D: "f3 ~@8 eb3 f3 ~ ab3 ~ g3 f3", E: "~@2 f3 ~@7 f3 eb3 f3 ~@3", F: "~@2 f3 ~@2 f3 ~@2 f3 ~ f3 ~ f3 eb3 d3 ~",
  G: "f3 ~ f3 ~@7 f3 ~ f3 eb3 g3 ~", H: "ab3 ~ g3 ~ f3 eb3 ~@3 g3@2 ~ g3 ~ f3 ~",
  I: "[bb3,d4,f4,g4,bb4]@3 ~ [f4,g4,bb4] ~@3 [f4,g4,bb4] d4 ~@2 [f4,g4,bb4]@2 d4 ~", // Gm7
  J: "~@2 [f4,a4] ~ a4 d4 ~@2 [f4,a4] ~ [f4,a4] ~ [f4,a4] d4 ~@2", K: "~@7 c4!2 ~ c4 ~ [c4,f4] c4 ~ c4",
  L: "[c4 ~ [c4,f4] [c4,eb4,f4] c4 [c4,eb4,f4] [eb4,f4] [c4,eb4,f4] [c4,f4] c4 [c4,f4] ~ c4 ~@17 [f2,c3,f3]@2 [f2,c3,f3]@12 ~@4, ~@11 [eb4,f4]@2 c4@5 c4@6 c4@4 c4@16 ~@4, ~@13 f4@2 f4@3 ~ f4@2 f4@4 f4@5 ~@18, ~@14 eb4@2 eb4@4 eb4@2 eb4@4 ~ eb4@18 ~@3]/3", // F5 F7 Ebsus2 F7 F5 Ebsus2
})).s("gm_electric_guitar_jazz").gain(0.46)

// other · electric guitar jazz · "LEAD GUITAR" · soft notes
const electric_guitar_jazz_2 = note(`<
  ~@12 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~ A ~ A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A B C
  D@2
>`.pickRestart({
  A: "~@14 f3 ~", B: "~@3 c4!2 ~ c4 ~@2 [eb4,f4] f4 [c4,eb4] eb4 [eb4,f4]!2 eb4",
  C: "f4 [eb4,f4] eb4 ~@5 eb4 ~ eb4 ~@5", D: "[~@7 f4@7 ~@2]/2",
})).s("gm_electric_guitar_jazz").gain(0.26)

// chords · string ensemble 1 · "STRING SYNTH"
const string_ensemble_1 = note(`<
  ~ A@8 B C D E B F B G ~@16 H I J K H I J K ~@16 H I J K H I J K J K J K ~@8 L@2 ~@6 H I J K H I J K H I J K H I J K J
  K J K J K J M N@3 ~
>`.pickRestart({
  A: "[~@4 [c5,d5,f5,a5] ~@3 [c5,d5,g5,bb5,c6]@7 ~ [c5,d5,f5,a5,c6]@5 ~ [g5,bb5,c6]@2 ~@12 [c5,d5,f5,a5] ~@3 [c5,d5,g5,bb5,c6]@7 ~ [c5,d5,f5,a5,c6]@5 ~ [c5,d5,g5,bb5,c6]@2 ~@12 [c5,d5,f5,a5] ~@3 [c5,d5,g5,bb5,c6]@7 ~ [c5,d5,f5,a5,c6]@5 ~ [c5,d5,g5,bb5,c6]@2 ~@12 [c5,d5,f5] ~@3 [c5,d5,g5,bb5,c6]@7 ~ [c5,d5,f5,a5,c6]@5 ~ [c5,d5,g5,bb5,c6]@2 ~@8, [c3,c4]@127 ~, ~@4 c6@2 ~@16 [c5,d5] ~@13 c6@2 ~@30 c6@2 ~@30 [a5,c6]@2 ~@26]/8", // Dm7 Gm Dm7 C7 Dm7 Gm Dm7 Gm …
  B: "~@4 [f5,a5,c6] ~@3 [eb5,g5,bb5,c6]@6 ~@2", C: "[f5,a5,c6]@5 ~ [g5,bb5,c6] ~@9",
  D: "~@4 [f5,a5,c6] ~@3 [eb5,g5,bb5,c6]@7 ~", E: "[f5,a5,c6]@3 ~ [eb5,g5,bb5,c6]@2 ~ [f5,a5,c6] ~@8, ~@4 db6 ~@11",
  F: "[f5,a5,c6]@5 ~ [eb5,g5,bb5,c6] ~@9", G: "[f5,a5,c6]@3 ~ [bb5,c6]@2 ~ [f5,a5,c6] ~@8, ~@4 g5 ~@11",
  H: "d6, d5@7 ~", I: "[f4,f5]@15 ~", J: "~@4 [f5,a5,c6] ~@3 [g5,bb5,c6]@7 ~",
  K: "[f5,a5,c6]@3 ~ [g5,bb5,c6] ~@2 [f5,a5,c6] ~@8", L: "[c4,c5]/2",
  M: "[f5,a5,c6]@3 ~ [g5,bb5,c6] ~@2 [f5,a5,c6] ~@4 [d3,e3] [f3,g3,a3,b3] [c4,d4,e4,f4,g4] [a4,b4,c5,d5]", // F C7 F Dsus2 G7 C D7
  N: "[[e5,f5,g5,a5,b5,c6] c6@43 ~@4]/3", // Cmaj7
})).s("gm_string_ensemble_1").gain(0.36)

// chords · lead 2 sawtooth · "FATSYNTH"
const lead_2_sawtooth = note(`<
  ~ A@8 B C D E D F G H B C D E D F G H B C D E D F G H I J D E I J D E B C D E D F G H B C D E D F G H I J D E I J D E
  D E D E B C D E D F G H B C D E D F G H I J D E I J D E I J D E I J D E K@8 L@3 M
>`.pickRestart({
  A: "[~@4 [c4,d4,f4,a4] ~@3 [c4,d4,g4,bb4]@7 ~ [c4,d4,f4,a4]@6 [d4,g4,bb4]@2 ~@12 [c4,d4,f4,a4] ~@3 [c4,d4,g4,bb4]@7 ~ [c4,d4,f4,a4]@6 [g4,bb4]@2 ~@12 [c4,d4,f4,a4] ~@3 [c4,d4,g4,bb4]@7 ~ [c4,d4,f4,a4]@6 [d4,g4,bb4]@2 ~@12 [c4,d4,f4,a4] ~@3 [c4,d4,g4,bb4]@7 ~ [c4,d4,f4,a4]@5 ~ [g4,bb4]@2 ~@8, [c2,c3]@127 ~, ~@22 c4 ~@31 [c4,d4] ~@31 c4 ~@31 [c4,d4] ~@9]/8", // Dm7 Gm Dm7 Gm Dm7 Gm Dm7 Gm …
  B: "~@4 [c4,d4,f4,a4] ~@3 [eb4,f4,g4,bb4]@7 ~", C: "[c4,d4,f4,a4]@5 ~ [eb4,f4,g4,bb4] ~@9",
  D: "~@4 [c4,d4,f4,a4] ~@3 [eb4,f4,g4,bb4]@6 ~@2", // Dm7 Eb
  E: "[c4,d4,f4,a4]@3 ~ [eb4,f4,g4] ~@2 [c4,d4,f4,a4] ~@8, ~@2 bb4 ~@5", // Dm7 Eb Dm7
  F: "[c4,d4,f4,a4]@2 ~ [g4,bb4] ~@4, ~@6 [eb4,f4] ~@9", G: "~@2 [d4,a4] ~ [eb4,f4,g4,bb4]@3 ~, ~@4 [c4,f4] ~@11",
  H: "[c4,d4,f4,a4]@4 [eb4,bb4]@2 ~ [c4,d4,f4,a4] ~@8, ~@4 [f4,g4] ~@11", I: "[f3,bb3,d4]@15 ~",
  J: "[a3,c4,d4,f4]@15 ~", // Dm7
  K: "[~@4 [c4,d4,f4,a4] ~@3 [eb4,f4,g4,bb4]@6 ~@2 [c4,d4,f4,a4]@3 ~ [eb4,f4,g4] ~@2 [c4,d4,f4,a4] ~@12 [c4,d4,f4,a4] ~@3 [eb4,f4,g4,bb4]@6 ~@2 [c4,d4,f4,a4]@3 ~ [eb4,f4,g4] ~@2 [c4,d4,f4,a4] ~@8, [c5,c6], ~@10 bb4 ~@15 bb4 ~@5]/4", // Dm7 Eb Dm7 Eb Dm7 Eb Dm7 Eb …
  L: "[eb5@16 ~@24 [c2,d2] [e2,f2,g2] [a2,b2,c3,d3] [e3,f3,g3,a3] [b3,c4,d4,e4] ~ [f4,g4,a4,c5] ~, [g4,c5,f5]@47 ~, bb4@6 ~@10 d5@7 ~@3 eb5@21 ~, ~@21 bb4@26 ~]/3", // Csus2 Em D7 Fmaj7 Cmaj7 F Csus4
  M: "[f4,g4,a4,c5] ~@7", // F
})).s("gm_lead_2_sawtooth").gain(0.41)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@9 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D E F
>`.pickRestart({
  A: "x!2", B: "x ~@7 x ~ x ~@2 x ~@2", C: "x ~@10 x ~ x ~@2", D: "x ~ x!2 ~ x!2 ~ x ~ x ~@5", E: "~@7 x", F: "x",
})).gain(0.46)

// drums · rim
const rim = s("rim").struct(`<
  ~@10 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A
  ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@4
>`.pickRestart({
  A: "~@8 x!2 ~ x ~ x!2 ~", B: "~@8 x!2 ~ x ~ x!3",
})).gain(0.46)

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

// drums · clap
const clap = s("cp").struct(`<
  ~@10 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@3 x",
})).gain(0.51)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@8 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B ~@2 C ~
>`.pickRestart({
  A: "~@3 x", B: "~@3 x ~@2 x ~", C: "~@9 x ~@6",
})).gain(0.51)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@9 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@4
>`.pickRestart({
  A: "~@5 x ~ x", B: "~ x ~ x ~ x ~ x",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@8 A ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~ C D@2 ~ C D@2 ~ C ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~ C D@2 ~ C D@2 ~ C
  ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~ C D@2 ~ C D@2 ~ C D@2 ~ C D@2 ~ C ~ B ~ C ~ B ~ E ~@2 F ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@3 x", C: "~@11 x ~@4", D: "~ x ~ x", E: "~ x ~@2 x ~@6 x ~@4", F: "x ~@6 x ~@8",
})).gain(0.46)

// drums · open hat
const open_hat = s("oh").struct("<~@109 [~@3 x!2 ~ x!3 ~ x!5 ~] [x!2 ~ x!3 ~ x!2 ~ x!2 ~ x!2 ~] [x ~@2 x ~@12] ~>")
  .gain(0.26)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@8 A ~ B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B
  ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B C D ~ E F ~
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@11 x ~@4", C: "~@7 x", D: "~ x ~@6", E: "~@15 x", F: "x ~@2 x ~ x ~@6 x ~@3",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@2 B C D ~ A
>`.pickRestart({
  A: "x", B: "~ x", C: "x ~@10 x ~ x ~@2", D: "x!2 ~ x!2 ~ x ~ x ~ x ~@5",
})).gain(0.36)

// drums · ride
const ride = s("rd").struct("<~ A B A B A B A B ~@100 C D E ~>".pickRestart({
  A: "~@10 x ~@2 x ~@2", B: "x ~@7 x ~ x ~@2 x ~@2", C: "~@9 x!3 ~ x!3", D: "~ x!3 ~ x!3 ~ x ~ x!2 ~ x!2",
  E: "~ x!2 ~@5",
})).gain(0.36)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@109 [~@2 x ~ x!2 ~ x!2 ~@7] ~@3>").gain(0.2)

// drums · tambourine
const tambourine = s("tb").struct("<~ [x!2]!8 ~@104>").gain(0.41)
// … 5 more lines

More by Prince