Strudelify
Pink Cadillac cover art

1991 · Everlasting

Pink Cadillac

Natalie Cole

KeyB♭ majorTempo125 bpm
0:00/0:00
// Pink Cadillac — Natalie Cole
// 125 bpm, 4/4, key A# 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 137 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(125/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A ~@3 B C B C B C B C B C B C B C B C B C B C B D E F E G B C B H I@3 J C@3 D F K C H I L C@2 ~@2 B C B C B C B D E F
  E G B C B H I@3 J C@3 D F K C H I L C@2 M N O P M N Q R B C B C B C B D E F E G B C B H I@3 S C@3 D F K C H I L C@5 D
  F K C H I L C T ~
>`.pickRestart({
  A: "bb2 ~@15", B: "bb2 ~@5 ab2 ~ f2 ~@5 ab2 ~", C: "bb2 ~ bb2 ~ bb2 ~ ab2 ~ f2 ~ f2 ~ ab2 ~ a2 ~",
  D: "bb2 ~ bb2 ~ bb2 ~ ab2 ~ f2 ~ f2 ~ db3 ~ d3 ~", E: "eb3 ~@5 db3 ~ bb2 ~@5 db3 ~",
  F: "eb3 ~ eb3 ~ eb3 ~ db3 ~ bb2 ~ bb2 ~ db3 ~ d3 ~", G: "eb3 ~ eb3 ~ eb3 ~ db3 ~ bb2 ~ f2 ~ ab2 ~ a2 ~",
  H: "bb2 ~ bb2 ~ bb2 ~ ab2 ~ f2 ~ f2 ~ eb2 ~ e2 ~", I: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~",
  J: "f2 ~ f2 ~ f2 ~ f2 ~@9", K: "eb3 ~ eb3 ~ eb3 ~ db3 ~ bb2 ~ bb2 ~ ab2 ~ a2 ~",
  L: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ ab2 ~ a2 ~", M: "eb3@3 db3 bb2@3 eb2", N: "~@7 bb2 db3 ~ db3@2 eb3@2 f3@2",
  O: "db3@3 b2 ab2@3 ~", P: "db2@2 ~@5 db2!2 ~ db2@2 ~@4", Q: "db3@6 b2@2 ab2@3 ~@3 f2@2", R: "~ f2@3",
  S: "f2 ~ f2 ~ f2 ~ f2 ~ db2 ~@3 eb2 ~@3", T: "bb2 ~ f2 ~ ab2 ~ bb2 ~ bb2 ~@5 bb2 ~",
})).s("gm_acoustic_bass").gain(0.57)

// other · tenor sax
const tenor_sax = note(`<
  A ~@8 B@5 C@4 ~@9 D@3 ~@6 E F G@2 H@4 ~@3 I@2 J@2 ~ K ~@6 L@2 ~@2 M ~@6 N O G@2 H@4 ~@3 I@2 P ~@6 Q R K ~@2 S ~@3 T@4
  U ~@6 N O G@2 H@4 ~@3 I@2 P G@2 H@4 ~@3 I@2 P ~
