Strudelify
I Don't Think That Man Should Sleep Alone cover art

After Dark

I Don't Think That Man Should Sleep Alone

Ray Parker Jr.

KeyB♭ minorTempo104 bpm
0:00/0:00
// I Don't Think That Man Should Sleep Alone — Ray Parker Jr.
// 104 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: The whole transcription plays 21 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(104/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 · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@2 A B C D E F C D E G H I J@2 C K L F M K N F C K E F M O P@2 C D E F C D E G H I J@2 C K L F M K N F C K E F M O
  Q@2 C D E F C D E G C D L F C D E R S T U V S T W X C K E F C K E Y C K L F C Z
>`.pickRestart({
  A: "~@2 ab1 ~@5 ab1 ~@7", B: "ab1 ~@5 f1@2 f1@4 c2@4", C: "bb1@3 ab1@3 f1@2", D: "gb1@3 eb1@2 ab1 f1@2",
  E: "bb1@3 f1@3 ab1@2", F: "gb1@3 gb1@3 gb1 ab1", G: "gb1@3 gb1@3 ab1 ~", H: "eb1@3 eb1@4 eb1",
  I: "eb1@6 eb1@2 eb1@2 eb1 gb1 bb1@2 ab1@2", J: "[ab1@2 ~ ab1 ~@2 ab1@3 g1 gb1 f1@3 f1@2]/2",
  K: "gb1@6 eb1@4 ab1 eb1 f1@2 ~@2", L: "bb1@3 f1@3 ab1 f1", M: "bb1@6 ab1@6 f1 ~ f1@2", N: "bb1@3 f1@3 ab1 gb1",
  O: "gb1@6 eb1@4 ab1 bb1 f1@2 eb2@2", P: "[eb2@6 eb2@6 ab1@6 g1@2 gb1@2 f1@4 ab1 bb1 gb2@2 eb2 ~]/2",
  Q: "[eb2@6 eb1@6 ab1@6 g1@2 gb1@2 f1@4 ab1 bb1 gb2@2 eb2 ~]/2", R: "gb1@3 gb1 ~@3 ab1 bb1@2 ab1@2 gb1@2 f1@2",
  S: "eb1@4 ~@2 eb1@7 ~ eb1@2", T: "eb1 ~@2 eb1@3 gb1@2", U: "ab1@4 ~@2 ab1@7 ~ ab1@2", V: "ab1@4 ~@4 ab1@3 ~ gb1@4",
  W: "~ ab1 ~@2 ab1 ~@3", X: "ab1 ~@2 f1@5", Y: "gb1@6 gb1@6 gb1@2 ab1 ~", Z: "gb1@6 eb1@4 ab1 eb1 ~@4",
})).s("gm_synth_bass_2").gain(0.27)

// other · tubular bells · "TUBULARBEL"
const tubular_bells = note("<~@14 A B ~@26 A C ~@23 D E ~@7 F G F ~@2 G F ~@15>".pickRestart({
  A: "~@2 ab5 ~ db5 ~ f5 ~@3 bb4 ~@3 db5 ~", B: "~@2 eb5 ~@3 db5 ~@3 c5 ~@3 f4 ~", C: "~@2 eb5 ~@3 db5 ~@3 c5 ~@3 f5 ~",
  D: "~@15 [eb6,f6]", E: "c6 ~, db6 ~@15", F: "bb5 ~@15", G: "c6 ~@7 db6 ~@3 ab5 ~@3",
})).s("gm_tubular_bells").gain(0.1)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~@2 A B C D C D C D C D E@2 F@2 G@2 H I C D H D J@2 H I K@2 L@2 C D C D C D C D E@2 F@2 G@2 H I C D H D J@2 H I K@2
  L@2 C M C M C M C M C M C M C M C N O@2 P@2 Q@2 A B R@2 S M T@2 H U V@2 W X R@2
>`.pickRestart({
  A: "~ [bb3,db4,eb4,gb4,bb4] ~@2 [bb3,db4,eb4,gb4,bb4] ~@3", B: "[bb3,db4,eb4,gb4,bb4]@2 ~@4 [c4,eb4,gb4,a4]@9 ~",
  C: "[bb3,db4,f4,ab4,c5]@11 ~ [bb3,db4,f4,ab4,c5]@3 ~", // Bbm7
  D: "[gb3,bb3,db4,f4,ab4]@5 ~ [gb3,bb3,db4,f4,ab4]@5 ~ [gb3,bb3,db4,f4,ab4]@3 ~", // Gbmaj7
  E: "[[ab3,bb3,db4,eb4]@9 ~@7 [ab3,eb4,f4]@5 ~ [ab3,bb3,db4,eb4,gb4]@5 ~ [ab3,bb3,db4,eb4,ab4]@3 ~, f4@14 db4@7 ~@11, ~@5 ab3@3 ~@8, ~@12 bb3@9 ~@11]/2", // Absus4 Fm7 Ebm7 Absus4
  F: "[[ab3,bb3,db4,eb4]@9 ~@11 bb4@2 ~@6 gb4@2 a4@2, [f4,bb4]@16 eb4@2 f4@5 ~@3 eb4@5 ~, ~@10 ab3@11 ~@11, ~@12 bb3@9 ~@11, ~@14 db4@7 ~ [c4,c5]@9 ~]/2", // Absus4 Bb5 C
  G: "[[bb3,db4,f4,ab4,c5]@11 ~ [ab4,c5]@3 ~@11 ab4@2 bb4@3 ~, ~@12 [bb3,db4,f4]@19 ~, ~@16 gb3@15 ~, ~@4 bb4@3 ~]/2", // Bbm7 Ab Bbm
  H: "[bb3,db4,f4,ab4,c5]@15 ~", I: "[gb3,bb3,db4,f4,ab4]@5 ~ [gb3,bb3,db4,f4,ab4]@9 ~",
  J: "[[bb3,db4,f4,ab4,c5]@11 ~ c5@3 ~ gb3@5 ~ [gb3,bb3,db4,f4,ab4]@9 ~, ~@12 [bb3,db4,f4,ab4]@9 ~@11]/2", // Bbm7 Gbmaj7 Bbm7
  K: "[[bb3,db4,f4,ab4,c5]@11 ~ c5@3 ~ gb3@5 ~ [gb3,ab4]@5 ~ [gb3,bb3,db4,f4,ab4]@3 ~, ~@12 [bb3,db4,f4]@15 ~@5, ~@12 ab4@9 ~@11]/2", // Bbm7 Gbsus2 Gbmaj7 Bbm
  L: "[[gb3,bb3,db4,eb4,f4]@11 ~ [gb3,bb3,db4,eb4,f4]@7 ~@3 [c4,eb4,gb4,a4]@9 ~]/2", // Gbmaj7 Cdim
  M: "[gb3,bb3,db4,f4,bb4]@5 ~ [gb3,bb3,db4,f4,bb4]@5 ~ [gb3,bb3,db4,f4,bb4]@3 ~", // Gbmaj7
  N: "[gb3,bb3,db4,f4,bb4]@2 ~ [gb3,bb3,db4,f4,bb4] ~@12", // Gbmaj7
  O: "[[gb3,bb3,db4,eb4,f4]@9 ~@13 f4@9 ~, ~@10 gb3@21 ~, ~@12 bb3@19 ~, ~@14 db4@17 ~, ~@18 eb4@13 ~]/2", // Gbmaj7
  P: "[[db4,eb4,f4]@5 ~@7 bb4 f4 eb4 db4, [gb3,bb3]@9 ~ gb3@19 ~@3, ~@12 bb3@19 ~, ~@7 db4@4 f4@2 ~@3, ~@18 eb4@9 ~@5]/2", // Db Gb
  Q: "[[db4,eb4]@6 ~@3 db4@2 eb4 ~ eb4 db4 eb4, f4@11 ~@3 bb3@17 ~, [gb3,bb3]@9 ~@3 gb3@19 ~, ~@24 f4@3 ~@5, ~@25 db4@2 ~@5]/2", // Dbsus2 Gb
  R: "[[bb3,db4,f4,ab4,c5]@11 ~ [ab4,c5]@3 ~ [gb3,bb4]@5 ~ [gb3,bb3,db4,f4,bb4]@9 ~, ~@12 [bb3,db4,f4]@9 ~@11]/2", // Bbm7 Ab Gb Gbmaj7 Bbm
  S: "[bb3,db4,f4,ab4,c5]@13 ~@3", // Bbm7
  T: "[[bb3,db4,f4,ab4,c5]@11 ~ [ab4,c5]@3 ~ [gb3,bb4]@5 ~ [gb3,bb3,db4,f4,bb4]@5 ~ [gb3,bb3,db4,f4,bb4]@3 ~, ~@12 [bb3,db4,f4]@9 ~@11]/2", // Bbm7 Ab Gb Gbmaj7 Bbm
  U: "[gb3,bb3,db4,f4,bb4]@5 ~ [gb3,bb3,db4,f4,bb4]@5 ~ [gb3,bb3,db4,f4,bb4]@2 ~@2", // Gbmaj7
  V: "[[bb3,db4,f4,ab4,c5]@11 ~ [ab4,c5]@3 ~ [gb3,bb4]@5 ~ [gb3,bb3,db4,f4,bb4]@7 ~@3, ~@12 [bb3,db4,f4]@9 ~@11]/2", // Bbm7 Ab Gb Gbmaj7 Bbm
  W: "[bb3,f4,ab4,c5]@15 ~, db4@13 ~@3", X: "[gb3,bb3,db4,f4,bb4]@5 ~ [gb3,bb3,db4,f4,bb4]@9 ~",
})).s("gm_piano").gain(0.2)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  A B C D A B E F A B E G ~@3 H I ~@2 J I ~@3 K@2 ~@4 L@2 A B E F A B E G ~@3 H I ~@2 J I ~@3 K@2 ~ M@3 L@2 A B E F A B
  E G N B O@2 N B E G P@2 Q@2 P@2 R@2 A B E F A B E G N B E F N S
