What is Giocoso?

1.0 What is Giocoso?

Giocoso Version 3 is a gapless, trackless, optionally-randomising command-line FLAC player, intended primarily for the playback of digital classical music, on Windows and Linux.

Which is a bit of a mouthfull! So let's break that down a bit:

  • Gapless: Giocoso plays one FLAC file after another without detectable pause between them, so if you have three movements of a string quartet that are supposed to flow into each other without a break, Giocoso will play that as a continuous stream of music without silence between the movements. Most media players these days can do 'gapless playback', but some do it better than others. Giocoso does it properly.
  • Trackless: Giocoso plays entire folders of music as though they were one composition (which, if you follow my axioms of classical tagging, they should be!) If a "Symphony No. 5" folder happens to contain four files, because the CD they were ripped from regarded the four movements of the symphony as separately-indexed tracks, Giocoso doesn't care: it simply plays all four files in sequence before declaring the symphony as a whole complete. No other music players I can think of behave quite like this! The reasoning is simply that you don't go to a classical music concert and walk out of the concerto after just the first movement -or walk in to it after the first two movements have played just so you can listen to the nice tune in the third movement! Giocoso pays classical music the respect it deserves: composers wrote entire compositions, not 'tracks' or 'movements' that can be ripped from their context and played standalone.
  • Optionally Randomising: Giocoso can be instructed to play specific pieces of music (for example, 'play Peter Grimes' or 'play Fantasia on a Theme of Thomas Tallis'). But it can also be asked to 'play a choral work', or 'play something by Beethoven': in which case, the choice of which specific choral work or Beethoven piece will be a matter of random chance. In this randomised-play mode, you can supply additional filters so that the 'degree of freedom of choice' the randomiser will exercise can be limited: for example, 'Play me Choral works by Prokofiev that last between 30 and 50 minutes'.
  • Command Line: Giocoso has been written to get out of the way and not consume too many computing resources. It therefore runs within a simple terminal session, with instructions given to it by selecting variously numbered menu options. As a concession to making things look 'pretty', Giocoso will by default display the album art associated with the composition it's playing at any given time (assuming you've remembered -or bothered!- to tag the music files with that album art in the first place). Even this can be turned off, however.
  • FLAC Player: Classical music deserves being listened to in excellent audio quality. This means that playing music files which are encoded as MP3, OGG or other lossy audio formats, where some of the music signal is thrown away in order to achieve smaller file sizes on disk, is not of any interest to Giocoso at all. It cannot see such files, much less play them. The only audio format that Giocoso sees, understands and plays is FLAC -the Free Lossless Audio Codec. There are other lossless audio formats in existence of course, such as lossless WMA or the Apple Lossless Audioc Codec (ALAC): but these are or were proprietary, generally tied to a specific operating system platform (WMA=Windows, ALAC=Mac, for example) and may be patent-encumbered. Only FLAC fits the bill, as its name suggests, of being open source, freely available on all platforms, and widely supported.
  • Classical Music Player: To be honest, Giocoso plays FLACs and couldn't care whether a particular FLAC was composed by Johann Sebastian Bach or Madonna: it makes neither moral nor artistic judgments in that regard! There's nothing intrinsically that makes Giocoso only a classical music player, in other words. However, it has been deliberately designed to talk the language of composers and compositions, not albums and tracks -so the music it is most tailored to play correctly is classical music that has been properly tagged with metadata describing composers, performers, compositions and movement titles. The fact that it plays gaplessly and tracklessly also means its playback model most closely resembles that of the classical music concert hall.
  • Windows, Linux and ARM: Giocoso is fundamentally merely a Bash shell script, orchestrating the work of other programs such as metaflac, ImageMagick and ffmpeg. Any computing platform that can run Bash and those extra programs is therefore a suitable platform on which to run Giocoso. Windows 10 and up provides the Windows Subsystem for Linux that allows it to run full-fat Linux 'within' the standard Windows desktop paradigm, so can be persuaded to run Giocoso with little difficulty these days. The Raspberry Pi, despite using ARM CPUs rather than x86-based ones, runs all sorts of Linux distros with success, so it's a usable platform on which to run Giocoso, too.

Another way of describing what Giocoso means to me is simply this: it's a personal 'radio station' for classical music, capable of playing a 'wall' of constantly-varied classical music on a wide variety of platforms and PCs. It helps me discover obscure corners of my music collection that I would otherwise miss (thanks to its randomisation features) and plays a series of whole compositions without me having to intervene to make it do so.

