Giocoso: What's New?

Version 2.0 (compared to Version 1.x)

New Features

  • Support for installing and running on any macOS version from Sierra onwards
  • Support for installing and running on Windows 10, using the Windows Subsystem for Linux version 2
  • Support for installing and running Giocoso on the following additional Linux distros: Garuda Linux; Devuan; Linux Mint Debian Edition; antiX; Peppermint Linux; Gecko Linux; ZorinOS; ElementaryOS; LiteOS. Additionally, support for Ubuntu 22.04 and Fedora 36 means that support for those two distros is up-to-date.
  • Common run-time parameters are now stored in a persistent configuration file (eg, dbname, artsize, displaycolour and so on). They can usually be over-ridden by supplying equivalent run-time parameters with different values, but absent that, the configuration file values are used. This makes running Giocoso a lot simpler, as the one command 'giocoso' now automatically implies a bunch of configuration file parameter values that don't need spelling out with double-hyphen runtime parameters.
  • A --debug runtime switch now allows you to quickly determine all the values assigned to key program variables. It's intended really for development and troubleshooting and has no real significance for anyone not doing those things, but might help explain why Giocoso seems unable to find a piece of music to play, or is encountering other errors.
  • Giocoso Version 1.x used a high-precision timer to do things like a 'remaining time countdown' when playing music. This was accurate, but expended a lot of CPU resource. In Version 2, a TIMER_PRECISION=low setting in the configuration file means that you can now use a low-precision timer which is still accurate but uses about 75% less CPU resource.
  • A new runtime parameter (--editconf) allows you to edit the new persistent configuration file using Giocoso itself to invoke your choice of text editor.
  • The --unplayed and --unplayedworks runtime parameters now work with --comment, --composition, --performer, --composer and --genre filters, so it's now possible to ask Giocoso to play 'previously unplayed Haydn masses', for example [i.e., --composer=haydn --genre=mass --unplayedworks, or perhaps --composer=haydn --composition=missa --unplayedworks, depending on your specific use of the GENRE and ALBUM tags]. In Version 1.x, the use the --unplayed and --unplayedworks filters over-rode any other filters that may have been supplied, so that "--composer=haydn --unplayedworks" would result in the playback of anything previously unplayed, regardless of its composer.
  • Screen width and height are now manually defined by the SCREENWIDTH and SCREENHEIGHT parameters found in the persistent configuration file. They default to what a standard full definition 1920 x 1080 monitor uses, but can be set to anything. The screen geometry specified by the two parameters affects where Giocoso displays album art. It now becomes possible to force the display of album art onto the second of a dual-monitor setup (or the third of a 3-monitor setup, etc), which was previously only possible using KDE-specific window placement features. The new parameters bring such functionality to Gnome, XFCE, LxQT (and so on and on) users.
  • The new --smartcolour (or --smartcolor for non-UK English writers: both spellings are accepted!) parameter triggers a colour analysis of the album art associated with a recording as it begins to play. The third most common colour is then used as the background for the caption 'panel' displayed underneath the album art itself; the text of the caption panel is then determined by reference to that panel colour's luminance values. The result is automatic caption colouring without needing to know or specify very specific colour names from the list of hundreds that were previously available. If the album art is a bit peculiar, it's conceivable --smartcolour will result in peculiar caption colour choices, too... but this would be extremely rare.
  • The five 'selective' runtime parameters (i.e., search by composer, composition, genre, distinguishing artist or performers) can now all be supplied simultaneously to create a complex 'combo search' (for example, search for masses by Haydn conducted by Neville Marriner, which might be a composition+performer+genre search). Each component of the combo-search can be individually negated by appending an asterisk to the parameter value, so that a search for symphonies by Beethoven not conducted by Karajan would now be possible given the runtime parameters: --composer=beethoven --composition=symphony --performer=karajan*. This ability to combine 'positive' and 'negative' selections allows for very subtle/complex music selections.
  • A new --withdock parameter (settable at runtime or in the persistent configuration file) nudges displayed artwork a little higher up the screen (by about 42 pixels), to allow for the possible existence of a dock on the lower part of the monitor such as is standard fare on macOS and increasingly common on various Linux distros, too.
  • A new --artwork runtime parameter can be invoked from a second Giocoso session to trigger the re-display of the artwork associated with the music playing in the first. If you've shut down the original album art display panel by mistake, for example, you can now re-open it by running the command 'giocoso --artwork' in a second terminal session. The new parameter respects the --withdock parameter, if it is supplied at the same time, regardless of whether the original album art panel was using it or not.
  • A new --skip runtime parameter can be invoked from a second Giocoso session to make the existing playing session immediately stop playing whatever music it is currently playing and select something else to play instead. In doing so, Giocoso 'consumes' one of its available 'selections' (i.e., the number of 'plays' it will do in succession). If no more selections are available after the skip, then the playing session terminates as it normally would. Skipped recordings are not scrobbled to Last.fm, nor are they recorded in the Giocoso database as having been played (because they haven't been!)
  • As a recording begins to play, its audio bitrate is analysed and the result is now displayed on-screen, along with details about whether the recording is considered stereo, mono or multi-channel. The audio device being used is also displayed.
  • There are substantial improvements to error messages and the way in which they are displayed. Proper line drawing characters replace dashed lines, for example. Lines of text are seldom centered, but are displayed left-justified with appropriate line breaks.
  • A basic 'playlist' functionality now exists. A text file containing a list of music folders (one folder per line) can be played using the new --playlist=</path/filename> runtime parameter. The parameter value must be the full path and filename to the playlist file. Essentially, the playlist behaves as though you'd run Giocoso multiple times with a --musicdir= runtime parameter, with that parameter's value changing each time.
  • A conceptual split between a 'source' and a 'destination' database now exists. The source database is what tells Giocoso what music you have and where it can be found on disk: these are candidates for playing. The destination database is the place Giocoso records a successful, completed 'play' of a recording. Both databases are optional, in that you can simply 'cd' to a folder containing FLACs and launch Giocoso directly from there: no source database required, and if you aren't bothered recording the fact that something was played, there's no destination database is required either. But if you use a source database to get Giocoso to play things randomly, that same database will always be used as the destination, so the one database acts as a source of new things to play and a record of what has been played. The new feature in Giocoso Version 2 is that if you don't use a source database, you can use a destination database, provided you mention the new runtime parameter --destdb=xxxx (where 'xxxx' is the destination database's name). You can now therefore 'cd' to a folder of FLACs, launch Giocoso with --destdb=<something> and have the fact that direct plays took place recorded in a database. If you normally use a source database, therefore, but occasionally do direct plays, those direct plays can still be recorded in the same database you record all your normal plays. The complete history of your plays is thus preservable in Giocoso Version 2, whereas in Version 1, direct plays were not recorded anywhere and thus didn't 'count' as part of your play history. The use of a destination database when performing direct plays remains optional.
  • To further help cement this conceptual difference between a source and destination database, the runtime parameter --dbname=xxxx can now be specified as --sourcedb=xxxx. It's just two distinct ways of telling Giocoso the exact same piece of information: what database stores details of what music exists to play? For compatibility reasons, you can still keep using the old --dbname parameter. In a future release, however, the --dbname runtime parameter will disappear completely. The documentation accompanying Giocoso Version 2 nevertheless still uses --dbname almost exclusively, so the death of 'dbname' is not imminent!
  • In the persistent configuration file, a CAPTIONFONT setting now allows you to specify a specific font for the caption bar displayed underneath the album art whenever a recording starts to play. If you specify a font that doesn't exist, a default font will apply.

