Strudelify
I Will Be Waiting cover art

Real Love

I Will Be Waiting

Stansfield Lisa

KeyE♭ majorTempo98 bpm
0:00/0:00
// I Will Be Waiting — Stansfield Lisa
// 98 bpm, 4/4, key D# 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: duplicate parts dropped: ch 8 "FLUTE" flute (copy of ch 9 "TRUMPET" trumpet)
// note: Full arrangement: all 130 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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, A@4 for four bars: edit a riff to change every repeat.

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~ A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E F G H I J G K L@2 M@2 N@2 O P L@2 M@2 Q@2 O P A@2 B@2 C@2 D@2 A@2
  B@2 C@2 D@2 L@2 M@2 N@2 O P L@2 M@2 Q@2 O P L@2 M@2 Q@2 O P R S T U V W T X L@2 M@2 N@2 O P L@2 M@2 Q@2 O P L@2 M@2
  N@2 O P L@2 M@2 Q@2 O P Y
>`.pickRestart({
  A: "[[f2,ab3,c4,eb4,g4]@15 ~]/2", B: "[[g3,bb3,d4,f4]@11 ~, f2@7 ~]/2", C: "[[f2,gb3,bb3,db4,f4]@15 ~]/2",
  D: "[[f2,f3,ab3,c4,db4]@16 ~@2 [f3,ab3,c4,eb4]@3 [f3,ab3,c4,db4]@3, ~@3 f2]/2", // Dbmaj7 Fm7 Dbmaj7
  E: "[eb2,eb3,ab3,db4,f4]@5 [eb2,ab3,db4,f4], ~@20 eb3 ~@3", // Db
  F: "g4@15 g4@5 [eb4,g4]@4, [c2,c3,bb3,c4], eb4@5 ~, ~@5 bb4@3", // Eb C7
  G: "[eb2,eb3,db4,eb4,f4,ab4]@15 [eb2,eb3,db4,eb4,f4,ab4]@4 ~ [eb2,eb3,db4,eb4,f4,ab4]@4", // Db
  H: "[ab2,c4,eb4,g4]@5 [ab2,c4,eb4,g4]", I: "[eb2,eb3,ab3,db4,eb4,f4]@5 [eb2,eb3,ab3,db4,eb4,f4]",
  J: "g4@2 g4 [eb4,g4], [c2,c3,bb3,c4], eb4@3 ~, ~ bb4", // Eb C7
  K: "[eb2,eb3,db4,eb4,f4,ab4]@6 ~@6 [eb2,eb3,f4,ab4,bb4,eb5] ~ [eb2,eb3,f4,ab4,bb4,eb5] ~@3 [eb2,eb3,f4,ab4,bb4,eb5] ~ [eb2,eb3,f4,ab4,bb4,eb5] ~@3", // Db Ebsus4
  L: "[ab3,c4,eb4,g4]@23 ~", M: "[[bb3,d4,f4]@41 ~ [bb3,d4,f4]@6]/2", N: "[db4,f4,ab4,c5]@23 ~", O: "[bb3,eb4,g4]",
  P: "[bb3,eb4,g4]@11 ~ [bb3,eb4,g4]@5 ~ [bb3,eb4,g4]@4 ~@2", Q: "[[db4,f4,ab4,c5]@35 ~ [db4,f4,ab4,c5]@11 ~]/2",
  R: "[eb3,db4,f4]@5 [ab3,db4,f4]", S: "g4@15 g4@5 [eb4,g4]@4, [bb3,c4], eb4@5 ~, ~@5 bb4@3",
  T: "[db4,eb4,f4,ab4]@15 [db4,eb4,f4,ab4]@4 ~ [db4,eb4,f4,ab4]@4", U: "[c4,eb4,g4]@5 [c4,eb4,g4]",
  V: "[db4,eb4,f4]@5 [db4,eb4,f4]", W: "g4@2 g4 [eb4,g4], [bb3,c4], eb4@3 ~, ~ bb4",
  X: "[db4,eb4,f4,ab4]@12 [f4,ab4,eb5] ~ [f4,ab4,bb4,eb5] ~@3 [f4,ab4,bb4,eb5] ~ [f4,ab4,bb4,eb5] ~@3, ~@6 bb4 ~@5", // Db Fm7
  Y: "[a3,bb3,d4,f4]@23 ~", // Bbmaj7
})).s("gm_piano").gain(0.38).pan(0.3)

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~ 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 D C E C D C F G H A I G I G I G I G I G I G I A B A B A B A B A B
  A B A B A B G H A I G I G I G I G I G I G I J K J K J K J K L M L N L M L O G H A I G I G I G I G I G I G I G H A I G
  I G I G I G I G I G I P
>`.pickRestart({
  A: "[f1,f2]@2 ~ [c1,c2]@2 [f1,f2] ~@2 [eb1,eb2] ~@2 [f1,f2] ~@12", // F C F Eb F
  B: "[f1,f2]@2 ~ [c1,c2]@2 [f1,f2] ~@2 [eb1,eb2] ~@2 [f1,f2] ~@2 [c1,c2] ~@9", // F C F Eb F C
  C: "[eb1,eb2]@2 ~ [bb1,bb2]@2 [eb2,eb3] ~@2 [bb1,bb2] ~@2 [eb1,eb2] ~@12", // Eb Bb Eb Bb Eb
  D: "[c1,c2]@2 ~ [g1,g2]@2 [c2,c3] ~@2 [bb1,bb2] ~@2 [c1,c2] ~@3 [bb1,bb2]@2 ~@7", // C G C Bb C Bb
  E: "[c1,c2]@2 ~ [ab1,ab2]@2 [c2,c3] ~@2 [bb1,bb2] ~@2 [c1,c2] ~@3 [ab1,ab2]@2 ~@7", // C Ab C Bb C Ab
  F: "[eb1,eb2]@2 ~ [bb1,bb2]@2 [eb2,eb3] ~@2 [bb1,bb2] ~@2 [eb1,eb2] ~@3 [eb1,eb2]@8 ~", // Eb Bb Eb Bb Eb
  G: "[f1,f2] ~@2 [c1,c2] ~ [f1,f2]@2 ~ [eb1,eb2] ~@2 [f1,f2]@2 ~@11", // F C F Eb F
  H: "[f1,f2] ~@2 [c1,c2] ~ [f1,f2] ~@2 [eb1,eb2] ~@2 [f1,f2]@2 ~ [c1,c2]@2 ~@8", // F C F Eb F C
  I: "[f1,f2]@2 ~ [c1,c2] ~ [f1,f2]@2 ~ [eb1,eb2] ~@2 [f1,f2]@2 ~ [c1,c2]@2 ~@8", // F C F Eb F C
  J: "f2 ~@2 c2 ~ f2@2 ~ eb2 ~@2 f2@2 ~@11", K: "f2@2 ~ c2 ~ f2@2 ~ eb2 ~@2 f2@2 ~ c2@2 ~@8",
  L: "eb2@2 ~ bb2@2 eb3 ~@2 bb2 ~@2 eb2 ~@12", M: "c2@2 ~ g2@2 c3 ~@2 bb2 ~@2 c2 ~@3 bb2@2 ~@7",
  N: "c2@2 ~ ab2@2 c3 ~@2 bb2 ~@2 c2 ~@3 ab2@2 ~@7", O: "eb2@2 ~ bb2@2 eb3 ~@2 bb2 ~@2 eb2 ~@3 eb2@8 ~",
  P: "[bb0,bb1]@23 ~", // Bb
})).s("gm_synth_bass_2").gain(0.38)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@33 A@2 B@2 C@2 D@2 A@2 B@2 C@2 E@2 F@6 G@2 H@2 I@4 J@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 E@2 ~@2 K@2 ~@2 L@2 ~@8 A@2 B@2
  C@2 D@2 A@2 B@2 C@2 E@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 E@2 M
