Release 2.04 - 23rd April 2023
- Enhancement: Added the sampling frequency to mini display output (eg, "44100Hz" etc).
- Bugfix : Various issues arising from requesting no album art be displayed now resolved.
- Bugfix : Added a test for reachability of absolutelybaching.com: don't fetch updated messages if the site is not accessible.
This release includes a slew of very minor tweaks and improvements. The most visible one is that the sampling rate and bit-depth are now displayed in the mini display window. That is, if the previous version displayed 1996 - Vocal - 00:42:23 (meaning 'this recording was recorded in 1996, it's genre is 'vocal' and it lasts for 42 minutes 23 seconds'), the display will now show 1996 - Vocal - 00:42:23 - 44100Hz/16-bit, with the "44100Hz" (in this case) indicating the recording was ripped from a standard CD, and the "16-bit" part indicating similarly. On music ripped from an SACD, though, you might see "192000Hz/24-bit" or "88100Hz/24-bit" and so on.
Of the generally minor bugfixes implemented, the most significant is perhaps the test for the contactability of the absolutelybaching.com website. Giocoso contacts this website if it detects that the program error message file version doesn't match the program version number, so as to obtain a copy of the messages file that does match the program version number. Unfortunately, if this website was down (because its Hungarian hosting server, for example, had just self-destructed!), the program would have locked up for quite a while trying to contact the uncontactable, before finally and eventually giving up -and, at that point, the prior error message file would have been wiped out and replaced with nothing, meaning that though the program was still functional, it couldn't display any meaningful error or progress messages at all. The new version tests for this website's ping-ability before trying to update the message file and leaves the old message file in-place if it can't download a newer version.
Release 2.03 - 14th January 2023
- Bugfix : The randomise statement for selecting a music folder when parameters were supplied was malformed. Now fixed.
- Bugfix : The 'date of last database refresh' was malformed for dates less than 10th of month. Now fixed.
- Bugfix : Formatting of the Database Management menu was off by one character. Now fixed.
This release sees no new functionality or significant enhancements, just a bunch of minor bugfixes which I haven't bothered to detail, plus the three fixes listed above. The first of them is the most serious, since it meant that true randomisation was not happening whenever music selections by composer or duration or performer (etc.) were being made. Music would still be played, but it wouldn't be properly randomised. It is now, however.
Release 2.02 - 13th November 2022
- Bugfix : When resuming recordings that had previously been partially-played, the duration of the recording stored in the Giocoso database was for only the unplayed part, not the entire recording. In other words, if a 60 minute recording was interrupted after 15 minutes, then resumed, you would find a duration of 45 minutes was stored in the database upon eventual completion of the play, rather than the correct total duration of 60 minutes. This is now fixed. Upon resuming, you will now see that only 45 minutes remain to be played -but upon completion of the play, the entire duration of 60 minutes is now stored in the database.
- Enhancement : If a source database is in use, the total duration for a recording is now taken from that database's Recordings table, rather than by re-analyzing each FLAC found, as was previously the case. If no source database is in use, total duration is still calculated by analysing each FLAC found in the current folder. This will be slow for folders containing dozens of FLACs. The new enhancement (i.e., using the stored duration from the source database) will mean playback begins more quickly when a database is used as the music 'source'.
Release 2.01 - 21st October 2022
- New Feature : A new --resume runtime parameter allows Giocoso to re-play the last-played recording, starting from the precise second when previous playback was interrupted with a Ctrl+C.
- New Feature : A new --repeat runtime parameter allows a new Giocoso session to tell a playing one to re-play the same piece of music once it's finished playing it
- New Feature : Experimental support for driving Giocoso via a menuing system (launch Giocoso with --menu runtime parameter)
- New Feature : A new --minimal runtime parameter allows for the play window to be small and compact, rather than the traditional full-sized one
- New Feature : A new --ignore-excludes runtime parameter allows a new Giocoso playing session to ignore, temporarily, all the contents of an excludes.txt. This is the default whenever the new menuing system is used to launch music plays with the 'Play music with filters' option.
- Bugfix : Album art was being resized twice, and thus appearing smaller than it should. Now fixed.
- Bugfix : Bare Header had a hard-coded program version number. Now correctly dynamic
- Changed : The footer area has been slightly re-designed and no longer shows a countDOWN timer, but an 'elapsed' play indicator (i.e., a countUP timer).
- Changed : More consistent use of colour codes throughout program code. The program should display better on non-Linux platforms as a result. A similar tidy-up of justification/indentation of various text display elements in different parts of the program display.
- Changed : The count of lines in the excludes.txt now doesn't include any lines containing a hash character (#). Commented-out lines don't count, basically!
- Changed : Nano text editor made a software prerequisite
- Changed : GNU Find (installed as 'findutils') is now a software prerequisite on macOS
- Enhancement : Extra duration/start/end data added to newplay.txt, so websites using it can display more data.
- Enhancement : A piece of empty albumart.jpg is now produced on program exit, so if you were to inspect it, you'd know music play had finished (as opposed to version 2.00's leaving behind the album art associated with the last recording played, which might make you think it was still playing).
- Enhancement : Refresh database operations now create a timestamp in the .local/share/giocoso folder, so you can check when the last refresh occurred.
- Enhancement : Stats report now fully justified/formatted correctly and includes date of last database refresh.
- Enhancement : A 'play lock' now prevents a second, concurrent session of Giocoso being launched with the intent to play music (second sessions that are launched to send autostop, repeat or skip requests etc are still fine). A new --unlock runtime parameter forces removal of a play lock, if needed.
- Enhancement : A new --descan runtime parameter removes the database scan/refresh lock that a --refreshdb operation creates, for when an old database refresh is interrupted and a new one can't begin until the scan lock is removed. Use with caution, because if you remove the lock, you permit a second refreshdb operation to start before a currently-running one has finished. The two refreshes will conflict with other in nasty ways, resulting in a scrambled mess of a database. Only manually unlock, therefore, when you are certain a prior refresh operation has been manually interrupted and terminated.
- Enhancement : The main display header area now displays the right-most part of a long folder/path, which usually contains the most important information, rather than a truncated version starting from the left
- Enhancement : Database refreshes can now be 'fast', meaning new acquisitions are added into the database quickly (but recordings in the database that no longer exist are not removed: that still requires a full refresh)
There are four significant new features in Giocoso version 2.01. The really big one is the introduction of a --menu runtime parameter that invokes the new menu interface for running/controlling Giocoso. Instead of having to launch Giocoso with up to 52 different runtime parameters, you can now launch it with just the --menu one, and then control the program's behaviour by taking numbered menu options. The menu interface is described more fully here. It is entirely optional to use: the traditional runtime parameter mechanism remains available for use just as it always did and won't be going away. The menu interface makes using Giocoso a lot simpler, though. (Note: the menu in Giocoso version 2.01 is deemed 'experimental' at this stage. Features on it will move around, be added or removed etc. in later releases. But it's quite functional now, even so and is already the default program interface if you run the bare command 'giocoso' without any runtime parameters at all).
The three other new features are: --resume, --repeat and --minimal. Resume lets you re-start playback of a recording from the exact point you previously terminated it. Repeat lets you instruct Giocoso to replay a recording immediately after it reaches its natural conclusion. Both features are discussed more fully here. The new --minimal runtime parameter instructs Giocoso to display a relatively small 'play window' as it plays music, about half the size of the traditional play window. More details are available here.
Amongst the many, relatively minor, enhancements to the program, the big one is probably that database refreshes can now be performed as 'fast' rather than 'full'. A fast refresh only adds new music details to a database, rather than re-visiting and re-scanning everything that's already in the database. Note that the fast refresh capability is only accessible via the menu interface. There is no runtime parameter available to trigger it. See section 3.1 of this article for a more detailed description.
Two other significant enhancements to mention: only one 'playing session' can now be run at a time, as Giocoso places a 'play lock' on disk as it begins playing music. This prevents accidentally starting a second playing session (which, in previous releases, usually had the effect of abruptly terminating the first). If a play lock gets left behind by accident (say, your PC crashes in mid-play, so that Giocoso doesn't get a chance to remove it as part of normal play-termination cleanup activities), you can remove it manually using the new --unlock runtime parameters. This is described more fully here.
Similarly, Giocoso now prevents a second database refresh operation starting whilst one is already in mid-flight, this time by placing a 'scan lock' on disk as the first database refresh starts. In previous versions, two database scans would trample on top of each other, leaving the database is a completely messed-up state: but no longer! Again, PC crashes or power-offs will leave an 'orphan scan lock' behind on disk, which would prevent any future database refreshes, so the new --descan runtime parameter is available to manually remove such orphan scan locks. See here for more details.
On the technical-but-tiny-details front, the fact that macOS now has a dependency on the GNU version of the 'find' utility means that, on Mac systems, the findutils port package is now a software requirement. The installation documentation (see Section 4) has been updated to reflect this; anyone upgrading to version 2.01 from 2.00 will have to know to perform this installation (i.e., sudo port install findutils) manually, however.
Of the many minor changes to existing features that Giocoso version 2.01 brings, the biggest is probably in the footer area of the main program display. In version 2.0, it looked like this:
In version 2.01 that has been updated so it now looks like this:
Most of the same information is still displayed, though the ordering has changed. The one thing that has disappeared is a countdown timer, telling you how many minutes of music remained to be played. Instead, version 2.01 shows a countup timer, labelled 'Played', which shows you how long the currently-playing recording has been playing. The 'Ending at...' display still allows you to calculate how long it will be before the current interminable piece of atonal minimalism with modified tubas has to go on for before it finally stops, however!