Strudelify
My Way cover art

1997 · My Way

My Way

Usher

KeyD minorTempo90 bpm
0:00/0:00
// My Way — Usher
// 90 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 "Square Ld." lead 1 square (copy of ch 9 "LM Square" lead 1 square)
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 · electric guitar jazz · "Jazz Guitar"
const electric_guitar_jazz = note(`<
  ~@17 A B C D A B C D ~@16 A B C D A B C D ~@8 A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C ~@5
>`.pickRestart({
  A: "[g3,bb3,d4]@15 ~", B: "[f3,a3,c4]@7 ~", C: "[eb3,g3,bb3]@7 ~", D: "[d3,gb3,a3]@15 ~",
})).s("gm_electric_guitar_jazz").gain(0.56)

// chords · electric guitar jazz · "Jazz Guitar" · soft notes · D Gm F Eb D
const electric_guitar_jazz_2 = note(`<
  ~@92
  [[d3,gb3,a3]@15 ~]
  [[g3,bb3,d4]@15 ~]
  [[f3,a3,c4]@7 ~]
  [[eb3,g3,bb3]@7 ~]
  [[d3,gb3,a3]@15 ~]
>`).s("gm_electric_guitar_jazz").gain(0.17)

// chords · string ensemble 2 · "Strings Ensemble"
const string_ensemble_2 = note(`<
  ~@17 A B C D E B C D ~@16 A B C D E B C D ~@8 A B C D E B C D A B C D E B C D ~@8 A B C D E B C D A B C ~@5
>`.pickRestart({
  A: "~ d4@15, [g4,bb4]", B: "[f4,a4,c5]", C: "[g4,bb4,d5]@15 ~", D: "[gb4,a4,c5]@15 ~", E: "[d4,g4,bb4]@15 ~",
})).s("gm_string_ensemble_2").gain(0.08)

// chords · string ensemble 2 · "Strings Ensemble" · soft notes · Gbdim Gm F Gm Gbdim
const string_ensemble_2_soft = note(`<
  ~@92
  [[gb4,a4,c5]@15 ~]
  [[d4,g4,bb4]@15 ~]
  [[f4,a4,c5]]
  [[g4,bb4,d5]@15 ~]
  [[gb4,a4,c5]@15 ~]
>`).s("gm_string_ensemble_2").gain(0.02)

// bass · fretless bass · "Smooth Bass"
const bass = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C ~ A B C D A B
  C D A B C D A B C D A B C D ~@4 A B C D A B C D A B C D A B ~@6
>`.pickRestart({
  A: "g1@2 ~@2 g1@3 ~ g1@3 ~@5", B: "~ f1 ~@3 f1 ~@2", C: "~@2 eb1@3 ~@5 eb1@2 ~@4", D: "d1@2 ~@2 d1@2 ~@2 d1@3 ~@5",
})).s("gm_fretless_bass").gain(0.55)

// bass · fretless bass · "Smooth Bass" · soft notes
const bass_soft = note(`<
  ~@91
  [~@2 eb1@3 ~@5 eb1@2 ~@4]
  [d1@2 ~@2 d1@2 ~@2 d1@3 ~@5]
  [g1@2 ~@2 g1@3 ~ g1@3 ~@5]
  [~ f1 ~@3 f1 ~@2]
  [~@2 eb1@3 ~@5 eb1@2 ~@4]
  [d1@2 ~@2 d1@2 ~@2 d1@3 ~@5]
>`).s("gm_fretless_bass").gain(0.22)

// chords · lead 2 sawtooth · "Sawtooth"
const lead_2_sawtooth = note(`<
  ~@17 A ~ B C A ~ B D ~@16 A ~ B C A ~ B D ~@16 A ~ B C A ~ B D ~@8 A ~ B C A ~ B D A ~ E ~@5
