Strudelify

My Lovin (You're Never Gonna Get It)

En Vogue

KeyD♭ majorTempo120 bpm
0:00/0:00
// My Lovin (You're Never Gonna Get It) — En Vogue
// 120 bpm, 4/4, key C# 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 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(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.

// chords · pad sweep · "Oooh..."
const pad_sweep = note("<A@2 ~@10 B ~@3 B ~@19 B ~@3 B ~@27 B ~@3 B ~@45>".pickRestart({
  A: "[~@8 [db4,f4,bb4]@11 ~@13]/2", B: "[db4,f4,bb4]@11 ~@5",
})).s("gm_pad_sweep").gain(0.35)

// chords · synth brass 2 · "Bop!"
const synth_brass_2 = note("<~ A ~@10 B ~@3 B ~@19 B ~@3 B ~@27 B ~@3 B ~@21 B ~ B ~ B ~ B ~@17>".pickRestart({
  A: "~@4 [db4,f4,bb4] ~ [db4,f4,bb4] ~ [db4,f4,bb4] ~ [db4,f4,bb4] ~@5", B: "~@12 [db4,f4,bb4] ~@3",
})).s("gm_synth_brass_2").gain(0.4)

// chords · flute · "EnVogue"
const flute = note(`<
  ~@4 A B A C A B A C ~@8 D ~ E ~ D ~ F G H B A C A B A C ~@8 D ~ E ~ D ~ F G I C A C A C A C A C A C A C A C ~@8 D ~ E
  ~ D ~ F G ~@17 A B A C A B A B A B A C A B A B ~
>`.pickRestart({
  A: "~@6 [bb3,db4]!3 ~ [bb3,db4]!4 ~@2", B: "~@6 [bb3,f4]!2 [bb3,db4,f4] [db4,f4]!4 [c4,eb4] ~@2",
  C: "~@6 [bb3,f4]!2 [db4,f4]!5 [c4,eb4] ~@2", D: "[bb3,db4,f4]@4 [db4,f4,ab4]@4 [eb4,gb4,bb4]@4 [f4,ab4,db5]@3 ~",
  E: "[ab4,c5,eb5] [bb4,db5,f5] [ab4,c5,eb5] [f4,ab4,db5] [eb4,gb4,bb4]@2 [db4,ab4]@2 [db4,f4,ab4] [eb4,gb4,bb4] [db4,f4,ab4] [bb3,db4,f4] [bb3,db4,f4]@3 ~, ~@6 f4 ~@9", // Ab Bbm Ab Db Ebm Db5 Db Ebm …
  F: "[ab4,c5,eb5] [bb4,db5,f5] [ab4,c5,eb5] [f4,ab4,bb4,db5] [eb4,gb4,bb4]@2 [db4,f4,ab4]@6 ~@4", // Ab Bbm Ab Bbm7 Ebm Db
  G: "eb5 bb4 g4 eb4 db5 ab4 f4 db4", H: "bb3@3 ~@3 [bb3,db4]!3 ~ [bb3,db4]!4 ~@2",
  I: "bb3@2 ~@4 [bb3,db4]!3 ~ [bb3,db4]!4 ~@2", // Bbm
})).s("gm_flute").gain(0.17)

// chords · flute · "Breakdown"
const flute_2 = note("<~@85 A B C D E B C F ~@25>".pickRestart({
  A: "[f4,bb4,db5] [eb4,bb4,db5] [f4,bb4,db5] [eb4,bb4,db5] [f4,a4,c5] [eb4,a4,c5] [f4,a4,c5] [eb4,a4,c5] [f4,ab4,db5] [eb4,ab4,db5] [f4,ab4,db5] [f4,bb4,d5] ~@2 [g4,bb4,eb5]@2", // Bbm Eb7 Bbm Eb7 F Adim F Adim …
  B: "~ [g4,bb4,eb5]!3 [g4,bb4,db5]!3 [g4,db5] [eb4,ab4,c5]!3 [eb4,ab4,b4] ~@2 [db4,f4,bb4]@2", // Eb Gdim Ab Abm Bbm
  C: "~ [c4,eb4,bb4] [db4,f4,bb4] [c4,eb4,bb4] [db4,f4,a4] [c4,eb4,a4] [db4,f4,a4] [c4,eb4,a4] [db4,f4,ab4] [c4,eb4,ab4] [db4,f4,ab4] [db4,f4,g4] ~@2 [eb4,f4,a4,c5]@2", // Cm7 Bbm Cm7 Dbaug Adim Dbaug Adim Db …
  D: "~ [eb4,a4,c5] [eb4,f4,a4,c5] [eb4,a4,c5] [eb4,f4,a4,c5]!2 ~@8 [f4,bb4,db5]@2", // Adim F7 Adim F7 Bbm
  E: "~ [eb4,bb4,db5] [f4,bb4,db5] [eb4,bb4,db5] [f4,a4,c5] [eb4,a4,c5] [f4,a4,c5] [eb4,a4,c5] [f4,ab4,db5] [eb4,ab4,db5] [f4,ab4,db5] [f4,bb4,d5] ~@2 [g4,bb4,eb5]@2", // Eb7 Bbm Eb7 F Adim F Adim Db …
  F: "~ [eb4,a4,c5] [eb4,f4,a4,c5] [eb4,a4,c5] [eb4,f4,a4,c5]!2 ~@4 [eb4,f4,a4,c5]!4 ~@2", // Adim F7 Adim F7
})).s("gm_flute").gain(0.3)

// other · flute
const flute_3 = note(`<
  ~@5 A ~ B ~ A ~ B ~ C ~@3 A ~@3 A ~@3 A ~@3 A ~ B ~ A ~ B ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A
  ~@3 A ~@3 A ~@3 A ~@20 B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~
>`.pickRestart({
  A: "~@4 bb5 ab5 ~ g5 ~@4 eb5 db5 ~@2", B: "a4 [a4,bb4] bb4 [a4,bb4]!8 a4 [a4,bb4]!4", C: "~@12 eb5 db5 ~@2",
})).s("gm_flute").gain(0.15)

// other · orchestra hit · "Hitz"
const orchestra_hit = note(`<
  ~@4 A ~ A ~ A ~ A ~@3 A ~@3 A ~@9 A ~ A ~@3 A ~@3 A ~@3 A ~@9 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@9 B ~@8 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B
>`.pickRestart({
  A: "bb5 ab5 bb5 ~ bb5 ~ bb5 ~@9", B: "bb5 ab5 bb5 ~ bb5 ~ bb5 ~ bb5 ~@7",
})).s("gm_orchestra_hit").gain(0.2)

// other · orchestra hit · "Hitz" · soft notes
const orchestra_hit_soft = note(`<
  ~@4 A ~ A ~ A ~ A ~@3 A ~@3 A ~@9 A ~ A ~@3 A ~@3 A ~@3 A ~@9 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@9 B ~@8 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B
>`.pickRestart({
  A: "~@4 ab5 ~@11", B: "~@4 ab5 ~@5 bb5 ~ [ab5,bb5] ~ bb5 ~",
})).s("gm_orchestra_hit").gain(0.15)

// chords · acoustic guitar steel · "JB Guitar" · Dbdim
const acoustic_guitar_steel = note(`<
  ~@2
  [[db4,g4] ~@2 [db4,g4] ~@2 [db4,g4] ~ [db4,g4]@2 ~ [db4,g4] ~@4]!82
  ~@9
  [[db4,g4] ~@2 [db4,g4] ~@2 [db4,g4] ~ [db4,g4]@2 ~ [db4,g4] ~@4]!25
>`).s("gm_acoustic_guitar_steel").gain(0.09)

// chords · epiano1 · "Bell Piano"
const epiano1 = note(`<
  ~@4 A@2 B ~ A@2 B ~ A@2 ~@14 A@2 B ~ A@2 B ~ A@2 ~@14 A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~@26 C ~ A@2 B ~
  A@2 B ~ A@2 B ~ A@2 ~
>`.pickRestart({
  A: "[~@3 g5@6 ~@3 c6@19 ~, db6@6 ~@3 g5@22 ~]/2", B: "~@14 [g4,c5,db5] ~", C: "db6@3 g5@2 ~@9 [g4,c5,db5] ~",
})).s("gm_epiano1").gain(0.12)

// chords · epiano1 · "Bell Piano" · soft notes
const epiano1_soft = note(`<
  ~@4 A@2 ~@2 A@2 ~@2 A@2 ~@14 A@2 ~@2 A@2 ~@2 A@2 ~@14 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@29 A@2 ~@2 A@2 ~@2
  A@2 ~@2 A@2 ~
>`.pickRestart({
  A: "[~@6 db6@25 ~]/2",
})).s("gm_epiano1").gain(0.07)

// bass · acoustic bass · "JB Bass"
const bass = note("<~@2 A@2 ~@17 A ~ A ~ A ~@19 A ~ A ~ A ~@27 A ~ A ~ A ~@36>".pickRestart({
  A: "ab1@2 bb1@2 ~@2 ab1 ~ ab1@2 bb1@2 ~@4",
})).s("gm_acoustic_bass").gain(0.36)

// bass · electric bass pick · "EV Bass"
const bass_2 = note(`<
  ~@4 A B A B A B A B A B A B A B A B C ~ C ~ C ~ D@2 A B A B A B A B A B A B A B A B C ~ C ~ C ~ D@2 A B A B A B A B A
  B A B A B A B A B A B A B A B C ~ C ~ C ~ D@2 ~@17 A B A B A B A B A B A B A B A B E
>`.pickRestart({
  A: "bb1 ~ bb1 ~ ab1 ~ ab1 ~ g1@2 ~ g1 ~ gb1 g1 ~", B: "bb1 ~ bb1 ~ ab1 ~ ab1 ~ db2@2 ~ db2 ~ f1 ab1@2",
  C: "eb2@3 db2 c2@2 f2@2", D: "[eb2@6 db2@2 c2@4 f2@15 ~ f2@3 ~]/2", E: "bb1 ~ bb1 ~ ab1 ~ ab1 ~ g1@2 ~ g1 ~@4",
})).s("gm_electric_bass_pick").gain(0.26)

// other · taiko drum · "X Drum"
const taiko_drum = note("<~@4 [~@14 c4 ~]!80 ~@5 [~@14 c4 ~]!28 ~>").s("gm_taiko_drum").gain(0.27)

// drums · kick
const kick = s("bd").struct("<~@2 [x ~@2 x ~@4]!2 [x ~@2 x!2 ~@2 x]!80 x ~@4 [x ~@2 x!2 ~@2 x]!28 x>").gain(0.31)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A B C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C
  D C D C D C D C D C D C D C D C D C D C D C D C D ~@5 C D C D C D C D C D C D C D C D C D C D C D C D C D C D ~
>`.pickRestart({
  A: "~@8 x!3 ~@5", B: "~@4 x!2 ~@2", C: "~@5 x ~@2", D: "~@9 x!2 ~@5",
})).gain(0.15)

// drums · clap
const clap = s("cp").struct("<~@4 [~ x ~ x]!80 ~@5 [~ x ~ x]!28 ~>").gain(0.41)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@4 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 ~@6 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@7 x ~@8",
})).gain(0.15)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@4 [~@15 x]!80 ~@5 [~@15 x]!28 ~>").gain(0.15)

// drums · open hat
const open_hat = s("oh").struct("<~@2 [~ x ~@3 x ~@2]!2 [~ x ~@3 x ~ x]!80 ~@5 [~ x ~@3 x ~ x]!28 ~>").gain(0.1)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@23 A ~@23 A ~@31 A ~@8 A ~@7 A ~@15 A>".pickRestart({
  A: "x",
})).gain(0.31)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [x!8]!80 x ~@4 [x!8]!28 x>").gain(0.26)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@4
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!80
  ~@5
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!28
  ~
>`).gain(0.15)

// drums · guiro
const guiro = s("guiro:4").struct("<~@2 [x!6 ~@2]!82 x ~@4 [x!6 ~@2]!28 x>").gain(4.33)

stack(
  pad_sweep, synth_brass_2, flute, flute_2, flute_3, orchestra_hit, orchestra_hit_soft, acoustic_guitar_steel, epiano1,
  epiano1_soft, bass, bass_2, taiko_drum, kick, kick_soft, clap, snare, snare_soft, hihat, hihat_soft, open_hat, crash,
  tambourine, tambourine_soft, guiro
)

More by En Vogue