Strudelify
Waiting for Tonight cover art

1999 · On The 6

Waiting for Tonight

Jennifer Lopez

KeyB♭ minorTempo125 bpm
0:00/0:00
// Waiting for Tonight — Jennifer Lopez
// 125 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// 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(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 · electric bass finger · "Bass Norm"
const bass = note(`<
  ~@4 A B C D A B C D A B C D A B C E A B C F A B C D A B C G ~@8 A B C D A B C D A B C F A B C D A B C G ~@16 A B C D A
  B C D A B C D A B C D A B C D A B C D ~@4 A B C F ~@10
>`.pickRestart({
  A: "bb2 ~@3 bb2 ~@2 bb2 ~@2 bb2 ~@3 bb2 ~", B: "ab2 ~@3 ab2 ~@2 ab2 ~@2 ab2 ~@3 ab2 ~",
  C: "f2 ~@3 f2 ~@2 f2 ~@2 f2 ~@3 f2 ~", D: "gb2 ~@2 gb2 ~@2 gb2 ~ f2 ~ gb2 ~ f2 ~ ab2 ~",
  E: "gb2 ~@3 gb2 ~@2 gb2 f2 ~ gb2 ~ f2 ~ ab2 ~", F: "gb2 ~@2 gb2 ~@2 gb2 ~@9", G: "gb2 ~@15",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · acoustic guitar nylon · "Guitar Ar"
const acoustic_guitar_nylon = note(`<
  A@2 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3
  B A@3 B A ~@8 A@2 B A@3 B A@3 B A@3 B A@3 B A@3 B A ~@2
>`.pickRestart({
  A: "~ f4@7, bb3@15 ~, ~ db4@13 ~@2", B: "~@2 eb4@11 ~@3, ab3@13 ~@3, ~ c4@11 ~@4",
})).s("gm_acoustic_guitar_nylon").gain(0.71)

// chords · pad warm · "Warm Pad"
const pad_warm = note(`<
  A B C B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D
  B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B A B D B ~@2
>`.pickRestart({
  A: "[bb3,db4,f4]@15 ~", B: "[bb3,db4,f4]", C: "[ab3,c4,eb4]", D: "~ ab3@15, [c4,eb4]",
})).s("gm_pad_warm").gain(0.32)

// chords · shamisen · "Chorus ch"
const shamisen = note(`<
  ~@8 A B C D A B C D ~@8 E F G H E F G ~ A B C D A B C D A B C D ~@8 E F G H E F G ~ A B C D A B C D A B C D A B C D A
  B C D A B C D ~@8 E F G I E F G J ~@8 A B C D A B C D ~@2
>`.pickRestart({
  A: "[bb3,db4,f4] ~@3 [bb3,db4,f4] ~@2 [bb3,db4,f4] ~@2 [bb3,db4,f4] ~@3 [bb3,db4,f4] ~", // Bbm
  B: "[ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~", // Ab
  C: "[f3,ab3,c4] ~@3 [f3,ab3,c4] ~@2 [f3,ab3,c4] ~@2 [f3,ab3,c4] ~@3 [f3,ab3,c4] ~", // Fm
  D: "[gb3,bb3,db4] ~@3 [gb3,bb3,db4] ~@2 [gb3,bb3,db4] ~@2 [gb3,bb3,db4] ~@3 [gb3,bb3,db4] ~", // Gb
  E: "[bb3,db4,f4]!4 ~@6 [bb3,db4,f4] ~@2 [bb3,db4,f4] ~@2", F: "[ab3,c4,eb4]!4 ~@6 [ab3,c4,eb4] ~@2 [ab3,c4] eb4 ~",
  G: "[f3,ab3,c4]!4 ~@6 [ab3,c4] f3 ~ [f3,ab3,c4] ~@2", // Fm Ab Fm
  H: "[gb3,db4] [gb3,bb3,db4]!3 ~@6 [gb3,bb3,db4] ~@3 [gb3,bb3,db4] ~", I: "[gb3,db4] [gb3,bb3,db4]!3 ~@12",
  J: "[gb3,bb3,db4] ~@3 [gb3,bb3,db4] ~@11", // Gb
})).s("gm_shamisen").gain(0.32)

// bass · synth bass 2 · "Funky Bas"
const bass_2 = note(`<
  ~@23 A ~@8 B C D E B C D E ~@11 A ~@8 B C D E B C D E B C D E B C D E ~@31 A B C D E B C D F ~@2
>`.pickRestart({
  A: "~@8 f2 ~ gb2 ~ f2 ~ ab2 ~", B: "bb2 ~@3 bb2 ~@2 bb2 ~@2 bb2 ~@3 bb2 ~",
  C: "ab2 ~@3 ab2 ~@2 ab2 ~@2 ab2 ~@3 ab2 ~", D: "f2 ~@3 f2 ~@2 f2 ~@2 f2 ~@3 f2 ~",
  E: "gb2 ~@2 gb2 ~@2 gb2 ~ f2 ~ gb2 ~ f2 ~ ab2 ~", F: "gb2 ~@2 gb2 ~@2 gb2 ~@9",
})).s("gm_synth_bass_2").gain(0.8)

// other · trombone
const trombone = note("<~@80 A@2 ~@2 B@2 C@2 D E@2 F ~@19 G@2 H@3 ~@2>".pickRestart({
  A: "[~@3 db5 c5 ~ c5 bb4@2 ~@7, ~@11 db5@2 ~@19]/2",
  B: "[~@10 bb4 c5 ~ db5 bb4 ~ eb5@10 ~@4 db5 eb5, ~@15 c5@2 ~@15]/2",
  C: "[f5@10 ~@3 f5@2 ~ bb5@8 ~@8, ~@12 ab5@2 ~ ab5@2 ~@15]/2", D: "~@6 ab5@2 f5@3 eb5@5",
  E: "[~@8 eb5@2 ~ eb5@3 db5@5 ~@4 db5 eb5@5 ~@2 c5, ~@6 ab5@3 ~@23, ~@7 f5@2 ~@13 c5@2 ~@6 db5@2]/2", F: "bb4@5 ~@3",
  G: "[~@2 f5@4 eb5 db5@2 eb5@2 db5@3 bb4@7 ~@11]/2",
  H: "[~@4 f5@3 ~ bb5@4, ~@7 db5 ~@7 f5 ~@8, ~@15 eb5@2 ~@12 ab5@2 ab5@2 ~@15]/3",
})).s("gm_trombone").gain(0.51)

// chords · lead 2 sawtooth · "chords gu"
const lead_2_sawtooth = note(`<
  ~@8 A B C D A B C D ~@16 A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D A B C D A B C D ~@24 A B C D A B
  C D ~@2
>`.pickRestart({
  A: "[bb3,db4,f4] ~@3 [bb3,db4,f4] ~@2 [bb3,db4,f4] ~@2 [bb3,db4,f4] ~@3 [bb3,db4,f4] ~", // Bbm
  B: "[ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~", // Ab
  C: "[f3,ab3,c4] ~@3 [f3,ab3,c4] ~@2 [f3,ab3,c4] ~@2 [f3,ab3,c4] ~@3 [f3,ab3,c4] ~", // Fm
  D: "[gb3,bb3,db4] ~@3 [gb3,bb3,db4] ~@2 [gb3,bb3,db4] ~@2 [gb3,bb3,db4] ~@3 [gb3,bb3,db4] ~", // Gb
})).s("gm_lead_2_sawtooth").gain(0.71)

// other · string ensemble 1 · "String"
const string_ensemble_1 = note(`<
  ~@4 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 C A B@2 C A B@2 ~@16 C A B@2 C A B@2 C A B@2 A@2 B@2 C A B@2 A@2 B@2 ~@16 A@2
  B@2 C A B@2 ~@10
>`.pickRestart({
  A: "bb6@15 ~", B: "[bb6@31 ~]/2", C: "~ bb6@15",
})).s("gm_string_ensemble_1").gain(0.32)

// other · french horn · "Backup Vo"
const french_horn = note(`<
  ~@31 A B@2 C D E F G H I ~@15 J K ~ A L@3 D M F G D L@3 D M F G H N ~@31 O@2 P D E F G Q@2 R
>`.pickRestart({
  A: "~@4 bb3 db4 eb4 f4", B: "[ab4@3 ~@9 bb4@2 ab4@4 bb4@2 ~@10 db4@2]/2",
  C: "~@3 gb4@2 f4@2 ~ eb4@2 db4@2 ~ db4@3, ab4@5 ~@11", D: "eb4@3 ~@5 bb3@2 db4@2 eb4@2 f4@2",
  E: "ab4@3 ~@9 c5@2 bb4 ~", F: "bb4 ab4@2 ~@4 db4", G: "ab4@3 gb4@3 f4@2 eb4@3 db4@2 ~ db4@2",
  H: "eb4@3 ~@5 f4@2 eb4@2 db4@2 eb4@2", I: "bb3 ~@15", J: "~ f4@3 db4@2 eb4@2 ~ f4@2 db4@3 eb4@2",
  K: "~ f4@3 db4@2 eb4@2 f4@4 ~@4",
  L: "[ab4@3 ~@9 bb4@2 ab4@4 bb4@3 ~@14 gb4@3 f4@2 eb4@2 ~ db4@2 ~ db4@2, ~@31 db4@2 ~@15, ~@32 ab4@5 ~@11]/3",
  M: "ab4@4 ~@8 c5@2 bb4 ~", N: "~ bb3@2 ~@13", O: "[~@12 bb4@2 ab4@4 bb4@3 ~@9 db4@2]/2",
  P: "~@3 gb4@3 f4@2 eb4@2 db4@2 ~@2 db4@2, ab4@5 ~@11",
  Q: "[eb4@3 ~@5 bb3@2 db4@2 eb4@2 ~ ab4@3 ~@2 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2, ~@14 f4@3 ~@15]/2", R: "ab4 ~ ab4 ~@5",
})).s("gm_french_horn").gain(0.71)

// drums · kick
const kick = s("bd").struct("<~@8 A@23 B A@27 B A@40 B ~@7 A@8 ~@2>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.8)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@8 A@23 ~ A@27 ~ A@40 ~@8 A@8 ~@2>".pickRestart({
  A: "~@15 x",
})).gain(0.08)

// drums · rim
const rim = s("rim").struct("<~@8 A@23 B A@27 ~ A@24 ~@8 A@8 ~@8 A@8 ~@2>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x",
})).gain(0.64)

// drums · clap
const clap = s("cp").struct("<~@8 A@23 ~ A@27 ~ A@24 ~@8 A@8 ~@8 A@8 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@8 A@23 ~ A@27 ~ A@24 ~@8 A@8 ~@8 A@8 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@23 ~ A@27 ~ A@24 ~@8 A@8 ~@8 A@8 ~@2>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@23 ~ A@27 ~ A@24 ~@8 A@8 ~@8 A@8 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.8)

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

// drums · bongos
const bongos = s("bongo:4").struct("<~@4 A@27 ~ A@27 ~ A@24 ~@8 A@8 ~@4 A@12 ~@2>".pickRestart({
  A: "x!4",
})).gain(1.68)

// drums · congas
const congas = s("conga:13").struct("<~@4 A@27 ~ A@27 ~ A@24 ~@8 A@8 ~@4 A@12 ~@2>".pickRestart({
  A: "~ x ~@3 x ~@2",
})).gain(2.05)

// drums · ht
const ht = s("ht").struct("<~@3 A ~@3 B ~@3 C ~@3 D ~@27 E ~@39 F ~@7 G ~@7 H ~@3 I ~@3 I ~@10>".pickRestart({
  A: "~@10 x!2 ~ x!2 ~", B: "x ~@2 x ~ x ~@2 x ~ x ~ x ~@3", C: "~@10 x!2 ~ x ~@2", D: "~ x ~ x ~@2 x ~@3 x!3 ~@3",
  E: "x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~", F: "~@10 x!3 ~@3", G: "~@2 x ~ x ~ x ~@2 x!2 ~ x ~@3", H: "~ x!2 ~ x ~@11",
  I: "~@9 x ~ x!2 ~@3",
})).gain(0.8)

// drums · mt
const mt = s("mt").struct("<~@3 A ~@3 B ~@3 C ~@3 C ~@27 D ~@39 C ~@7 E ~@7 F ~@3 C ~@3 C ~@10>".pickRestart({
  A: "~@9 x ~@6", B: "~@2 x ~@4 x ~@5 x ~@2", C: "~ x", D: "~ x ~@6 x ~@7", E: "~@7 x ~@6 x ~", F: "x",
})).gain(0.8)

// drums · shaker
const shaker = s("sh").struct("<[x!16]!31 ~ [x!16]!27 ~ [x!16]!24 ~@8 [x!16]!24 ~@2>").gain(0.8)

stack(
  bass, acoustic_guitar_nylon, pad_warm, shamisen, bass_2, trombone, lead_2_sawtooth, string_ensemble_1, french_horn,
  kick, kick_soft, rim, clap, snare, hihat, open_hat, crash, bongos, congas, ht, mt, shaker
)

More by Jennifer Lopez