Strudelify
Get Off cover art

1990 · New Power Generation

Get Off

Prince

KeyC minorTempo99 bpm
0:00/0:00
// Get Off — Prince
// 99 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(99/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 2 · "SLAPBASS 2"
const bass = note(`<
  ~ A@8 B@7 C B@7 C B@7 D E B@6 C B@15 F E B@2 ~ G B H I J K L M L M B@4 N@2 O ~ P@3 O P@8 Q C B R ~@12
>`.pickRestart({
  A: "c2@2 c2 ~ eb2 ~ d2 ~ bb1 ~@2 bb1 c2 ~ d2 ~", B: "c2@2 c2 ~ eb2 ~ d2 ~ bb1!2 ~ bb1 c2 ~ d2 ~", C: "c2 ~@7",
  D: "c2@2 ~@7 c2 ~@2 c2 ~ c2@2", E: "c2 ~ c2 ~ eb2 ~ d2 ~ bb1!2 ~ bb1 c2 ~ d2 ~", F: "c2 ~@6 c2",
  G: "c2@2 c2 ~@6 bb1 ~ bb1 c2 ~ d2 ~", H: "c2@2 c2@3 ~@11", I: "c2@2 eb2@3 ~@11",
  J: "c2@2 c2 ~ eb2 ~ d2 ~ db2!2 ~ db2!2 ~ d2 ~", K: "c2@2 c2 ~ eb2 ~ d2 ~ db2 ~ db2 ~ db2 ~ db2 ~",
  L: "c2@2 c2 ~ eb2 ~ d2 ~ bb1!2 ~ g1 bb1 ~ c2 ~", M: "bb1@2 c2 ~ eb2 ~ d2 ~ bb1!2 ~ g1 bb1 ~ c2 ~",
  N: "c2@2 c2 ~ eb2 ~ d2 ~ bb1!2 ~ g1 c2 ~ d2 ~", O: "bb1 ~@7", P: "bb1!2 ~ c2 ~@2 db2 ~ bb1!2 ~ c2 ~@2 db2 ~",
  Q: "c2@2 c2 ~@3 db2 ~ bb1!2 ~ bb1 ~@2 bb1 ~", R: "c2@2 c2 ~ eb2 ~ d2 ~ bb1!2 ~ bb1 c2 ~@3",
})).s("gm_slap_bass_2").gain(0.52)

// bass · slap bass 2 · "SLAPBASS 2" · soft notes
const bass_soft = note("<~@32 A ~@28 B ~@29 C ~@2 D E@4 ~@8>".pickRestart({
  A: "~@11 c2 ~@4", B: "~@4 eb2 ~ d2 ~ bb1 ~@7", C: "~@6 b1 ~", D: "~@14 d2 ~",
  E: "c2@2 c2 ~ eb2 ~ d2 ~ bb1!2 ~ bb1 c2 ~ d2 ~",
})).s("gm_slap_bass_2").gain(0.19)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~ A B A C A B A C A@7 ~ A@4 D A@2 ~ A@7 ~ A@4 D A E F A@5 B A C A@7 ~ A@3 ~ A@2 ~@2 A G A@10 H I A@2 H I A@9 ~ A@6 ~@8
>`.pickRestart({
  A: "~@4 g3@3 ~@5 g3@3 ~", B: "~@4 g3@3 ~@5 g3@2 ~@2", C: "~@2 g3 ~@3 g3 ~", D: "c4@3 ~ g3@3 ~@5 g3@3 ~",
  E: "~@4 g3@3 ~@5 g3@4", F: "~@13 db0!3", G: "~@4 g3@3 ~ g3@3 ~ g3@3 ~", H: "g3@3 ~@13", I: "~@12 g3@3 ~",
})).s("gm_electric_guitar_muted").gain(0.54)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@2 A ~ A B C B D ~@2 E ~@3 E ~@25 A ~ A ~ B F B G A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~@5 A ~@10 H ~ I J ~@5 K ~ E ~ L ~@11
>`.pickRestart({
  A: "[eb3,bb3,c4,eb4]@3 ~@13, [e4,f4] ~@15", B: "~@2 c3@2 eb3@3 g3 f3 eb3 c3@6",
  C: "[eb3,bb3,c4,eb4]@2 c3@2 eb3@3 g3 [eb3,bb3]@7 ~, [e4,f4] ~@15", // Cm7 Eb5 Fmaj7
  D: "[eb3,bb3,c4,eb4]@2 c3@2 eb3@3 [g3,f4] ~@4 eb4@4, [e4,f4] ~@7 [eb3,bb3,g4]@7 ~", E: "[eb3,bb3,c4,eb4,e4,f4] ~@7",
  F: "[eb3,bb3,c4,eb4]@2 c3@2 eb3@3 c4 [eb3,bb3]@7 ~, [e4,f4] ~@15", // Cm7 Eb5 Fmaj7
  G: "[eb3,bb3,c4,eb4]@2 c3@2 eb3@3 [g3,f4] [eb3,bb3,g4] ~@7, [e4,f4] ~@15", // Cm7 G7 Eb Fmaj7
  H: "[eb4,bb4,c5,eb5] eb4 ~@2 [eb4,bb4,eb5] ~ [eb4,bb4,c5,eb5] eb5 ~@2 [eb4,bb4,c5,eb5] ~@5", // Cm7 Eb5 Cm7
  I: "~@10 bb3 [c3,f4] ~@2 [c3,f4] ~", J: "eb4 ~@15",
  K: "~@2 f4!2 [f3,f4]!2 ~ [f4,ab4] ~ [f3,eb4,g4] ~ f4 [f3,f4] ~ [eb3,c4,eb4,ab4] ~", L: "f4 ~@7",
})).s("gm_overdriven_guitar").gain(0.57)

// chords · overdriven guitar · "OVERDRIVE" · soft notes
const overdriven_guitar_soft = note("<~@82 A ~ B C ~@5 D ~@3 E ~ F ~@9>".pickRestart({
  A: "~ [bb4,c5,eb5] ~@2 c5 ~@2 [eb4,bb4,c5] ~@8", B: "~@11 [eb3,bb3] ~ [c3,eb3,bb3] [eb3,bb3] ~",
  C: "[c3,eb3,bb3] ~@15", D: "~@2 [f3,c4] c4 ~ c4 ~ [f3,c4] ~ c4 ~ [f3,c4] c4 ~@3", E: "[eb3,bb3,c4,eb4,e4] ~@7",
  F: "[eb3,bb3,c4,eb4,e4,f4] ~@7", // Ebsus2
})).s("gm_overdriven_guitar").gain(0.29)

// chords · synth brass 2 · "SYNBRASS 2" · Eb D5 Eb5 C5 Cm7
const synth_brass_2 = note(`<
  ~@75
  [~@2 [eb3,g3,g4,eb5] ~ [d3,a3,a4,d5] [eb3,bb3,bb4,eb5] ~ [c3,g3,g4,c5] ~@6 [g3,c4,bb4,eb5] ~]
  [~@4 [g3,c4,bb4,eb5]!2 ~ [g3,c4,bb4,eb5] ~ [g3,c4,bb4,eb5] ~@2 [g3,c4,bb4,eb5] ~@3]
  ~@30
>`).s("gm_synth_brass_2").gain(0.5)

// other · tenor sax
const tenor_sax = note("<~@3 A@2 ~@16 B@3 ~@13 B@3 ~@3 B@2 ~@20 A ~@27 B@2 ~@12>".pickRestart({
  A: "~ f6@6 ~", B: "~@2 f6@11 ~@3",
})).s("gm_tenor_sax").gain(0.59)

// other · tenor sax · soft notes
const tenor_sax_soft = note("<~@95 [~@2 f6@11 ~@3]!4 ~@8>").s("gm_tenor_sax").gain(0.3)

// other · piccolo
const piccolo = note("<~@5 A B A B ~@36 C B C D ~@58>".pickRestart({
  A: "~@2 f5!2 eb5@2 c5 bb4 c5 eb5 c5@5 ~", B: "~@2 f5!2 eb5@2 eb5 c5 eb5@6 ~@2",
  C: "~@2 f5 ~ eb5@2 c5 bb4 c5 ~ c5@5 ~, ~@9 eb5@2 ~@5", D: "~@2 f5 ~ eb5@2 eb5 c5 eb5@6 ~@2",
})).s("gm_piccolo").gain(0.56)