>`.pickRestart({
  A: "~@6 [d5,f5,a5] a4@9", B: "~@6 [g4,bb4,d5] d4@2 [g4,bb4,d5] d4@2 [g4,bb4,d5]@2 d4@2",
  C: "~@6 [gb4,a4,d5] d4@2 [gb4,a4,d5] d4@2 [gb4,a4,d5] d4@2 [gb4,a4,d5]", // D
  D: "~@6 [a4,d5,gb5] d4@2 [a4,d5,gb5] d4@2 [a4,d5,gb5] d4@2 [a4,d5,gb5]", E: "~@6 [g4,bb4,d5] d4@2 [g4,bb4,d5] ~@6",
})).s("gm_lead_2_sawtooth").gain(0.18).pan(1)

// chords · lead 2 sawtooth · "Sawtooth" · soft notes · Gm D Dm Gm D
const lead_2_sawtooth_soft = note(`<
  ~@91
  [~@5 d4 [g4,bb4,d5] d4]
  [~@6 [gb4,a4,d5] d4@2 [gb4,a4,d5] d4@2 [gb4,a4,d5] d4@2 [gb4,a4,d5]]
  [~@6 [d5,f5,a5] a4@9]
  ~
  [~@6 [g4,bb4,d5] d4@2 [g4,bb4,d5] d4@2 [g4,bb4,d5]@2 d4@2]
  [~@6 [a4,d5,gb5] d4@2 [a4,d5,gb5] d4@2 [a4,d5,gb5] d4@2 [a4,d5,gb5]]
>`).s("gm_lead_2_sawtooth").gain(0.04).pan(1)

// other · lead 2 sawtooth · "Shimmer (sweep)"
const lead_2_sawtooth_2 = note("<~@17 A@8 ~@16 A@8 ~@16 A@8 ~@8 A@16>".pickRestart({
  A: "[d4,d5]/4", // D
})).s("gm_lead_2_sawtooth").gain(0.1).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  A B C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D ~ B C D B@2 C
  D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B E C ~@6
>`.pickRestart({
  A: "~@8 x!2 ~ x ~@4", B: "x!3 ~", C: "~@2 x ~@5 x ~ x ~@2 x ~@2", D: "~@2 x ~@7 x ~@2 x ~@2", E: "x!2",
})).gain(0.7)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@91
  [~@2 x ~@7 x ~@2 x ~@2]
  [x!3 ~]
  [x!2]
  [~@2 x ~@5 x ~ x ~@2 x ~@2]
  [~@2 x ~@7 x ~@2 x ~@2]
  [x!2]
>`).gain(0.21)

// drums · rim
const rim = s("rim").struct("<[~@12 x!2 ~ x] [~ x ~ x]!51 ~ [~ x ~ x]!36 ~@8>").gain(0.7)

// drums · snare
const snare = s("sd").struct("<[~@12 x!2 ~ x] [~ x ~ x]!51 ~ [~ x ~ x]!38 ~@6>").gain(0.7)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@91 [~ x ~ x] [~@3 x] [~ x ~ x]!4>").gain(0.21)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@91
  [~ x!2 ~ x ~ x ~ x ~ x ~ x ~ x ~]
  [x!8]
  [x ~ x ~ x ~ x ~ x ~ x ~ x!4]!2
  [x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~]
  [x!8]
>`).gain(0.21)

// drums · triangle
const triangle = s("triangles:35").struct(`<
  ~ A@4 ~ A@7 ~ A@7 ~ A@7 ~ A@2 ~ A@4 ~ A@7 ~ A@6 ~@2 A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@5 ~@6
>`.pickRestart({
  A: "~@6 x ~ x ~@2 x ~@4",
})).gain(6.12)

// drums · triangle · soft notes
const triangle_soft = s("triangles:35").struct("<~@91 [~@6 x ~ x ~@2 x ~@4]!2 ~ [~@6 x ~ x ~@2 x ~@4]!3>").gain(1.84)

stack(
  electric_guitar_jazz, electric_guitar_jazz_2, string_ensemble_2, string_ensemble_2_soft, bass, bass_soft,
  lead_2_sawtooth, lead_2_sawtooth_soft, lead_2_sawtooth_2, kick, kick_soft, rim, snare, snare_soft, hihat, hihat_soft,
  triangle, triangle_soft
)

More by Usher