Giococo Version 3: What's New?

1.0 Introduction

Giocoso Version 3 is a complete re-write of my classical music player, compared to any earlier version. The key theme of the development was: focus. Focus on functionality that's important -and ditch any that was distracting, complex or frivolous. In determining what counted as 'frivolous v. important', I let my own use of the program guide me.

Thus, the program acquires a simple and all-pervasive menu-driven front-end, and loses most of the 55 or so runtime parameters that used to control its behaviour (there are now just 10, and most of them are only ever used when wanting Giocoso to perform an administrative function via scripting or scheduling). Similarly, the program loses its ability to "scrobble" to Last.fm, but acquires more reporting and own-database querying functionality. Colour schemes go, designated fonts arrive; playlist functionality is greatly enhanced; proper pause/resume functionality is finally implemented! And so on. Inevitably, my choices as to what was fundamental and what was disposable frippery may not be yours -and if there's some key piece of functionality that has disappeared that you depended on, I'm prepared to put it back if you ask. Just let me know.

Below is a quick guide to most of the key changes which I think a Giocoso Version 2 user will probably want to know about.

2.0 The Menu Interface

The most obvious change to Giocoso is the program interface:

The program is now divided into five separate areas of operation (Play Music, Database Management, Reporting, Administration and Control). Each area has its own menu. You can select an area by pressing the left- and right-arrow cursor keys, which makes each one become highlighted in turn in the 'top bar menu'. You can also tap the initial letter of the menu (P gets you the Play Music menu, for example; a tap of A gets you the Administration one, and so on).

That's actually another feature of the Version 3 user interface, too: one-key taps are all that is needed to drive the program, rather than tapping an option and then having to press [Enter] to submit it. It makes the program more responsive -but it can take a bit of getting used to!

The right-hand panel of the main display area tries to give one-liner help/advice to program functionality. The left-hand panel is where the functionality is actually accessed, by tapping the number associated with each menu option. Thus, in the above screenshot, tapping the 1 key will get you to the part of the program that creates databases; tapping 6 will allow you to create a new backup of your music database, and so on. Again, it's single-key taps that drive the functionality, with no need to press [Enter] each time.

3.0 Use of Forms

At various points in the operation of Giocoso Version 3, you'll be prompted to supply information of one sort or another. In previous versions, you'd just be expected to type the required data and hope you typed correctly. In many places in Giocoso Version 3, however, you'll now be 'guided' by more visual, graphical means to supply the right answer. For example, when creating a database, you need to type a database name and then point Giocoso to where music files can be found on your hard disk. In Giocoso Version 2, that looked like this:

...where you literally just typed in the answers (in yellow text in that screenshot). The equivalent in Version 3 is:

You can still type the folder name in the lower panel, if that's quicker for you: but you can also simply navigate through your file system using the top panel if you prefer. The new interface makes it difficult to type in non-existent paths, filenames or other things Giocoso needs to know about.

Another example of the same sort of thing: in Version 2, you could select what music you wanted to listen to by supplying 'search filters':

Each filter was just a prompt and a place to start typing. Each prompt appeared only one at a time. Once you'd submitted a filter, you couldn't go back and change it. If you meant to add a particular performer name but had accidentally pressed [Enter] and thus submitted it as blank: tough!

Version 3's approach to this is as follows:

The filters are all visible at once; you can move between them at will, back and forth, with simple cursor key presses; you can edit previous entries or add new ones until everything is 'just right', and only then do you submit the selection with a press of the [OK] option. It's easier, more comfortable to work with, more flexible ...and thus, simply, a better way of working.

4.0 Music Playback and Album Art Display

One of the more notable changes from Version 2 is the way Giocoso displays album art when something is being played. Here's Version 2's way of doing it:

Put simply, you ended up with three windows: the main program menu in the back; the smaller playing window in the front-left; and an album art display window in the front-right. It's a lot of screen real estate that's being consumed there!

Here's how Giocoso Version 3 does it:

There's only one window: the same one you used to ask to play music in the first place. The album art is displayed within the terminal, not as a separate window; and the playback progress and metadata information is also all within the one window. The result is, I think, more streamlined or elegant; it's definitely less clunky! I will add that if album art in its own window is important to you, you can configure Giocoso Version 3 to display it that way instead. Which brings me on to...

5.0 The Configuration File

The persistent configuration file is still present in Giocoso Version 3: it governs how the program behaves in various ways (such as what music database to use by default, what audio device to output music to, whether to display album art in its own window and so on). As in Version 2, the configuration file is simply a text file: you can open it in any text editor of your choice. New to Giocoso Version 3, however, is the ability to edit the file inside the main program itself, using forms with (hopefully!) self-evident prompts:

Rather than having to know what potentially obscure KEYWORD means when editing the file directly, here you are told in (relatively) plain English what each option controls. It still ends up being saved as KEYWORD=VALUE pairs in the eventual text file, but at least at the point of in-place editing, you don't have to guess!

I'll mention at this point, too, that the Version 2 configuration file contained options for setting 27 different parameters; Version 3 has that down to 18 (and most of them have sensible defaults you probably won't want to change).

6.0 More Advanced Options

They won't be useful to everybody, but if you are up for writing your own SQL database queries, you can now use that skill to select what music to play, or to query your music database. Both the Play and Reporting menu options now allow you to write your own SQL, in other words. You might want to do this when the easier-to-use selection forms or pre-prepared reports don't meet your subtlety requirements! For example, the Play menu allows you to filter for compositions by a particular composer (there's an example of that in Section 3.0 above) ...but it only allows you to specify one composer at a time. Suppose you want to play some choral music by two different composers in some random order or other: a piece of Britten, say; then something by Holst and so on. The 'standard' filter form won't help you, but if you can write SQL, you can now submit your desires to Giocoso like so:

Now you'll have a selection of choral music by multiple composers at the same time.

7.0 Music Pausing

In Giocoso Version 2, you could 'pause' the playback of a piece of music by exiting the program with the press of Ctrl+C. When you re-launched the program, you could then select a 'resume playback' menu option. But if you quit the program by clicking on the 'X' in its title bar (as you generally get into the habit of doing with other programs), then the resume playback option would not work. It was, in short, all a bit clunky and temperamental!

In Giocoso Version 3, however, we now have a pause menu option that directly suspends the execution state of the playback process. It remains running in the background, but in a suspended state. A second use of the pause option acts as a toggle and brings the process back to life: music playback resumes almost immediately, from exactly the point it had previously reached. At no point do you have to quit the program to pause music; neither is there a need to remember to exit the program in a 'special' way to acquire the pausing functionality! It's a more precise, pretty standard and much less weird way of achieving what Version 2 hacked a fiddly way to do.

8.0 Miscellaneous Enhancements/Changes

There are lots of more modest changes under the hood, too. I won't go into any of them in great detail here, but I'd particularly want to mention:

  • Giocoso 3 is now housed within a version-specific folder called $HOME/.local/share/giocoso3. The executable is also version-specific: /usr/bin/giocoso3.sh, though a shortcut called just 'giocoso' lets you invoke the program without having to type the number or extension.
  • The program now attempts to do a full-fledged, entirely automatic, install. Where earlier versions would tell you that your operating system was missing packages X, Y and Z -and would even tell you the command needed to install such software- Giocoso Version 3 now just gets on and installs anything it deems to be missing. You get sudo prompts to make it work, but otherwise the installation process is now pretty much self-contained and self-managing.
  • 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.
  • A new 'under-played composer' filter in the Persistent Configuration file now allows Giocoso to favour the playback of music by composers whose cumulative length of previous plays make up less than an equal share proportion of the global cumulative total hours of plays -thereby making the discovery of music by hitherto obscure composers more likely. For example, if there were 100 composers, in a completely fair world, each would account for 1% of the total length of plays. A composer with only a 0.5% share of total plays would thus count as 'underplayed'. This new features replaces the older 'unplayed composer' filter, which allowed Giocoso to select music by composers who had never previously been played before -but the playback of a single recording by such a composer would then render them immediately invalid for future plays, which was a bit too black-and-white to be really useful! The new filter keeps an under-played composer valid for future plays until quite a lot of his/her recordings have been played.
  • 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. The example I gave in Section 6 above, for example, where you type a complex SQL statement to select music by two composers at once: the results of that query can either just be played, or saved as a playlist and then played. Saving a playlist preserves the results of a filter selection for future use, without you having to remember the precise query you used to generate it in the first place.
  • Databases can now be switched between, back-and-forth, easily, by merely taking a menu option. If you have a separate database for (say) Baroque and Romantic music, you can now play selections from either database at will, by simply selecting one or another from a radio list prompt.
  • The program now requires the creation of a database. The database doesn't actually have to have anything stored within it if you feel that way about it! But a database must nevertheless exist and be specified in the persistent configuration file. The ability to merely 'play the contents of this folder, which I haven't properly catalogued or added to my database' is still there (now available via the Play menu Option 3), but a database needs to exist into which the fact that something was played can nevertheless be recorded.
  • Additional reports are available, including the ability to generate custom reports if you know how to write the SQL for it.
  • Music databases created and used under Giocoso Version 2 will be automatically transported across to a new Giocoso Version 3 installation.

9.0 Key Losses of Functionality

At the start of this piece, I mentioned that the key 'theme' of the development process behind Giocoso Version 3 was 'focus': concentrate on core functionality, and lose the stuff I don't think is really important any more. Accordingly, some bits of functionality have been removed from Giocoso Version 3 that you might have got used to in Version 2.

  • The most important one of these is, I think, 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.

For similar reasons of 'concentrating on things that matter to me':

  • Giocoso Version 3 is no longer supported as running under MacOS (i.e., on Apple's operating system). It may run perfectly well on it, but I'm not expending development effort in ensuring it does. There are several reasons for that, principal amongst which are the fact that all my Apple hardware dates from 2012-2015. I don't have even an M1 piece of kit, let alone an M2: I cannot therefore develop for the latest in Apple hardware, and it seems pointless to keep developing for decade-old hardware (and operating system versions) that few people will actually be using in anger. I think it also true to say that, in my experience, users of Apple hardware have their own way of approaching classical music that is not exactly compatible with the way I do it! They also seem happier to stick with proprietary software than I am. So, all in all, me and Apple are not a great combination and my feeble efforts at Mac support thus end with Giocoso Version 2!
  • Program configuration and execution has been simplified so that there are now no longer multiple run-time parameters that can be supplied when launching the program to make it behave certain ways. The only run-time parameters that are now allowed are to control another session playing music (to make it pause/resume/stop/repeat and so on), or to take scheduled backups via crontab. A single run-time parameter (--play) lets you initate randomised music playback directly from the command line: it's really the only parameter left out of the 50+ in Version 2 that directly triggers music playback.
  • The multiple options to control the colour of the 'caption bar' displayed underneath album art covers have been abolished: you get the 'smartcolour' option that certainly existed in Version 2, but now there's no way to not have that colouring option as it's now the only colouring option.
  • Asking to play a specific recording by its artificially-assigned ID number has been abolished. The ID number of a recording was never invariant: every database refresh would potentially assign new ID numbers to the same recordings. Being able to play specific recordings by pointing at its folder name has been made significantly easier to do in this new version of Giocoso... and I felt this fact alone made the whole concept of play-by-ID no longer relevant.

10.0 Ongoing Changes

For a changelog describing modifications to Giocoso version 3 since its first release, please see this separate page.


[ User Manual Home ]