I couldn't get it to work. A simple work around though - I created an array with the play length of each track in seconds and stored it. This is then loaded back in, then the length multiplied by 1000. Set a variable and read the system timer with "variable=timer()+music length value", then do a simple check every code loop to see if the current timer value has exceeded this value. If so, then play another music track, repeating the process.
For example, my system does this:
function newmusic()
stop music 1
delete music 1
musictrack=(rnd(20)+1) : musiclength=musicdata(musictrack)
load music "sound/music"+str$(musictrack)+".mp3",1
musicend=timer()+(musiclength*1000) : musicstart=timer()
set music volume 1,musicvolume
play music 1
endfunction
This example previously loads the "musicdata" array with the saved file (I have 21 tracks, hence the random seed to choose another track - specific names could be used though). Then a check in the main loop such as:
if timer()=>musicend
newmusic()
endif
checks to see if the track end is passed, then calls the function to play another.
The downside is the loading will cause a pause to your games. I wrote a routine that creates a background process to handle it for streaming purposes that eliminates the pause for new tracks but it knocks the framerate by about 10%, so where possible it may be preferable to load all the songs into RAM and then just play different tracks - then no pause.