Strudelify
Little Red Corvette cover art

1982 · 1999

Little Red Corvette

Prince

KeyC majorTempo120 bpm
0:00/0:00
// Little Red Corvette — Prince
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 136 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.

// bass · electric bass finger · "L R Corve"
const bass = note(`<
  ~@16 A B C A@2 B D E F G F C H G I J ~@8 A B C A@2 B D E F G F C H G I J F G F C H G I J ~@6 K L F G F C H G I J F G F
  C H G I J F G F C H G I J ~@10 M N ~@4 F G F C H G I J F G F C H G I J F G F C H G I J
>`.pickRestart({
  A: "f1@2 ~@2 f1!2 ~@2", B: "g1@2 ~@2 g1!2 ~@2", C: "a1@2 ~@2 a1!2 ~@2", D: "a1@3 ~@5 a1@2 a1@2 ~@4",
  E: "g1@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2 g1@2", F: "f1@2 ~@2 g1!2 ~@2", G: "c2@2 ~@2 c2!2 ~@2",
  H: "f1@4 ~@4 g1 ~ g1@2 ~@4", I: "f1@5 ~@3 f1 ~ f1@2 ~@4", J: "g1 ~@3", K: "a1@13 ~ a1@2",
  L: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", M: "~@2 g2 g#2 a2 c3 d3 a2 c3 ~ c3 ~ a2 g2 d#2 e2", N: "a2@7 ~",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · pad warm
const pad_warm = note(`<
  A B C D E F G H A B C D E F G H A B C D E F G I ~@8 A B C D E F G H ~@3 J ~@23 J ~@28 A B C D E F G H A B C D E F G H
  ~@24
>`.pickRestart({
  A: "[f3,a3,c4]", B: "[g3,b3,d4]", C: "~@8 g3@7 ~, [a3,c4,e4]", D: "[a2,c3,f3]", E: "[c3,f3], a3@7 ~",
  F: "[g3,b3]@13 ~@3, d3", G: "~@8 g3@7 ~, [a3,c4,e4]@15 ~", H: "[c3,f3,a3]@15 ~", I: "[d3,g3,b3]@15 ~", J: "c6 g5",
})).s("gm_pad_warm").gain(0.25)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@25 A ~ B ~ A ~ C ~@17 A ~ B ~ A ~ C D@2 E@2 F G H I@2 ~@6 J ~ A ~ B ~ A ~ C K L M N ~ O ~ P Q@3 R S@2 T U ~@3 V W
  ~@5 X Y ~@5 A ~ B ~ A ~ C ~ A ~ B ~ A ~ C ~ A ~ B ~ A ~ C
>`.pickRestart({
  A: "~ c4 [d4,g4] ~ [d4,g4]@2 [d4,g4] ~", B: "~ c4 [d4,g4] ~ [d4,g4]@4",
  C: "~@3 b3 [c4,e4] ~ [b3,d4,g4]@2, ~@3 g4@2 ~@3, ~@6 d4 ~@9", // C G
  D: "[[c4,g4,c5]@2 [c4,g4,c5]@2 ~@2 [d4,g4,c5]@2 ~@2 [d4,g4,c5]@3 ~ e4@4 c4@2 [f4,g4,c5]@2 c4 ~ e4@2 f4@2 e4@2 ~@2, ~@7 [g4,c5]@3 ~@2 [g4,c5]@3 ~, ~@14 d4 ~@17]/2", // C5 Csus2 Fsus2 C5
  E: "[~@2 g3 a3 c4 ~ e4@4 d4 ~ b3 c4@14 ~@5]/2", F: "~@2 c5@2 a4 ~ g4@7 ~ g4 c5", G: "e5 g4 c5 e5 g4 c5 d5 ~ e5@8",
  H: "~@4 g4@4 a4@3 b4@2 ~ c5@2", I: "[d5@3 d5@2 c5 d5@2 [d4,g4]@3 e4@2 ~ e4@18]/2",
  J: "f4 e4 d4 c4 e4 d4 c4 b3 d4 c4 b3 a3 c4 b3 a3 g3",
  K: "[f4,a#4]@2 [g4,c5] ~ [g4,c5]@2 [f4,a#4]@2 [g4,c5] ~ [g4,c5]@2 [f4,a#4]@2 [g4,c5] ~", // A#5 C5 A#5 C5 A#5 C5
  L: "[g4,c5]@2 [f4,a#4] ~ [g4,c5] ~ [g4,c5]@2 [f4,a#4]@2 [g4,c5] ~ [g4,c5]@2 [g4,c5]@2", // C5 A#5 C5 A#5 C5
  M: "[f4,a#4]@2 [g4,c5] ~ [g4,c5]@2 [f4,a#4]@2 [g4,c5] ~ [g4,c5]@2 [f4,a#4]@2 [g4,c5]@2", // A#5 C5 A#5 C5 A#5 C5
  N: "[g4,c5]@2 [f4,a#4] ~ [g4,c5] ~ [g4,c5] ~ [g4,c5]@8", O: "e4@2 f4@2 e4@2 f4@2 [e4,g4]@3 ~ [e4,g4,a4] f4 ~@2",
  P: "~@5 c5 d5 e5", Q: "[f5@4 f5@2 f5@3 ~ f5@4 f5@4 e5@2 f5@2 f5@4 e5@2 f5 ~ f5@4 e5@2 c5@2 g4@8 g4 a4]/3",
  R: "c5 ~ d5@4 [a4,c5] c5 d5@2 f5@2 d5@4", S: "[c5@4 d5@2 d5@4 d5@4 f5@4 g5@4 f5@2 e5@3 f5@2 g5@2 ~]/2",
  T: "g5@7 ~ g5@3 g5@3 g5@2", U: "g5@4 g5@2 g5@2 g5@3 g5@3 g5@2", V: "~@8 g3 a3 e3 g3 d3 e3 g2 a2", W: "c3@13 ~@3",
  X: "~@2 g3 g#3 a3 c4 d4 c4 e4 ~ e4 ~ d4 c4 a3 g3", Y: "e4@13 ~@3",
})).s("gm_overdriven_guitar").gain(0.38).pan(0.7)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@27 A ~@2 B C ~@8 D E F G D E F H ~@3 A ~@2 B C ~@6 B C ~@7 I ~@3 A ~@2 B C ~@3 A ~@2 B C ~@3 A ~@2 B J ~@19 A ~@2 B
  C ~@3 A ~@2 B C ~@3 A ~@2 B C
>`.pickRestart({
  A: "~ g3", B: "~@2 [f2,c3]@2 [f2,c3] ~ f2 ~ [f2,c3]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3] ~",
  C: "[g2,d3]@2 [g2,d3]@2 d3 ~ [g2,d3]@9 ~", D: "~@4 [f2,c3]!2 ~@2", E: "~@4 [g2,d3]!2 ~@2",
  F: "~@8 [a2,e3]@2 [a2,e3] ~@5", G: "~@2 [f2,c3] ~ [f2,c3]!2 ~@2",
  H: "~@2 [g2,d3]@2 g2 ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3]@3 ~", // G5
  I: "a4 g4 f4 e4 g4 f4 e4 d4 f4 e4 d4 c4 e4 d4 c4 b3", J: "[g2,d3]@2 [g2,d3]@2 d3 ~ [g2,d3]@10",
})).s("gm_distortion_guitar").gain(0.35).pan(0.4)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note(`<
  ~@30 A B ~@15 C ~@6 A B ~@6 A B ~@14 A B ~@6 A B ~@6 A B ~@22 A B ~@6 A B ~@6 A B
>`.pickRestart({
  A: "~@6 c3 ~@9", B: "f2@2 ~@2 g2 ~@11", C: "~@4 d3 ~@11",
})).s("gm_distortion_guitar").gain(0.2).pan(0.4)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@22 A ~ B ~@3 C ~@11 D ~@3 E F ~ G B ~@3 C ~@3 B ~@3 C ~@11 B ~@3 C ~@3 B ~@3 C ~@3 B ~@3 C ~@3 H@2 ~@4 I J K ~@5 L@2
  M ~@3 C ~@3 B ~@3 C ~@3 B ~@3 C ~@3
>`.pickRestart({
  A: "e4@2 e4 ~ e4 ~ e4 ~ e4@2 c4@3 ~@3",
  B: "[f4,a4,c5,c7]@3 ~ [f4,a4,c5] ~ [g4,b4,d5,d7] ~@3 [g4,b4,d5,d7]@4 [g4,c5,e7] ~, ~@2 c7 ~@4 e5", // F G C
  C: "[f4,a4,c5,c7]@4 [f4,a4,c5] ~ [g4,b4,d7] ~@3 [g4,b4,d5,d7]@4 [c5,e5]@2, ~@4 c7@2 d5@2 ~@6 [g4,e7] ~", // F G C
  D: "[a4,c5]@2 [a4,c5] ~ [a4,c5]@2 [a4,c5] ~@9", E: "c4@2 b3@2 c4 ~ c4@4 b3@2 c4@2 c#4 ~", F: "d4 c#4 d4 c#4 d4 ~@3",
  G: "~@6 [f4,a4]@4 [e4,g4]@2 [c4,e4]@3 ~", H: "[[c5,g5,c6,g6,c7,g7]@31 ~]/2", I: "~@7 g4",
  J: "~ e4@2 d4 e4@2 f4@2 e4 d4 ~ c4 a3@2 g3 ~", K: "f5@15 ~",
  L: "[~@14 [g4,c5]@4 [e4,g4]@2 ~ [e4,g4]@2 ~ [e4,g4]@2 [g4,c5]@3 [e4,g4]@2 ~]/2", // C5 Em C5 Em
  M: "[f4,g4,a4,c5,c7]@3 ~ [f4,a4,c5] ~ [g4,b4,d5,d7] ~@3 [g4,b4,d5,d7]@4 [g4,c5,e7] ~, ~@2 c7 ~@4 e5", // F G C
})).s("gm_synth_brass_1").gain(0.4).pan(0.3)

// chords · pad warm
const pad_warm_2 = note(`<
  ~@24 A@2 B C B D E F ~@3 G ~@3 G E H I J K L M ~ A@2 B C B D E F A@2 B C B D E F E H I J K L M ~ A@2 B C B D E F A@2 B
  C B D E F A@2 B C B D E F ~@16 A@2 B C B D E F A@2 B C B D E F A@2 B C B D E F
>`.pickRestart({
  A: "[[f3,a3,c4]@6 [g3,b3,d4]@7 ~ [g3,c4,e4]@10 [g3,b3,d4]@8]/2", B: "[f3,a3,c4] [g3,b3,d4]",
  C: "[a3,c4,e4] [g3,b3,d4]", D: "[g3,c4,e4] [g3,b3,d4]", E: "[f3,a3,c4]", F: "[g3,b3,d4]@13 ~@3", G: "c6 g5",
  H: "[g3,b3,d4]", I: "~@8 g3@7 ~, [a3,c4,e4]", J: "[a2,c3,f3]", K: "[c3,f3], a3@7 ~", L: "[g3,b3]@13 ~@3, d3",
  M: "~@8 g3@7 ~, [a3,c4,e4]@15 ~", // Am
})).s("gm_pad_warm").gain(0.3)

// other · guitar harmonics
const guitar_harmonics = note("<~@43 [c4 g3] ~@92>").s("gm_guitar_harmonics").gain(0.3)

// other · synth drum
const synth_drum = note("<~@35 A ~@3 A ~@3 B ~@3 B ~@16 A ~@3 A ~@2 B ~@39 C ~@24>".pickRestart({
  A: "~@4 d#4 ~ f#3 ~@5 f#2 ~@3", B: "~@8 e3!3 ~ b2!3 ~", C: "c4 ~@2 a#3 ~@4 c4 ~ f3 ~ c#3 ~ c#2 ~",
})).s("gm_synth_drum").gain(0.4)

// other · synth drum · soft notes · F#sus2
const synth_drum_soft = note("<~@111 [~ a#3 c4 ~@2 a#3 c4 a#3 ~@5 [f#2,g#2] ~@2] ~@24>").s("gm_synth_drum").gain(0.2)

// drums · kick
const kick = s("bd").struct("x ~@3 x!2 ~@2").gain(0.48)

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

// drums · clap
const clap = s("cp").struct(`<
  ~@25 A ~ A ~ A ~@19 A ~ A ~ A ~@3 A ~ A ~ A ~@11 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@19 A ~ A ~ A ~@3 A ~ A ~ A
  ~@3 A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@2 x!2 ~@4",
})).gain(0.6)

