Strudelify
I Wanna Wake Up With You cover art

1986 · I Wanna Wake Up With You

I Wanna Wake Up With You

Boris Gardiner

KeyE♭ majorTempo168 bpm
0:00/0:00
// I Wanna Wake Up With You — Boris Gardiner
// 168 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: Full arrangement: all 122 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(168/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.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C B D E F@2 G H I J K H L M K H N O P H G P G H I M K H Q J K H N O P H Q R K S H I T H Q U V W I@2 X Y Z P G H I
  J K H L M K H N O P H G P G H I M K H Q J K H N O P H Q R K S H I T H Q U V W I@2 X K P@2 G H I J K H L M K H N O P H
  G P AA ~
>`.pickRestart({
  A: "eb1", B: "bb1", C: "c2@15 ~", D: "ab1", E: "a1", F: "bb1@7 ~", G: "eb1@5 ~ eb1@9 ~", H: "bb1@5 ~ bb1@10",
  I: "c2@5 ~ c2@9 ~", J: "eb1@5 ~ eb1@2 g1@7 ~", K: "ab1@2 ~ ab1@5", L: "eb2@2 ~ eb2@5", M: "eb1 g1", N: "c2@5 ~ c2@10",
  O: "ab1 a1", P: "bb1@2 ~ bb1@4 ~", Q: "eb1@5 ~ eb1@8 ~@2", R: "eb1@5 ~ g1@9 ~", S: "a1@5 ~ a1@9 ~",
  T: "f1@5 ~ f1@9 ~", U: "eb1@5 ~@2 eb1@9", V: "g1@5 ~ g1@8 ~@2", W: "g1@5 ~@2 g1@9", X: "~ f1@5 f1@10",
  Y: "~ ab1@4 ~ ab1@10", Z: "~ bb1@4 ~ bb1@10", AA: "eb1 ~@15",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@8 A B C D E F A G E F C H A E A F A B C D E F A D E F C H A E A I E J A C K F A@2 L M C@2 K@2 B@2 A B C D E F A G E
  F C H A E A F A B C D E F A D E F C H A E A I E J A C K N A@2 L M C@2 K@2 B@2 A B C D E F A G E F C H A E A F ~@2
>`.pickRestart({
  A: "~@4 [bb3,eb4,g4] ~@7 [bb3,eb4,g4] ~@3", B: "~@4 [bb3,d4,f4] ~@7 [bb3,d4,f4] ~@3",
  C: "~@4 [c4,eb4,g4] ~@7 [c4,eb4,g4] ~@3", D: "~@4 [db4,eb4,g4,bb4] ~@7 [db4,eb4,g4,bb4] ~@3",
  E: "~@4 [ab3,c4,eb4] ~@7 [ab3,c4,eb4] ~@3", F: "~@4 [bb3,d4,f4,ab4] ~@7 [bb3,d4,f4,ab4] ~@3",
  G: "~@4 [db4,eb4,g4,bb4] ~ [bb3,eb4,g4] ~@5 [db4,eb4,g4,bb4] ~@3", H: "~@4 [ab3,c4,eb4] ~@7 [a3,c4,eb4] ~@3",
  I: "~@4 [db4,eb4,g4] ~@7 [db4,eb4,g4] ~@3", J: "~@4 [a3,c4,eb4] ~@7 [a3,c4,eb4] ~@3",
  K: "~@4 [f3,ab3,c4,eb4] ~@7 [f3,ab3,c4,eb4] ~@3", L: "~@4 [g3,b3,d4] ~@7 [g3,b3,d4] ~@3",
  M: "~@4 [g3,b3,d4,f4] ~@7 [g3,b3,d4,f4] ~@3", N: "~@4 [d4,f4,ab4] ~@7 [d4,f4,ab4] ~@3",
})).s("gm_overdriven_guitar").gain(0.25).pan(0.7)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<A B A C D E F E ~@114>".pickRestart({
  A: "eb4", B: "d4@13 ~ bb3@2", C: "g4@4 eb4@11 ~", D: "~@5 bb3 eb4 bb3", E: "g4@3 ~ g4@4 eb4@8", F: "~@5 g4@2 bb4",
})).s("gm_lead_2_sawtooth").gain(0.37)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@27 A@4 B@4 C@4 D@8 E@7 F@5 G@8 H@4 I@8 J@4 K@4 D@8 E@7 F@5 G@8 H@4 L@3
>`.pickRestart({
  A: "[~@15 c4@16 ab3@16 bb3@12 g3@4 bb3]/4",
  B: "[~@7 eb4@8 [ab3,c4]@16 [f3,bb3]@16 ~@12 bb3@4 [ab3,c4], ~@47 [g3,eb4]@14 ~@3]/4", // Ab Bb5 Ab Cm
  C: "[~@7 a3@7 ~ [g3,bb3]@12 eb4@4 bb3@12 ab3@4 [g3,eb4]@17, ~@31 f3@15 ~@18]/4", // Gm Cm
  D: "[~@15 ab3@16 a3@16 [bb3,eb4]@32 [ab3,c4]@16 d4@16 g3@17, ~@15 c4@32 ~@48 bb3@33]/8", // Eb5 Ab
  E: "[~@15 [b3,d4]@32 [c4,eb4]@24 g4@8 f4@32 [d4,bb4], ~@71 bb4@7 ~ ab4@30 ~@3]/7", // Bm Cm Gm
  F: "[~@7 [bb3,d4]@8 [c4,eb4]@8 [d4,f4]@8 g4@16 f4@16 eb4@16 g4]/5", // Bb Cm Dm
  G: "[~@7 eb4@8 [ab3,c4]@16 d4@16 g3@30 ~@2 [ab3,c4]@16 [bb3,d4]@16 [c4,eb4]@17, ~@31 bb3@46 ~@51]/8", // Ab Bb Cm
  H: "[~@7 a3@8 [g3,bb3]@28 [f3,ab3]@4 [eb3,g3]@13 ~@4]/4", // Gm Fm Eb
  I: "[~@3 bb3@4 eb4@4 [d4,f4]@4 [g4,bb4]@28 [f4,ab4]@4 [eb4,g4]@31 ~ [ab3,c4]@16 [bb3,d4]@15 ~ [bb3,eb4]@16 g4, ~@3 d4@3 ~ c4@3 ~@118]/8", // Dm Gm Fm Eb Ab Bb Eb5
  J: "[~@7 bb4@7 ~ [ab4,c5]@16 [f4,bb4]@16 [g4,c5]@16 [eb4,ab4]]/4", // Ab Bb5 C5 Ab5
  K: "[~@7 a4@8 g4@16 ~@12 ab4@4 [eb4,g4]@17, ~@15 bb4@29 ~@20, ~@31 f4@16 ~@17]/4", // Eb
  L: "[~@3 bb3@4 eb4@4 [d4,f4]@4 eb4@24 ~@9, ~@3 d4@3 ~ c4@3 ~@5 g4@21 ~@12]/3", // Dm
})).s("gm_string_ensemble_2").gain(0.3).pan(0.3)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@8 A B C D E D F G E H I J H@2 A K A B C D E D F G E H I J H@2 A L M N O P Q R S T U@2 V@2 W X R Y A B C D E D F G E
  H I J H@2 A K A B C D E D F G E H I J H@2 A S M N O C Q R A S U@2 V@2 W Z R AA A B C D E D F G E H I J H@2 A K ~@2
>`.pickRestart({
  A: "eb3 ~ eb3 ~ eb3 ~@3 eb3@2 ~@6", B: "d3 ~ d3 ~ d3@2 ~@2 d3@3 ~@5", C: "c3 ~ c3 ~ c3 ~@3 c3@3 ~@5",
  D: "bb2 ~ bb2 ~ bb2 ~@3 bb2@3 ~@5", E: "ab2 ~ ab2 ~ ab2 ~@3 ab2@2 ~@6", F: "eb3 ~ eb3 ~ eb3@2 ~@2 eb3@2 ~@6",
  G: "~@2 eb3 ~ eb3@2 ~@2 eb3@2 ~@6", H: "bb2 ~ bb2 ~ bb2 ~@3 bb2@2 ~@6", I: "c3 ~ c3 ~ c3@2 ~@2 c3@2 ~@6",
  J: "ab2 ~ ab2 ~ ab2 ~@11", K: "~@2 bb2 ~ bb2@2 ~@2 bb2@2 ~@6", L: "eb3 ~ eb3 ~ eb3 ~@3 eb3 ~@7",
  M: "ab2 ~ ab2 ~ ab2 ~@3 ab2@3 ~@5", N: "a2 ~ a2 ~ a2 ~@3 a2@2 ~@6", O: "bb2 ~@3 bb2 ~@3 bb2@2 ~@6",
  P: "c3 ~@3 c3 ~@3 c3@2 ~@6", Q: "f3 ~ f3 ~ f3 ~@3 f3@4 ~@4", R: "bb2 ~@3 bb2 ~@3 bb2@3 ~@5",
  S: "eb3 ~@3 eb3 ~@3 eb3 ~@7", T: "~@4 eb3 ~@3 eb3 ~@7", U: "g2 ~ g2 ~ g2 ~@3 g2 ~@7", V: "c3 ~@3 c3 ~@3 c3 ~@7",
  W: "f2 ~@3 f2 ~@3 f2@2 ~@6", X: "ab2 ~@7 ab2@3 ~@5", Y: "bb2 ~@7 bb2@2 ~@6", Z: "ab2 ~@3 ab2 ~@3 ab2@3 ~@5",
  AA: "~@4 bb2 ~@3",
})).s("gm_electric_guitar_muted").gain(0.33).pan(0.3)