// other · piccolo · soft notes
const piccolo_soft = note(`<
  ~@45
  [~@3 f5 ~@12]
  ~
  [~@3 f5 ~@12]!2
  ~@48
  [~@8 c5 ~ c5 ~ eb5 ~ eb5 ~]
  [f5@2 eb5 ~ f5@2 ~@10, eb5 ~@2 c5@2 ~@11]
  ~@8
>`).s("gm_piccolo").gain(0.08)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~@16 A@4 B@4 C D ~@3 E F ~@2 G@5 H@2 I@2 ~@2 J K L@2 M N@2 ~ O P Q R ~ S@3 T@2 U ~ V@3 ~ W ~@2 X@3 Y ~@2 Z ~@2 AA@3 AB
  AC@2 ~@7 AD ~@13
>`.pickRestart({
  A: "[~@16 [bb3,eb4]@5 ~@11, ~@7 c4@2 ~@7]/2", // Eb5
  B: "[~@16 [bb3,eb4]@4 ~@2 f4 ~ f4 ~ f4 ~ f4 ~@3 g4@4 f4@3 g4@4 ~@5 [bb3,eb4]@5 ~@11, ~@14 c4@4 ~@12 f4@3 ~@31, ~@31 eb4@3 ~@12 c4@4 ~@14]/4", // Eb5
  C: "~@12 [bb3,f5] ~ [bb3,f5]@2", D: "[c4,eb4]@5 ~@11", E: "~ g4!4 ~ g4!2 ~ g4 ~ g4!2 ~ g4@2", F: "f4 ~",
  G: "[[c4,eb4]@5 ~@11 [eb4,g4]@8 [d4,f4]@6 ~@2 [bb3,eb4]@5 ~@3 ab4@8 [eb4,g4]@8 [d4,f4]@6 ~@2 [bb3,eb4]@4 ~@2 f4 ~ f4 ~ f4 ~ f4 ~@2 eb4, g4@4 f4@5 ~@6 c4@2 ~@14 c4@2 ~@6 f4, ~@32 g4@8 f4@11 ~@13 g4@8 ab4@7 ~]/5", // Cm Eb Dm Eb5 Eb Dm Eb5
  H: "[g4@3 ~ g4 g4@2 ~ f4@2 ~@2 eb4@2 ~@2 [bb3,eb4]@5 ~@11, eb4@8 d4@7 ~@17, ~@7 bb4@3 g4@2 ~@2 c4@4 ~@14, ~@11 f4@4 ~@17]/2", // Eb5
  I: "[~@11 f4@7 ~@14, ~@5 eb4@2 ~@9]/2", J: "~@2 bb5 ~ bb5 ~@2 g5@3 ~@3 c4@3, ~@6 bb5@3 ~@7", K: "eb4@5 ~@11",
  L: "[~@16 eb4@5 ~@11, ~@7 c4@2 ~@7]/2", M: "~@8 g5@3 ~@5, ~@7 bb5@4 ~@5", N: "[~@6 c4 bb3@2 ~@7]/2", O: "~@7 c4",
  P: "eb4 ~@6 f4!2 ~ f4 ~ f4@2 g4 ~, c4@2 c5@5 ~ ab4@8, ~ eb4@4 ~@6 eb4@3 ~@2, ~ g4@2 ~ g4@5 ~@7",
  Q: "~ eb4 [d4,f4]@2, g4@9 ~@7, eb4@3 ~@13, ~ f4@6 ~@9", R: "eb4@5 ~ g3@2 ~@6 eb3@2, ~@2 c4 f3, ~@10 g3@5 ~",
  S: "[~@6 eb4 ~@5 eb4 ~ eb4 ~ ab3 ~ ab3 ~ ab3@3 ~@5 f4 ~@3 eb4@3 ~@13, ~@15 eb4@3 ~@5 g3@4 ~@2 eb4@2 ~@17, ~@25 bb4@5 f4@4 ~@14]/3",
  T: "[~@10 d4 ~ c4@2 ~ bb4@3 [bb3,g4] g4 [bb3,g4] ~ g4!3 [bb3,g4] ~@2 [bb3,g4] ~ [bb3,g4] g4, ~@7 d4@2 ~@2 bb3@3 ~@18, ~@8 eb4@4 d4 ~ [d4,eb4,g4]@3 ~@15]/2", // Eb Ebmaj7
  U: "[ab3,f4] ~ [ab3,f4] ~ [ab3,f4]@2 g4 ~@2 c4@3 ~@2 g3@2, g4 ~@2 bb3 [d4,g4]@4, ~@7 [g3,eb4]@3 ~@2 eb4@4", // Db G5 Cm
  V: "[c4@5 ~@5 g4@3 ~@3 eb4@4 bb5 ~@3 bb3@2 ~@4 g3 [g3,g4]@3 ~@14, ~@5 c5@5 ~@18 [ab3,c4]@4 ~@16, ~@8 bb4@4 ~@2 c4@4 ~@9 bb3@2 ~ ab4@3 ~@15]/3", // G Ab
  W: "~@7 eb4@5 ~@4",
  X: "[[eb4,g4]@4 ~@4 [bb3,bb4]@2 ~@2 g4@3 ~@6 f3@2 [c4,c5], f6@11 ~@3 [c4,c5]@5 ~@11 [c4,c5]@4 ~@4 g3@6 ~@4, ~@4 [f4,ab4,eb6]@5 ~@7 bb4@2 ~@6, ~@8 eb4@4 d4@5 eb4@3 ~@4, ~@16 g4@7 ~@9 g4@8 ~@8]/3", // Eb Bb C Fm7
  Y: "c5 ~@6 [c4,c5], ~ f3@7, ~ c3", Z: "~@4 f4@3 g4@3 ~@6, ~ g4@2 ~@5",
  AA: "[g4@8 ~@8 eb4@2 ~@6 d4@8 g4!3 g4@2 ~ [g4,bb4] g4 [g4,bb4] [g4,bb4]@3 ~@4, eb4@7 ~ f4@16 f4@16 ~@8, ~@8 g4@5 ~@11]/3", // Gm
  AB: "[c3,eb3] ~ c3 ~ c3@2 bb2@2 [c3,eb3] ~ c3 ~@3 bb2@2, ~ eb3@2 ~@5", // Cm
  AC: "[f3 eb3 ~ c3 c3@2 [eb3,f3] ~ [c3,eb3] c3 eb3@2 c3@2 ~ g5@3 ~@14, c3@2 f3@2 eb3 ~@2 f3@5 ~@20, ~@10 c3 ~@3 [bb2,bb5]@3 ~@15]/2", // Ebsus2 Cm Bb
  AD: "eb4@5 ~ bb5 ~ [f4,ab4]@8, g4@9 ~@7, ~@7 bb5@3 ~@6", // Fm
})).s("gm_piano").gain(0.64)

// chords · piano · "A.PIANO 2" · soft notes
const piano_soft = note(`<
  ~@21 A B ~@10 C ~@3 A D ~@16 E ~ F G ~ H I@2 ~ J K ~@7 L M ~@2 N ~@2 O@2 P Q@2 ~@9 R@5 S ~@7
