1.0 Introduction
Giocoso version 3 is a complete re-write of the Giocoso classical music playing program, resulting in an entirely new way of interacting with the program as to compared to any prior versions. The program retains its core functionality of playing FLAC music files, either selected entirely at random, or by searches performed by the user. However, the program is now almost entirely driven by a new menu interface and the number of run-time parameters used to control its behaviour have accordingly been slashed, from around 55 to just 11 -and most of those remaining 11 parameters are only used when scripting Giocoso routine operations (re-scanning your music collection, for example).
Key new features are:
- Navigation through program options is now driven by a menuing system. Either type a letter-number combo to activate a specific option (such as D-1, to select the Database Management menu and then Option 1 ('create a music database') within that). Or you can left- and right-arrow key to highlight the relevant menu and then select the numbered option within that. For example, starting from the initial 'Play' menu, press the right-arrow key three times and you'll have activated the 'Administration' menu; now tap the number 4 and you'll have made Giocoso check to see if new software updates are available. If using the arrow key navigation, it's circular: you can tap left-arrow when the Play menu is highlighted and thereby activate the Quit menu option. If you are sitting on Quit, you can tap right-arrow and get back to the Play menu.
- A new 'Exempts' file allows you to name composers who are not to be subject to the usual 'time bar' that prevents playing multiple works by the same composer within a certain number of hours. So, if TIMEBAR=12 and exempts.txt contains the one entry 'Benjamin Britten', a piece of Brahms played at 9am rules out anything else written by Brahms being played until at least 9pm (i.e., 12 hours later). But a piece of Benjamin Britten played at 10am might be followed by another piece by Britten at 10:30am or at 11:45am or at 3:15pm and so on. The exempts file doesn't make it more likely that a listed composer will be randomly selected for the next play, though: it simply means that the named composers listed within it are not barred from being randomly selected for the next play.
- Album art is now displayed by default within the main program display, rather than in a separate window. Not all terminals support doing this, so the old program behaviour can be reverted to if necessary.
- Additional reports are available.
- Program configuration has been simplified: there are now no longer multiple options to control the colour of the 'caption bar' displayed under album art covers, for example.
- Results of any searches performed by the user can now be stored as a named playlist, so that re-plays of that music selection can be made more easily in the future.
- Music databases can now be optimised, if they seem to be slowing down over time. If you are familiar with various SQL databases, this is equivalent to 'vacuuming' databases and thereby freeing up and removing empty space contained within the database. Compacting the data in this way can potentially make accessing what remains a speedier operation.
- Under the hood, the Giocoso program now runs as a bunch of separate Bash scripts, rather than a single, monolithic one: this should make the program more modular and thus updates and bug-fixes can be more easily applied in the future. The program file structure is now more modular, too: instead of all files used and created by the program living in $HOME/.local/share/giocoso, they live in sub-folders off $HOME/.local/share/giocoso3. Text files are thus found in $HOME/.local/share/giocoso3/txt, the artwork files in $HOME/.local/share/giocoso3/art, the database files in $HOME/.local/share/giocoso3/db and so on. The 'master script' that coordinates all the others is now /usr/bin/giocoso3.sh (/usr/local/bin/giocoso3.sh on macOS): the major version number is now in the script's name. The command to launch the player remains plain 'giocoso', however.
- Music databases created and used under Giocoso Version 2 will be automatically transported across to a new Giocoso Version 3 installation. They will also automatically be converted to a non-write-ahead-logging mode (called 'delete journal mode', which is Sqlite3's default logging mode). This makes database operations slightly more reliable, at the cost of concurrency if multiple users want to access the same music database at the same time. This is now not considered a realistic use-case scenario for a classical music player, and therefore concurrency is no longer felt to be a core goal -nor especially desirable.
- Music selections by filters (such as 'play me masses by Haydn that last more than 30 minutes', where genre=choral, composer=haydn and minduration=30, are now more conveniently made, thanks to the use of forms allowing a single plain text filter submission (rather than Version 2's use of three separate runtime parameters to supply them).
- An advanced music selection filter has been created, whereby if you are capable of writing a SQL 'where' clause, you can now submit one. For example, you cannot use the 'standard' filter selections to search for 'all music written by either Britten or Holst, so long as it's choral', because the standard filter allows you only to enter a single composer name: either Britten, or Holst, but not a selection that covers both at the same time. With the advanced music selection filter, however, you can write (composer like '%Britten%' or composer like '%Holst%') and genre='Choral' and have a music selection that covers both composers' choral music at the same time:
The playlist that is (optionally) created as a result of this sort of music search ends up looking something like this:
...where you can see that the various pieces by the two composers are presented in a randomised fashion, with the work of one being enclosed within the work of the other (so you don't get a big chunk of exclusively one, followed by the works of the other, for example). The new advanced filter capability means that if you are familiar with writing SQL WHERE clauses, the sky's the limit as to what sort of music selections (and thus playlists) you can create.
- Databases can be switched between easily. If you own both a jazz and classical music collection, for example, then you could catalogue all jazz in one database and all classical music in another. Menu options D-4 then let you pick one to play from with just a few key presses.
- Music pausing now works by directly modifying the running state of the music-playing process. Prior versions used tricks to store where you had got to in a piece before killing off playback entirely. On resuming, the point you'd previously got to would then be the new starting point for renewed playback. It worked, but was clunky and somewhat imprecise, since it depended on accurately measuring whereabouts in a playback the program had got. Giocoso Version 3 now simply suspends the playback process and then resumes it when you're ready: the new start-from playback point is precisely the point playback had reached before the pause, but without the program having to calculate or store it. The process continues running throughout the pause, albeit in suspended state.
- Selections at various points are now presented as choices to be made from a menu, rather than having to be typed in by hand. Extensive use of the 'dialog' program means that Giocoso Version 3 now has something approaching a 'real' GUI interface for this sort of thing, whereas prior versions depended on users typing things in correctly first time of asking. For example, when you create a new music database, you are required to tell the program which folder contains the music files you want catalogued. Rather than typing something like '/sourcedata/music/classical', for example, you can now just point to the appropriate folder in the provided dialog boxes. If you are a good typist, however, you can still just type the relevant path!
Key Withdrawn Features
Possibly the most significant loss of functionality is that Giocoso Version 3 no longer supports scrobbling to Last.fm to record its plays: I felt some time ago that scrobbling and Last.fm were not really suitable for classical music; and that Giocoso does a better job of recording its own plays anyway.
There is now no longer support for running Giocoso by issuing a single command containing dozens of runtime parameters. The only operations now allowed to use runtime parameters are those controlling another session that's already playing music (to make it pause, autostop, or terminate, for example) or those which can be run meaningfully by an unattended cron job (for example, a database refresh done at night, or a music database backup).
Giocoso cannot now be run without a database. The database doesn't actually have to have anything stored within it if you feel like that! But a database must nevertheless exist and be configured in the persistent configuration file.
'Direct Play' of music that was possible in earlier versions by cd'ing to a folder of music and running the command 'giocoso --dbname=none' is now achieved by taking the Play -> Option 3 menu options, and then using the provided dialog box to 'point to' a folder of music, instead.
For a changelog describing modifications to Giocoso version 3 since its first release, please see this separate page.