>`.pickRestart({
  A: "~@2 db5@2 c5 ~@3 ab4 ~@3 f4 ~@3", B: "bb4 ~@3 f4@2 eb4 ~@3 ab4@2 f4 ~@3", C: "~@2 bb4 ~@5 bb4 ~@7",
  D: "bb4 ~@5 a4@9 ~", E: "~@2 db5@2 c5 ~@3 ab4 ~@3 f4 ~ bb4 ab4",
  F: "bb4 ~@3 [db4,gb4,bb4] [eb4,ab4,c5] [f4,bb4,db5] [gb4,c5,eb5]", G: "bb4 ~@7", H: "~ bb4 db5 eb5@3 db5 c5",
  I: "c5@7 ~@9", J: "~@4 bb4 c5 db5 eb5", K: "[~ [f4,ab4,c5]!2 ~ [f4,ab4,c5]!2 ~ [gb4,bb4,db5]@2 [eb4,gb4,bb4] ~@6]/2",
  L: "[bb3@12 f4@10 [eb4,gb4]@6 [f4,ab4] [eb4,gb4] ~@2, ~@3 db4@4 ~]/2", // Ebm Fm Ebm
  M: "[~@7 [f4,ab4,c5]@2 [f4,ab4,c5] [f4,ab4,bb4] [f4,ab4,c5]@3 ~ [gb4,bb4,db5]@2 [gb4,bb4,db5] [eb4,gb4,bb4] [gb4,bb4,db5]@2 ~@3]/3", // Fm Bb7 Fm Gb Ebm Gb
  N: "~ db5 ~@3 bb4 [f4,ab4,c5] [gb4,bb4,db5], f4@3 ~, ab4@2 ab4 ~, c5@2 c5@3 ~@3", // Fm Gb
  O: "[~@2 [db5,eb5]@2 eb5@2 db5@2 eb5@2 db5@2 bb4@2 bb4 ab4 bb4@2 ~@6 [db4,gb4,bb4]@2 [eb4,ab4,c5]@2 [f4,bb4,db5]@2 [gb4,c5,eb5]@2, ~@4 c5 ~@3 ab4 ~@3 f4 ~ f5@4 ~@14]/2", // Dbsus2 Gb Ab Bbm Cdim
  P: "[~@2 [bb4,db5,f5]!2 ~ [bb4,db5,eb5] [bb4,db5,f5] ~@25, [bb3,db4,f4]]/2", // Bbm Eb7 Bbm
  Q: "[~@2 [bb4,db5,f5]!2 ~ [bb4,db5,eb5] [bb4,db5,f5] ~@11 f5@2 db5@2 bb4@2 db5 bb4@2 bb4@3 db5@2, [bb3,db4,f4]@15 ~]/2", // Bbm Eb7 Bbm
  R: "[~ [bb3,db4,eb4,gb4,bb4,db5,f5,bb5] ~@2 [bb3,db4,eb4,gb4,bb4,db5,f5,bb5] ~@3 [bb3,db4,eb4,gb4,bb4] [db5,f5,bb5]!2 [c5,eb5,a5]@3 [db5,f5,ab5] [c5,f5,ab5], ~@7 [db5,f5,bb5]@2 ~@2 [c4,eb4,gb4,a4]@5]/2", // Ebm7 Bbm Adim Db Fm Bbm Cdim
  S: "bb4 ~@3 f4@2 eb4 ~@3 ab4@2 ~@4",
})).s("gm_lead_2_sawtooth").gain(0.1).pan(0.6)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@12 A@2 B@2 C ~@12 C D@3 ~@7 A@2 B@2 C ~@31 E@8 ~@3 F G ~@2 H I@4 J@2>".pickRestart({
  A: "[f4@11 gb4@3 ab4@2]/2", B: "[bb4@21 ~ c5@10]/2", C: "f5@15 ~", D: "[bb4@12 f5@35 ~]/3",
  E: "[bb4@16 c5@8 db6@4 ab5@4 bb4@24 ab4@4 gb4@2 ab4 gb4 f4@31 ~@3 bb4 ~@5 bb4 ~@7 bb4 ~@7 c6@4 db6@3 ~, f5@119 a4@9]/8",
  F: "~@5 db6 c6 db6", G: "f5@13 ~@3", H: "~@5 c6 db6 eb6", I: "[[f5,f6]@31 [ab5,ab6]]/4", J: "[f5,f6]/2",
})).s("gm_string_ensemble_1").gain(0.1).pan(0.6)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@4 A B ~ C D B ~@9 C E ~@6 F G ~ H@2 A B ~ C D B ~@5 I ~@3 C E ~@6 C ~@4 A B ~ C A B ~@5 C ~@12 A B ~ C A B ~@2 J B ~
  C A K
>`.pickRestart({
  A: "~@2 db4@2 c4 ~@3 ab3 ~@3 f3 ~@3", B: "bb3 ~@3 f3@2 eb3 ~@3 ab3@2 f3 ~@3",
  C: "~@4 [gb4,bb4] [ab4,c5] [bb4,db5] [c5,eb5]", D: "~@2 db4@2 c4@2 ~@2 ab3 ~@3 f3@2 ~@2", E: "[ab4,c5]@3 ~",
  F: "~@4 [bb3,gb4,bb4] [c4,ab4,c5] [db4,bb4,db5] [eb4,c5,eb5]", G: "[bb3,c4,f4]@5 ~@3",
  H: "[~@12 f3@6 eb3@2 db3@2 eb3@7 f3 eb3@2]/2", I: "~@3 bb3@2 ~@3", J: "~@2 db4@2 c4@2 ~@2 ab3 ~@3 f3 ~@3",
  K: "bb3 ~@3 f3@2 eb3 ~@3 ab3@2 ~@4",
})).s("gm_acoustic_guitar_nylon").gain(0.1)