>`.pickRestart({
  A: "~@7 eb4 ~ eb4 ~ eb4 ~ eb4 ~@2", B: "~@3 eb4 ~@4", C: "~@8 ab4@7 ~", D: "~@8 g4 ~@7", E: "~ bb3 ~@2, ~ c4@2 ~@5",
  F: "~@2 eb4 eb4@2 ~@2 eb4 ~ eb4 ~ eb4 ~@4", G: "~@6 bb3@3 ~@7", H: "~@10 c4!2 ~@4",
  I: "[~@3 bb3 ~@2 bb3!2 ~@3 [bb3,g4] ~@3 bb3@3 ~@14]/2", J: "~@9 ab4@3 ~@4",
  K: "~@5 bb5@3 ~@2 [ab3,c4] g3!2 ~@3, ~@2 d4 ~", L: "bb3@2 c4@2 ~@3 eb3", M: "g3 eb3@2 ~ eb3@7 ~@5, c4 ~@7",
  N: "~@6 eb4@3 ~@7", O: "[~@4 ab4@5 ~@7]/2", P: "bb4!3 bb4@2 ~@2 bb4 ~@8",
  Q: "[~@4 d3@2 ~@6 c3@3 ~ eb3 ~ eb3 ~@3 bb2@3 ~@7, ~@10 eb3@4 ~ a2@2 ~@15]/2",
  R: "[~@6 bb5 ~@9 bb3@2 ~@4 bb5 ~ eb3@6 d3 ~ d3@3 ~@3 bb5 bb5@3 ~@7 bb3@2 ~@3 [bb4,bb5] g4 bb4 g4 bb4 g4 bb4 g4 ~@6 bb4 ~ [bb4,bb5] bb4 bb4@2 c5@3 ~ c4@2, [eb4,g4]@5 ~@2 c4@2 ~ c4@2 ~@4 c3@4 ~@20, ~@7 bb5@3 ~@6 g4@8 ~@22 c4@4 ~@13 g4@3 ~@14, ~@8 [d4,f4]@10 ~@4 g3@4 ~@5 eb3@4 ~@13 eb4@3 ~@11 bb4@3 ~@15, ~@16 eb4 ~ eb4@5 bb5@3 ~@29 bb5@3 ~@6 c5@6 ~ bb5@3 ~@6]/5", // Bb Eb Dm
  S: "eb4 ~@7",
})).s("gm_piano").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@15 B A@7 B A@7 C A@7 D A@15 E A@3 ~ A@2 ~@2 A@12 B F A@3 B A@9 B G H ~@12
>`.pickRestart({
  A: "x ~ x ~@3 x ~ x ~@2 x!2 ~ x ~", B: "x", C: "x ~@7 x ~@2 x ~@2 x ~", D: "x ~@13 x!2", E: "x ~@6 x", F: "~@3 x",
  G: "x ~ x ~@3 x ~ x!2 ~ x!2 ~ x ~", H: "x ~ x ~@3 x ~ x!2 ~ x!2 ~@3",
})).gain(0.64)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~ A@15 ~ A@7 ~ A@7 ~ A@7 ~ A@15 ~ A@3 ~ A@2 ~@2 A@12 ~@2 A@3 ~ A@9 ~@2 B C@4 ~@8
>`.pickRestart({
  A: "~@9 x ~@6", B: "~@7 x", C: "x ~ x ~@3 x ~ x!2 ~ x!2 ~ x ~",
})).gain(0.16)

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

// drums · clap
const clap = s("cp").struct(`<
  ~ A@15 ~ A@7 ~ A@7 ~ A@7 ~ A@15 ~ A@3 ~ A@2 ~@2 A@12 ~@2 A@3 ~ A@9 ~ A@6 ~@8