>`.pickRestart({
  A: "[eb5,g5]/2", B: "[d5,bb5]/2", C: "[[db5,f5]@47 ~]/2", D: "[~@24 eb6@23 ~, [eb5,g5]@47 ~]/2",
  E: "[~@24 eb6@23 ~, [eb5,g5]]/2", F: "[~@10 f4@115 eb4@7 db4@6 eb4@6]/6", G: "[c4@27 f4@4 eb4@5 ab4@6 f4@5 ~]/2",
  H: "c5/2", I: "bb4/4", J: "[f4@47 ~]/2", K: "[~@3 bb5@43 ~@2]/2", L: "[~@24 eb6@23 ~, bb5@47 ~]/2",
  M: "[c5,d5,c6]@23 ~", // Csus2
})).s("gm_string_ensemble_2").gain(0.27).pan(0.6)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  ~ A@2 B@2 C@4 A@2 B@2 C@4 A@2 B@2 C@4 D E D F D G H@2 A@2 I@2 J@2 K@2 A@2 I@2 J@2 L@2 A@2 B@2 C@4 A@2 B@2 C@4 A@2 I@2
  J@2 K@2 A@2 I@2 J@2 L@2 A@2 I@2 M@2 L@2 N O N P N Q R@2 A@2 I@2 J@2 K@2 A@2 I@2 J@2 L@2 A@2 I@2 J@2 K@2 A@2 I@2 J@2
  L@2 S
>`.pickRestart({
  A: "[[ab3,c4,eb4,g4]@47 ~]/2", B: "[[g3,bb3,d4,f4]@47 ~]/2", C: "[[gb3,bb3,db4]@47 ~ [ab3,c4,eb4]@47 ~, f4@95 ~]/4",
  D: "[ab3,db4,f4]", E: "[g3,bb3,c4,eb4]@23 ~", F: "[ab3,c4,eb4,g4]", G: "[bb3,c4,eb4,g4]",
  H: "[f4@12 [eb4,ab4]@11 ~, [ab3,db4]@23 ~]/2", I: "[bb3,d4,f4]/2", J: "[ab3,c4,db4,f4]/2", K: "[[g3,bb3,eb4]@47 ~]/2",
  L: "[[g3,bb3,eb4]@23 ~]/2", M: "[[ab3,c4], f4@23 ~]/2", N: "[ab3,f4]", O: "[bb3,c4,eb4]@23 ~", P: "[ab3,c4,g4]",
  Q: "[c4,eb4,g4]", R: "[f4@12 [eb4,ab4]@11 ~, db4@23 ~]/2", S: "[d4,f4]@23 ~",
})).s("gm_synth_strings_2").gain(0.2).pan(0.9)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@81 A@2 B@2 C@2 D@2 E@2 F G H@2 I J ~@33>".pickRestart({
  A: "[~ g5@8 [eb4,eb5]@8 [c4,c5]@18 ~ [g4,g5]@4 [eb4,eb5]@4 [c4,c5]@4, g4@7 ~@41]/2", B: "[~ [f4,f5]@46 ~]/2",
  C: "[[bb4,bb5]@4 [ab4,ab5]@4 [g4,g5]@4 [ab4,ab5]@24 [bb4,bb5]@4 ~ ab4@3 [g4,g5]@4, ~@10 ab5 ~]/2", // Bb Ab G Ab Bb G
  D: "[[eb4,eb5]@7 ~]/2", E: "[bb5@28 ~@8 bb5@2 g5 eb6@2 ~ c6 ~ eb6 f6 ~@2]/2", F: "bb5@3 ~", G: "~@9 c6@9 bb5@5 ~",
  H: "[bb5@3 c6]/2", I: "bb5@11 ~", J: "~@9 [eb4,eb6] ~@5 [eb4,eb6] ~@5 [eb4,eb6] ~@2",
})).s("gm_string_ensemble_1").gain(0.33).pan(0.3)

