Take a look at this from Elm's Land of Blocks client music.cs:
function clientCmdPlaySong(%song)
{
%length = alxGetWaveLen(%song.fileName);
if(isEventPending($lob::MusicRequestSched))
cancel($lob::MusicRequestSched);
if(alxIsPlaying($lob::CurrentSong))
{
lob_fadeMusicOut("",%song);
return true;
}
$lob::currentSong = alxPlay(%song);
$lob::MusicRequestSched = schedule(%length-200,0,lob_RequestNewSong);
}
I'm pretty sure theres no callback you can use, but you can get the songs length, then schedule an function to be called after that time.
(The important line is the last one)
EDIT: Actually, I'm not sure how helpful this is, as this is used with 2d music..