Strudelify

You Are My Destiny

Lionel Richie

KeyA♭ majorTempo115 bpm
0:00/0:00
// You Are My Destiny — Lionel Richie
// 115 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 · piano
const piano = note(`<
  A B C D A B C E ~@2 F@2 G ~@2 H@2 I@2 J@2 K@3 L M L M L M L N A B C E A B C E O@2 I@2 J@2 P@3 L M L Q L M R N A B S E
  A B S E ~@2 T U V@2 T U V@2 L M L Q L M E@3 W A B C E A B C E X Y Z AA X AB AC AD X AB Z AD X AB Z AD X AB Z AD X AB Z
  AE ~
>`.pickRestart({
  A: "[eb4,ab4,c5]@15 ~", B: "[eb4,g4,bb4]@15 ~", C: "[db4,gb4,bb4]@15 ~", D: "[db4,f4,ab4]@15 ~",
  E: "[db4,f4,ab4]@5 ~@3", F: "[~@7 f4@5 ~@4]/2", G: "bb3@6 ~@5 [f3,ab3,db4]@2 ~@3",
  H: "[[f4,db5]@8 [f4,ab4,c5]@5 ~ [eb4,g4,bb4]@15 ~@3, bb4@3 ~@13]/2", // Db Fm Eb
  I: "[[eb4,ab4,c5]@4 [eb4,bb4]@3 [c4,f4,ab4]@5 [c4,eb4,g4]@3 ~, ~@2 g4 ~@5]/2", // Ab Eb5 Fm Cm
  J: "[[bb4,db5]@7 ~ [ab4,c5]@6 [eb4,bb4]@17 ~, f4@13 ~ g4@15 ~@3]/2", // Bbm Ab Eb5
  K: "[[eb4,ab4,c5]@8 [eb4,bb4]@6 [c4,f4,ab4]@10 [c4,eb4,g4]@17 ~@3 [eb4,ab4,c5]@4, ~@2 g4 ~@9]/3", // Ab Eb5 Fm Cm Ab
  L: "[db4,f4,ab4]@11 ~ [eb4,ab4,c5]@4", M: "[eb4,g4,bb4]@11 ~ [eb4,ab4,c5]@3 ~", N: "[eb4,g4,bb4]@11 ~@5",
  O: "[[f4,db5]@8 [f4,ab4]@4 ~@2 [eb4,g4,bb4]@15 ~@3, bb4@3 ~ c5@3 ~@9]/2", // Db Fm Eb
  P: "[[eb4,ab4,c5]@8 [eb4,bb4]@6 [c4,f4,ab4]@10 [c4,eb4,g4]@17 ~@3 [eb4,ab4,c5]@3 ~, ~@2 g4 ~@9]/3", // Ab Eb5 Fm Cm Ab
  Q: "[eb4,g4,bb4]@11 ~ [eb4,ab4,c5]@4", R: "[db4,f4,ab4]@11 ~ [eb4,ab4,c5]@3 ~", S: "[db4,gb4,bb4]", T: "[db5,f5]@7 ~",
  U: "[db5,f5]@13 ~@3", V: "[bb4@3 ~ c5@10 ~@2]/2", W: "[eb4,f4,bb4]@5 ~@3",
  X: "[eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,db5] ~@2 [eb4,ab4,c5] ~ [eb4,ab4,db5] ~", // Ab Dbsus2 Ab Dbsus2
  Y: "[g4,bb4]@2 ~@2 [eb4,g4,bb4]!2 ~ [eb4,g4,bb4] ~@2 [eb4,ab4,bb4] ~ [eb4,g4,bb4] ~ [eb4,ab4,bb4] ~, eb4 ~@15", // Gm Eb Ebsus4 Eb Ebsus4
  Z: "[db4,gb4,bb4] ~@2 [db4,gb4,bb4] ~@2 [db4,gb4,bb4] ~@2 [gb4,b4]@2 ~ [db4,gb4,bb4] ~ [db4,gb4,b4] ~, ~@9 db4 ~@6", // Gb B5 Gb Gbsus4
  AA: "[db4,f4,ab4] ~@3 [db4,f4,ab4]!2 ~ [db4,f4] ~@2 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~@3, ~@7 ab4@2 ~@7", // Db Eb
  AB: "[eb4,g4,bb4] ~@3 [eb4,g4,bb4]!2 ~ [eb4,g4,bb4] ~@2 [eb4,ab4,bb4] ~ [eb4,g4,bb4] ~ [eb4,ab4,bb4] ~", // Eb Ebsus4 Eb Ebsus4
  AC: "[db4,gb4,bb4] ~@2 [db4,gb4,bb4] ~@2 [gb4,bb4] ~@2 [gb4,b4]@2 ~ [db4,gb4,bb4] ~ [db4,gb4,b4] ~, ~@6 db4@2 ~ db4 ~@6", // Gb B5 Gb Gbsus4
  AD: "[db4,ab4] ~@3 [db4,f4,ab4]!2 ~ [db4,f4] ~@2 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~@3, f4@2 ~@5 ab4@2 ~@7", // Db5 Db Eb
  AE: "[db4,f4]@2 ~@2 [db4,f4,ab4]!2 ~ [db4,f4] ~@2 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~@3, ab4 ~@6 ab4@2 ~@7", // Db Eb
})).s("gm_piano").gain(0.45).pan(0.2)

