Strudelify

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: 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 E@2 F G H I J K H L M N O@2 P@2 Q R M@2 O@2 S@2 T U A@2 B@2 C@2 D@2 A@2
  B@2 C@2 E@2 M N O@2 P@2 Q R M@2 O@2 S@2 T U M@2 O@2 S@2 T U V W X Y Z AA X AB M N O@2 P@2 Q R M@2 O@2 S@2 T U M N O@2
  P@2 Q R M@2 O@2 S@2 T U AC
>`.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: "[[f2,f3,ab3,c4,db4]@32 ~@4 [f3,ab3,c4,eb4]@6 [f3,ab3,c4,db4]@5 ~, ~@36 f2@11 ~]/2", // Dbmaj7 Fm7 Dbmaj7
  F: "[eb2,eb3,ab3,db4,f4]@5 [eb2,ab3,db4,f4], ~@20 eb3 ~@3", // Db
  G: "g4@15 g4@5 [eb4,g4]@4, [c2,c3,bb3,c4], eb4@5 ~, ~@5 bb4@3", // Eb C7
  H: "[eb2,eb3,db4,eb4,f4,ab4]@15 [eb2,eb3,db4,eb4,f4,ab4]@4 ~ [eb2,eb3,db4,eb4,f4,ab4]@4", // Db
  I: "[ab2,c4,eb4,g4]@5 [ab2,c4,eb4,g4]", J: "[eb2,eb3,ab3,db4,eb4,f4]@5 [eb2,eb3,ab3,db4,eb4,f4]",
  K: "g4@2 g4 [eb4,g4], [c2,c3,bb3,c4], eb4@3 ~, ~ bb4", // Eb C7
  L: "[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
  M: "[ab3,c4,eb4,g4]@23 ~", N: "[ab3,c4,eb4,g4]", O: "[[bb3,d4,f4]@41 ~ [bb3,d4,f4]@6]/2", P: "[db4,f4,ab4,c5]@23 ~",
  Q: "[bb3,eb4,g4]@23 ~", R: "[bb3,eb4,g4]@11 ~ [bb3,eb4,g4]@5 ~ [bb3,eb4,g4]@5 ~",
  S: "[[db4,f4,ab4,c5]@35 ~ [db4,f4,ab4,c5]@11 ~]/2", T: "[bb3,eb4,g4]",
  U: "[bb3,eb4,g4]@11 ~ [bb3,eb4,g4]@5 ~ [bb3,eb4,g4]@4 ~@2", V: "[eb3,db4,f4]@5 [ab3,db4,f4]",
  W: "g4@15 g4@5 [eb4,g4]@4, [bb3,c4], eb4@5 ~, ~@5 bb4@3", // Eb Bbsus2
  X: "[db4,eb4,f4,ab4]@15 [db4,eb4,f4,ab4]@4 ~ [db4,eb4,f4,ab4]@4", Y: "[c4,eb4,g4]@5 [c4,eb4,g4]",
  Z: "[db4,eb4,f4]@5 [db4,eb4,f4]", AA: "g4@2 g4 [eb4,g4], [bb3,c4], eb4@3 ~, ~ bb4",
  AB: "[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
  AC: "[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 I J G K G L G M G M I N I M A B A B A B A B A B
  A B A B A B G H I J G K G L G M G M I N I M O P O P Q R Q P S T S U S T S V G H I J G K G L G M G M I N I M G H I J G
  K G L G M G M I N I M W
>`.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 ~@11", // F C F Eb F
  J: "[f1,f2]@2 ~ [c1,c2] ~ [f1,f2] ~@2 [eb1,eb2] ~@2 [f1,f2]@2 ~ [c1,c2]@2 ~@8", // F C F Eb F C
  K: "[f1,f2] ~@2 [c1,c2] ~ [f1,f2]@2 ~ [eb1,eb2]@2 ~ [f1,f2]@2 ~ [c1,c2]@2 ~@8", // F C F Eb F C
  L: "[f1,f2]@2 ~ [c1,c2] ~ [f1,f2]@2 ~ [eb1,eb2] ~@2 [f1,f2] ~@2 [c1,c2]@2 ~@8", // F C F Eb F C
  M: "[f1,f2]@2 ~ [c1,c2] ~ [f1,f2]@2 ~ [eb1,eb2] ~@2 [f1,f2]@2 ~ [c1,c2]@2 ~@8", // F C F Eb F C
  N: "[f1,f2] ~@2 [c1,c2] ~ [f1,f2]@2 ~ [eb1,eb2] ~@2 [f1,f2] ~@2 [c1,c2]@2 ~@8", // F C F Eb F C
  O: "f2 ~@2 c2 ~ f2@2 ~ eb2 ~@2 f2@2 ~@11", P: "f2@2 ~ c2 ~ f2@2 ~ eb2 ~@2 f2@2 ~ c2@2 ~@8",
  Q: "f2 ~@2 c2 ~ f2 ~@2 eb2 ~@2 f2@2 ~@11", R: "f2 ~@2 c2 ~ f2@2 ~ eb2 ~@2 f2 ~@2 c2@2 ~@8",
  S: "eb2@2 ~ bb2@2 eb3 ~@2 bb2 ~@2 eb2 ~@12", T: "c2@2 ~ g2@2 c3 ~@2 bb2 ~@2 c2 ~@3 bb2@2 ~@7",
  U: "c2@2 ~ ab2@2 c3 ~@2 bb2 ~@2 c2 ~@3 ab2@2 ~@7", V: "eb2@2 ~ bb2@2 eb3 ~@2 bb2 ~@2 eb2 ~@3 eb2@8 ~",
  W: "[bb0,bb1]@23 ~", // Bb
})).s("gm_synth_bass_2").gain(0.38)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@33 A@4 B@2 C@2 D@2 E@2 B@2 C@2 F@6 G@2 H@2 I@4 J@2 A@4 B@2 C@2 D@2 E@2 B@2 C@2 ~@2 K@2 ~@2 L@2 ~@8 A@4 B@2 C@2 D@2
  E@2 B@2 C@2 A@4 B@2 C@2 D@2 E@2 B@2 C@2 M