// other · whistle
const whistle = note("<~@55 A B@5 ~@37>".pickRestart({
  A: "~@5 eb6 c6@10, ~@6 d6 ~@9", B: "[ab5@12 bb5@14 c6@2 db6@2 f6@45 ~@5]/5",
})).s("gm_whistle").gain(0.15).pan(0.4)

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

// drums · snare
const snare = s("sd").struct("<~@3 A B@27 C B@27 C B@15 D B@21 D>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~ x", C: "~@4 x ~@3 x!3 ~ x ~@3", D: "~ x ~@2",
})).gain(0.35)

// drums · clap
const clap = s("cp").struct("<~@4 A@19 B A@27 B A@15 ~ A@7 C ~@8 A@13 C>".pickRestart({
  A: "~ x ~ x", B: "~ x!2 ~@5", C: "~ x ~@2",
})).gain(0.35)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D E F E G E F E G E G E F E G E G E G E G E G E G E G E H E F E G E F E G E G E F E G E G E G E G E G E G E G E
  H E F E G E@3 G E F E G E@3 I E G E G E G J K E G E G E G E G E G E G E L
>`.pickRestart({
  A: "x!2 ~@3 x ~@2", B: "x!2 ~@4 x ~", C: "x ~@6 x", D: "x!2 ~@3 x!3", E: "x!8", F: "x!5 ~ x!2", G: "x!5 ~ x ~",
  H: "x!7 ~", I: "~@3 x", J: "x!4 ~ x!3", K: "~@4 x!3 ~", L: "x!5 ~@3",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@2 [~ x!2 ~@5] ~@72 [~@7 x] ~@22>").gain(0.3)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~ [~@7 x] ~ [~@7 x] ~@71 [~@3 x] ~@22>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@82 [~ x ~@2 x ~@3] [x ~@2 x ~@4] ~@14>").gain(0.35)

// drums · ride
const ride = s("rd").struct("<~@75 [x ~@2 x ~@12] ~@22>").gain(0.35)

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

// drums · congas
const congas = s("conga:13").struct(`<
  ~@2 A B C ~ C ~ C ~ C D ~@4 C ~ C ~ C ~ C D ~@2 C ~ C ~ C ~ C ~ C ~ C ~ C D ~@4 C ~ C ~ C ~ C D ~@2 C ~ C ~ C ~@3 C ~
  C ~ C D ~@2 C ~ C ~ C ~@11 C ~ C ~ C D ~@2 C ~ C ~
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "~ x ~ x!2 ~@3", C: "x", D: "~@9 x ~ x ~@4",
})).gain(1.43)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ B ~@3 C ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~@3 A ~ A ~ A ~ B ~@3 C ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~@3 A ~
  A ~ A ~ B ~ A ~ A ~ A ~@10 D A ~ A ~ A ~ B ~ A ~ A ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@4 x!3 ~", C: "~@12 x!4", D: "x",
})).gain(1.43)

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

// drums · claves
const claves = s("clave:2").struct(`<
  A B C A@4 D A@3 D ~@4 A@3 D A@3 B A@7 E A@3 D A@3 D ~@3 F A@3 D A@3 B A@7 E A@3 D A@3 D A@3 D A@3 ~@7 C A@8 D A@3 D
  A@2
>`.pickRestart({
  A: "~ x!2 ~@5", B: "~ x ~@6", C: "~ x ~@2 x ~@3", D: "~ x!2 ~@3 x ~", E: "~@2 x ~@5 x!5 ~@3", F: "~@8 x!4 ~@4",
})).gain(0.97)

stack(
  bass, tubular_bells, piano, lead_2_sawtooth, string_ensemble_1, acoustic_guitar_nylon, whistle, kick, snare, clap,
  hihat, low_tom, open_hat, mid_tom, crash, ride, tambourine, congas, congas_2, cabasa, claves
)

More by Ray Parker Jr.