// other · string ensemble 1 · "STRINGS" · soft notes · Eb
const string_ensemble_1_soft = note("<~@92 [~@9 g5@8 ~ eb6@5 ~] ~ [~@11 eb6@12 ~] ~ [~@3 [eb4,eb6] ~@20] ~@33>")
  .s("gm_string_ensemble_1").gain(0.22).pan(0.3)

// other · trumpet
const trumpet = note(`<
  ~@32 A ~ B C D ~@2 E F ~ B C G ~@2 H I@2 ~@15 J B C D ~@2 E F J B C G ~@2 H I@2 ~@14 A J B C D ~@2 E F J B C G ~@2 H
  K@2 B C D ~@2 E F J B C D ~@2 H L M
>`.pickRestart({
  A: "eb4@11 ~ [ab4,bb4] ~ [ab4,bb4] ~@3 [ab4,bb4] ~ [ab4,bb4] ~@3", B: "~@9 c4 ~@2 g4@3 ~ eb4 ~@7, ~@12 gb4 ~@11",
  C: "~@6 d5 ~ eb5 f5 ~ f5 ~ db5 d5@4 bb4 ~@5", D: "d5 ~ eb5 f5!2 ~@2 db5 d5@4 bb4 ~ g4 ~@3 bb4 ~ c5@2 ~@2",
  E: "~@9 eb4@2 g4 bb4@2 bb4 ~@3 eb4@2 g4 bb4 ~ c5", F: "~@3 eb4@2 g4 bb4@2 bb4 ~@15",
  G: "d5@2 eb5 f5 ~ f5 ~@2 d5@4 bb4 ~ g4 ~@3 bb4 ~ c5@2 ~@2, ~@8 db5 ~@15", H: "~@21 eb4 ~@2",
  I: "[bb4@4 ~ g4 ~@9 eb4 ~@2 bb4@4 ~ g4@2 ~@23]/2", J: "~@15 [eb4,g4] ~@4 [eb4,g4] ~@3",
  K: "[bb4@4 ~ g4 ~@9 eb4 ~@2 bb4@4 ~ g4@2 ~@14 [eb4,g4] ~@4 [eb4,g4] ~@3]/2", L: "bb4@4 ~ g4 ~@18", M: "a4@23 ~",
})).s("gm_trumpet").gain(0.33).pan(0.7)

