I merged a new source for EMMS yesterday (a backend providing commands like ‘emms-add-file’ and ‘emms-play-file’) which reads a beets (https://beets.io) library database using Emacs’ built-in SQLite support (beets is a command line program which manages your music library and automatically performs operations like tagging and converting music files; it keeps an SQLite database of tracks).

Since beets library databases already contain metadata about the tracks, this source skips running the default track info initialization function (other track init functions do run though).

On my PC (which is fairly powerful), loading ~1500 tracks (my personal library) into the EMMS cache (including their metadata) takes few minutes, during which Emacs is very annoying to use; this process takes under a second using the beets source.

Another nice feature is the ability to interactively filter chosen tracks (by passing a prefix argument to any beets source command). The filtering is done in two steps:

  1. Choose metadata types to filter by (actually columns in the beets database).

  2. For each metadata type (column) chosen, choose between unique values which appear in that column and which don’t correspond only to tracks which have already been filtered by a previous choice.

Both steps use ‘completing-read-multiple’ (and only allow valid choices).

The source should require no configuration (only tested on Linux though) provided you haven’t changed the location of the beets library database, and the source commands are autoloaded.

The source should be available in EMMS 19 (the next version, which should be released soon).