Wednesday, August 23, 2023

mplay Generation 2: playlist generating programs

I've been working on automatic playlist generating programs now since January 2021.

I originally had just one program, mplay (make playlist).

Now there are more programs: splay (shuffle multiple playlists together), tplay (tell about what actually played, and truncate playlist or play history), and shufflelinks (shuffle multiple "playlist" folders-of-links together).

These programs can be compiled in scripts, making playlist generation either more intelligent (such as removing the items that didn't actually play from the playlist history before creating a new playlist) and/or combining playlists (or folders of links that serve as playlist for programs that don't handle playlist) together in different ways.  (Playlists can also be simply concatenated together using the system command cp or equivalent so I didn't write a program for that.) 

Also mplay itself has advanced considerably since the 2022 software release on Sourceforge.  I hope to release this new version before the end of 2023, possibly fixing some of the current "gaps" between what it does and what it really should do.

One key new feature is the ability to specify ALL of the files in the specified folders.  As in "just make a playlist with all of the files in these folders."  You don't have to guess or predetermine the total number of files that would be included.  Since the playlist history is unchanged by this operation, it is neither read nor updated (however, it might be better if it reads to playlist history first, to put unplayed items at the head of the playlist, currently it just ignores if itms have already been played or not).

You can also apply an file age criterion in order to make a playlist consisting of only files newer than a specified number of days.  That can be combined with the ALL option to easily create a playlist of ALL the new files.  A script can concatenate this premier playlist at the beginning and/or end of a main playlist.  (Another useful feature not yet implemented would be to make a playlist of ALL the as yet unplayed files.)

But I've found it useful also to mix the new files into a playlist of older files.  There are two basic approaches to this kind of mixing:

1) Dense Shuffling selects one (or some specified number) of items from each playlist, which are then ordered randomly (or not) into a new segment of the output playlist, with additional segments added until all the items from every playlist are included.  If any playlist is exhausted early, it is reset and reshuffled.  This works very much like mplay itself (though currently only for non-audio files, since audio files are currently treated as if they were all in one big folder, with no other option).

2) Sparse Shuffling mixes a smaller playlist into a larger playlist so that each item in the smaller playlist is included exactly once (or some specified number of times) in the end result, using random placement.

Currently splay does only Dense Shuffling, and shufflelinks does only Sparse Shuffling.  It would be good to have both available in both programs, and/or to combine the programs to work on any combination of playlists and links-folders, to generate either a new playlist or links-folder.

tplay is very useful in the case where I've been playing an audio playlist in Roon, but switch to playing other items.  If I go back to the playlist in Roon, it does not remember the last item played but simply starts all over from the beginning.  Using tplay, I can remove the items that have already been played from the playlist.  Or, I can remove the items that were not played from the playlist history and create a brand new playlist.