>`.pickRestart({
  A: "bb2 ~@15", B: "[~@14 ab3@6 g3 ~@3 f3 ~@5 ab3@6 g3 ~@3 f3 ~ db3@2 c3@2 bb2@23 ~ bb2@2 d3@2 f3 ~ g3 ~ ab3@2]/5",
  C: "[~@4 g3 ~@3 f3 ~@5 ab3@6 g3 ~@3 f3 ~ db3@2 c3@2 bb2@23 ~ bb2 ~ d3@2 f3 ~ g3 ~ bb3 ~]/4",
  D: "[~@14 bb2@31 ~ bb3 ~]/3", E: "~ bb2 ~ db3 ~ eb3 ~ f3", F: "~@4 [db3,db4] ~ [eb3,eb4] ~",
  G: "[ab3 ~ g3 ~ f3 ~@2 ab3@2 ~ g3 ~ f3 ~@3]/2",
  H: "[ab3@2 ~@2 g3@2 ~@2 f3@2 ~@4 ab3@5 ~ g3@2 ~@2 f3 ~ db3@2 c3@2 bb2@23 ~ bb2@2 d3@2 f3@2 g3 ~ bb3 ~]/4",
  I: "[~@2 f3 ~ g3 ~ bb3 ~@7 bb3@6 ~@12]/2", J: "[~@10 f3 ~ g3 ~ bb3@4 ~@10 bb3@2 ~@2]/2", K: "bb3 ~@7",
  L: "[~@2 bb2 ~@3 db3@2 ~@2 eb3@2 f3@2 bb2@15 ~@3]/2", M: "~@2 ab3 ~@3 f3 ~@3 eb3 ~ db3 ~ bb3 ~",
  N: "~@10 eb3 ~@3 f3@2", O: "~@8 [db3,db4]@2 ~@2 [eb3,eb4] ~@3", P: "~@10 f3 ~ g3 ~ bb3 ~",
  Q: "~@2 bb2@2 ~@2 db3 ~@3 eb3 ~@3 f3 ~", R: "~@4 [f3,ab3]@11 ~", S: "~@10 g3 ~ g3 ab3 ~@2",
  T: "[~@2 bb2 ~@3 db3 ~@3 eb3 ~ f3 ~ bb2@19 ~ bb2 ~@3 db3 ~@3 eb3 ~ f3 ~ bb2@16 ~@2]/4",
  U: "~@2 bb3@2 ~@2 ab3 ~@3 f3 ~ ab3 ~ bb3 ~",
})).s("gm_tenor_sax").gain(0.46)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@4 A@5 B A B A B A B A B ~ A ~ A ~ A ~ A ~ C ~ C ~ A ~ A D@3 E A B A B C F A B ~@22 D@3 E A B A B C F A B D@2 A B
  ~@28 A B A B C F A B D@2 A B A B A B C F A B D@2 A B ~
>`.pickRestart({
  A: "~@4 [d5,f5,ab5,bb5]!5 ~@7", B: "~@2 [d5,f5,ab5,bb5]!7 ~@7", C: "~@4 [db5,f5,g5,bb5]!5 ~@7",
  D: "[c5,eb5,f5,a5]!16", E: "[c5,eb5,f5,a5]!8 [d5,f5,ab5,bb5] ~@7", F: "~@2 [db5,f5,g5,bb5]!7 ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.31)

// other · clavinet
const clavinet = note("<~@8 A B A B A B A B A B ~@32 C D ~@32 E F G H E F I J ~@45>".pickRestart({
  A: "bb4!4 ~@10 bb4!2", B: "bb4!3 ~@13", C: "bb4!16", D: "bb4!10 [bb4,d5,f5,g5]!2 ~@4",
  E: "[eb2,eb3]@3 [db2,db3] [bb1,bb2]@3 [eb1,eb2]", F: "~@7 [bb1,bb2] [db2,db3] ~ [db2,db3]@2 [eb2,eb3]@2 [f2,f3]@2",
  G: "[db2,db3]@3 [b1,b2] [ab1,ab2]@3 ~", H: "[db1,db2]@2 ~@5 [db1,db2]!2 ~ [db1,db2]@2 ~@4",
  I: "[db2,db3]@6 [b1,b2]@2 [ab1,ab2]@3 ~@3 [f1,f2]@2", J: "~ [f1,f2]@3",
})).s("gm_clavinet").gain(0.44)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~@44 A@2 ~@6 B@2 C@2 D@2 E@2 F@2 G@2 D@2 H@2 I J K@2 L ~ L ~ M ~ L ~@3 L ~ N@2 O P Q@2 R@3 ~@15 S@4 T@6 U@3 ~ V@8 U@3
  ~ U@3
>`.pickRestart({
  A: "[[c4,d4,f4,ab4]@27 ~@5]/2", B: "[[f4,ab4,bb4,c5]@15 ~]/2", C: "[~@3 d5@12 ~, [f4,ab4,bb4,c5]]/2",
  D: "[[f4,ab4,bb4,c5]@31 ~]/2", E: "[[f4,ab4,bb4,c5]@5 ~ [f4,ab4,bb4,c5,d5]@25 ~]/2", F: "[[bb3,db4,f4,g4]@31 ~]/2",
  G: "[bb3@6 [bb3,g4]@25 ~, [db4,f4]@31 ~]/2", H: "[~@6 d5@25 ~, [f4,ab4,bb4,c5]@31 ~]/2",
  I: "[bb3,eb4,g4]@5 ~ [c4,f4,a4]@9 ~", J: "[eb4,g4,bb4]@5 ~ [f4,a4,c5]@8 ~@2",
  K: "[[g4,bb4,eb5]@5 ~ [a4,c5,f5]@17 ~@9]/2", L: "~@2 f6 ~ eb6 ~ eb6 ~ d6 ~ bb5 ~@5",
  M: "~@2 f6 ~ eb6 ~ eb6 ~ db6 ~ bb5 ~@5", N: "[[db4,f4]@4 [db4,f4,bb4]@3 db4@5 [db4,bb4]@4, ab4@7 [f4,ab4]@9]/2",
  O: "db4@8 [db4,ab4]@6 [b3,eb4] ~, [eb4,gb4]@7 gb4", P: "~@2 b4 [b4,f5], ~ gb5",
  Q: "[[db4,f4]@4 [db4,f4,bb4]@3 [db4,f4,ab4]@5 [db4,f4]@2 [db4,f4,bb4]@2, ab4@7 ~@5 ab4@4]/2", // Db Bbm Db Bbm
  R: "[[db4,eb4]@4 [eb4,ab4]@3 [eb4,f4,ab4]@16 ~, gb4@2 ~, ~ db4@4 ~]/3", // Dbsus2 Ab5 Fm7
  S: "[~@19 [a4,c5,f5]@13, bb3@11 f4@16 ~@5, [eb4,g4] eb4@2 ~, ~@3 c4@13 [g4,bb4,eb5]@16, ~@3 [f4,a4]@5 [g4,bb4]@3 [a4,c5]@8 ~@13]/4", // F Eb F Gm Am
  T: "[~@2 eb6 ~@15 eb6 ~@15 eb6 ~@2 bb5@11, ~ f6@16 f6@16 f6@15, ~@3 eb6@15 ~ eb6@15 ~ eb6@13, ~ d6@4 d6@4 db6@3, ~@5 bb5@16 bb5@16 ~@11]/6",
  U: "[~@2 eb6 ~@2 bb5@16 ~@3, ~ f6@16 ~@7, ~@3 eb6@16 ~@5, ~ d6@4 ~]/3",
  V: "[~@2 eb6 ~@15 eb6 ~@15 eb6 ~@15 eb6 ~@2 bb5@11, ~ f6@16 f6@16 f6@16 f6@15, ~@3 eb6@15 ~ eb6@15 ~ eb6@15 ~ eb6@13, ~ d6@4 d6@4 d6@4 db6@3, ~@5 bb5@16 bb5@16 bb5@16 ~@11]/8",
})).s("gm_epiano1").gain(0.59)

// chords · vibraphone
const vibraphone = note(`<
  ~@44 A@2 ~@6 B@2 C@2 D@2 E@2 F@2 G@2 D@2 H@2 I J K@2 ~@12 L@2 M N O@2 P@3 ~@15 Q@5 ~@24
>`.pickRestart({
  A: "[[c4,d4,f4,ab4]@27 ~@5]/2", B: "[[f4,ab4,bb4,c5]@15 ~]/2", C: "[~@3 d5@12 ~, [f4,ab4,bb4,c5]]/2",
  D: "[[f4,ab4,bb4,c5]@31 ~]/2", E: "[[f4,ab4,bb4,c5]@5 ~ [f4,ab4,bb4,c5,d5]@25 ~]/2", F: "[[bb3,db4,f4,g4]@31 ~]/2",
  G: "[bb3@6 [bb3,g4]@25 ~, [db4,f4]@31 ~]/2", H: "[~@6 d5@25 ~, [f4,ab4,bb4,c5]@31 ~]/2",
  I: "[bb3,eb4,g4]@5 ~ [c4,f4,a4]@9 ~", J: "[eb4,g4,bb4]@5 ~ [f4,a4,c5]@8 ~@2",
  K: "[[g4,bb4,eb5]@5 ~ [a4,c5,f5]@17 ~@9]/2", L: "[[db4,f4]@4 [db4,f4,bb4]@3 db4@5 [db4,bb4]@4, ab4@7 [f4,ab4]@9]/2",
  M: "db4@8 [db4,ab4]@6 [b3,eb4] ~, [eb4,gb4]@7 gb4", N: "~@2 b4 [b4,f5], ~ gb5",
  O: "[[db4,f4]@4 [db4,f4,bb4]@3 [db4,f4,ab4]@5 [db4,f4]@2 [db4,f4,bb4]@2, ab4@7 ~@5 ab4@4]/2", // Db Bbm Db Bbm
  P: "[[db4,eb4]@4 [eb4,ab4]@3 [eb4,f4,ab4]@16 ~, gb4@2 ~, ~ db4@4 ~]/3", // Dbsus2 Ab5 Fm7
  Q: "[~@19 [a4,c5,f5]@16 ~@5, bb3@11 f4@16 ~@13, [eb4,g4] eb4@2 ~@2, ~@3 c4@13 [g4,bb4,eb5]@16 ~@8, ~@3 [f4,a4]@5 [g4,bb4]@3 [a4,c5]@8 ~@21]/5", // F Eb F Gm Am
})).s("gm_vibraphone").gain(0.57)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B A B A B A B A B A B A B@2 C B C B C B C B C B C B C B C B C B C A B A B A B A B A B A B@2 D B C B C B C B C B
  C B C B C B C B C B C A B A B A B A B A B A B E F E G H I E J B C B C B C B C B C B C B C B C B C B C A B A B A B A B
  A B A B A B A B A B A B A B A K ~
>`.pickRestart({
  A: "x ~@2 x!3 ~@2", B: "x ~@2 x!2 ~@3", C: "x!2", D: "~@10 x!2 ~@4", E: "x ~@6 x!2 ~ x ~@3 x ~",
  F: "~@2 x ~@4 x!2 ~ x ~@5", G: "~ x ~@3 x ~@2", H: "x ~@2 x ~@2 x ~ x ~ x ~@3 x ~", I: "~@2 x ~@4 x!2 ~ x ~@3 x ~",
  J: "~ x ~@2", K: "x ~@2 x!2 ~@2 x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@4 A@13 B A@19 C A@11 D ~ E A@19 C A@18 F D A@18 F C A@23 G ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~ x!3", D: "x!16", E: "~@2 x!2", F: "~@2 x ~@3 x!2", G: "~@2 x ~@2 x!2 ~",
})).gain(0.56)

// drums · clap
const clap = s("cp").struct(`<
  ~@8 A B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B@8 C B@3 C ~@3 B@14 C ~@3 D B@12 E@6 F ~@9 B ~ B G B@3
  C B@3 ~ B@23 ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~@6 x!2", D: "~@3 x ~@4", E: "~ x ~ x", F: "~@2 x!2 ~@4", G: "~@5 x!2 ~",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<[~@10 x!2 ~@4]!136 ~>").gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B
  C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C A ~
  B C A ~ B C A ~ B C A ~ B C A ~ B C ~
>`.pickRestart({
  A: "x ~@6 x", B: "~@7 x", C: "~@3 x ~@4",
})).gain(0.8)

// drums · claves
const claves = s("clave:2").struct(`<
  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 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "x ~@6 x",
})).gain(2.74)

// drums · shaker
const shaker = s("sh").struct("<[x!16]!135 [x!10 ~@6] ~>").gain(0.56)

stack(
  bass, tenor_sax, acoustic_guitar_steel, clavinet, epiano1, vibraphone, kick, snare, clap, high_tom, tambourine,
  claves, shaker
)

More by Natalie Cole