// drums · low tom
const low_tom = s("lt").struct("<~@4 A ~@6 B ~@3 B ~@7 C ~@23 C ~@7 D ~@15 C ~@28 A ~@7 A ~@18 E ~@7 E>".pickRestart({
  A: "~ x", B: "~ x ~ x", C: "~@13 x ~@2", D: "~@3 x", E: "~@5 x ~ x",
})).gain(0.6)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@18 B ~@23 B ~@7 C ~@15 B ~@28 A ~@7 A ~@27>".pickRestart({
  A: "~ x", B: "~@3 x", C: "~@5 x ~@2",
})).gain(0.6)

// drums · high tom
const high_tom = s("ht").struct("<~@11 [~@3 x ~@4] ~@3 [~@3 x ~@4] ~@120>").gain(0.6)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~
  B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A
  ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A
>`.pickRestart({
  A: "~@5 x!3", B: "~@6 x!2",
})).gain(1.22)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@4
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.91)

stack(
  bass, pad_warm, overdriven_guitar, distortion_guitar, distortion_guitar_soft, synth_brass_1, pad_warm_2,
  guitar_harmonics, synth_drum, synth_drum_soft, kick, snare, clap, low_tom, hihat, hihat_soft, mid_tom, high_tom,
  cabasa, cabasa_soft
)

More by Prince