>`.pickRestart({
  A: "[[eb5,g5]@47 [d5,bb5]@48 ~]/4", B: "[[db5,f5]@47 ~]/2", C: "[~@24 eb6@23 ~, [eb5,g5]@47 ~]/2", D: "[eb5,g5]/2",
  E: "[[d5,bb5]@47 ~]/2", F: "[~@9 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 ~",
})).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 F G D H I@2 J@2 K@2 L@2 M@2 J@2 N@2 O@2 P@2 A@2 B@2 C@4 A@2 B@2 C@4 J@2 K@2
  L@2 M@2 J@2 N@2 O@2 P@2 J@2 N@2 Q@2 P@2 R S T U R V W@2 J@2 K@2 L@2 M@2 J@2 N@2 O@2 P@2 J@2 K@2 L@2 M@2 J@2 N@2 O@2
  P@2 X
>`.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,db4,f4]@23 ~", G: "[ab3,c4,eb4,g4]", H: "[bb3,c4,eb4,g4]",
  I: "[f4@12 [eb4,ab4]@11 ~, [ab3,db4]@23 ~]/2", J: "[ab3,c4,eb4,g4]/2", K: "[[bb3,d4,f4]@47 ~]/2",
  L: "[ab3,c4,db4,f4]/2", M: "[[g3,bb3,eb4]@47 ~]/2", N: "[bb3,d4,f4]/2", O: "[[ab3,c4,db4], f4@23 ~]/2",
  P: "[[g3,bb3,eb4]@23 ~]/2", Q: "[[ab3,c4], f4@23 ~]/2", R: "[ab3,f4]", S: "[bb3,c4,eb4]@23 ~", T: "[ab3,f4]@23 ~",
  U: "[ab3,c4,g4]", V: "[c4,eb4,g4]", W: "[f4@12 [eb4,ab4]@11 ~, db4@23 ~]/2", X: "[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: "[[g4,g5]@8 ~ [eb4,eb5]@8 [c4,c5]@18 ~ [g4,g5]@4 [eb4,eb5]@4 [c4,c5]@4]/2", B: "[[f4,f5]@23 ~]/2",
  C: "[[bb4,bb5] [ab4,ab5] [g4,g5] [ab4,ab5]@6 [bb4,bb5] [ab4,ab5] [g4,g5]]/2", 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@35 c6@12 ~]/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 ~ G H I ~@2 J K@2 ~@15 L B C D ~@2 E F L G H I ~@2 J K@2 ~@14 A L B C D ~@2 E F L G H I ~@2 J
  M@2 B C D ~@2 E F L G H I ~@2 J N O