// chords · piano · soft notes
const piano_soft = note("<~@8 A@2 B@2 C@2 D ~@50 A@2 E F G@2 E F G@2 ~@43>".pickRestart({
  A: "[[c4,eb4,ab4]@7 ~]/2", B: "[[bb3,db4,gb4]@13 ~ [ab3,db4]@10 ~@2 [bb3,db4,gb4]@2 ~ [ab3,db4,f4]@2 ~]/2",
  C: "[[gb3,eb4]@7 ~ [f3,ab3,db4]@2 ~@4 [eb3,ab3,c4]@9 ~@3 [f3,ab3,db4]@2 ~ [eb3,ab3,c4]@2 ~]/2", // Ebm Db Ab Db Ab
  D: "~@10 [ab3,db4]@2 ~ [eb3,ab3,c4]@2 ~, ~@10 f3 ~@5", E: "bb4@7 ~", F: "ab4@13 ~@3",
  G: "[[g4,eb5]@7 ~ [ab4,eb5]@20 ~@4]/2", // Cm Ab5
})).s("gm_piano").gain(0.25).pan(0.2)

// bass · electric bass finger · "Bassguitar"
const bass = note(`<
  ~@10 A B C D E F G H I F J H K L M N O N M N O P Q R S T Q R S U F J H I F G H V L M N O N M N O P Q R S T Q R W U X Q
  Y Z AA Z Y Z AA AB M N O N M N AC@3 AD Q R S T X R S U Q R S T Q R S T Q R W T Q R W T Q R W T X R W T ~
>`.pickRestart({
  A: "gb1 ~@3 gb1@2 ~@2 gb1 ~@2 gb1 ~@2 gb1@2", B: "f1@2 ~@2 f1@2 ~@2 f1 ~@2 f1 ~@2 f1@2",
  C: "eb1@2 ~@2 eb1@4 db1@2 ~ db1 ~@2 db1@2", D: "c1@2 ~@2 c1@2 ~@2 c1@2 ~ c1 ~@2 c1@2",
  E: "c1@2 ~@2 c1@3 ~ c1 ~@2 c1 ~@2 c1@2", F: "bb1 ~@3 bb1@3 ~ ab1 ~@2 ab1@2 ~ ab1@2",
  G: "g1@2 ~@2 g1@3 ~ g1 ~@2 g1 ~@2 g1@2", H: "ab1@2 ~@2 ab1@3 ~ g1@2 ~ g1@2 ~ g1@2",
  I: "f1@2 ~@2 f1@3 ~ eb1 ~@2 eb1 ~@2 eb1@2", J: "g1 ~@3 g1@3 ~ g1 ~@2 g1 ~@2 g1@2",
  K: "f1@2 ~@2 f1@4 eb1@2 ~ eb1 ~@2 eb1@2", L: "eb1 ~@3 eb1@2 ~ eb1@2 ~ ab1@2 c2@2 c1@2",
  M: "db1@2 ~@2 db1 ~@2 db1@2 ~ c1@2 c2@2 c1@2", N: "eb1@2 ~@2 eb1@2 ~ eb1@2 ~ c1@2 c2@2 c1@2",
  O: "db1@2 ~@2 db1@2 ~ db1@2 ~ c1@2 c2@2 c1@2", P: "eb1@2 ~@2 eb1@2 ~ eb1@2 ~ eb1@2 f1@2 g1@2",
  Q: "ab1 ~@3 ab1@2 ~ ab1 ~@2 ab1 ~@3 ab1 ~", R: "g1 ~@3 g1@2 ~ g1 ~@2 g1 ~@3 g1 ~",
  S: "gb1@2 ~@2 gb1@2 ~ gb1 ~@2 gb1 ~@3 gb1@2", T: "f1 ~@3 f1@2 ~ f1 ~@2 f1@2 ~@2 g1@2",
  U: "f1 ~@3 f1@2 ~ f1 ~@2 f1@2 ~@2 eb1@2", V: "f1@2 ~@2 f1@3 ~ eb1@2 ~ eb1 ~@2 eb1@2",
  W: "gb1 ~@3 gb1@2 ~ gb1 ~@2 gb1 ~@3 gb1@2", X: "ab1 ~@3 ab1@2 ~ ab1 ~@2 ab1 ~@3 ab1@2",
  Y: "bb1 ~@3 bb1@3 bb1 ~@2 bb1 ~@2 bb1@2 ~", Z: "ab1 ~@3 ab1@3 ab1 ~@2 ab1 ~@2 ab1@2 ~",
  AA: "g1 ~@3 g1@2 ~ ab1@2 ~ ab1 ~@2 ab1@2 ~", AB: "ab1 ~@3 ab1@3 ab1 ~@2 c2@2 eb2@2 c2@2",
  AC: "db1 ~@3 db1@2 ~ db1 ~@2 db1@2 ~@2 db1@2", AD: "eb1 ~@3 eb1@2 ~ eb1 ~@2 eb1@2 ~@2 eb1@2",
})).s("gm_electric_bass_finger").gain(0.43)

