Strudelify
Slow Hand cover art

1981 · Black & White

Slow Hand

The Pointer Sisters

KeyD♭ majorTempo105 bpm
0:00/0:00
// Slow Hand — The Pointer Sisters
// 105 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A@2 B C A@2 B@2 D E B@2 D E B C A F E G D@2 H@3 B C A E B C A@2 E I B C A@2 B C A@2 B@2 D E B@2 D E B C A F E G D@2
  H@3 B C A E B C A@2 E I B C A@2 J@2 K@2 J@2 L H@2 B C A E B C A E B C A E B C A@2 M I A@2 B C A@2 B N@2
>`.pickRestart({
  A: "bb1@5 ~ bb1 ~ bb1@7 ~", B: "db2@5 ~ db2 ~ db2@7 ~", C: "db2@5 ~ db2 ~ db2@4 c2@4", D: "eb2@5 ~ eb2 ~ eb2@7 ~",
  E: "gb1@5 ~ gb1 ~ gb1@8", F: "bb1@5 ~ bb1 ~ bb1@4 ab1@4", G: "gb1@5 ~ gb1 ~ gb1@4 f2@4", H: "ab1@5 ~ ab1 ~ ab1@7 ~",
  I: "ab1 ~@7", J: "eb2 ~ eb2@2 ~@4 eb2 ~ eb2@2 ~@4", K: "bb1 ~ bb1@2 ~@4 bb1 ~ bb1@2 ~@4",
  L: "ab1@5 ~ ab1 ~ ab1@5 ~ ab1 ~", M: "gb1@5 ~ gb1 ~ gb1@7 ~", N: "[ab2 f2 c2 db2@13]/2",
})).s("gm_acoustic_bass").gain(0.62)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A@2 B@2 C@3 D ~@8 E@2 F G H I J@3 K@4 L@4 M N O P A@2 Q@6 ~@8 E@2 F G H R J@3 S@3 T U@2 V@2 M N O P W X Y@2 Z@2 Y AA
  AB AC AD AE@2 AF T AG@2 AF T AG@2 AF T AH@2 V@2 M N A@2 AI@7
>`.pickRestart({
  A: "[~@2 [db5,f5] [c5,eb5]@2 [bb4,db5]@2 ~@2 [db5,f5]@2 [c5,eb5]@2 [bb4,db5]@3, bb2@7 [c5,eb5]@2 ~@7, ~ bb2]/2", // Db Cm Bbm Db Cm Bbm Cm
  B: "[~@2 [f5,ab5]@2 [eb5,gb5]@2 [db5,f5]@7 ~@3 c5@2 f4@2 [c4,eb4]@2 ~@6 c3@4, db3@7 ~, ~@8 ab4@2 ~ [db4,f4]@5]/2", // Fm Ebm Db Cm Db
  C: "[~@2 [db5,f5,f6] [c5,eb5,eb6]@2 [bb4,db5,db6]@2 ~@2 [db5,f5,f6]@2 [c5,eb5,eb6]@2 ~@4 [f5,ab5,ab6] [eb5,gb5,gb6] [db5,f5,f6]@5, bb2@7 [c5,eb5,eb6]@2 ~@4 [bb4,db5,db6]@4 ~@7, ~@16 bb2@15 ~ db3@15 ~]/3", // Db Cm Bbm Db Cm Fm Ebm Db …
  D: "[c5,c6] [f4,ab5] [c4,eb4,eb5] [db4,f4,f5]@5, db3@7 ~, ab4 ~@3", // C Fm Cm Db
  E: "[[db5,f5,bb5]@9 ~ db6@2 f5@12 ~@4 bb4@3 ~, ~@10 bb5@14 ~@2 [db5,f5]@5 ~]/2", F: "[db4,gb4,bb4]@13 ~@3",
  G: "[gb5,bb5] [f5,ab5] [eb5,gb5] [db5,f5]", H: "[bb3,eb4,gb4]@9 ~ [bb3,eb4,gb4]@2 ~@4",
  I: "[bb3,eb4,gb4]@5 [bb3,eb4,gb4] ~ f4", J: "[ab3,c4,eb4]@15 ~",
  K: "[[ab3,db4,f4]@12 [ab3,f4]@2 [bb3,gb4]@2 [ab3,f4]@7 ~ db4@4 ~@4 [bb3,db4,f4]@10 ~@2 [f4,bb4,db5]@2 c5@2 [gb4,bb4,db5]@13 ~@3, ~@12 db4@11 ~ [ab3,f4]@7 ~@33, ~@14 eb5@9 eb5@9]/4", // Db Ebm Db Bbm Gb Db
  L: "[[ab3,db4,f4]@11 ~ [db4,f4]@2 [eb4,gb4]@2 [db4,f4]@8 ~@4 c4@2 ~@2 [bb4,db5,f5]@8 ~@2 [bb4,f5,bb5]@16 ~@6, ~@3 ab3@3 ab3@3 ~@7, ~@3 db4 ~@4, ~@12 f4@3 ~@17]/4", // Db Ebm Db Bbm Bb5
  M: "[gb4,bb4,db5]@9 ~ db4@2 gb4@2 ab4 ~", N: "ab4 ~@7", O: "[db5,f5]@6 [eb5,gb5]@6 [db5,f5]@3 ~, ab4@15 ~",
  P: "[ab4,db5]@5 ~ [ab4,db5,f5]@4 eb5@2 db5@2 c5@2", // Db5 Db
  Q: "[~@2 [f5,ab5]@2 [eb5,gb5]@2 [db5,f5]@7 ~@3 c5@2 f4@2 [c4,eb4]@2 f4@6 ~@8 [db5,f5,f6]@2 [c5,eb5,eb6]@4 [bb4,db5,db6]@4 [c5,eb5,eb6]@4 [db5,f5,f6]@4 [c5,eb5,eb6]@4 ~@8 [f5,ab5,ab6]@2 [eb5,gb5,gb6]@2 ~@10 [c5,c6]@2 [f4,ab5]@2 [c4,eb4,eb5]@2 [db4,f4,f5]@10, db3@14 f4@2 ~@13 [bb4,db5,db6]@4 ~@2 [db5,f5,f6]@5 ab4@2 ~@6, ~@8 ab4@2 ~ db4@5 ~@32, ~@30 bb2@14 ~@2 bb2@15 ~ db3@15 ~ db3@14 ~@4]/6", // Fm Ebm Db Cm Db Cm Bbm Cm …
  R: "[bb3,eb4,gb4]@5 [bb3,gb4] ~ f4, ~@5 eb4@3", // Ebm
  S: "[[ab3,db4,f4]@12 [ab3,f4]@2 [bb3,gb4]@2 [ab3,f4]@7 ~ db4@4 ~@4 [bb3,db4,f4]@10 ~@2 [f4,bb4,db5]@2 [c5,eb5]@2, ~@12 db4@11 ~ [ab3,f4]@7 ~@17, ~@14 eb5@9 ~]/3", // Db Ebm Db Bbm Cm Db
  T: "[gb4,bb4,db5]@13 ~@3", // Gb
  U: "[[ab3,db4,f4]@11 ~ [db4,f4]@2 [eb4,gb4]@2 [db4,f4]@8 ~@4 c4@2 ~@2, ~@3 ab3@3 db4@2, ~@12 [ab3,f4]@3 ~]/2", // Db Ebm Db
  V: "[[bb4,db5,f5]@4 ~ [bb4,f5,bb5]@8 ~@3]/2", W: "[f5,bb5] [ab5,c6] [f5,bb5] [ab5,c6] [f5,bb5]@3 ~",
  X: "[db5,f5] [f5,ab5] [db5,f5] [f5,ab5] [db5,f5]@2 [c5,eb5] [bb4,db5]", Y: "[bb4,eb5,gb5]!2 ~@2 [bb4,eb5,gb5]!2 ~@2",
  Z: "[bb4,db5,f5]!2 ~@2 [bb4,db5,f5]!2 ~@2", AA: "[bb4,eb5,gb5]!2 ~@2 f4 gb4 ab4 bb4, ~ eb4",
  AB: "[c4,ab4]@7 ~, eb4 ~", AC: "[eb4,ab4,c5]@15 ~", AD: "[ab4,c5,eb5]@15 ~",
  AE: "[[ab3,db4,f4]@12 ab3@2 [bb3,gb4]@2 [ab3,f4]@7 ~ [ab3,f4]@7 ~, ~@12 db4@11 ~ db4@4 ~@4, ~@3 f4 ~@4]/2", // Db Ebm Db
  AF: "[bb3,db4,f4]@5 ~ [f4,bb4,db5] [c5,eb5]", // Bbm Cm
  AG: "[[ab3,db4,f4]@12 [ab3,f4]@2 [bb3,gb4]@2 [ab3,f4]@7 ~ [ab3,f4]@7 ~, ~@12 db4@11 ~ db4@4 ~@4]/2", // Db Ebm Db
  AH: "[[ab3,db4,f4]@11 ~ [db4,f4]@2 [eb4,gb4]@2 [db4,f4]@8 db4@3 ~ c4@2 ~@2, ~@6 ab3@6 [ab3,f4]@3 ~]/2", // Db Ebm Db
  AI: "[~@2 [f5,ab5]@2 [eb5,gb5]@2 [db5,f5]@7 ~@3 c5@2 f4@2 [c4,eb4]@2 f4@6 ~@8 [db5,f5,f6]@2 [c5,eb5,eb6]@4 [bb4,db5,db6]@4 [c5,eb5,eb6]@4 [db5,f5,f6]@4 [c5,eb5,eb6]@4 ~@8 [f5,ab5,ab6]@2 [eb5,gb5,gb6]@2 ~@10 [c5,c6]@2 [f4,ab5]@2 [c4,eb4,eb5]@2 [db4,f4,f5]@26, db3@14 f4@2 ~@13 [bb4,db5,db6]@4 ~@2 [db5,f5,f6]@5 ab4@2 ~@14, ~@8 ab4@2 ~ db4@5 ~@40, ~@30 bb2@14 ~@2 bb2@15 ~ db3@15 ~ db3@14 ~@20]/7", // Fm Ebm Db Cm Db Cm Bbm Cm …
})).s("gm_piano").gain(0.64)

// chords · drawbar organ · "ORGAN 3"
const drawbar_organ = note(`<
  ~ A@8 B@4 C D@7 E@5 F@8 G H I@2 A@8 B@4 C D@7 E@5 F@8 G H I@2 ~@2 J@2 K L J@2 M@3 N@8 O@8 G H P@8 ~
>`.pickRestart({
  A: "[bb4 ab4 bb4 ab4, [db4,f4]]/8", B: "[eb4 ~ [f3,ab3]@2, [gb3,bb3] ~, ~ db4@3]/4", C: "~ eb4@15, [gb3,bb3]",
  D: "[~ ab3@2 ~@2 gb3@2, db4, ~ f4@4 ~@2, ~@3 bb3@4]/7", E: "[~@2 [ab3,c4]@3, eb4]/5",
  F: "[ab4@2 ~ gb4 ab4@2 bb3@2, db4, f4@3 ~ f4@4, ~ bb3 ~@2]/8", G: "[gb4,bb4]", H: "[c4,eb4,ab4] ~@3",
  I: "[db4,f4,ab4]/2", J: "[eb4,gb4,bb4]!2 ~@6", K: "[db4,f4,bb4] [db4,f4] ~@6, ~@2 bb4 ~@13", L: "[db4,f4,bb4]!2 ~@6",
  M: "[~@40 [eb4,c5]@7 ~, ab4@47 ~]/3", N: "[f4@3 gb4, db4, ab4 ~]/4", O: "[f4@3 gb4 f4@4, db4, ab4 ~ ab4 ~]/8",
  P: "[bb4@16 ab4@16 bb4@16 ab4@11 ~@5, [db4,f4]@59 ~@5]/8", // Db
})).s("gm_drawbar_organ").gain(0.32)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@16 A B ~@2 C D C E@3 F@2 G H F@2 I@2 J K L M ~@15 A B ~@2 C D C E@3 F@2 G H F@2 I@2 J K L M ~@11 F@2 G H F@2 G H F@2
  G H F@2 I@2 J K ~@9
>`.pickRestart({
  A: "~@5 ab4 bb4 eb5", B: "db5@15 ~", C: "~@5 ab4 bb4 f5", D: "eb5@3 ~",
  E: "[eb5@19 ~@3 c4@2 ab4@2 db4@2 bb4@2 ~@2 c5@8 ab4@8, ~@15 eb4@5 ~@4]/3",
  F: "[[f4,ab4,db5]@12 db5@2 eb5@2 db5@15 ~, ~@12 [f4,ab4]@19 ~]/2", G: "[f4,bb4,db5]@7 ~@5 ab5@2 f5@2", H: "gb5@3 ~",
  I: "[[f4,bb4,db5]@7 ~ bb5@2 f5@2 ab5@18 ~@2]/2", J: "gb4@15 ~", K: "ab4 ~@7", L: "~@6 f5 gb5",
  M: "f5 gb5 f5 gb5 f5@2 ~@2",
})).s("gm_acoustic_guitar_nylon").gain(0.71)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@4 A B@2 C@2 ~@3 D E ~@27 A B@2 C@2 ~@3 D E ~@24 F G ~@7 H I ~@21 A J@4 ~
>`.pickRestart({
  A: "~@3 db5 c5 db5 c5 ab4", B: "[bb4@7 bb4]/2", C: "[ab4@11 ~@5]/2", D: "f4 gb4 f4 gb4 f4 gb4 f4 gb4", E: "eb4 ~",
  F: "~@5 f4 c5 db5", G: "bb4@15 ~", H: "~@3 c5 ab5 db5 bb5 eb5", I: "c6",
  J: "[bb4@14 ~@2 ab4@11 ~@5, ~@7 bb4@7 ~@2]/4",
})).s("gm_lead_2_sawtooth").gain(0.4)

