The random selection process is actually a two-stage affair: first, select a composer at random; second, select a composition written by that composer at random. Giocoso then plays that entire composition from beginning to end, as a single entity, regardless of how many 'tracks' make up the composition. At the end of playing that composition, the fact of a completed 'play' is recorded in Giocoso's database. There is then a pause (for a user-defined) number of seconds before a new, random composer/composition selection is made.
Playback continues, random work by random work, until a user-defined number of 'selections' (sometimes referred to as a 'play cycle') is reached, at which point Giocoso returns to displaying the Play Music menu, awaiting further instructions.
That's the basic story, at any rate... but there are subtleties I should elaborate on!
Random Selection of Composer: The first stage of selecting something to play is the initial random selection of a composer to play. To make this selection, Giocoso assumes that the ARTIST tag represents a composer (which is in accordance with this website's 'axioms of tagging classical music': see Axiom 2). For this selection, every composer counts equally. It doesn't matter that J. S. Bach represents 1/3rd of your music collection whilst Isotaro Sugata is represented by a single CD: both have an equal chance of being selected as the 'composer of interest'.
Random Selection of Composition: Giocoso now makes a second query of its database: select something at random where its composer is the one I've just randomly selected. Again, the composer is determined by a recording's ARTIST tag. The composition name is represented by whatever is found in the ALBUM tag (see Axiom 5).
Modifications of Randomness: Having randomly selected something to play, Giocoso now makes some checks to see whether the selection is 'acceptable'. There are various user-defined settings that can be configured in the Persistent Configuration File (see the Administration Menu, Option 3) which determine what constitutes an 'acceptable' selection:
Time bar: Composers can be subject to a 'time bar', meaning that if something by Bach was played at (say) 9AM, Bach doesn't become eligible to be played again until x hours have elapsed. The default time bar is six hours, but it can be set to anything you like. I have mine set to '48', meaning that if I play Britten on Monday morning, I won't randomly hear anything by Britten again until at least Wednesday morning. The idea of the time bar is to prevent repetitive play of the same composer (and thus to keep your music selections 'fresh' and innovative).
A new feature in Giocoso version 3 is that composers can be completely exempted from the time bar by mentioning them in the Exempts File (see Administration Menu, option 2). A composer's name (spelled and capitalised exactly as you've tagged your music files) can be added to the exempts file at any time and its listing there will mean that no time bar will be applied to that composer. So if my time bar is set to the default 6 hours, but "Benjamin Britten" is mentioned in my exempts file, then if I play something by Britten at 9:00AM on Monday, I can play something else by Britten at 9:28AM that same Monday, if the random selection process happens to suggest to do so. Being mentioned in the exempts file doesn't make a composer more likely to be randomly selected for playback: it just means that if he or she happens to be randomly selected, they won't then be rejected for time bar reasons.
The time bar is only checked once a composition has been selected (not a composer: there are practical reasons for this late-stage application of the time bar which I won't go into here!) If a selected composition is found to be in breach of the applicable time bar, that selection is discarded and a new one (including the selection of a new composer) is made from scratch. This select-fail-reselect process continues as many times as needed to achieve a selection that doesn't break the time bar, up to a user-defined limit set in the Persistent Configuration File (but which is 500 by default).
Excludes: Another user-configurable factor that can render a randomly-selected composition unacceptable for play is the Excludes File. This is a text file that can be configured using the Administration Menu option 1. In it, you list composers by exact name to mean 'this composer is flat-out unacceptable for playback'. You can add new composers to the excludes file, or remove existing ones from it, at any time -but for as long as a composer is listed within it, there's a total ban on playing any of that composer's music. The intention here, when I designed this feature, was to stop me hearing Bach cantata after Bach cantata. Much as I love Bach, I do occasionally add him the my excludes file, for weeks at a time, just to give my ears a break!
In my own case, for example, I have so many Vivaldi and Bach recordings that there are simply times when I don't want to listen to those composers for a while: the ears get tired of even pure genius for various lengths of time after all! So, when I've had enough for the moment of listening to them, I add 'Antonio Vivaldi' or 'Johann Sebastian Bach' as entries into my excludes file and sit back to enjoy all sorts of music that isn't theirs! After a week or so, I then re-edit my excludes file to put a '#' in the front of the relevant line: that comments their name out and thus renders them eligible for playback once more. After a month or more, I can re-edit the file and remove the '#', thus banning them from playback for a while again... and so the process repeats for as long as I need it to.
Again, the excludes are applied only after a candidate composition has been selected: if at this point the selected composition fails the test, it is discarded and a completely new randomly-selected composer and composition are selected... and the select-reject-reselect loop continues until the user-defined number of maximum possible searches has been performed.
Under-played Composer: The Persistent Configuration file contains several yes/no settings, one of which is 'Only play music by previously under-played composers'. If that is configured to 'yes' (which it isn't by default) then the initially-selected candidate composition is checked to see whether the duration of previous plays of music by that composer is lower than a computed 'threshold' of under/over-played-ness. See this article for more details on how all that computation and checking works. If the candidate play exceeds the threshold, it's rejected and a new composer/composition random selection is made.
This 'under-played composer' filter is new to Giocoso version 3 and is intended to let you unearth the 'darker corners' of your music collection: to find and play recordings by obscure composers who are maybe only represented in your collection by one or two recordings and who are accordingly in danger of being 'crowded out' by the music giants like Bach, Beethoven and Brahms.
Note, too, that the under-played computation is based on the time a composer's music is played, not on how many compositions or recordings by that composer are played: Wagner would always be at an unfair advantage if were based on the mere count of plays, as it only takes one or two plays of his recordings to rack up many, many hours of play-time, for example. By measuring time, rather than play-counts, we ensure that even though Wagner isn't selected to be played very often, the fact that it takes interminable days to listen to just one of his operas when it finally gets selected means that he's regarded as an often-played composer 🙂
Unplayed Work: Another setting available in the Persistent Configuration file is 'Only play previously unplayed recordings'. If that is set to 'yes' (which it isn't by default) then if a recording has ever previously been played, it ceases to be a candidate for a new randomised play. The determinant of 'has this been played before' is whether the full folder (or path) name appears, exactly, in Giocoso's history of plays table. If it does, then it has been previously played and the candidate selection is discarded and a new one made, up to the user-defined limit of the number of searches permitted before giving up.
Note that this means that if you ever modify a FLAC file's folder name (say you add an accent, or change a lower-case letter into an upper-case one), it will suddenly count as 'previously not played', because its folder name now will be different from what it was before.
You can comfortably set this parameter and the 'under-played composer' one together: it means Giocoso will keep searching for previously-unplayed works by generally under-played composers, which is an entirely valid thing to attempt to do.
Minimum Duration: The Persistent Configuration file allows you to set a 'minimum duration' for a randomly-selected recording to be a valid candidate for playback. The default is 0 (which effectively means the filter isn't set at all and won't affect what counts as a valid candidate at all). You set it in minutes. Set it to 10, for example, and if Giocoso's random selection of a candidate for playback is determined to last 8 minutes, the selection will be discarded and a new one made (again in a select-reject-reselect cycle that keeps going until the user-defined maximum number of permitted searches is reached). If a random selection is determined to last 13 minutes, however, then that meets the minimum duration requirement and the selection is considered valid.
Maximum Duration: A similar parameter in the Persistent Configuration file allows you to set an equivalent 'maximum duration' value (again in minutes). The default value is 525960 minutes -which is the number of minutes in a year. Assuming you don't have any recordings which last longer than a year (!), therefore, the default value is the equivalent of 'this is so absurdly high that it cannot practically restrict anything from being considered a valid random selection'. Set it to (say) 120, however, and you're now saying 'any randomly-selected recording that lasts longer than 2 hours is not to be played'. Candidates for playback which exceed the specified maximum duration are thus discarded and a new random selection is made, until one is found whose duration is less than the limit set.
Note that it's perfectly valid to set both a minimum and maximum duration: minimum=10, maximum=30 means you want to listen to recordings that are not too short, but which don't last longer than half an hour, either: an entirely logical combination of attributes. If you happen to set the two parameters the wrong way round (say minimum=40 and maximum=20), Giocoso will silently swap the two values so that they continue to make logical sense.
You can have any, all or none of these 'randomness modifiers' set at any one time. If you use Administration Menu option 3 to set the timebar to 0, the underplayed composer filter to no, the unplayed work filter to no, and the minimum and maximum duration filters to their defaults; and if in addition you do not use the Administration Menu options 1 or 2 to create excludes or exempts files containing any content; then Giocoso will entirely randomly select something to play, with zero restrictions on what counts as a valid selection -and this is its default mode of behaviour.
Adding any or many of the filters discussed, or creating an excludes or exempts file, will cause Giocoso to 'tweak' its random selections until something matches all the requirements you've specified (assuming something can, of course). The music selection will still be randomised -but some random selections Giocoso makes will be not meet the various selection filters you've established and will therefore be discarded, whilst others 'pass' and are considered valid candidates for playback.