>`.pickRestart({
  A: "~ x ~ x",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@15 B A@7 B A@7 B A@7 B A@15 B A@3 C A@2 C@2 A@12 B ~ A@3 B A@9 B A D ~@12
>`.pickRestart({
  A: "x!8", B: "x", C: "~ x ~@2", D: "x!7 ~",
})).gain(0.56)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@94 [~ x ~ x ~ x ~ x] [x!8]!4 ~@8>").gain(0.16)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A@8 B@7 ~ B@7 ~ B@7 C B@7 D B@4 A@4 B@7 E B@3 C B@2 ~ C B F B@10 ~@2 B@3 G B@9 ~ B ~@13
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@11 x!2 ~@3", C: "~@3 x", D: "~@14 x!2", E: "~@7 x", F: "~@4 x ~@3 x ~@2 x!2 ~@3",
  G: "~@13 x ~@2",
})).gain(0.64)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@94 [~@11 x!2 ~@3]!5 ~@8>").gain(0.16)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@15 B A@7 B A@7 B A@7 B A@15 B A@2 C ~ A@2 B ~ A@12 B ~ A@3 B A@9 B A@6 B ~@7
>`.pickRestart({
  A: "x!16", B: "x", C: "x!14 ~@2",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A@15 ~ A@7 ~ A@7 B A@7 ~ A@15 C A@3 ~ A@2 ~@2 A@12 ~@2 A@3 ~ A@9 ~ A ~@13
>`.pickRestart({
  A: "~@8 x!2 ~ x!2 ~@3", B: "~@11 x ~@4", C: "~@7 x",
})).gain(0.24)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@94 [~@8 x!2 ~ x!2 ~@3]!5 ~@8>").gain(0.08)
// … 58 more lines

More by Prince