All I see is 2.12 in the Github... and that's the one that is in the one-click library and has documentation mentioning "swap" - but if you do a code search on the repository code, swap only comes up in the help documentation print-out, not in the actual code. Swap in theory stops all other tracks, according to the documentation - which would be like the normal stop with no parameters, plus another macro call to play, which may be why it's not implemented (you can do it with two successive macros). If you can do something like all stop (implemented now), you can know which tracks are playing, which means you could (theoretically) fire off the fade-out of the other tracks, and fire off the fade in of the selected track(s) - a crossfade parameter. I'll take a look, as this is interesting to me too - I like fade in-outs better than hard stops. Maybe I can just get to "fade-out all playing" which would be half, and if followed by a standard fade-in would get the effect if not the spirit. I was also disappointed to see no API controls for the scrubber - I'd love to be able to reset music or sound effects at least, if not pick the exact point in the scrubber to play from/to. ======================= Edited to Add - I did it. Added a case for fade with no tracks or playlists, and triggered a cycling of all "playing" tracks to fade out all of them...and faded them all out. Six tracks at once. Not a likely scenario, but adding a fade command before any play macro will fade out all other playing tracks. Maybe I should add a "crossfade" as well, so it will exclude the provided track when it goes to fade all others. Here's what I added: ...in commandHandler after the "stop" block (included) if (cmdDetails.details.stop){
if (playlists.length == 0 && tracklists.length == 0){
stopAll(who)
}
}
if (cmdDetails.details.fade){
if (playlists.length == 0 && tracklists.length == 0){
log("In fade all");
log(fadeAll(who));
}
} ...later as a standalone variable //******************************************************************************
//Special - Fade all tracks
//******************************************************************************
fadeAll = function(who){
log("In Fade All Function");
var jbTrack, nomenu=true;
if (debug){
log('Fading All Tracks')
}
_.each(state.Roll20AM.playLists,(list)=>{
if (list.playing){
if (debug){
log('Fading List:' + list)
}
//list.playing = false;
//list.currentTrack = [];
fadeListOut(list,nomenu,who);
}
})
log("Checking tracks for play state and fading out...");
_.each(state.Roll20AM.trackDetails,(track)=>{
// log("Checking track:" + track.id + "for playing state:" + track.playing);
if (track.playing){
if (debug){
log('Fading Track:' + track.id)
}
//getTrackDetails
fadeOutTrack(track.id,track.volume,0,track.fadetime,nomenu,who);
//stopTrack(track.id,who)
}
});
},