Still a lack of code but now at least some decisions have been made on the making.
As I discussed the last week the approach of storing all relations would be extremely costly for large music collections. And for those of you who followed the comments I might have come up with a solution.
For small amounts of songs the table containing all relations will still be small. And we can store all that data so we don't loose any information. Since 1000 songs would give a table of only a few MB that would be considered acceptable.
This table would look like this:
For larger amount of songs I have come up with an acceptable solution I believe.
I believe it is hard to do avoid the table with all the weights. But when we have enough information in the table we can start clustering the songs. This would be grouping the songs together and create some distinct or overlapping smart play lists instead. Even though we loose some data we would still get the desired the result. We just need the clusters to be a bit flexible.
Then new songs added can be analyzed for a while and get weights to the different play-lists we can later add it to one or more. Then if a song is nexted to many times on a play-list we move it and restart the classification process and see if it belongs on another list. I would like some feedback if other people think this is a good idea.
This could also give the user the option to modify it on their own in case it is not to their liking.
And as I posted in the last update these are the things that should be looked at:
+ Being in the same genre
+ Same artist
+ Being played/queued close together.
+ Being on the same play list
+ Many songs as neighbors
- Being nexted when close together or smart shuffle is active
Finding an efficient way to deal with large amounts of data. Without loosing to much of it.
I will start coding and seeing where to add the functions that add weight to the relations in the code. And maybe adding a button for starting the smart shuffle function.
As a start I will only make the table and then later start creating the function to make the transition from this table to the play-lists.
Finding where to add the weights in an efficient way. And coding in C# for the first time. Also creating the storage of the relations.