Imagine a plugin for your desktop music player. For each song, you set a flag, which indicates whether you like this song or not. It could be a very simple icon, like two faces: and😦 . The music player program learns from you and then tries to classify the newcoming songs according to your previous votes.
Why such a feature? Say, you're visiting a friend who has lots of music on his computer. His music taste will be somewhat different than yours. You're unable to manually browse a large collection of music. However, a trained filter would be able to quickly classify the music and find best matches from your friend's library.
What if because of this program I'll miss the most beatiful song in the world? – Well, you could have just missed it five minutes ago by not listening to some radio station or not buying some record in the music shop. Don't blame the technology.
Moving on with the topic – it is a concept similar to the spam filtering in email clients like Mozilla Thunderbird.
It is unclear now, whether the program should examine the whole file, or just some random parts. For a human being it is not uncommon to be able to assess the music from just few seconds of the music, for example when adjusting the frequency knob in radio, looking for a good station. Very often, just one second is enough to decide if you like this music or not.
One of the most important issues is to extract certain parameters from the sound file. The parameters should somehow follow the human perception of music. Personally, I think that one of the most important features of music is the ''sound'', by which I mean mostly the used instruments.
The features I can think of are:
- Spectral flatness measure
- Detect a beat and tempo (autocorrelation?)
- Detect a set of instruments, maybe by frequency intensity in certain bands
- Dynamics of the music (music volume changes)
I'm sure that during the development of the filter there would be new ideas about extractable features of music. As I know, MP3 format contains some already extracted features. I presume that OGG does as well.
Open source programs will be the best choice as it's possible to write extensions (plugins) for them. Personally, I can think of:
Beep media player (similar to Winamp, based on XMMS)
Rhythmbox (Gnome music management, inspired by iTunes)