// other · electric guitar muted · "MUTED GTR" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@42 A B ~ A C D ~@2 B@2 E F A G ~@31 C ~@2 A ~@2 A ~ C ~@2 B@2 E H A I ~@18
>`.pickRestart({
  A: "~@2 bb2 ~@13", B: "~@2 c3 ~@13", C: "~@2 eb3 ~@13", D: "eb3 ~ eb3 ~@13", E: "~@2 f2 ~@13",
  F: "~@2 ab2 ~ ab2 ~@11", G: "~@2 bb2 ~ bb2 ~@11", H: "~@2 ab2 ~@13", I: "bb2 ~ bb2 ~ bb2 ~@11",
})).s("gm_electric_guitar_muted").gain(0.16).pan(0.3)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  A B C@2 D E F G A H C I J K A L J K C M A D A N A H C I J K A L J K C M A D A@2 O P Q C R S T@2 U V W@2 X@2 Y@2 A H C
  I J K A L J K C M A D A N A H C I J K A L J K C M A D A@2 O P Q C R S Z@2 U V W@2 X@2 Y@2 A H AA AB AC AD AE AF AG AH
  AI AJ AE AK AE N ~@2
>`.pickRestart({
  A: "[bb3,eb4,g4]", B: "[bb3,d4,f4]@13 ~@3", C: "[c4,eb4,g4]", D: "[ab3,c4,eb4]", E: "[a3,c4,eb4]",
  F: "[f3,ab3,c4,eb4]", G: "[f3,ab3,c4,eb4]@13 ~@3", H: "[bb3,d4,f4]", I: "[db4,eb4,g4,bb4]", J: "[c4,eb4,ab4]",
  K: "[bb3,d4,f4,ab4]", L: "[bb3,eb4,g4] [db4,eb4,g4,bb4]", M: "[c4,eb4,ab4]@4 [c4,eb4,a4]@3 ~",
  N: "[bb3,d4,f4,ab4]@3 ~", O: "[eb4,ab4,c5]", P: "[eb4,a4,c5]@15 ~", Q: "[eb4,g4,bb4]@7 ~", R: "[f4,ab4,c5,eb5]",
  S: "[f4,ab4,bb4,d5]", T: "[bb4@8 ~@16 g5@5 ~@3, [eb4,g4]@29 ~@3, ~@8 bb4@21 ~@3, ~@16 eb5@13 ~@3]/2", U: "[g3,b3,d4]",
  V: "[g3,b3,d4,f4]", W: "[c4,eb4,g4]/2", X: "[f3,ab3,c4,eb4]/2", Y: "[[bb3,d4,f4]@15 ~]/2",
  Z: "[eb4@8 ~@12 eb5@9 ~@3, bb4@16 bb4@13 ~@3, g4@12 g4@17 ~@3, ~@8 eb4@21 ~@3]/2", AA: "[c4,eb4,g4] ~@3",
  AB: "[db4,eb4,g4,bb4]@9 ~@7", AC: "[c4,eb4,ab4]@3 ~@5", AD: "[bb3,d4,f4,ab4]@3 ~@5", AE: "[bb3,eb4,g4]@5 ~@11",
  AF: "[bb3,eb4,g4]@3 ~@5 [db4,eb4,g4,bb4]@3 ~@5", AG: "[c4,eb4,ab4] ~", AH: "[bb3,d4,f4,ab4]@5 ~@11",
  AI: "[c4,eb4,g4]@5 ~@11", AJ: "[c4,eb4,ab4]@5 ~@3 [c4,eb4,a4]@5 ~@3", AK: "[ab3,c4,eb4]@5 ~@11",
})).s("gm_epiano1").gain(0.31)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@4 A@3 ~@5 A@2 ~@14 A@2 ~@73 B ~@4 A@2 ~@12>".pickRestart({
  A: "~@7 x", B: "~@3 x",
})).gain(0.33)

// drums · snare
const snare = s("sd").struct("<[~ x]!120 ~@2>").gain(0.66)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ 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 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A B ~
>`.pickRestart({
  A: "~@7 x", B: "x",
})).gain(0.26)

stack(
  bass, overdriven_guitar, lead_2_sawtooth, string_ensemble_2, electric_guitar_muted, electric_guitar_muted_2, epiano1,
  kick, kick_soft, snare, hihat, open_hat
)

More by Boris Gardiner