Shuffletron is a nice music player for the terminal written in Common Lisp, “based on search and tagging”, that seduced me with its attention to details. Moreover, its author was very responsive to fix a couple issues.

The first time you launch it, it will ask for a music repository and will propose to scan it for id3 tags with the scanid3 command. It is optional, but it allows to print colored information:

The basic commands to know are the following:

search with / followed by your search terms. You’ll notice that your prompt changed from library to xy matches . You can refine the results by searching again. To enter a new query we have to go back to the library, with as many successive “enters” as needed.

to play songs: play . We can select which songs to play, using their index: comma-separated indexes of songs: 1,3,10 a selection with a dash and an optional end: 1-10 , 0- a combination of the two: 1,3-10 .

there are the obvious pause , shuffle , skip , next , seek , repeat ,…

now to show the currently playing song.

There is also a queue, id3 tags management, profiles to use an alternate library ( ./shuffletron --help ), and even an alarm clock feature which allows to program music with something like:

alarm at 7:45 am # \"at\" is optional and doesn't change the meaning alarm 7:45 am alarm 9 pm alarm 7 # If AM/PM not specified, assumes AM alarm in 5 minutes # Relative alarm times, in minutes or hours alarm in 10m # minutes, minute, mins, min, , m are synonyms alarm in 7 hours # hours, hour, hr, h are synonyms alarm in 8h alarm in 7:29 # h:mm format - seven hours, twenty-nine minutes alarm reset # off/never/delete/disable/cancel/clear/reset

I can see a use for a pomodoro-like technic :)

I’ll list the complete set of commands below (available on the sources), but first a note on installation.

Installation

Shuffletron doesn’t provide executables (yet ?). The procedure is now documented in the readme so you just have to

make shuffletron-bin # sbcl sudo make install ./shuffletron

This last line calls a script and it is actually important to use it, to link dependencies and to use rlwrap . There is room for improvement here.

To read Flac and Ogg files, you need those system dependencies:

apt install libflac-dev apt install libvorbis-dev

Finally, scanning my library failed for the first time, because of badly manually encoded ogg files coming from youtube. The mixalot library prefered to fail instead of showing error messages. If you encounter a similar problem, see this PR.

All commands

In the application, type help , and help commands to get this list:

Command list: /[query] Search library for [query]. show Print search matches, highlighting songs in queue. back Undo last search. [songs] Play list of songs. all Play all songs in selection (equivalent to \"0-\") +[songs] Append list of songs to queue. pre[songs] Prepend list of songs to queue. random Play a random song from the current selection. random QUERY Play a random song matching QUERY shuffle SONGS Play songs in random order. queue Print queue contents and current song playing. shuffle Randomize order of songs in queue. clear Clear the queue (current song continues playing) loop Toggle loop mode (loop through songs in queue) qdrop Remove last song from queue qdrop RANGES Remove songs from queue qtag TAGS Apply tags to all songs in queue fromqueue Transfer queue to selection toqueue Replace queue with selection now Print name of song currently playing. play Resume playing stop Stop playing (current song pushed to head of queue) pause Toggle paused/unpaused. skip Skip currently playing song. If looping is enabled, this song won't played again. next Advance to next song. If looping is enabled, the current song will be enqueued. repeat N Add N repetitions of currently playing song to head of queue. seek TIME Seek to time (in [h:]m:ss format, or a number in seconds) seek +TIME Seek forward seek -TIME Seek backward startat TIME Always start playback at a given time (to skip long intros) tag List tags of currently playing song. tag TAGS Add one or more textual tags to the current song. untag TAGS Remove the given tags from the currently playing song. tagged TAGS Search for files having any of specified tags. tags List all tags (and # occurrences) within current query. killtag TAGS Remove all occurances of the given tags tagall TAGS Apply tags to all selected songs untagall TAGS Remove given tags from all selected songs time Print current time alarm Set alarm (see \"help alarms\") scanid3 Scan new files for ID3 tags prescan Toggle file prescanning (useful if file IO is slow) exit Exit the program. help [topic] Help

See also

mpd, an interface to Music Player Daemon in CL.

other music players: