Strudelify
Devil Woman cover art

1976 · 40 Golden Greats

Devil Woman

Cliff Richard

KeyD minorTempo120 bpm
0:00/0:00
// Devil Woman — Cliff Richard
// 120 bpm, 4/4, key D minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 31.
setcpm(120/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 · electric guitar clean
const electric_guitar_clean = note(`<
  A@8 B@8 C@2 D@5 E@8 F@5 G@8 C@2 H@5 I J@8 K L@2 M N@6 O@6 C@2 P@5 Q R@8 S@8 T@8 U@6
>`.pickRestart({
  A: "[[d3,gb3]@15 [d3,gb3]@2 ~@4 [d3,g3]@17 ~ [d3,g3]@4 ~@2 [c3,f3]@11 ~ [c3,e3]@10 ~@2 [a2,d3]@21 ~@4 gb3@17 [d3,gb3]@2 ~@4 [d3,g3]@17 ~ [d3,g3]@3 ~@3 [c3,f3]@11 ~ [c3,e3]@10 ~@2 [a2,d3]@21 ~@6, ~@93 d3@17 ~@82]/8", // D G5 F5 C D5 D G5 F5 …
  B: "[[d3,gb3]@15 [d3,gb3]@2 ~@4 [d3,g3]@17 ~ [d3,g3]@4 ~@2 [c3,f3]@11 ~ [c3,e3]@10 ~@2 [a2,d3]@22 ~@3 gb3@17 [d3,gb3]@2 ~@4 [d3,g3]@17 ~ [d3,g3]@3 ~@3 [c3,f3]@11 ~ [c3,e3]@10 ~@2 [a2,d3]@21 ~@2 c3 g3 [c3,g3] ~, ~@93 d3@17 ~@82]/8", // D G5 F5 C D5 D G5 F5 …
  C: "[[c3,g3]@20 ~ [d3,a3]@17 ~ [d3,a3] ~@2 [d3,a3] ~@2 [d3,a3] ~@2]/2", // C5 D5
  D: "[[c3,g3]@19 ~@2 [d3,a3]@12 ~@2 [f3,c4]@2 ~ [g3,c4]@2 ~@4 [c3,g3]@23 ~@2 [d3,a3]@14 [d3,a3] ~@2 [c3,g3] ~@5 [bb2,f3]@24 ~@3 a2]/5", // C5 D5 F5 C5 D5 C5 Bb5
  E: "[e3 ~ [a2,e3] ~@3 a2 ~@7 [c2,c3]@9 [d3,a3]@6 [d3,a3]@2 ~@5 [c3,g3]@2 [c3,g3]@4 ~@3 [d3,a3]@9 [d3,a3]@5 ~ [c3,g3]@2 ~ [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~@2 [bb2,f3]@8 [bb2,f3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~@2 a3@8 ~ [d3,a3]@5 ~ [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~ g3 c3 ~ [c3,g3]@4 ~@2 [bb2,f3]@4, ~@5 e3@2 ~@109 d3@8 ~@40 e3@2 ~@26]/8", // A5 C D5 C5 D5 C5 D5 C5 …
  F: "[~@5 [bb2,f3]@5 ~@2 [c3,g3]@2 ~ [c3,g3]@7 ~@2 d3@13 ~ [d3,gb3] ~@6 [d3,g3]@17 ~ [d3,g3]@3 ~@3 [c3,f3]@11 ~ [c3,e3]@10 ~@2 [a2,d3]@21 ~@6, ~@23 gb3@14 ~@83]/5", // Bb5 C5 D G5 F5 C D5
  G: "[gb3@15 [d3,gb3]@2 ~@4 [d3,g3]@17 ~ [d3,g3]@4 ~@2 [c3,f3]@11 ~ [c3,e3]@10 ~@2 [a2,d3]@22 ~@2 [d3,gb3]@17 ~ [d3,gb3]@2 ~@4 [d3,g3]@17 ~ [d3,g3]@3 ~@3 [c3,f3]@11 ~ [c3,e3]@10 ~@2 [a2,d3]@21 ~@2 c3 g3 [c3,g3] ~]/8", // D G5 F5 C D5 D G5 F5 …
  H: "[[c3,g3]@19 ~@2 [d3,a3]@12 ~@2 [f3,c4]@2 ~ [g3,c4]@2 ~@4 [c3,g3]@23 ~ [d3,a3]@14 ~ [d3,a3] ~@2 [c3,g3] ~@5 [bb2,f3]@24 ~@4]/5", // C5 D5 F5 C5 D5 C5 Bb5
  I: "[a2,e3] ~ [a2,e3] ~@3 a2 ~@7 [c2,c3]@9 d3, ~@5 e3@2 ~@17", // A5 C
  J: "[~@5 a3@4 ~@2 [c3,g3]@2 ~ [c3,g3]@4 ~@2 [d3,a3]@9 ~ [d3,a3]@5 ~ [c3,g3]@2 ~ [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [bb2,f3]@8 ~ [bb2,f3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~@2 d3@5 ~ [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~ g3 c3 ~@2 c3@4 ~ [bb2,f3]@8 ~ [bb2,f3]@5 ~@2 [c3,g3]@2 ~ [c3,g3]@7 ~@2, ~@5 d3@2 ~@94 a3@5 ~@34 e3@2 ~@16 g3@4 ~@30]/8", // C5 D5 C5 D5 C5 Bb5 C5 D5 …
  K: "[bb2,f3]@11 ~", L: "[[c3,g3]@20 ~@3 [bb2,f3]@22 ~@3]/2", M: "[c3,g3]@21 ~@2 gb3",
  N: "[~@15 [d3,gb3]@2 ~@4 [d3,g3]@17 ~ [d3,g3]@4 ~@2 [c3,f3]@11 ~ [c3,e3]@10 ~@2 [a2,d3]@21 ~@3 gb3@2 gb3@14 ~@2 [d3,gb3]@2 ~@4 [d3,g3]@17 ~ [d3,g3]@4 ~@2 [c3,f3]@3, ~@93 d3@17 ~@34]/6", // D G5 F5 C D5 D G5 F5
  O: "[~@9 [c3,e3]@10 ~@2 [a2,d3]@22 ~@2 [d3,gb3]@17 ~ [d3,gb3]@2 ~@4 [d3,g3]@17 ~ [d3,g3]@3 ~@3 [c3,f3]@11 ~ [c3,e3]@10 ~@2 [a2,d3]@21 ~@2 c3 g3 [c3,g3] ~]/6", // C D5 D G5 F5 C D5 C5
  P: "[[c3,g3]@19 ~@2 [d3,a3]@12 ~@2 [f3,c4]@2 ~ [g3,c4]@2 ~@4 [c3,g3]@23 ~ [d3,a3]@14 ~ [d3,a3]@2 ~ [c3,g3] ~@5 [bb2,f3]@24 ~@3 a2]/5", // C5 D5 F5 C5 D5 C5 Bb5
  Q: "e3 ~ [a2,e3] ~@3 a2 ~@7 [c2,c3]@9 d3, ~@5 e3@2 ~@17", // A5 C
  R: "[~@5 a3@4 ~@2 [c3,g3]@2 ~ [c3,g3]@4 ~@2 [d3,a3]@9 ~ [d3,a3]@5 ~ [c3,g3]@2 ~ [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [bb2,f3]@8 ~ [bb2,f3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~@2 [d3,a3]@5 ~ [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~ g3 c3 ~@2 c3@4 ~ [bb2,f3]@8 ~ [bb2,f3]@5 ~@2 [c3,g3]@2 ~ [c3,g3]@7 ~@2, ~@5 d3@2 ~@133 e3@2 ~@16 g3@4 ~@30]/8", // C5 D5 C5 D5 C5 Bb5 C5 D5 …
  S: "[d3@5 a3@4 ~@2 [c3,g3]@2 ~ [c3,g3]@4 ~@2 [d3,a3]@9 ~ [d3,a3]@5 ~ [c3,g3]@2 ~ [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [bb2,f3]@8 ~ [bb2,f3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~@2 d3@5 ~ [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~ g3 c3 ~ [c3,g3]@4 ~@2 [bb2,f3]@8 ~ [bb2,f3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@7 ~@2, ~@5 d3@2 ~@94 a3@5 ~@34 e3@2 ~@50]/8", // C5 D5 C5 D5 C5 Bb5 C5 D5 …
  T: "[d3@5 a3@4 ~@2 [c3,g3]@2 ~ [c3,g3]@4 ~@2 [d3,a3]@9 ~ [d3,a3]@5 ~ [c3,g3]@2 ~ [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [bb2,f3]@8 ~ [bb2,f3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~@2 d3@5 ~ [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~ g3 c3 ~@2 c3@4 ~ [bb2,f3]@8 ~ [bb2,f3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@7 ~ d3, ~@5 d3@2 ~@94 a3@5 ~@34 e3@2 ~@16 g3@4 ~@30]/8", // C5 D5 C5 D5 C5 Bb5 C5 D5 …
  U: "[~@5 a3@4 ~@2 [c3,g3]@2 ~ [c3,g3]@4 ~@2 [d3,a3]@9 ~ [d3,a3]@5 ~ [c3,g3]@2 ~ [c3,g3]@4 ~ [d3,a3]@8 ~ [d3,a3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~ [bb2,f3]@8 ~ [bb2,f3]@5 ~@2 [c3,g3] ~@2 [c3,g3]@4 ~@2 a3@8 ~ d3@5 ~ [c3,g3] ~@2 [c3,g3]@4 ~@4 d6@18 ~@7, ~@5 d3@2 ~@85 d3@8 ~ a3@5 ~@10 [d3,a3]@14 ~@14]/6", // C5 D5 C5 D5 C5 Bb5 C5 D5
})).s("gm_electric_guitar_clean").gain(0.48)

// chords · epiano2
const epiano2 = note(`<
  A B C@4 D E A B C@4 D ~ F G H I@2 J@2 K ~@8 C@2 D E A B C@4 D ~ L G M I@2 J@2 N ~@12 A B C@2 A B C@4 D ~ F G O I@2 P@2
  K ~@30
>`.pickRestart({
  A: "d5 ~@6 d5 ~@4 d5 ~ d5 ~@4 d5 ~@4", B: "d5 ~@5 d5 ~@5 d5 ~ d5 ~@4 d5 ~@4", C: "d5 ~@5 d5 ~@5 d5 ~ d5 ~@3 d5 ~@5",
  D: "d5 ~@5 d5 ~@5 d5!2 ~@4 d5 ~@5", E: "d5 ~@5 d5 ~@5 d5!2 ~@4 d6 d5 ~@4",
  F: "[c4,e4]@4 ~@3 c3, c3@5 ~, g4@11 ~ g4@11 ~, a4 ~@14 e4@8 ~, ~@18 c4@5 ~", // C
  G: "[d4,f4,a4]@11 ~ f4@3 ~@3 f4@3 a4@2 ~, d3, ~@2 a4 ~, ~@12 d4@2 ~ d4@7 ~@2", // Dm
  H: "[c4,e4,g4]@12 ~@9 c3@2 ~, c3@18 c4@5 ~, ~@12 g4@11 ~, ~@15 e4@8 ~", // C
  I: "[[d3,d4,f4,a4]@11 ~ [f4,a4]@3 [g4,a4]@3 ~@2 b3 f4 ~@20 c4@3 c3@3, ~@12 [d3,d4]@7 ~ c3@23 ~@5, ~@20 [c4,e4,g4]@15 ~ g4@11 ~, ~@39 e4@8 ~]/2", // Dm F Gsus2 D C
  J: "[[d3,d4,f4,a4]@11 ~ [d4,a4] ~@2 [c3,c4,e4]@3 ~@3 [bb2,bb3,d4,f4]@25 ~@2, ~@11 d3@3 ~@34, ~@12 f4@2 ~ [g4,a4] ~@32]/2", // Dm D5 C Bb Gsus2
  K: "[a2,a3,c4,d4,e4] ~@2 [a2,a3,c4,e4] ~@2 [a2,a3,c4,e4]@2 ~@16", // Am
  L: "a4 ~@20 c3@3, ~@12 g4@11 ~, ~@15 e4@8 ~, ~@18 c4@5 ~",
  M: "[c4,e4,g4]@11 ~@10 c3@3, c3@18 c4@5 ~, ~@12 g4@11 ~, ~@15 e4@8 ~", // C
  N: "[a3,c4,d4,e4] ~@2 [a2,a3,c4,e4] ~@2 [a2,a3,c4,e4]@2 ~@16, a2 ~@11", // Am
  O: "[c4,e4,g4]@12 ~@9 c3@2 ~, c3@5 ~, ~@12 g4@11 ~, ~@15 e4@8 ~, ~@18 c4@5 ~", // C
  P: "[[d3,d4,f4,a4]@11 ~ [d4,f4,a4]@2 ~ [c3,c4,e4]@3 ~@3 [bb2,bb3,d4,f4]@25 ~@2, ~@11 d3@3 ~ [g4,a4] ~@32]/2", // Dm C Bb Gsus2
})).s("gm_epiano2").gain(0.48)

// bass · electric bass finger
const bass = note(`<
  ~@3 A B@4 C@4 D@4 E F G H I J@2 K L@2 M@2 L@2 M@2 B@4 N@4 D@4 E F O H I J@2 K L@2 M@2 L@2 M@2 P Q P R N@8 S@4 E F G H
  I T@2 K L@2 U@2 L@2 M@2 L@2 M@2 L@2 M@2 L@2 M@2 L@2 M@2 L@2 M@2 V ~
>`.pickRestart({
  A: "~@16 a2@2 ~@3 c3@3",
  B: "[~ d3@11 c3@3 a2@2 ~ f3@2 ~ d3@14 ~@2 c3@2 a2@2 ~ f3@2 ~ d3@13 ~@2 c3@3 a2@2 ~ f3@2 ~ d3@12 ~ d2@13 ~]/4",
  C: "[~ d3@11 c3@3 a2@2 ~ f3@2 ~ d3@14 ~@2 c3@2 a2@2 ~ f3@2 ~ d3@13 ~@2 c3@3 a2@2 ~ f3@2 ~ d3@12 ~@3 c3@3 a2@2 ~ f3@3 c3@3]/4",
  D: "[d3@12 c3@3 a2@3 f3@3 d3@13 ~@2 c3@3 a2@3 f3@3 d3@14 ~ c3@3 a2@3 f3@3 d3@13 ~@2 c3@3 a2@3 f3@3 d3@3]/4",
  E: "c3@20 ~ c3 ~@2", F: "d3@23 ~", G: "c3@21 c3@2 ~, d3 ~@23", H: "d3@13 c3@2 a2@3 f3@3 d3@3", I: "c3@23 ~",
  J: "[d3@15 c3@3 ~@3 bb2@19 ~@8]/2", K: "a2 ~@2 a2 ~ a2@2 ~@17",
  L: "[~@3 d3 ~@2 d3@3 a2@3 c3@3 a2@2 ~ f3@3 d3@5 ~ d3@2 ~ d3@3 a2@3 c3@3 a2@3 f2@3 d2@3]/2",
  M: "[~@3 d3 ~ d3@3 a2@3 ~ c3@2 a2@3 ~ f3@3 bb2@7 ~@2 bb2@5 ~ c3 ~@2 c3@6 ~@3]/2",
  N: "[~ d3@11 c3@3 a2@2 ~ f3@2 ~ d3@14 ~@2 c3@2 a2@2 ~ f3@2 ~ d3@13 ~@2 c3@3 a2@2 ~ f3@2 ~ d3@12 ~@3 c3@3 a2@3 f3@3 c3@3]/4",
  O: "c3@20 ~ c3@2 ~, d3 ~@23", P: "bb2@5 ~ bb2@4 ~ db3 d3@3 f3@3 g3@3 f3@3",
  Q: "c3@4 ~@2 g3@3 ~@3 g3 g3@2 f3@2 ~ d3@3 c3 ~@2, ~@10 f3@5 ~@9", R: "c3@5 g2@2 a2@2 c3 ~@2 e3@3 g3@2 ~ a3@3 c4@2 ~",
  S: "[d3@12 c3@3 a2@3 f3@3 d3@13 ~@2 c3@3 a2@3 f3@3 d3@13 ~@2 c3@3 a2@3 f3@3 d3@13 ~@2 c3@3 a2@3 f3@3 d3@3]/4",
  T: "[d3@15 c3@3 ~@2 bb2@20 ~@8]/2", U: "[~@3 d3 ~ d3@3 a2@3 ~ c3@3 a2@3 f3@3 bb2@7 ~@2 bb2@5 ~ c3 ~@2 c3@6 ~@3]/2",
  V: "~@3 d3 ~@2 d3@3 a2@3 c3@3 a2@2 ~ f3@3 ~@3",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · pad poly
const pad_poly = note("<~@33 A@3 ~@78>".pickRestart({
  A: "[~@21 [a4,d5]@50 ~]/3", // D5
})).s("gm_pad_poly").gain(0.56)

// drums · kick
const kick = s("bd").struct("<A@8 B@15 C B@27 C B@31 C B@29 D>".pickRestart({
  A: "x!4", B: "x ~@3 x!2 ~ x", C: "x!3 ~@5", D: "x",
})).gain(0.5)

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

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@15 B ~@27 B ~@31 B ~@30>".pickRestart({
  A: "~@18 x!2 ~ x ~@2", B: "~@6 x!2",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@15 B A@27 B C A@7 D E F G A@19 B A@29 H>".pickRestart({
  A: "x!4", B: "x!3 ~@5", C: "~ x!3", D: "x ~@3 x ~@6 x ~@5 x ~@5 x", E: "~@5 x ~@5 x ~@5 x ~@5 x",
  F: "~@4 x ~@6 x ~@5 x ~@5 x", G: "~@5 x ~@5 x ~@4 x ~@5 x ~", H: "x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@5 A ~ B ~@15 C ~@27 C ~@31 C ~@30>".pickRestart({
  A: "~@3 x", B: "~@9 x ~ x!2 ~@2 x ~@8", C: "~@12 x ~@2 x!2 ~@7",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@15 A ~@11 A ~@7 A ~@7 A ~@11 A ~@4 B@4 ~@11 A ~@11 A ~@7 A ~@7 A ~@7 A ~@2
>`.pickRestart({
  A: "~@7 x", B: "x!4",
})).gain(0.4)

// drums · cowbell
const cowbell = s("cb").struct("<~@24 A@12 B ~@15 A@8 B ~@23 A@29 B>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.45)

stack(electric_guitar_clean, epiano2, bass, pad_poly, kick, snare, low_tom, hihat, mid_tom, open_hat, cowbell)

More by Cliff Richard