Here are some screenshots of GrepMoodMusic that will let me talk a little about functionality before I get more actual documents up (such as source code).
First off, the object of GrepMoodMusic is to manage a large music collection and enable playlists to be automatically generated based on a person's mood, how much the person likes different recordings and whether the person has recently listened to particular recordings. The other goal of the system is to do all of this with as little human rating of recordings as possible.
This is the main interface to GrepMoodMusic. GrepMoodMusic is a combination of several layers of functionality. The database layer (not pictured) stores all the information relating to the recordings, ratings and listenings. The database access layer (not pictured) performs the appropriate queries on the database and returns objects. The interface layer and the layout/format layer (pictured here) displays the information for a user and allows for streaming of the music.
The database and database access layer are the base of the system which can be used with many different interfaces, such as SliMP3, web, winamp, shoutcast or portable device, such as the diamond rio.
Storing information in a normalized relational database with indexes makes retrieving the data easy. There are indexes for genres, artists (pictured here), albums and songs. Each index can be used to look up recordings, stream recordings or shuffle and stream recordings. (Yes, I know the color scheme is horrible).
This shot shows the session specification. The listening user is "macgill", the sample rate is "medium" and the mood is "Wake Up". Everything in GrepMoodMusic is keyed to individual users. It is currently a personal jukebox though I would like to add the ability to have small groups listen and their ratings be combined. It can resample (the code was borrowed from Apache::MP3 as were many of the ideas and the inspiration for this program). Finally, and most importantly, the mood is "Wake Up". Moods can be defined by the user and can be anything the user chooses. Mine are "Wake Up," "Work," "Party," "Mellow" and "Snooze."
This is the Recent Tunes box, which shows the recent tunes played (the last three were part of the randomly generated "Wake Up" setlist that GrepMoodMusic created on the fly based on my preferences. Each of those were rated highly in that mood. This is not always the case. GrepMoodMusic makes educated guesses based on what it knows about the ratings of songs on the same album, by the same artist or of the same genre (it also discounts songs that were recently listened to often). I would like to add tempo to the mix as well but haven't found a good tempo calculator that works in batch mode.
My current to dos are:
- Squash the remaining little bugs
- Clean up the code
- Make an installer
- Release it
- Write some external docs
- Make improvements including:
- Multiple concurent users
- Other interfaces
- Editing MP3 Tags
- XML feeds and interactions