Strudelify
Undercover Angel cover art

1977 · Undercover Angel

Undercover Angel

Alan O'Day

KeyB♭ majorTempo100 bpm
0:00/0:00
// Undercover Angel — Alan O'Day
// 100 bpm, 4/4, key Bb major. Source: mcgill.
// Generated by strudelify. One cycle = one bar.
setcpm(100/4)

const chords = arrange(
  // intro (6 bars)
  [6, "<Bb5!2 [Eb@2 Bb@2] [F@2 Bb@2] [Eb@2 Bb^7@2] [Ebm@2 Bb@2]>"],
  // verse (8 bars)
  [8, "<[Eb@2 Bb@2] [F@2 Bb@2] [Eb@2 Bb^7@2] [Ebm@2 Bb@2] [Eb@2 Bb@2] [F@2 Bb@2] [Eb@2 Bb^7@2] [Ebm@2 Bb@2]>"],
  // pre-chorus (4 bars)
  [4, "<[Bb7@3 Absus] Gm7 [Gb@3 Ab7sus] [Bb Gm7 F@2]>"],
  // chorus (8 bars)
  [8, "<[Bb@2 F@2] [Gm@2 Ab6@2] [Eb@2 Bb@2] [C7@2 F Faug] [Bb@2 F@2] [Gm@2 Ab6@2] [Eb@2 Bb@2] [Dbo@2 Cm7@2]>"],
  // trans (4 bars)
  [4, "<[Bb7@3 Absus] Gm7 [Gb@3 Ab7sus] [Bb F^7 F@2]>"],
  // verse (8 bars)
  [8, "<[Eb@2 Bb@2] [F@2 Bb@2] [Eb@2 Bb^7@2] [Ebm@2 Bb@2] [Eb@2 Bb@2] [F@2 Bb@2] [Eb@2 Bb^7@2] [Ebm@2 Bb@2]>"],
  // pre-chorus (4 bars)
  [4, "<[Bb7@3 Absus] Gm7 [Gb@3 Ab7sus] [Bb Gm7 F@2]>"],
  // chorus (8 bars)
  [8, "<[Bb@2 F@2] [Gm@2 Ab6@2] [Eb@2 Bb@2] [C7@2 F Faug] [Bb@2 F@2] [Gm@2 Ab6@2] [Eb@2 Bb@2] [Dbo@2 Cm7@2]>"],
  // trans (4 bars)
  [4, "<[Bb7@3 Absus] Gm7 [Gb@3 Ab7sus] [Bb F^7 F@2]>"],
  // verse (8 bars)
  [8, "<[Eb@2 Bb@2] [F@2 Bb@2] [Eb@2 Bb^7@2] [Ebm@2 Bb@2] [Eb@2 Bb@2] [F@2 Bb@2] [Eb@2 Bb^7@2] Bb>"],
  // pre-chorus (4 bars)
  [4, "<[Bb7@3 Absus] Gm7 [Bb7@3 Absus] Gm7>"],
  // pre-chorus (4 bars)
  [4, "<[Bb7@3 Absus] Gm7 [Gb@3 Ab7sus] [Bb@2 G7@2]>"],
  // chorus (9 bars)
  [9, "<[C@2 G@2] [Am@2 Bb6@2] [F@2 C@2] [D7@2 G Gaug] [C@2 G@2] [Am@2 Bb6@2] [F@2 C@2] [Ebo@2 Dm7@2] [C@2 G7 G7#5]>"],
  // pre-chorus (1 bars)
  [1, "<[C Am G@2]>"],
  // fadeout (6 bars)
  [6, "<[C@2 G@2] [Am@2 Bb6@2] [F@2 C@2] [D7@2 G Gaug] [C@2 G@2] [Am@2 Bb6@2]>"],
)
const bassline = arrange(
  [6, "<bb2!6>"],
  [8, "<bb2!8>"],
  [4, "<[bb2@3 ab2] g2 [gb2@3 ab2] [bb2 g2 f2@2]>"],
  [8, "<[bb2@2 a2@2] [g2@2 ab2@2] [eb2@2 d2@2] [c2@2 f2@2] [bb2@2 a2@2] [g2@2 ab2@2] [eb2@2 d2@2] [db2@2 c2@2]>"],
  [4, "<[bb2@3 ab2] g2 [gb2@3 ab2] [bb2@2 f2@2]>"],
  [8, "<bb2!8>"],
  [4, "<[bb2@3 ab2] g2 [gb2@3 ab2] [bb2 g2 f2@2]>"],
  [8, "<[bb2@2 a2@2] [g2@2 ab2@2] [eb2@2 d2@2] [c2@2 f2@2] [bb2@2 a2@2] [g2@2 ab2@2] [eb2@2 d2@2] [db2@2 c2@2]>"],
  [4, "<[bb2@3 ab2] g2 [gb2@3 ab2] [bb2@2 f2@2]>"],
  [8, "<bb2!8>"],
  [4, "<[bb2@3 ab2] g2 [bb2@3 ab2] g2>"],
  [4, "<[bb2@3 ab2] g2 [gb2@3 ab2] [bb2@2 g2@2]>"],
  [9, "<[c2@2 b2@2] [a2@2 bb2@2] [f2@2 e2@2] [d2@2 g2@2] [c2@2 b2@2] [a2@2 bb2@2] [f2@2 e2@2] [eb2@2 d2@2] [c2@2 g2@2]>"],
  [1, "<[c2 a2 g2@2]>"],
  [6, "<[c2@2 b2@2] [a2@2 bb2@2] [f2@2 e2@2] [d2@2 g2@2] [c2@2 b2@2] [a2@2 bb2@2]>"],
)

// chords · gm_piano
const keys = chord(chords).voicing().s("gm_piano").gain(0.8)
// bass · gm_electric_bass_finger
const bass = note(bassline).s("gm_electric_bass_finger").gain(0.9)
// drums
const drums = s("[bd hh] [sd hh] [bd hh] [sd hh]").gain(0.8)

stack(keys, bass, drums)