Giocoso Version 3 Changelog
The Changelog will record code changes to the release version of Giocoso Version 3 as they are themselves scheduled and, eventually, released.
Changes are listed in reverse chronological order (i.e., the most recent releases appear first).
For the most part, the main user manual for Giocoso will not be updated to take account of program changes that the Changelog details. You need to read the user manual in conjunction with this Changelog to get a full understanding of the current program functionality and its capabilities.
Sometimes, I may go back and modify the user manual when changes appear to me to represent significant differences from the way the program was behaving when the documentation was originally written, but this is definitely not guaranteed.
Giocoso Version 3.32 - Expected December 10th, 2025
General code tidying: Giocoso uses Bash script code developed over 5 years and several different versions of Bash. A lot of old Bash-isms therefore persisted and needed updating. For example, the syntax to do if statements (e.g., if [ “$var” == “some-string” ]; etc etc) could usefully be updated to use the double-square-bracket technique, which then no longer requires variable or string quoting (so if [[ $var == some-string ]]; etc etc). Another example is where you do conjoined tests: instead of if [[ $a == some ]] && [[ $b == text ]], it's cleaner to do if [[ $a == some && $b == text]], where the concatenation takes place inside the single set of double-brackets. Such code tidying should make zero difference to functionality, but makes the code somewhat easier to read and maintain and brings coding consistency to the program.
Minor Enhancement: When playing music, Giocoso now blanks out the program's graphical logo before overlaying the currently-playing album art on top. In the previous Giocoso version, depending on your precise choice of album art, you could see the extreme left-edge of the program logo appearing underneath the displayed album art. That won't now happen.
Minor Bug Fix: If your graphics hardware is ancient, Giocoso could emit the following error when using the 'B' key to launch the Sqlitebrowser database querying tool: MESA-INTEL: warning: Haswell Vulkan support is incomplete […] Some incorrect rendering might occur because the selected Vulkan device […] doesn't support base Zink requirements. This error message would appear to garble the main Giocoso program display, as it would be printed in black text, causing apparently blank lines to over-write parts of the terminal. The error would not appear at all if the PC running Giocoso had more modern graphics hardware: I'm using a 2014 Mac Mini, with an integrated Intel HD Graphics 5000 chipset, which is now obviously too ancient to cope with the way its Linux Mint 22 now renders things. The bug fix is that Giocoso now traps those errors so that the display is no longer garbled. Sqlitebrowser continues to launch and display correctly regardless.
Bug Fix: Sometimes, Giocoso could forget a configured minimum duration. Your configuration file might be saying “only play recordings that are at least 20 minutes long” and Giocoso would go and randomly select a 6 minute-long recording to play. Now fixed: the configuration file is re-read for every select performed, ensuring that a value for minimum duration is always correctly applied.
Bug Fix: The calculation of the 'rechashvalue' for a played piece of music could be wrong if the composition or composer name contained a single quote (e.g., Vincent d'Indy). This would mean that the program display would claim that there were 'Previous plays: 0' for that recording, even though there were plenty of them. Now fixed: the program computes the rechashvalue correctly and thus is able to get an accurate count of previous plays, no matter if apostrophes are present or not.
Minor Enhancement/Functionality Change: If you are running Giocoso with pop-out art enabled (perhaps because in-terminal graphics are not supported), you might close that pop-out window and thus lose 'sight' of what music you're listening to. The new feature is that you can press the “Z” key (or lower-case 'z') at any time to re-display the standalone album art. If it's already being displayed, the existing window is killed off and a new one launched; if the window has already been closed, a fresh one is simply opened. There was once a menu option under the Administration menu (option 6: 'Re-display Album Art in pop-out window') that was intended to achieve the same sort of thing, but it's now been made redundant, so that option has disappeared. Other menu items in the Administration menu have been re-numbered accordingly.
Minor Enhancement/Bug Fix: Sometimes when quitting Giocoso, the terminal might get 'stuck' and appear unresponsive. You'd type things at the command line, but you wouldn't see what you were typing being echoed back to the terminal. It would look like you were typing nothing at all. Giocoso now performs a 'reset' on quitting, which restores full functionality to the terminal: what you go on to type will display normally.
Major Enhancement: For various reasons, Konsole and other terminals that used to display in-terminal graphics have stopped doing so on specific distros. As described here, the technical issue is whether a terminal emulator supports sixel graphics. Many do not and the ones that do often have to have that support 'compiled in' for it to work properly… and several distros choose not to do that, either! An alternative way of displaying graphics in-terminal is to use the 'kitty graphics protocol': some terminals support that when they don't support sixel graphics. Accordingly:
- A new configuration option is provided to 'Use Kitty Graphics for in-terminal graphics display'. The default value is 'no'.
- If nevertheless set to 'yes', the program logo and album art are then displayed using kitty graphics, rather than sixel graphics. If your terminal supports it, album art should then be displayed appropriately.
- The way kitty graphics displays things is heavily dependent on your choice of terminal and terminal font. Use the configuration parameter 'Size of album art when displayed' to make the kitty display bigger or smaller to suit.
As a result of this change, the kitty terminal has become an installation dependency for Giocoso. You don't need to use it for anything else, but it needs to be present on the system to provide this new and alternative graphics display capability. If you are installing Giocoso afresh, then Kitty will be automatically installed; if you are merely upgrading to the new version of Giocoso, you'll need to install Kitty yourself: sudo apt install kitty or sudo zypper install kitty and similar commands, depending on distro, will achieve the necessary.
Note that kitty graphics are notably 'blockier' than sixel graphics, so kitty is not the default display technology: it's there for when sixel graphics fail!
Significant Bug-Fix: A horrible logic error on my part in Version 3.30 completely screwed up the application of the 'Time Bar'. When you take the Play Music menu, Option 1 Giocoso's random selection of music to play is meant to take your value for the 'Hours before composer eligible for second play' configuration parameter and prevent playback of further music by any composer who's had something played within that number of hours. So, say you set the parameter to “240”, then if Composer A's “Symphony No. 1” is played on the 1st of the month, nothing else by that composer can be played until the 11th of the month (because 240 hours is 10 days, so he's blocked from random selection using the default music selection process for 10 days). Unfortunately, my logic flaw was to apply the time bar to the recordings eligible for a second play, not the composer! This meant that if Solti's recording of Beethoven's fifth took place on December 1st, Bernstein's recording of anything by Beethoven was still eligible to be played on the 2nd December, despite a 10-day time-bar allegedly being set on anything by Beethoven. Mea culpa. This has now been fixed and works as intended and as previously advertised.
Significant Enhancement: The way the Exempts file is processed has also changed, to make it more efficient. A composer listed in the Exempts file is explicitly exempted from *any* configured time bar. If the configuration file says 'don't re-play a composer until at least 240 hours has elapsed', then a Mahler symphony played on December 1st precludes anything else by Mahler from being played until December 11th (10 days later, 240 hours being 10 days). But if Mahler is also listed in the Exempts file, then that time bar is not applied to Mahler, so something by him could (not 'will') be played on December 3rd, say. In a previous release, this exemption was applied to the whole pool of candidate composers, so that if (say) Britten (time-barred), Bax (also time-barred) and Mahler (exempted) were all randomly selected as candidate composers for the next play, the Mahler exemption was applied to Britten and Bax as well. The exemption is now done 'cleanly' and only affects the explicitly-exempted composers. In this example, both Britten and Bax would now still be time-barred for 10 days, and Mahler would not be.
Enhancement: The Giocoso installer has been re-written to be somewhat more elegant to view and efficient to use. It has also had new support for installing onto AlmaLinux and Rocky Linux (both free clones of Red Hat Enterprise Linux). The existing support for installing onto Raspberry Pi OS (sometimes called “Raspbian”, as it's a derivative of Debian) has been re-worked and some kinks ironed out. The Pi 4 is now a first class platform on which to run Giocoso, rather than being something of an afterthought!
Giocoso Version 3.31 - April 10th, 2025
Minor bug-fix: The program display could become garbled (with mysterious blank lines seemingly over-writing the proper display elements at random) because of an inappropriate use of the 'ps' program. That has now been fixed.
Giocoso Version 3.30 - March 7th, 2025
A huge update, warranting another version jump (to Version 3.30, direct from 3.20). Please note that upgrading to this version requires special steps and cannot be performed by using the in-program 'check for updates' option as would normally be the case.
Significant New Feature: The release of 'Giocoso Pro'. A new configuration option allows a local Giocoso session to be pointed at a remote MySQL database. Subsequent plays of music will be recorded in the local database and the remote database. This means multiple devices will be aware of all music played on any of them. Filters to 'play me previously unplayed music' will therefore now correctly not start playing music which this device hasn't played before but that one has played previously. Reports will now be generated from the remote database, including data from plays made on all devices, not just the local one. An entirely new 'Pro' menu allows you to initialise a remote MySQL database and export a local PLAYS table to it. In case anyone is wondering: no, having a 'Pro' version doesn't mean money is charged or functionality compromised. 'Giocoso Pro' is still completely free of charge to use and full functionality is available to every user, without caveats or reservations. The 'Pro' name arises simply because working with MySQL is generally considered to be 'proper database administration territory', and thus rather harder and more nerdy to do than using the local database Giocoso originally used. Pro features are entirely optional: if you don't want them, you can switch them off (and back on!) at will.
New Feature: Added a new 'hotkey' option. Pressing 'F' (or 'f', upper or lower case being irrelevant) during music playback launches the system's default file manager in the currently-playing recording's folder. If Britten's Peter Grimes was playing, for example, and I tapped 'f', Dolphin (the KDE default file manager) would open in (for me) /sourcedata/music/classical/B/Benjamin Britten/Peter Grimes (Britten - 1958). If you notice a cataloguing error as a piece of music plays, this helps you get to the music file(s) involved quickly for editing and correction. Different distros and desktop environments will open the relevant folder in whatever file manager is configured to be their default. Note that the program display does not indicate that 'f' is a valid keypress that will do something: you just have to know it's there as an option!
New Feature: Another new hotkey option is available during music playback: if you press 'K' or 'k', and there is a file called 'booklet.pdf' in the folder being played, then it is opened in your system's default PDF reader. It's intended to help you easily access the digital versions of CD booklets that you have (hopefully!) stored within the same folder as the FLAC files ripped from the CD. If no such file exists, nothing happens: booklets in non-PDF format or not literally called 'booklet.pdf' won't be opened. Note that the program display does not indicate that 'k' (or 'K') is a valid keypress that will do something: you just have to know it's there as an option. Be aware that 'K' tapped when music is not playing does something completely different (recalling prior advanced SQL selections, a function that is shown on the main menu display).
Enhancement or possible feature removal: Due to popular demand, the 'scrolling logo' has been removed: whether that counts as 'feature removal' or an enhancement is a matter of opinon! Instead the program starts up instantly with a new graphical logo:
Enhancement: For new installations, the Luxi Mono font is now the default. Upgrades won't pick up this change automatically, however: the font can be downloaded here, for free. Install it using your distro's standard font installation tools: until you do, the program display may be garbled as your terminal application attempts to approximate a font it doesn't actually know how to draw.
Enhancement: Fast database refreshes now clear out entries in the RECORDINGS table which are found to no longer exist on disk. Previously, if you moved a recording from /orchestral to /symphonic (say), the fast refresh would have picked up the 'new' recording in the /symphonic folder, but the old entry for the same recording in its /orchestral folder location was not cleared out (you needed a full refresh to do that). Now, it will be.
Enhancement: The various ways of searching for music to play have been significantly tweaked to better deal with situations where folders the database thinks exist actually don't, or where folders that exist turn out not to contain playable FLACs. Consider a play list you created 8 months ago: it consists of a listing of hard disk folders that may all now no longer exist at those specific locations. The new search code handles these sorts of issues rather more gracefully than before. One significant side-effect: if your search returns many candidate folders, there'll be a potentially significant wait for the candidate folders to be checked for existence and the presence of FLACs within them. A new progress counter lets you know how far the file checking has got. If you tighten your selection criteria, so that fewer folders are considered candidates, you can speed up this folder checking considerably.
Enhancement: The default music search (Option 1 on the Play Music menu) has been substantially re-written to make it a faster and more bullet-proof batch process. The old default search picked one composer and then tried to find music by that composer to play; if it failed to find a suitable recording, it would discard its first composer selection and try again. This would involve a lot of trips to the database before you happened to get lucky and find a suitable recording to play. This does not work well if the database is at the other end of a network cable! Now, therefore, Giocoso selects a batch of all eligible composers; then it selects a batch of all eligible compositions; then it limits them down to the size of your 'Number of plays per cycle'. A bit of filtering ensures that within a play cycle, the same composer can't be picked more than once. Sometimes, this will mean that there won't be 10 plays per cycle: if there aren't enough candidate recordings by unique composers, the cycle will end early. No matter: a new default search will enable a new cycle to be constructed from new candidates …and away you go once more.
Removed Feature: Because default search now operates on a 'batch select' basis, the “maximum number of searches before giving up” parameter is no longer used: you get your 10 (or whatever) candidate recordings selected in one go: either you get a result, or you don't, but there's no 'having another go, over and over' as there used to be. That's simply because that's the way SQL works: if it didn't return anything this time, there's no point re-submitting it and hoping you get a different result! The parameter has accordingly been removed from the Administration menu, Option 2 screens and, if already present in the configuration file, is simply ignored. Any update to your configured parameters made by taking the Administration menu, Option 2 will trigger the removal of the parameter if it's found in the active configuration file.
Removed Feature: The Database Management main menu Option 8 : Pull remote database to be primary has been removed. That menu option provided rudimentary functionality allowing one Giocoso instance to become aware of plays made by another, but it was clunky and awkward to use. The new Giocoso Pro functionality renders this mechanism entirely redundant and is therefore completely removed from the program.
Modified Feature: Pressing [Enter] on a main menu item triggers the first option within that menu. If the “Play Music” menu is active, for example, pressing [Enter] triggers the “Play music with defaults” option, as though the user had typed '1'. This was a feature introduced in Version 3.20. In Version 3.30, it is modified: it doesn't work with the Administration menu, nor with the new Pro menu, though it continues to work for all other menus. The reason for this change is simply that Play Music, Database Management and Reporting menus don't actually do anything 'dangerous' when you take their first options… but the Administration menu first option triggers a software update (which might not be convenient or wanted) and the Pro menu first option threatens to re-create a Giocoso Pro database server from scratch, which potentially involves data destruction! If you really want to do either of those things, you now need to type in the relevant menu option number: pressing [Enter] on those two menus (often by accident!) now no longer does anything.
Modified Feature: The aggregate statistics report has always reported on 'Average number of plays per day'. That has now been modified to be 'Average number of plays per day in past year': the underlying query now only looks at 'today minus 365 days'. It seemed pointless to average your plays over (potentially!) a decade or more, as if the figure would be meaningful.
New Feature: In Version 3.12, the ability to create notes about a currently-playing recording was introduced. This capability remains as-was, but the new feature in Version 3.30 is that, if the program is operating in 'Pro mode', notes are now stored in the globally-shared database, not as a single text file stored on the local playing device. Global Notes, as the feature is called, only permits one note per recording, but a note can be added to at will, as often as you like, and can be up to 4GB in size. When adding a note, you tap the 'n' key (as in previous Giocoso versions) and the nano editor opens automatically. When saving the text file, it's stored back into the Pro database, where it can then be accessed for read-only purposes by any other Giocoso Pro client device. Global notes are displayed within the main Giocoso program window in a simple, GUI-like text file display tool. Non-Pro notes made prior to this release are still stored on local disk, but are no longer accessible through Giocoso for as long as the program runs in Pro mode.
Changed Feature: The syntax for doing command-line database refreshes has been clarified (i.e., changed!). You need to check your crontab to ensure it is submitting things in the correct way. The syntax is now: /usr/bin/giocoso3.sh music_database_name /some/dir/of/music --fullrefresh (or --fastrefresh if that's the refresh mode you're wanting to use). Basically, you invoke Giocoso with three arguments: database, music folder and the full or fast refresh type switch, in that order.
New Feature: If you operate in 'Pro mode', one client device can pause the playback of a recording and a different client device can resume that same recording from where the first got to (give or take a second), a feature called Global Pause/Resume. If you are listening to some Wagner in the listening room late in the evening and fancy completing the opera propped up in bed on the laptop, Giocoso Pro features now let you do exactly that: music can now follow you around the house and to different devices at will.
Bug Fix: If one Giocoso session is playing music, a second session is not supposed to be able to initiate music playback. The test to check for this condition was broken by the changes introduced in Version 3.20, however. The new release implements the correct check once more, thus again making a second session unable to start music playback when another session is already engaged in it.
Bug Fix: The “Selection: X of Y” counter did not increment the 'X' component of the play count in any play mode except the default. If you did a play by 'selection filter' or an 'advanced SQL selection' or a 'play from a playlist', the 'X' was always stuck at 1 (a bug introduced in Version 3.20, sadly). Now fixed: it increments by 1 every time a recording completes a play no matter which play mode you're using.
Bug Fix: When manually creating a new playlist, previous Giocoso versions would pre-populate it with the last-played recording (if there had been one), rather than creating it genuinely blank. That now doesn't happen: the Play Music menu, Option 7 now always creates completely-blank playlists.
Minor Enhancement: The Database Management menu, Option 6: Backup a local database now displays a message explaining where the new local database backup can be found on your file system.
Minor Enhancement: The Database Management menu, Option 7: Optimise a local database now tells you the before and after sizes of the database on disk, so you can see something has actually been achieved by the optimisation process. If there's no size difference, before to after, then you're told that too.
Minor Enhancement: If you press 'B' on any menu, Giocoso tries to launch the sqlitebrowser tool for managing local, Sqlite databases. If that tool has not been installed on your system, however, the 'B' key simply appeared to do nothing in earlier Giocoso versions: now a message will be displayed explaining that for 'B' to do anything, you have to manually install sqlitebrowser first.
Minor Enhancement: When editing the configuration file (Administration menu, Option 2), if you pressed [Cancel] half-way through the editing process, the entire configuration file would revert to default values, losing any non-defaults you may have previously set. Now, cancelling at any point aborts the entire editing process and restores things to the way they were before you started editing anything. Instead of reverting to defaults, you revert to the configuration file values you began with, in other words.
Minor Enhancement: When producing advanced SQL reports (Reporting menu, Option 5), the panel in which you type your query will now remember the last query you typed, so won't ever open blank except on the first time of use. Any previous query displayed can be edited to become a new query (which will then be remembered for the next time of use). A previous query can also simply be wiped, so that a new query can be typed in ab initio. An additional refinement to the way advanced SQL queries work is that you don't return to the main program menu after each query: the query form remains open for typing/editing and re-submitting until such time as you explicitly press [Cancel].
Minor Enhancement: When creating a database for the first time, Giocoso runs off to the proposed 'root of the music collection' folder provided by the user and checks whether any FLACs are stored within that folder hierarchy. In previous versions, it performed a complete count of FLACs before deciding whether the proposed folder was a 'good' one or not. That was a bit of over-kill, in the sense that you only really need to find one FLAC in the folder structure to know the folder choice was legitimate. New in Version 3.30, therefore, as soon as one FLAC is found, the counting process stops, resulting in significantly faster progress towards actually processing/analysing the FLACs. The database creation process speeds up as a result.