// chords · synth strings 2 · "Strings"
const synth_strings_2 = note(`<
  A@3 B A@3 C ~@7 D@2 E@2 F@5 G H@2 I G H@2 I A@3 C A@3 J D@2 E@2 K@5 G H@2 I G H@2 I A@3 C A@3 J ~@2 L@2 M@2 L@2 N@2 G
  H@2 I G O P@2 Q R A@3 C A@3 C ~@4 A@3 J A@3 C A@3 C A@3 C A@3 C ~
>`.pickRestart({
  A: "[[ab4,c5]@16 g4@15 ~ [db4,gb4]@15 ~, eb4@31 ~@17, ~ bb4@2]/3", B: "[db4,f4,ab4]@9 ~ [eb4,g4,bb4]@5 ~",
  C: "[db4,ab4]@5 ~@3, f4 ~", D: "[[bb4,db5]@4 [ab4,c5]@3 [g4,bb4]@9]/2",
  E: "[[ab4,c5]@4 [g4,bb4]@3 [f4,ab4]@5 [eb4,g4]@4]/2", // Ab Gm Fm Eb
  F: "[[bb4,db5]@8 [ab4,c5]@6 [g4,bb4]@17 [ab4,c5]@8 [g4,bb4]@6 ~ [f4,ab4]@10 [eb4,g4]@22 ~@2]/5", G: "f4@3 c5, ab4",
  H: "[[g4,bb4]@3 c5 f4@3 [ab4,c5], ~@12 ab4@15 ~@5]/2", I: "[g4,bb4]@15 ~", J: "[db4,f4,ab4]@9 ~@7",
  K: "[[bb4,db5]@8 [ab4,c5]@6 [g4,bb4]@17 [ab4,c5]@8 [g4,bb4]@6 ~ [f4,ab4]@10 [eb4,g4]@21 ~@3]/5", // Bbm Ab Gm Ab Gm Fm Eb
  L: "[bb4@15 ~ ab4@15 ~, [db5,f5]@31 ~]/2", M: "[[g4,bb4]@6 ~ [ab4,c5]@23 ~@2, eb5@31 ~]/2",
  N: "[[g4,bb4]@6 ~ [ab4,c5]@23 ~@2, eb5@15 ~]/2", O: "[g4,bb4]@3 [ab4,c5]", P: "[[ab4,db5]@31 ~]/2", Q: "[db5,f5]",
  R: "[eb5,g5]", // Eb
})).s("gm_synth_strings_2").gain(0.25).pan(0.3)

