There are many things that could be used to generate/modify the random number seed. These include:
- The clock (why not take the time at power on)
- User button presses (why not use the time of each button press as well as the button number)
- Noise from the FM radio (if no clock is available, why not take a brief sample of static and use it to make a number)
Ideally, the seed should be modified by as many sources as possible, although any one of the sources I mentioned would work just fine for the purpose of randomizing song playback. To prevent the same song from being played twice, the player could just keep track of which ones have been played so far (rather than create an ordered list of songs once shuffle is turned on). This would require 1 bit of data per song and could be integrated into the player’s database.
My point is that this is really simple stuff , and only an incompetent programmer would make such a lousy shuffle algorithm.