pull down to refresh

This is I Can't Go For That by aryl Hall & John Oates in javascript. Enjoy. The melody is left for you. Lyrics at the bottom. 👇 You can listen to the song and play with the code here on Strudel.cc
//////////////////////////////////////////////////////////////////////////////////////////
//
// Daryl Hall & John Oates — I can't go for that 
// @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
// @by Bitcoin Graffiti
// @date Sep 21, 2025 
//
//////////////////////////////////////////////////////////////////////////////////////////

setcpm(110.7/4)

const sd = s("sd").beat("1,1.5, 3", 4).gain(.4).color("orange").room(.5).bank("RolandTR909")
const bd = s("bd").beat("2, 4", 4).gain(.3).color("gold").room(.5).bank("RolandTR909")
const hh = s("sh").gain(.3).color("yellow").room(.5).fast(8)
const drums = stack(hh, sd, bd)

//bass
const bass = note("[f ~ f] [~ c] [d# c][d# e]").s("gm_electric_bass_finger:3").lpf(150).legato(.8).gain(1)
const bass_v = note("[f4 ~ f4] [~ c4] [d#4 c4][d#4 e4]").s("gm_electric_bass_finger:3").lpf(150).legato(.8).gain(1)
const bass_p = note("[f ~ f] [~ c] [d# c][d# e]").s("gm_electric_bass_finger:3").lpf(150).legato(.8).gain(1)

//misc
const arp = note("g6 f6 d#6 c6 <g5 f5> ~!12").s("gm_pad_new_age:5").room(.5).gain(.3).release(1.5).color('purple')
const arp2 = note("d6 [bb5 g5 bb5 d#5]!3").s("gm_pad_new_age:5").room(.5).gain(.2).release(1.5).color('purple')
const guitar = note("[f [f!2] ~ f]<g f4>").s("gm_electric_guitar_muted:10").gain(1).color('brown').room(1)
const amb = note("g4").s("gm_fx_soundtrack:5").slow(4).color('blue').gain(.6).decay(10)
const string = note("g5").s("gm_strings") // to do

//synth
const chorus = note("[f2, bb, eb4, g4] [[f2, bb, eb4, g4] ~ [eb2, bb, d4, f4]!2]").s("gm_epiano2:1").slow(2).color("teal").release(.5).legato("[1][[.2]!2]")
const verse = note("[c, bb, eb4, g4] [[c, bb, eb4, g4] <[[f2, c4, f4, a4]!2] [[ab2, ab, c4, eb4][bb, bb, d4, f4]]> ]").s("gm_epiano2:1").slow(2).color("teal").release(.5).legato("[1][[.2]!2]")
const pre = note("[c2, c4, e4, g4][c2, b, e4, g4][bb2, bb, e4, g4][f2, a, e4, g4]").s("gm_epiano2:1").slow(4).color("teal")

arrange(
  [2, drums],
  [4, stack(drums, bass)],
  [4, stack(drums, bass, amb)],
  [8, stack(drums, bass, arp , guitar)],
  [7, stack(drums, bass, guitar, chorus, arp)],
  [1, stack(drums, bass, guitar, chorus, arp2)],
  [8, stack(drums, bass_v, verse)],

  //prechorus
  [8, stack(drums, arp, pre)],
  //chorus
  [8, stack(drums, bass, chorus, guitar)],
  //verse 2
  [8, stack(drums, bass_v, verse)],
   //prechorus
  [8, stack(drums, arp, pre)],
  //chorus
  [8, stack(drums, bass, chorus, guitar)],

  //bridge saxophone
  //prechors
  //chorus
  //sax outro
).pianoroll({labels: 1})

Lyrics
[Verse 1] Easy, ready, willin', overtime Where does it stop? Where do you dare me To draw the line? You've got the body Now you want my soul Don't even think about it Say "no go"
[Pre-Chorus] Yeah, I, I'll do anything That you want me to Yeah, I'll do almost anything That you want me to, ooh Yeah
[Chorus] But I can't go for that, no (No) No can do I can't go for that, no (No) No can do I can't go for that, no (No) No can do I can't go for that Can't go for that Can't go for that Can't go for that
[Verse 2] I can go for being twice as nice I can go for just repeatin' The same old lines Use the body Now you want my soul Ooh, forget about it Now say "no go"
[Pre-Chorus] Yeah, I, I'll do anything That you want me to Yeah, I'll do almost anything That you want me to, ooh Yeah
[Chorus] But I can't go for that, no (No) No can do I can't go for that, no (No) No can do I can't go for that, no (No) No can do I can't go for that Can't go for that Can't go for that Can't go for that, yeah
this territory is moderated