So instead I just have squash record the number of successful plays versus the number of skips for each song. That gets turned into a rating and statistics are used to pick the next song based on the ratings' distribution.
Cool idea, but I do have some concerns about how this concept works over a long period of time, and with multiple listeners. Having studied "smart" music algorithms for my masters project earlier this year, my group concluded that as the number of tunes becomes larger, skips vs. plays becomes less effective in truly "rating" your songs. If you happen to love a song, but not be in the mood to listen to it at a certain time, you skip it, and its chances of popping up again are decreased. If you happen to not like a song very much, but your significant other really wants to hear it, it will get played, its rating will be increased, and you'll hear it the next time you're in the car without her. I'm sure you have some algorithms built in to make it more "fuzzy" than that, but if skips and plays are the only inputs, I don't think you can approach a very robust shuffle mechanism. (Incidentally, the player app already supports skips and plays in its custom shuffle modes, but I think recording of "skips" hasn't been implemented yet, and it only gives you 5 seconds before it marks a track as "played.")

I think the way to go is to maybe use skips vs. plays as a component of a song's score, but to rely more heavily on input from the user. The simplest way would be to take in a rating from 1-10 from the remote (or front buttons if you make the interface easy enough.) This takes more manual effort to get going, but once it's done, you've really pinpointed how much a user likes songs based on their own preference, not necessarily how often they decided to listen to particular songs. Those ratings will still be subjective and based on the user's mood somewhat, but less so than a user's decision to skip/play a particular song at a particular time.

Also, whatever algorithm is used to calculate a song's score, it should use a decaying average of previous scores, so that the most recent score is weighted higher, but older scores are still taken into account somewhat. If I ranked a song as a "3" two years ago but rank it as a "7" now, the "7" should be the main component, but there was a reason for ranking it as a "3" back then, so it should also be included, just weighed less in the overall score calculation.

Incidentally, no matter how good the music selection algorithm is, I wouldn't use a player app that didn't have custom playlist functionality built in. Sometimes you just want to select a playlist, an album, etc and not worry about whether the player will play what you want.

Just some food for thought. Sounds like you've got something very cool brewing. Now if we could only figure out how to make the player app's visuals work with it.
_________________________
- Tony C
my empeg stuff