// chords · percussive organ · "Organ"
const percussive_organ = note(`<
  ~@4 A B C D ~@2 E F G H@2 I J K L I J K L M N O N P N Q N R A B C S A B C S I J K L I J K L M N Q N P N Q N R A B C S
  A B C S ~@2 T U V W T U V W N Q N P N O X@2 Y Z A B C D A B C D A B C S A B C S A B C S A B C S A B C S A B C S ~
>`.pickRestart({
  A: "~@4 [ab4,c5,eb5]@2 ~ [ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@5", // Ab
  B: "~@4 [g4,bb4,eb5]@2 ~ [g4,bb4,eb5] ~@2 [g4,bb4,eb5] ~@5", // Eb
  C: "~@4 [gb4,bb4,db5]@2 ~ [gb4,bb4,db5] ~@2 [gb4,bb4,db5] ~@5", // Gb
  D: "~@4 [f4,ab4,db5]@2 ~ [f4,ab4,db5] ~@2 [g4,bb4,eb5] ~@5", // Db Eb
  E: "~@4 [bb4,db5,gb5]@2 ~ [bb4,db5,gb5] ~@2 [bb4,db5,gb5] ~@5", // Gb
  F: "~@4 [ab4,db5,f5]@2 ~ [ab4,db5,f5] ~@2 [bb4,db5,gb5] ~@3 [ab4,db5,f5] ~", // Db Gb Db
  G: "~@4 [gb4,bb4,eb5]@2 ~ [f4,ab4,db5] ~@2 [f4,ab4,db5] ~@5", // Ebm Db
  H: "~@4 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@5", I: "~@4 [f5,bb5,db6]@3 [f5,ab5,c6] ~@2 [f5,ab5,c6] ~@5",
  J: "~@4 [eb5,g5,bb5]@3 [eb5,g5,bb5] ~@2 [eb5,g5,bb5] ~@5", K: "~@4 [eb5,ab5,c6]@3 [eb5,g5,bb5] ~@2 [eb5,g5,bb5] ~@5",
  L: "~@4 [c5,f5,ab5]@3 [c5,eb5,g5] ~@2 [c5,eb5,g5] ~@5", M: "~@4 [c5,eb5,g5]@2 ~ [c5,eb5,g5] ~@2 [c5,eb5,g5] ~@5",
  N: "~@4 [db5,f5,ab5]@2 ~ [db5,f5,ab5] ~@2 [eb5,ab5,c6] ~@5", // Db Ab
  O: "~@4 [eb5,bb5] ~@2 [eb5,g5,bb5] ~@2 [eb5,ab5,c6] ~@5, ~@2 g5 ~@5", // Eb5 Eb Ab
  P: "~@4 [eb5,g5]@2 ~ [eb5,g5,bb5] ~@2 [eb5,ab5,c6] ~@5, ~@4 bb5 ~@11", // Eb Ab
  Q: "~@4 [eb5,g5,bb5]@2 ~ [eb5,g5,bb5] ~@2 [eb5,ab5,c6] ~@5", // Eb Ab
  R: "~@4 [eb5,g5]@2 ~ [eb5,g5,bb5] ~@2 [eb5,g5,bb5] ~@5, ~@4 bb5 ~@11", // Eb
  S: "~@4 [ab4,db5]@2 ~ [f4,ab4,db5] ~@2 [g4,bb4,eb5] ~@5, ~@4 f4 ~@11", // Db5 Db Eb
  T: "~@4 [f5,bb5,db6]@2 ~ [f5,bb5,db6] ~@2 [f5,bb5,db6] ~@5", // Bbm
  U: "~@4 [f5,ab5,db6]@2 ~ [f5,ab5,db6] ~@2 [f5,ab5,db6] ~@5", // Db
  V: "~@4 [eb5,g5,bb5]@3 [eb5,ab5,c6] ~@2 [eb5,ab5,c6] ~@5", // Eb Ab
  W: "~@4 [eb5,ab5,c6]@2 ~ [eb5,ab5,c6] ~@2 [eb5,ab5,c6] ~@5", // Ab
  X: "~@4 [db5,f5,ab5]@2 ~ [db5,f5,ab5] ~@2 [db5,f5,ab5] ~@5", // Db
  Y: "~@4 [f5,ab5]@2 ~ [db5,f5,ab5] ~@2 [db5,f5,ab5] ~@5, ~@4 db5 ~@11", // Fm Db
  Z: "~@4 [eb5,f5,bb5]@2 ~ [eb5,f5,bb5] ~@2 [eb5,f5,bb5] ~@5", // Ebsus2
})).s("gm_percussive_organ").gain(0.35).pan(0.8)

// other · orchestral harp · "Harp" · Gbsus2 Bbm Ebm Absus2
const orchestral_harp = note("<~@14 [~@12 [gb3,ab3] [bb3,db4] [eb4,gb4] [ab4,bb4]] [db5 ~@15] ~@102>")
  .s("gm_orchestral_harp").gain(0.25).pan(0.1)

// drums · kick
const kick = s("bd").struct("<~@8 [x!4]!109 ~>").gain(0.45)

// drums · clap
const clap = s("cp").struct("<~@9 [~@3 x] [~ x ~ x]!55 [~@2 x!2 ~ x!2 ~@3 x!2 ~ x!2 ~]!2 [~ x ~ x]!50 ~>").gain(0.5)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@13 A@2 ~@8 A ~@3 A ~@3 A ~@3 A ~@3 A ~@8 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@2 A@4 ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~@5 x!2 ~@3 x!2 ~ x!3",
})).gain(0.15)

// drums · hihat
const hihat = s("hh").struct("<~@3 [~@14 x!2] [x ~@3 x ~ x!3 ~@3 x ~ x!2]!113 ~>").gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@4 [~ x ~@3 x ~@2]!113 ~>").gain(0.25)

// drums · tambourine
const tambourine = s("tb").struct("<~@15 [x!16]!102 ~>").gain(0.25)

// drums · triangle
const triangle = s("triangles:30").struct("<~@10 [~ x ~ x ~ x ~ x]!107 ~>").gain(2.59)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~@10 [x!4]!107 ~>").gain(2.59)

stack(
  piano, piano_soft, bass, synth_strings_2, percussive_organ, orchestral_harp, kick, clap, snare, snare_soft, hihat,
  open_hat, tambourine, triangle, triangle_2
)

More by Lionel Richie