Giocoso 3 - The Play Music Menu : Play Music with Defaults

Giocoso's standard way of playing music is to make a random selection from a previously-created database of available music files. Note that the random selection process underwent significant changes in Version 3.30: what follows describes that method of selection, not the one which applied before then.

The random selection process is actually a two-stage affair: first, select a group of 'candidate composers' at random; second, select a set of compositions written by those composers at random. Giocoso then plays each selected 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 composition by any member of the pool of candidate composers 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. The number of 'selections' is configured in Giocoso's configuration file (where it is identified with the label Number of plays per cycle. The value you set for this parameter governs how many recordings will be played in succession before returning to the main menu: but it also controls how many 'candidate composers' are initially selected, too. Specifically, the number of randomly-selected candidate composers is set to twice the number of plays in a cycle. Set the parameter to 10, for example, and there will be 20 candidate composers, and then a selection of 10 compositions by any of those composers will be made.

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 set of composers 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 a 'composer of interest'. A pool of multiple 'candidate composers' is selected at random, with the pool size being twice the number of plays per cycle set in the Giocoso configuration file.

Random Selection of Composition: Giocoso now makes a second query of its database: select as many recordings as the 'plays per cycle' parameter specifies by any of the candidate composers, and then make sure that only one work by a composer appears in the final list of recordings to play. It could happen, of course, that insufficient recordings are found to make up a complete play cycle: if your configuration parameters are set to values which together constitute a very tight selection range (say you set minimum duration=30 and maximum duration=40 and unplayed works=yes and under-played composers=yes and Bach, Beethoven and Mozart are all in the excludes file) then maybe only a handful of recordings will qualify for play, despite you asking for 'plays per cycle of 10'. If that happens, Giocoso will simply play what it can and the play cycle will end when the collection of candidate recordings has been exhausted. You'll need to relax your configured selection criteria for the default selection mechanism to produce more usable results in the future. Once again, in all the selection tests Giocoso performs, the composer is determined by a recording's ARTIST tag and the composition or recording 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 4). 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.

Note that if one of the pool of 'candidate composers' is mentioned in the exempts file, all composers in the pool are considered to be exempt for the present play-cycle only. For example: suppose 'plays per cycle' is set to 3, and that 'Arnold Bax' and 'Benjamin Britten' are both listed in my exempts file. When I ask for a default play at 9AM, Giocoso will randomly select 6 'candidate composers' (i.e., twice the number of plays-per-cycle). Let's say it selects Elgar, Mozart, Beethoven, Britten, Mahler, and Bartók. For the next 3 plays, therefore, all six composers can have multiple recordings played, because the selection of Britten as a candidate means all candidate composers are exempt from the usual time-bar. If the random selection of compositions then happens to list 2 different recordings of Elgar's Enigma Variations and one of Mahler's Das Lied von der Erde, then all three of those recordings will play without drama. The fact that, formally, Elgar ought to be time-barred after the first Enigma is played is irrelevant: his presence in the pool that included Britten, even though none of Britten's compositions made it to the eventual play list, means he is exempted from the time-bar for the duration of the next two plays. Once all three recordings have been played, however, then normal time-bar rules apply: the next random selection of composers (assuming it takes place almost immediately after the first play cycle completes) will definitely not pick Elgar as a candidate, so long as Britten is not randomly selected again, because his earlier two plays render him time-barred for the next 6 hours.

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 3. 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.

Adding a composer's name to the excludes file renders them ineligible for selection as a member of the 'candidate composer' pool from the outset of the randomisation process.

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' depends on whether you are using Giocoso Pro features (available from Version 3.30 and up). If you are not, then the test is whether the full folder (or path) name appears, exactly, in Giocoso's history of plays table. If you are, then the test becomes whether the computed "RECHASHVALUE" for a recording appears in the global_plays table. The RECHASHVALUE is computed from the concatenation of the COMPOSER and COMPOSITION tags associated with a recording.

Note that this means in Non-Pro Giocoso, a change in the physical folder name or path will make a recording look 'new' and unplayed. In Giocoso Pro, however, the physical path can change as much as you like and the recording will still be thought of as an existing recording -because only a change to the COMPOSER and/or COMPOSITION tags for a recording can change the RECHASHVALUE to a never-before-seen value/

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. In practice, however, an under-played composer will often be underplayed precisely because there aren't many recordings of his or her work. If that's true, then there's a very small pool of potential recordings to play -and if you ever play them once, they are no longer previously-unplayed. In short, when you have played most obscure composers once, they tend to cease being candidates under the 'not-previously-played' rule, and the fact that they still qualify as underplayed then doesn't help them if both filters are set.

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.

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'.

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 2 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 3 or 4 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.


[ User Manual Home ] | [ Back to Play Music Menu ]