Strudelify
I Wanna Wake Up With You cover art

Next To 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: 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 N H O P Q H R S G T I M K T U V K H W X Q T U Y Z AA H W AB H U AC AD AE AF I AG AH AI
  AJ G H I J K H L M N H O P Q H R S G T I M K T U V K H W X Q T U Y Z AA H W AB H U AC AD AE AF I AG K Q AJ G H I J K H
  L M N H O P Q H R S AK ~
>`.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: "ab1@5 ~ ab1@10", O: "c2@5 ~ c2@10", P: "ab1 a1", Q: "bb1@2 ~ bb1@4 ~", R: "eb1@5 ~ eb1@10",
  S: "bb1@4 ~@2 bb1@7 ~@3", T: "bb1@5 ~ bb1@9 ~", U: "eb1@5 ~ eb1@8 ~@2", V: "eb1@5 ~ eb1@2 g1@8", W: "c2@2 ~ c2@5",
  X: "ab1@7 ~ a1@8", Y: "eb1@5 ~ g1@9 ~", Z: "ab1@4 ~@2 ab1@9 ~", AA: "a1@5 ~ a1@9 ~", AB: "f1@5 ~ f1@9 ~",
  AC: "eb1@5 ~@2 eb1@9", AD: "g1@5 ~ g1@8 ~@2", AE: "g1@5 ~@2 g1@9", AF: "c2@5 ~ c2@8 ~@2", AG: "~ f1@5 f1@10",
  AH: "~ ab1@4 ~ ab1@10", AI: "~ bb1@4 ~ bb1@10", AJ: "bb1@5 ~ bb1@8 ~@2", AK: "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 C D E F G H ~@114>".pickRestart({
  A: "eb4", B: "d4@13 ~ bb3@2", C: "eb4@15 ~", D: "g4@4 eb4@11 ~", E: "~@5 bb3 eb4 bb3", F: "g4@3 ~ g4@4 eb4@8",
  G: "~@5 g4@2 bb4", H: "g4@3 ~ g4@4 eb4@7 ~",
})).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@31 ~ [ab3,c4]@15 ~ [bb3,d4]@16 [c4,eb4]@17, ~@31 bb3@47 ~@50]/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 K H A L A B C D E D F G E H I J K H A M N O P Q R S T U V@2 W@2 X Y S Z A B C D E D F G E
  H I J K H A L A B C D E D F G E H I J K H A T N O P AA R S M T V@2 W@2 X AB S AC A B C D E D F G E H I J K H A L ~@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: "bb2 ~ bb2 ~ bb2 ~@3 bb2 ~@7", L: "~@2 bb2 ~ bb2@2 ~@2 bb2@2 ~@6",
  M: "eb3 ~ eb3 ~ eb3 ~@3 eb3 ~@7", N: "ab2 ~ ab2 ~ ab2 ~@3 ab2@3 ~@5", O: "a2 ~ a2 ~ a2 ~@3 a2@2 ~@6",
  P: "bb2 ~@3 bb2 ~@3 bb2@2 ~@6", Q: "c3 ~@3 c3 ~@3 c3@2 ~@6", R: "f3 ~ f3 ~ f3 ~@3 f3@4 ~@4",
  S: "bb2 ~@3 bb2 ~@3 bb2@3 ~@5", T: "eb3 ~@3 eb3 ~@3 eb3 ~@7", U: "~@4 eb3 ~@3 eb3 ~@7", V: "g2 ~ g2 ~ g2 ~@3 g2 ~@7",
  W: "c3 ~@3 c3 ~@3 c3 ~@7", X: "f2 ~@3 f2 ~@3 f2@2 ~@6", Y: "ab2 ~@7 ab2@3 ~@5", Z: "bb2 ~@7 bb2@2 ~@6",
  AA: "c3 ~ c3 ~ c3 ~@3 c3@2 ~@6", AB: "ab2 ~@3 ab2 ~@3 ab2@3 ~@5", AC: "~@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 D E F G H A I D J K L A M K L D N A E A O A I D J K L A M K L D N A E A@2 P Q R D S T U@2 V W X@2 Y@2 Z@2 A I D
  J K L A M K L D N A E A O A I D J K L A M K L D N A E A@2 P Q R D S T AA@2 V W X@2 Y@2 Z@2 A I AB AC AD AE AF AG AH AI
  AJ AK AL AM AN O ~@2
>`.pickRestart({
  A: "[bb3,eb4,g4]", B: "[bb3,d4,f4]@13 ~@3", C: "[c4,eb4,g4]@15 ~", D: "[c4,eb4,g4]", E: "[ab3,c4,eb4]",
  F: "[a3,c4,eb4]", G: "[f3,ab3,c4,eb4]", H: "[f3,ab3,c4,eb4]@13 ~@3", I: "[bb3,d4,f4]", J: "[db4,eb4,g4,bb4]",
  K: "[c4,eb4,ab4]", L: "[bb3,d4,f4,ab4]", M: "[bb3,eb4,g4] [db4,eb4,g4,bb4]", N: "[c4,eb4,ab4]@4 [c4,eb4,a4]@3 ~",
  O: "[bb3,d4,f4,ab4]@3 ~", P: "[eb4,ab4,c5]", Q: "[eb4,a4,c5]@15 ~", R: "[eb4,g4,bb4]@7 ~", S: "[f4,ab4,c5,eb5]",
  T: "[f4,ab4,bb4,d5]", U: "[bb4@8 ~@16 g5@5 ~@3, [eb4,g4]@29 ~@3, ~@8 bb4@21 ~@3, ~@16 eb5@13 ~@3]/2", V: "[g3,b3,d4]",
  W: "[g3,b3,d4,f4]", X: "[c4,eb4,g4]/2", Y: "[f3,ab3,c4,eb4]/2", Z: "[[bb3,d4,f4]@15 ~]/2",
  AA: "[eb4@8 ~@12 eb5@9 ~@3, bb4@16 bb4@13 ~@3, g4@12 g4@17 ~@3, ~@8 eb4@21 ~@3]/2", AB: "[c4,eb4,g4] ~@3",
  AC: "[db4,eb4,g4,bb4]@9 ~@7", AD: "[c4,eb4,ab4]@3 ~@5", AE: "[bb3,d4,f4,ab4]@3 ~@5", AF: "[bb3,eb4,g4]@5 ~@11",
  AG: "[bb3,eb4,g4]@3 ~@5 [db4,eb4,g4,bb4]@3 ~@5", AH: "[c4,eb4,ab4] ~", AI: "[bb3,d4,f4,ab4]@5 ~@11",
  AJ: "[c4,eb4,g4]@5 ~@11", AK: "[c4,eb4,ab4]@5 ~@3 [c4,eb4,a4]@5 ~@3", AL: "[bb3,eb4,g4]@3 ~@5",
  AM: "[ab3,c4,eb4]@5 ~@11", AN: "[bb3,eb4,g4] ~@3",
})).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