Changed Features

  • In Giocoso Version 1.x, you could in-place edit the 'excludes' text file using the runtime parameter --edit. This has now been changed to --editx, so as to distinguish it from the --editconf new feature which in-place edits the persistent configuration file (see above).
  • The little logo at the top of the main Giocoso display window didn't display very well in non-Linux platforms (because they do Unicode extended characters differently). A new 'musical notes' logo should display on all platforms equally well, provided only your terminal font supports Unicode characters at all
  • The top part of the Giocoso Version 1.x program display window would display 'Direct Folder Play' when launched without a database and 'Randomised Play' when launched using a database. Those terms were misleading (as you can use a database to do directed, non-random play). The terms (and text) have therefore been changed to read 'Direct Play Mode' and 'Database Play Mode'. The underlying functionality is not fundamentally different in either case than in Version 1, but the terminology is simply now more accurate.
  • In Version 1.x, if you specified both a minimum and a maximum play duration filter, but your minimum was bigger than your maximum, Giocoso threw up its hands and said, 'Having a minimum that's larger than a permitted maximum makes no sense; I'm going to pretend you set neither a minimum nor a maximum!' In Version 2, that behaviour changes: Giocoso now reverses the two supplied filters so that they make mathematical sense. Ask for a minimum duration of 30 minutes and a maximum of 10 minutes, Giocoso will now proceed on the basis that you supplied a maximum of 30 and a minimum of 10.
  • In Version 1.x, Giocoso didn't assume the existence of a database, so that direct play of music files in a folder was assumed to be the default mode of operation. In Version 2, the default is the other way around: a source database is assumed to exist, and if you want to do direct plays of music in a folder, you must explicitly state "don't use a source database" by setting --dbname=none. Basically, where Version 1.x assumed that Direct Play mode was the default, Version 2.x assumes Database Play mode will be used unless explicitly stated otherwise.
  • In Version 1.x, there was a hard-limit of 50 searches of your music catalogue, trying to find some music to play that met all the filters and conditions you had specified, before the program would give up and tell you no selectable music could be found. That hard limit is now removed in Version 2, replaced instead by either (a) the value of the MAXSEARCH parameter stored in the persistent configuration file (and which still defaults to 50); or (b) the number of recordings you have in the Giocoso database, if no MAXSEARCH value is provided otherwise. Note that a search through every possible recording in a large music collection is going to take ages, with the program doing nothing but displaying a search counter as it tries and retries to find playable music. The MAXSEARCH parameter is there to stop the waste of time a huge search might take. (Note that there is no runtime parameter equivalent of MAXSEARCH: it's in the configuration file only).
  • The indexes used in the Version 1 database have undergone substantial change in Version 2, to take account of the fact that the selective runtime parameters are now all independent of each other and that complex multi-column queries can now be made of the database. Query performance has been improved accordingly, at the expense of almost doubling the database size. With a huge music collection, however, the Version 2 database might be (say) 30MB instead of the version 1's 15MB. We are still talking database sizes that are exceptionally small, all things considered.
  • In Giocoso Version 1.x, --reportdays=10 would mean 'report on plays which have taken place in the past 10x24 hour period'. If you ran the report at 6pm on (say) the 30th June, your report would have listed plays from the 20th June onwards -but only from after 6pm on the 20th June. Giocoso Version 2 now no longer cares when you are running the report: it counts back 10 whole days (in this example) and then lists all plays which took place on that day and onwards. A Version 2 report done at 6pm on 30th June will therefore list a play that took place at 8AM on 20th June.
  • In Giocoso Version 1.x, the --recordinglist runtime parameter took no arguments. It now takes 'screen' or 'path/filename' arguments, as the --report parameter always has done. Thus, reports on what recordings exist in your music collection (whether or not you've ever played them) can be produced as proper pipe-delimited text files, for subsequent import and analysis in your favourite spreadsheet program.

Removed Features

  • Support for running Giocoso Version 2 on openSUSE Leap 15.x has been removed: Giocoso Version 2 now requires the Bash shell, version 5 or better -and SLES (and hence openSUSE Leap) only ship with Bash version 4. openSUSE Tumbleweed, being a rolling release that is therefore always very up-to-date, continues to have no problems running Giocoso.
  • The --register runtime parameter has been removed, largely on the grounds that no-one ever bothered to use it. It was a 100% optional way to email details of what distro you were running Giocoso on, so I could more sensibly focus my development efforts. But (understandably), people don't like registering things, even when it's free, optional and non-binding in any way to do so. So that runtime switch has gone, and if you'd nevertheless still like to let me know what sort of hardware platform and distro you're running on, you can just email me the details.
  • The --integrate runtime parameter has been removed. It created various configuration files that integrated Giocoso into the Desktop Environment manager on Linux (for example, you could right-click a folder in KDE's file manager and click 'play in Giocoso'). The feature has now been removed, because it only ever really worked for KDE in the first place and new desktop environments I'll never use or be familiar with are appearing at pace. In the future, standalone integration scripts may be created for specific desktop environments, but building the functionality into the core application seemed pointless.
  • In Version 1.x, you could supply --captiontext and --captionbackground parameters to specify the colours of the 'caption panel', displayed underneath and attached to the album art that was displayed whenever a recording started to be played. Those parameters have now been obsoleted. It is now impossible to set a specific colour to either the panel background or the text it contains. You can continue to use --autocolour to get Monopoly® colours used automatically, depending on day of week/month. Additionally, you can now use the --smartcolour new feature (described above).
  • In Version 1.x, to help you see what colour names could be used for --captiontext and --captionbackground, you could invoke Giocoso with the --listcolours runtime parameter. Since those two parameters have been removed, there is no need to get a list of colour names. The --listcolours parameter has therefore been removed.
  • Giocoso Version 1.x's  --colourcombo runtime parameter allowed you to colour the caption panel beneath displayed album art using a specific colour combo derived from the Monopoly® property group colours. This parameter has now been removed from Giocoso Version 2, largely because different countries have different property names around the board, so Giocoso's insistence on using the UK property names was a bit parochial. The --autocolour mechanism persists into Version 2, however, and permits the continued use of Monopoly®-derived colour schemes, depending on the day of the week/month.
  • The --negate runtime parameter was used in Version 1.x to mean 'invert the sense of the runtime parameter(s) I've supplied to filter or restrict what can be randomly played'. That is a set of runtime parameters such as --composer=britten --negate would mean 'play something that is not written by Britten'. The negate filter has now been removed in Version 2.x, to be replaced by an asterisk at the end of the parameter value. Thus, in version 2, --composer=britten* has the same meaning as --composer=britten --negate had in Version 1.x.
  • The --reporttype runtime parameter has been removed. In Giocoso Version 1.x, it allowed reporting of plays in either 'full' or 'differential' mode. Differential reporting meant only listing those records not previously listed, which required an update to the database to record what records were previously listed. After due consideration, it was concluded that (a) updating a database in any fashion when doing mere reporting is not a good idea; and (b) the functional usefulness of differential reporting are probably minimal. Once you have a few hundred plays to report on, it's probably best to export them all to a spreadsheet and do your filtering and so on there, anyway: the right tool for the job, basically, is not your music player!

Bug Fixes

  • If ImageMagick wasn't installed, most of the program display explaining what music was being played, even if no album art had been specified, was garbled or invisible. Now fixed: the program displays what's playing correctly, with or without album art being displayed. Side effect: it achieves this by insisting that ImageMagick be installed whether or not it ends up being used to display album art. (Most distros have ImageMagick installed anyway, so the new hard requirement for it is not a problem in most cases).
  • Security issue in some distros preventing ImageMagick from creating captions from text files, resulting in blank caption sections at the bottom of album art displays. This is now fixed by creating captions via other methods. (See this post for a detailed description of the problem and the original clunky workaround, involving making changes to the default ImageMagick security policy). Since downgrading one's security profile is obviously not such a good thing, it's nice to be able to report that Giocoso now works around the problem in a way that doesn't require a security downgrade, or messy editing of complex XML files!)
  • The countdown timer displayed whenever music plays would display 23:59:59 after the completion of the play of the last requested selection, because of date maths getting tricky when you're comparing two times that are actually identical but the computer thinks differ by a whole day (that is, compare midnight to midnight: the human would think 'zero difference'; Giocoso would think '24 hours, give or take'). This has now been resolved: upon completing the final play, the program now displays the completion time as being in '00:00:00' hours, minutes and seconds.
  • Giocoso when run on Fedora would have prompted for the installation of 'sqlite3', if it detected that sqlite3 was not already installed. That would have been a problem, because (uniquely to Fedora), though the executable is indeed called 'sqlite3', Fedora calls the package that installs it plain 'sqlite'. Giocoso would therefore have prompted for the wrong package name, basically. This wasn't a problem in earlier Fedora releases, because sqlite3 was installed by default, so the prompt to install it would never have arisen in the first place. Fedora 36 changes that, however, so Giocoso on that specific platform would have prompted for the installation of an incorrectly-named package, provoking a 'package doesn't exist' error from DNF. That has now been resolved, so that Fedora tests for the existence of 'sqlite3', but now prompts for the installation of 'sqlite' when necessary.
  • If running --report or --recordinglist and you were supplying an instruction to write the report to an on-disk text file, if the path or filename contained spaces, the report write would appear to succeed, but would actually fail. Now fixed, and on-disk reports can cope with spaces in either the path or filename, provided that the parameter value is entirely enclosed within double quotation marks.

    [Back to Front Page]