Bug 107693

Summary: Dynamic Playlist repeats songs too fast
Product: [Applications] amarok Reporter: Kai Krakow <kai>
Component: PlaylistAssignee: Amarok Developers <amarok-bugs-dist>
Status: RESOLVED FIXED    
Severity: wishlist    
Priority: NOR    
Version: 1.3-beta1   
Target Milestone: ---   
Platform: unspecified   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Kai Krakow 2005-06-19 02:17:54 UTC
Version:           1.3-beta1 (using KDE 3.4.1 Level "a" , SUSE 9.2 UNSUPPORTED)
Compiler:          gcc version 3.3.4 (pre 3.3.5 20040809)
OS:                Linux (i686) release 2.6.8-24.16-default

When dynamic mode decides to cut the playlist length to a very short list (about 5-6 songs), it tends to repeating songs every 20 minutes or similar. While I am not sure about why the playlist is cut to such a short list (which is not the problem because songs on the list are changed), it is annoying that dynamic mode places some songs over and over again into the list so they get played every 20-30 minutes. One should be able to set a timeout for dynamic mode, after which a song may be reselected (for example 2 hours). If you have a collection shorter than this timeout this shouldn't of course confuse dynamic mode - so as a last resort it may select songs with shorter timeouts.
Comment 1 Kai Krakow 2005-07-06 23:26:32 UTC
Additional info:

This problem tends to happen only when using dynamic playlist in "suggested songs mode". It tends to create short loops of over and over the same few songs again. This should be solvable by defining an amount of time during which a song may not be selected again.
Comment 2 Tobias Knieper 2006-11-06 21:58:11 UTC
seems to be a dup of #127766 (or the other way round)

https://bugs.kde.org/show_bug.cgi?id=127766 - Dynamic Playlist population not random
Comment 3 Kai Krakow 2006-11-07 16:37:23 UTC
I don't think that is a dupe... The other bug describes amarok's wrong behaviour to select from only one smart playlist when populating a dynamic playlist which is built from multiple smart playlists. But all these bugs are somehow related to each other - that's right. Another bug is that amarok adds songs to the dynamic playlist which are already there.

But my original intention was to make the developers add a feature that dynamic playlists do not select a song for addition which was played like 20 minutes ago. My collection is big enough that I songs don't need to repeat for 3 days but instead I get the same songs (using the predefined "Recommended Tracks" dynamic playlist) repeated every 20 minutes to 1 hour. Not very dynamic in my eyes... :-/
Comment 4 Tobias Knieper 2006-11-07 19:02:00 UTC
Indeed this is currently not possible with the "Suggested Songs" dynamic playlist. You could create a smart playlist with the settings e.g. 'Score > 70', 'Genre = (a|b|c)' and 'LastPlaycount > x Days' and then create a dynamic playlist depending on the smart playlist, but obviously that's not the same.
Comment 5 Kai Krakow 2006-11-08 07:45:38 UTC
I already tried that. Not only that it is not the same, it also creates dupes in the playlist because of bug #134159. Amarok would add songs to the playlist which are already there because they had not been played yet and thus still fulfill the "lastplayed > x days ago".
Comment 6 Seb Ruiz 2006-11-13 01:15:16 UTC
SVN commit 604494 by seb:

Refactor of dynamic mode. This revised implementation solves a number of bugs. The logic of adding tracks from a dynamic mode is now delegated to the DynamicMode object, and is not done within the playlist. When a dynamic mode is loaded, a cache of 200 elements is create from the playlist sources. By caching a subset of the possible tracks to be inserted, there is no longer a requirement to execute complex SQL statements on each track change or playlist repopulation. Additionally, by grabbing random tracks from this cache, items are no longer fetched from just one source, but all of them. Once these cached tracks have been inserted into the playlist, they are removed from the cache list in order to avoid duplicating song insertions. Once the cache has been depleted, it is simply regenerated. 200 elements is approximately 12 hours worth of music, so the set should be sufficiently large to handle the user's requirements.

I've done quite a bit of regression testing, but the more the merrier :). The only feature which needs to be fixed is the Suggested mode of dynamic playlists, but this should be easily rectifiable.

BUG: 134159
BUG: 137212
BUG: 107693
BUG: 130542
BUG: 133269
BUG: 113120


 M  +233 -14   dynamicmode.cpp  
 M  +51 -6     dynamicmode.h  
 M  +12 -204   playlist.cpp  
 M  +3 -4      playlist.h  
 M  +1 -1      playlistbrowser.cpp