2.0 Why Giocoso?

Linux and Windows are not exactly short of software for playing digital music files! From programs such as VLC, Foobar2000 or the weirdly-named DeaDBeef, there is a media player to cater for, apparently, everyone's whims and wishes. So why bother writing a new one? Because none of the media players on any of the platforms I've mentioned were, I think, designed with classical music in mind and thus none of them were entirely 'right' for me and my classically-inspired requirements. Some of these requirements I've already touched on in Section 1, but they perhaps bear repeating a little here!

2.1 Tracks

Every software music player I know of displays and works with 'tracks'. Here's DeaDBeef playing some Brahms, for example:

Is the display here of any usefulness? To some extent, yes: it's good to know that Brahm's Symphony No. 3 consists of four movements, and it's nice to know each movement's general tempo marking. You could get that information from Wikipedia, of course, or even (perish the thought, I realise) a book! But you can't deny that seeing the information here, within your music player, is convenient.

So no, it's not the display of track information that bothers me. It's the fact that this display invites 'selective clicking' on the individual tracks -or, in other words, partial plays of things, rather than the entire composition that Brahms intended you listen to. UK readers will recognise what I'm talking about if I mention 'Radio 3 v. Classic FM'; Australian readers will similarly spot the similarity of approach if I say '2MBS FM v ABC Classic FM'. The one tends to play whole compositions without interruption; the other tends to play just 'the good bits', without taxing its audience too much 🙂

Now, it's your music and you listen to what and how you like, I suppose -but to my mind, a music player that encourages or invites bad listening habits is not to be recommended! If you take your classical music even slightly seriously, in other words, I don't think you should want to be distracted or tempted by the existence of 'tracks' -and hence my desire to write a trackless music player.

2.2 Optionally Randomising

Over the years, I have got into the bad habit of over-playing some composers and under-playing others. There's nothing morally wrong with doing that! We have favourites, of course, and there's no harm in indulging ourselves with our favourites, whether that's favourite food, favourite drinks or favourite music! But over-doing the favouritism means you miss out on a chance to experience new things and -perhaps- develop new favourites. For a wider musical experience, in other words, I wanted a music player that would make me listen to composers who were not on my list of favourites. Essentially, that meant taking the choice of what to listen to out of my hands -and for that, I needed a music player that would choose to play compositions at random for me, regardless of who had written it. Giocoso's ability to randomise its plays was thus a crucial and key reason for writing it in the first place.

Of course, there are times when I want to choose, specifically, what to listen to: if I feel like a run-through of Bernstein's Candide, I should be able to listen to it and not have the music player randomly select some Mozart instead! So, the ability to not randomise when required was also important to me.

But even when I say, "I want to listen to some Britten", it would be quite handy if the music player would take me at my word and only play Britten's music... but which specific bit of Britten it decides, by more random selection. In other words, I'm after a spectrum from 'totally random' through 'random within a specified preference' all the way to 'not random at all, I'll tell you what to play'. Giocoso fits these requirements, but I don't know of another player that comes close to doing so. So that's another reason why I felt 'writing my own' was required.

2.3 Work with the Metadata

Most other software music players will happily display the metadata tags you embed in your FLAC files when first ripping them from CD, but few seem to be able to work with that metadata. In other words, though I've carefully tagged all my music with composer, composition and performer names, it can be difficult to find a software music player that will easily and consistently let me say 'please find me something composed by Bernstein (and not just conducted by him)'. It is undoubtedly true that a lot of players will let you search for the word 'Bernstein', but they tend to search 'greedily', returning results where the search term can be found in any tag, not just the ones you care about in the moment.

So, for example, the Strawberry music player will certainly let me search for the word 'Bernstein':

...but why are works by Copland, Berg, Milhaud,  Mahler and Wagner appearing in that list? Because Bernstein conducted those recordings, even if he didn't compose them! Now, it's possible with Strawberry and other players I know of to fix this by adding some 'search syntax' to proceedings:

By using the search term 'Composer:Bernstein', you force Strawberry to inspect only the 'composer' tag, and that obviously works to narrow things down nicely. Great! So what's the problem? Well, the problem is that this 'tag:value' search syntax is the way Strawberry does it, but it's not the way all players do it: different music players use different syntax to achieve the same outcome. Here, for example, is how Foobar2000 deals with this situation:

Just typing 'Bernstein' into the filter window (at the bottom of the screen) certainly gets anything with a 'Bernstein' tag somewhere... but this is the original Strawberry result again: it's finding things Bernstein conducted, not just composed. Foobar's syntactical trick to narrow things down to just the stuff he composed is this:

You can see that you have to change the filter text to be in the form of 'field HAS <some value>' or 'field IS <something>' and so on: the syntax is not exactly difficult, but it's different to that used by Strawberry (and other players) and something else to have to remember -and in Foobar2000's case, if you don't type the HAS or IS in upper-case, it won't work at all. It's fiddlier than it ought to be, put it that way! Making you change your search term in order to alter what tags will be inspected by the search seems counterintuitive to me, anyway.

Giocoso Version 3's approach to this is as follows:

By typing the search term against the 'Composer Name' filter, I ensure Giocoso is only looking for music files tagged as having been composed by Bernstein. It's going to ignore anything just conducted by Bernstein and, as a result, the playlist Giocoso generates from this search looks like this:

...and there's not a dose of Mahler or Bartók in sight!

If I fill in the search filter this way instead:

...now I'm asking Giocoso to look for any recording where Bernstein is listed as one of the performers (perhaps as pianist, but most commonly he's going to be the conductor). The playlist this search produces looks as follows:

Same search term, but very different results, with lots of pieces by non-Bernstein composers -simply because Giocoso makes it easy to specify which tags, precisely, you want to search through at any time by merely altering the placement of the search term within the filter screen. The search term itself doesn't change; merely the location where you type it -and there's no weird syntax to get right to ensure the search works, either!

I wanted a music player, in other words, that understood how I'd tagged my music and would work with that tagging strategy to enable meaningful musical discovery possible. Giocoso puts metadata filtering front-and-centre in what it does, and it does it without having to remember syntactical tricks that are different from the tricks used by other players. The meaning of a search filter in Giocoso is given simply by its position on a human-readable form, not because of special keywords and syntax surrounding it.

2.4 Statistics

I am quite fanatical about keeping track of what I've listened to, who my most-listened-to composers are, and so on. Few music players I'm familiar with allow you to build up readily-accessible statistics about your listening habits. Transmitting your play history to Last.fm can certainly help in this regard -but some people might not be too keen on sharing their play histories with the rest of the world in the way that scrobbling does! I therefore wanted a music player that would build up a local play history that could be interrogated and used for analysis of a flexible and extensible nature. As it happens, I then decided to publish this statistical data to my own website in ways which allow easy, graphical visualisation of what I've been listening to (see any of the links under the 'Listening Analysis' menu option at the top of this very page, for example).

I certainly realise that not every classical music listener is going to find this sort of data helpful or even interesting -but I wrote Giocoso to at least provide this data to those for whom it might prove useful.

2.5 Summary

Given all of the above points, the short version is simply this: none of the software music players on Linux or Windows with which I am familiar (and there are lots of them!) met all of these specific needs which I was aware I had -and that's why Giocoso exists! If any of these points ring a bell with you, then you're definitely the target market for Giocoso -and I think you'll find it useful, too.

3.0 Is Giocoso for Everyone?

With all the above in mind, I hope it's clear that Giocoso isn't intended as a general purpose music player that everyone will find appropriate! Whilst music can be pure entertainment, to be sampled and dabbled in, like a plate of petits fours, Giocoso doesn't expect you to be listening to music that way! It plays without interruption; it doesn't display pretty visualizations on your computer screen whilst it's doing it; it puts sound quality above hard disk space; it expects you to have tagged your music files 'properly'; and it expects you to own your music, rather than be streaming it (Giocoso, in fact, has no streaming capabilities at all, except over a local network). It doesn't have to be classical music that you're listening to, but Giocoso was written expecting it to be. If you're the kind of listener that loves classical and jazz, for example, I think you'll find Giocoso a good fit for playing the classical part of your music collection... but I have no idea how well or ill it works with Jazz. I am pretty certain, however, that it won't play well with "pop music", however that might be defined.

Fundamentally, Giocoso is written in the belief that not all music is nails, so not all music players should be hammers! It is a tool tailored for playing certain kinds of music in a particular kind of way. If you don't fit its model, it's not going to fit your requirements, therefore.

4.0 What's with the name?

As a classical music fan, you will probably already know that the word giocoso is a tempo indication that means ‘lively, humorous, joyful’ or, particularly, ‘playful’. I couldn’t think of a better name for something designed to ‘play’ my music collection in a way that brings me joy and makes music choices for me that are always fresh and lively.


[ User Manual Home ]