Strudelify

Come & Talk to Me

Jodeci

KeyA majorTempo87 bpm
0:00/0:00
// Come & Talk to Me — Jodeci
// 87 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 1 lead 7 fifths (copy of ch 5 pad new age)
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(87/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 E C D E B C D E B C D E B C D E B F G C D E B C D E B F G C D E B C D E B C D E B C D E B F G C D E B C D E B
  C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B ~
>`.pickRestart({
  A: "f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2!3 ~ f#2 ~ a#2 ~",
  B: "[c2,f#2] ~ f#2 ~ [e2,f#2] ~ [c2,f#2,d4,a4] [c2,d4] f#2 ~ f#2 ~ [e2,f#2] ~ f#2 ~, a4@5 ~@2 a4@6 ~@3", // Cdim Esus2 D7 Csus2 Esus2
  C: "[c2,f#2,d4] ~ f#2 ~ [e2,f#2] ~ [c2,f#2,a4] c2 f#2 ~ f#2 ~ [e2,f#2] ~ f#2 ~, a4@4 ~@3 a4@8 ~", // D7 Esus2 F#dim Esus2
  D: "[c2,f#2,d4] ~ f#2 ~ [e2,f#2] ~ [c2,f#2,d4,a4] [c2,d4] f#2 ~ f#2 ~ [e2,f#2] ~ f#2 ~, a4@5 ~@2 a4@8 ~", // D7 Esus2 D7 Csus2 Esus2
  E: "[c2,f#2] ~ f#2 ~ [e2,f#2] ~ [c2,f#2,d4,a4] [c2,d4] f#2 ~ f#2 ~ [e2,f#2] ~ f#2 ~, a4@5 ~@2 a4@8 ~", // Cdim Esus2 D7 Csus2 Esus2
  F: "[c2,f#2] ~ f#2 ~ f#2 ~ f#2 ~ f#2!2 [d2,f#2] ~ f#2 ~ [c2,f#2] ~", // Cdim D Cdim
  G: "f#2 ~ f#2 ~ f#2 ~ f#2!5 c2 [d2,f#2] ~ [c2,f#2] ~", // D Cdim
})).s("gm_piano").gain(0.31)

// other · acoustic bass
const acoustic_bass = note(`<
  ~@4 A ~@7 B C@2 D@2 E F G@2 ~@3 H I J ~ H I J ~@9 B C@2 D@2 E F G@2 ~@3 H I J ~ H I J ~@9 H I J ~ H I J ~ H I J ~ H I
  J ~ H I J ~ H I J ~
>`.pickRestart({
  A: "~@3 a5", B: "~@3 c6", C: "[d6@7 e6]/2", D: "[~@4 e6@2 ~ c6, g5]/2", E: "b5@3 c6", F: "d6@3 e6", G: "[~ e6, g5]/2",
  H: "e5 f#5 g5 a5", I: "b5", J: "c6 b5 a5 g5",
})).s("gm_lead_8_bass_lead").gain(0.17)

// other · acoustic bass · soft notes
const acoustic_bass_soft = note("<~@2 A@2 B ~@7 C ~@3 D ~@23 C ~@3 D ~@47>".pickRestart({
  A: "[~@5 a5@11]/2", B: "b5 a5 g5 ~", C: "~@2 b5 ~", D: "~@2 d6 ~",
})).s("gm_lead_8_bass_lead").gain(0.08)

stack(piano, acoustic_bass, acoustic_bass_soft)