[Introduction] [Building from source] [Screenshots] [Modes and States] [TODO]


Minstrel is a frontend to the GStreamer library written in Haskell. The interface is designed to fit in with what I want from my music player, so may not agree with you, but I'm sure there's an alternative out there that does! It is currently unreleased, and both it and its libraries are not robust, so you'll need to treat them gently for the time being.

The frontend takes two arguments, a playpool (filename) and a root (directory). The playpool contains a list of lines like

The Foo Band/Bar Album/The First Track.ogg
The Foo Band/Bar Album/The Second Track.ogg

(where ogg is any filetype supported by gstreamer) such that for each line x, there is a file root/x. Currently the only supported format is artist/album/track. Ony way to create a playpool is cd root && find . -type f -mindepth 2 -print | sed "s/..//" > playpool.

By default, random tracks from the playpool will be played. Yet to be implemented are other modes such as playing all tracks in random albums and stop after this track/album. You can also select an artist, album or track and press space to add it, or all tracks contained within it if it is not a track, to the playlist. Tracks in the playlist will be played through in order in preference to the random selections normally made. Pressing enter is similar, but adds the appropriate tracks to the beginning of the queue and interrupts the currently playing track to start playing them.

Building from source

You will need at least GHC 6.3 to build it, as well as the curses and gstreamer development libraries. To get the source you will also need darcs. Then:

darcs get http://urchin.earth.li/darcs/ian/minstrel
cd minstrel
darcs get http://urchin.earth.li/darcs/ian/cstring
darcs get http://urchin.earth.li/darcs/ian/hcurses
darcs get http://urchin.earth.li/darcs/ian/hgobject
darcs get http://urchin.earth.li/darcs/ian/hgstreamer

Then just run make to build.


Modes and States

Minstrel can be in one of a number of modes, and one of a number of states. The mode specifies how the next track to be played will be chosen as follows:

Play the track after this in the playpool. Go back to the top when you reach the end.
Random Track
Play a random track.
Random Album
Play all tracks in a random album.
Random Artist
Play all tracks by a random artist.

An exception is that if the playlist is not empty then the next track on the playlist is played, regardless of the mode. The modes are modified by states as follows:

Behvaiour unchanged.
Nothing is currently being played, but the position of the last playing track is remembered and play will resume from this point when you change mode.
Nothing is currently being played.
After the playlist has been played Minstrel will not play any more, but instead change to state Stopped. Note that the Random* modes work by adding an appropriate set of tracks to the playlist when it empties.
Stop After Track
Same as Stopping except Minstrel stops after the current track has finished rather than the entire playlist.
Quitting / Quit After Track
Same as the Stopping pair except Minstrel exits rather than merely stopping.


Valid XHTML 1.1!

Ian Lynagh <igloo@earth.li>