pull down to refresh

This is Madonna's Material Girl 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
//////////////////////////////////////////////////////////////////////////////////////////
//
// Material Girl — Madonna
// @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
// @by Bitcoin Graffiti
// @date Aug 23-24, 2025 
//
//////////////////////////////////////////////////////////////////////////////////////////

setcpm(34)

//percussion
const prelude = s("~ ~ [~ bd] sd").gain(.5).room(.5)
const sd = s("sd").beat("1, 3", 4).gain(.4).color("orange").room(.5)
const bd = s("bd").beat("2, 4", 4).gain(.3).color("yellow").room(.5)
const hh = s("hh!8").gain("[.2 .4 .2 .5]").color("gold").room(.5)
const oh = s("<~ ~ ~ [~ ~ oh oh]>").gain("<0 .3>").color("gold").room(.5)
const br = s("< ~!3 [~ ~ [sd!3 ~] [sd!3 ~]]>").gain(.3).color("silver").room(.5)
const br2 = s("< ~!3 [[sd!3 ~] sd [sd!3 ~]!2 ]>").gain(.3).color("silver").room(.5)
const cbr = s("< ~!7 [~ ~ [sd!3 ~] [sd!3 ~]]>").gain(.3).color("silver").room(.5)
const cr = s("<cr ~!7 >").gain(.4).color("silver").room(.5).sustain(4)
const drums = stack( bd, sd, hh, oh)

//bass
const bass = note("c2@2 c2@2 [g1 c2]@2 ~ g1").s("gm_electric_bass_finger:2").gain(.6).color('red').lpf(1000).legato(.5).vib(128).room(.2).color("red")
const bass_verse = note("<c2 c2 bb1 a1>@2 <c2 c2 bb1 a1>@2 [<g1 g1 f1 e1> <c2 c2 bb1 a1>]@2 ~ <g1 g1 f1 e1>").s("gm_electric_bass_finger:2").gain(.6).lpf(1000).legato(.5).vib(128).room(.2).color("red")
const bass_verse_2 = note("<c2 c2 d2 c2>@2 <c2 c2 d2 c2>@2 [g1 <c2 c2 g2 c2>]@2 ~ g1").s("gm_electric_bass_finger:2").gain(.6).lpf(1000).legato(.5).vib(128).room(.2).color("red")
const bass_chorus = note("f2@2 [c3 f2]@2 [g2 d3]@2 ~ g2 [g2 d3]@2 [g2 e2]@2 [a2 e3]@2 [g2d3]@2 f2@2 [c3 f2]@2 [g2 d3]@2 ~ g2 [a2 e3]@2[a2 e2]@2[g2 d2]@2[g2 e2]@2").s("gm_electric_bass_finger:2").slow(4).gain(.6).lpf(1000).legato(.5).vib(128).room(.2).color("red")

//guitar
const guitar = note("[~!2 <[g, bb, c4, f4 ] [g, c4, e4]>!2]!2").s("gm_electric_guitar_muted:10").legato(.4).gain(.3).room(.9)
const guitar_verse = note("[~!2 <[g, c4, f4 ] [g, c4, e4] [bb, d4, f4 ] [a, c4, e4]>!2]!2").s("gm_electric_guitar_muted:10").legato(.4).gain(.3).room(.9).color("teal")
const guitar_verse_2 = note("[~!2 <[g, c4, f4] [g, c4, e4] [g, c4, d4, f4] [g, c4, e4]>!2]!2").s("gm_electric_guitar_muted:10").legato(.4).gain(.3).room(.9).color("teal")

const flute = note("[g, bb] ~ ~ [~ [e, g]] ~ ~ [g, c4]").s("gm_flute:1").slow(2).attack(.2).gain(.3).lpf(1200).vib(1).hpf(800).room(.8).legato(1).color("blue")

const melody = note("c@6 d@2 ~@2 d@2 d@2 d@5 e d@2 e@4 ~@2 c@2 c@4 c@2 c@2 c@2 d@3 e d@2 <e c>@4 ~@2 <g ~>@2 <g ~>@4 <g ~>@2 <e ~>@2 <d ~>@2").s("piano").gain(0.6).slow(4).s("gm_fx_atmosphere").room(.3)
const ambient = note("<[c1, e1, g1] ~!3>").s("gm_fx_atmosphere:6").release(8).room(.5)
const counter_melody = note("f2 a2 c ~ g2 b2 d ~!2 d b2 g2 e c a2 g2 f2 a2 c ~ g2 b2 d c ~ g2 b2 d <e c> ~!3").s("gm_fx_atmosphere:1").slow(4).gain(.6).room(.5).color("blue")
const synth = note("<~!3 [ ~ ~ ~ [ [b4, d4, g4, d5, g5]!2 ]] ~!4>").s("gm_synth_bass_2:5").color("blue").legato(.3).room(.3).gain(.2).vib(4)

const mel2 = note("c@3 f!2@3 f e d <c a>@2 <c g>@2 ~@2").s("gm_distortion_guitar:1").slow(2).gain(.15).room(.8).legato(.9).vib(.9)
const mel2_end = note("c4@3 f4!2@3 f4 e4 d4 c4@2 c4@2 ~@2 c4@3 f4@2 f4 e4 d4 c4@4 ~@4").s("gm_distortion_guitar:1").slow(4).gain(.15).room(.8).legato(.9).vib(.9)
const mel2_inter = note("c@3 f!2@3 f e d c@2 bb2@4 c@3 f!2@3 [f e d] c@6 ~@2").s("gm_distortion_guitar:1").slow(4).gain(.15).room(.8).legato(.9).vib(.9)

arrange(
        [1, prelude],
  
        // intro
        [4, stack( bass, drums, guitar)],
        [4, stack( bass, drums, guitar, flute)],
        [4, stack( cr, mel2, bass, drums, guitar, flute)],
        [4, stack( mel2_end, bass, drums, guitar, flute)],
  
        //verse 1
        [4, stack( bass_verse, drums, guitar_verse)],
        [4, stack( bass_verse_2, drums, guitar_verse_2)],
        [4, stack( bass_verse, drums, guitar_verse)],
        [4, stack( bass_verse_2, drums, guitar_verse_2, br)],
  
        // // chorus
        [8, stack( cr, bass_chorus, synth, counter_melody, drums, cbr)],

        // pre-verse
        [4, stack( cr, bass, drums, guitar, mel2_inter)],
  
        // verse 2
        [4, stack( bass_verse, drums, guitar_verse)],
        [4, stack( cr, bass_verse_2, drums, guitar_verse_2)],
        [4, stack( bass_verse, drums, guitar_verse)],
        [4, stack( cr, bass_verse_2, drums, guitar_verse_2, br2)],

        // chorus
        [8, stack( cr, bass_chorus, synth, counter_melody, drums, cbr)],

        //inter-chorus
        [1, stack( bass, drums, guitar, mel2)],

        // chorus
        [8, stack( cr, bass_chorus, synth, counter_melody, drums, cbr)],

        //pre-bridge
        [4, stack( cr, mel2, bass, drums, guitar, flute)],
        [4, stack( mel2_end, bass, drums, guitar, flute)],

        // bridge (living in a material word, MATERIAL!)
        [4, stack( bass_verse, drums, guitar, flute)],
        [4, stack( bass_verse_2, drums, guitar, flute, br)],

        // verse 3
        [4, stack( bass_verse, drums, guitar_verse)],
        [4, stack( bass_verse_2, drums, guitar_verse_2, br2)],

        // chorus
        [8, stack( cr, bass_chorus, synth, counter_melody, drums, cbr)],

        // inter-chorus
        [1, stack( bass, drums, guitar, mel2)],

        // chorus
        [8, stack( cr, bass_chorus, synth, counter_melody, drums, cbr)],

        //pre-outro
        [4, stack( cr, mel2, bass, drums, guitar, flute)],
        [4, stack( ambient)],

        //outro
        [4, stack( bass_verse, drums, guitar, flute)],
        [4, stack( bass_verse_2, drums, guitar, flute, br)],
        [4, stack( bass_verse, drums, guitar, flute)],
        [4, stack( bass_verse_2, drums, guitar, flute, br)],

        )
        .pianoroll({labels:1, vertical:0})
Lyrics Some boys kiss me, some boys hug me I think they're okay If they don't give me proper credit I just walk away They can beg and they can plead But they can't see the light (that's right) 'Cause the boy with the cold hard cash Is always Mister Right
'Cause we are living in a material world And I am a material girl You know that we are living in a material world And I am a material girl
Some boys romance, some boys slow dance That's all right with me If they can't raise my interest Then I have to let them be Some boys try, and some boys lie But I don't let them play (no way) Only boys that save their pennies Make my rainy day
'Cause we are living in a material world And I am a material girl You know that we are living in a material world And I am a material girl
Living in a material world And I am a material girl You know that we are living in a material world And I am a material girl
Ah-ah Ah-ah Ah-ah Ah-ooh
Living in a material world (material) Living in a material world (ah-ah) Living in a material world (material) Living in a material world
Boys may come, and boys may go And that's all right, you see Experience has made me rich And now they're after me
'Cause everybody's living in a material world And I am a material girl You know that we are living in a material world And I am a material girl (ah-ah)
Living in a material world And I am a material girl You know that we are living in a material world And I am a material girl A material, a material, a material, a material world
Living in a material world (material) Living in a material world (ah) Living in a material world (material) Living in a material world (ah-ah) Living in a material world (material) Living in a material world Living in a material world (material) Living in a material world
this territory is moderated
Woah!
reply
21 sats \ 1 reply \ @wilto 8h
Amazing
reply
thank you
reply
is this but a novel way to listen to midi files?
reply
for consumers like you it totally is
reply
You don't know me to judge. I assume there is or will be soon a software tool to transcode midi files into this format.
reply
i know you enough already
you're a jealous and unappreciative dick that's for one
stay away from my posts if this contemptful bs is the best you can do
reply
You just said more about yourself than about me
reply
you know, if you believe some tool did this then I'll take it as a giant compliment.
you have been very generous today
reply