// other · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note(`<
  ~@25 A B ~@2 C D E@2 ~ F G H ~@2 I J ~ F G K ~@2 L M@2 ~@15 N F G H ~@2 I J O F G K ~@2 L M@2 ~@7 A B ~@2 C D E@2 N F
  G H ~@2 I J O F G K ~@2 L P@2 F G H ~@2 I J O F G H ~@2 L Q R
>`.pickRestart({
  A: "~@15 f4@2 ~@2 ab4@4 gb4", B: "g4@3 ~@2 eb4@14 ~@5", C: "~@19 ab4@4 ~", D: "bb4@3 ~ gb4 g4@2 ~@2 eb4@11 ~@4",
  E: "[~@12 eb4@22 ~@2 eb5 ~ eb5 ~@3 eb5 ~ eb5 ~@3]/2", F: "~@9 c4 ~@2 g4@3 ~ eb4 ~@7, ~@12 gb4 ~@11",
  G: "~@6 d4 ~ eb4 f4 ~ f4 ~ db4 d4@4 bb3 ~@5", H: "d4 ~ eb4 f4!2 ~@2 db4 d4@4 bb3 ~ g3 ~@3 bb3 ~ c4@2 ~@2",
  I: "~@9 eb4@2 g4 bb4@2 bb4 ~@3 eb4@2 g4 bb4 ~ c5", J: "~@3 eb4@2 g4 bb4@2 bb4 ~@15",
  K: "d4@2 eb4 f4 ~ f4 ~@2 d4@4 bb3 ~ g3 ~@3 bb3 ~ c4@2 ~@2, ~@8 db4 ~@15", L: "~@21 eb4 ~@2",
  M: "[bb4@4 ~ g4 ~@9 eb4 ~@2 bb4@4 ~ g4@2 ~@23]/2", N: "~@15 [ab3,c4,eb4] ~@4 [ab3,c4,eb4] ~@3",
  O: "~@15 [c4,eb4,g4] ~@4 [c4,eb4,g4] ~@3", // Cm
  P: "[bb4@4 ~ g4 ~@9 eb4 ~@2 bb4@4 ~ g4@2 ~@14 [ab3,c4,eb4] ~@4 [ab3,c4,eb4] ~@3]/2", Q: "bb4@4 ~ g4 ~@18",
  R: "d4@23 ~",
})).s("gm_synth_brass_2").gain(0.32).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A@3 B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A@3 B A B A B A B 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
>`.pickRestart({
  A: "x ~@4 x ~@5 x ~@3 x ~@8", B: "x ~@4 x ~@5 x ~@3 x ~@4 x ~@3", C: "x",
})).gain(0.49)

// drums · rim
const rim = s("rim").struct(`<
  ~ A@15 B A@7 C A@7 D A@7 B A@7 C A@7 B A@7 C A@7 B A@7 C A@7 C A@7 D A@7 B A@7 C A@7 B A@7 C ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@3 x ~ x ~@2", C: "~@6 x ~@11 x ~@2 x ~ x", D: "~@3 x ~@2 x!2 ~ x ~@2",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B C D E D E F A B C D E D E G A B C D E D E H A B C I E D E J A B C D E D E G A B C D E D E H A B C D E D E G A B
  C D E D E H A B C D E D E G A B C D E D E H A B C D E D E H A B C I E D E J A B C D E D E G A B C D E D E H A B C D E
  D E G A B C D E D E H ~
>`.pickRestart({
  A: "~@6 x ~@4 x ~@2 x ~@3 x ~@4 x", B: "~@3 x ~@3 x ~ x ~@2", C: "~@2 x ~@3 x ~@4 x ~@2 x ~@3 x ~@4 x",
  D: "~@6 x ~@4 x ~@2 x ~@3 x ~@5", E: "~@2 x ~@2 x!2 ~@4 x ~@2 x ~@3 x ~@4 x", F: "~@2 x ~@3 x ~@4 x ~@2 x ~@3 x ~@5",
  G: "~@2 x ~@3 x ~@4 x ~@2 x ~@3 x ~@2 x!3", H: "~@2 x ~@3 x ~@4 x ~@2 x ~@3 x ~@2 x ~ x",
  I: "~@6 x ~@4 x ~@2 x ~@3 x ~ x!4", J: "~@2 x ~@3 x ~@5 x ~ x ~@3 x ~ x!4",
})).gain(0.38)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@2 A B C ~@5 A B C ~@3 D ~ A B C ~@5 A B ~@6 A B C ~@3 D ~ A B C ~@5 A B C ~@3 D ~ A B C ~@5 A B C ~@3 D ~ A B C ~@5
  A B C ~@5 A B ~@6 A B C ~@3 D ~ A B C ~@5 A B C ~@3 D ~ A B C ~@5
>`.pickRestart({
  A: "~@11 x ~@12", B: "~@5 x ~@18", C: "~@17 x ~@6", D: "~@5 x",
})).gain(0.22)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C B C B C B C B C D
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@5 x ~ x", D: "x",
})).gain(0.38)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@8
>`.pickRestart({
  A: "x",
})).gain(0.27)

// drums · bongos
const bongos = s("bongo:4").struct("<~@88 [~@15 x!9] ~@41>").gain(0.86)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@88 [~@3 x!4 ~@2 x!6 ~@9] ~@41>").gain(0.86)

// drums · congas
const congas = s("conga:13").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B ~
>`.pickRestart({
  A: "~ x ~@5 x ~@4", B: "~@3 x ~@10 x ~@9",
})).gain(0.87)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~ A ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3
// … 48 more lines

More by Stansfield Lisa