>`.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!2 ~@2 db5 d5@4 bb4 ~@5", D: "d5 ~ eb5 f5!2 ~@2 db5 d5@4 bb4 ~ g4 ~@3 bb4 c5@2 ~@3",
  E: "~@9 eb4@2 g4 bb4@2 bb4 ~@3 eb4@2 g4 bb4 ~ c5", F: "~@3 eb4@2 g4 bb4@2 bb4 ~@15",
  G: "~@9 c4 ~@2 g4@4 eb4 ~@7, ~@12 gb4 ~@11", H: "~@6 d5@2 eb5 f5 ~ f5 ~ db5 d5@4 bb4 ~@5",
  I: "d5@2 eb5 f5 ~ f5 ~ db5 d5@4 bb4 ~ g4 ~@3 bb4 c5@2 ~@3", J: "~@21 eb4 ~@2",
  K: "[bb4@4 ~ g4 ~@9 eb4 ~@2 bb4@4 ~ g4@2 ~@23]/2", L: "~@15 [eb4,g4] ~@4 [eb4,g4] ~@3",
  M: "[bb4@4 ~ g4 ~@9 eb4 ~@2 bb4@4 ~ g4@2 ~@14 [eb4,g4] ~@4 [eb4,g4] ~@3]/2", N: "bb4@4 ~ g4 ~@18", O: "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 ~ K L M ~@2 N O@2 ~@15 P F G H ~@2 I J Q K L M ~@2 N O@2 ~@7 A B ~@2 C D E@2 P F
  G H ~@2 I J Q K L M ~@2 N R@2 F G H ~@2 I J Q K L M ~@2 N S T
>`.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!2 ~@2 db4 d4@4 bb3 ~@5", H: "d4 ~ eb4 f4!2 ~@2 db4 d4@4 bb3 ~ g3 ~@3 bb3 c4@2 ~@3",
  I: "~@9 eb4@2 g4 bb4@2 bb4 ~@3 eb4@2 g4 bb4 ~ c5", J: "~@3 eb4@2 g4 bb4@2 bb4 ~@15",
  K: "~@9 c4 ~@2 g4@4 eb4 ~@7, ~@12 gb4 ~@11", L: "~@6 d4@2 eb4 f4 ~ f4 ~ db4 d4@4 bb3 ~@5",
  M: "d4@2 eb4 f4 ~ f4 ~ db4 d4@4 bb3 ~ g3 ~@3 bb3 c4@2 ~@3", N: "~@21 eb4 ~@2",
  O: "[bb4@4 ~ g4 ~@9 eb4 ~@2 bb4@4 ~ g4@2 ~@23]/2", P: "~@15 [ab3,c4,eb4] ~@4 [ab3,c4,eb4] ~@3",
  Q: "~@15 [c4,eb4,g4] ~@4 [c4,eb4,g4] ~@3", // Cm
  R: "[bb4@4 ~ g4 ~@9 eb4 ~@2 bb4@4 ~ g4@2 ~@14 [ab3,c4,eb4] ~@4 [ab3,c4,eb4] ~@3]/2", S: "bb4@4 ~ g4 ~@18",
  T: "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
// … 59 more lines

More by Stansfield Lisa