// drums · kick
const kick = s("bd").struct("<A B@34 C B@36 C B@30 C B@7 C ~>".pickRestart({
  A: "~@7 x", B: "x!2", C: "x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<A B@34 C B@36 C B@12 ~ B@17 C B@7 D ~>".pickRestart({
  A: "x", B: "~ x ~ x", C: "~@3 x", D: "~ x ~@2",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<A ~@7 A ~@7 A ~@8 B ~@19 A ~@7 A ~@8 B ~@22 C ~@25 D ~>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@5 x!3", D: "~ x ~@6",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@3 C B@3 D B@7 D B@17 C A B C B@3 C B@3 D B@7 D B@17 C A B C B@27 C A B@3 C B@3 E ~
>`.pickRestart({
  A: "~ x!2 ~", B: "x!8", C: "x!7 ~", D: "x!6 ~ x", E: "x!3 ~@5",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@24 B ~@36 B ~@13 C ~@8 D ~@25 E ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@3 x", C: "~@12 x!3 ~", D: "~@3 x!2 ~@3", E: "x",
})).gain(0.72)

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

// drums · high tom
const high_tom = s("ht").struct("<~@25 A ~@36 A ~@13 B ~@8 C ~@27>".pickRestart({
  A: "~@5 x ~@2", B: "~@4 x!2 ~@2", C: "~ x!2 ~@5",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@24 A ~@8 A@2 ~ A ~@24 A ~@8 A@2 ~ A ~ A ~@5 A ~@2 A ~@3 A ~@3 A ~@8 A@2 ~@6 B ~
>`.pickRestart({
  A: "x", B: "~@3 x ~@4",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@77 [~ x!3] [x!4]!5 [~ x!3] [x!4] ~@28>").gain(0.64)

stack(
  bass, piano, drawbar_organ, acoustic_guitar_nylon, lead_2_sawtooth, kick, snare, low_tom, hihat, mid_tom, open_hat,
  high_tom, crash, ride
)

More by The Pointer Sisters