<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://www.bbritten.com/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://www.bbritten.com/feed.php">
        <title>BBritten.com - softwares:giocoso</title>
        <description>A Voyage Around My Ears</description>
        <link>https://www.bbritten.com/</link>
        <image rdf:resource="https://www.bbritten.com/_media/wiki/dokuwiki.svg" />
       <dc:date>2026-04-03T21:18:30+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/adminmenu"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/changelog"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/controlcmd"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/customvis"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/dbmenu"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/giocoso"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/gioinstall"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/giopro"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/hotkeys"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/linux"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/macos"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/minig"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/playmenu"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/probuild1"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/probuild2"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/proconcepts"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/promdbchoice"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/promenu"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/pulseaudio"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/replaygain"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/rptmenu"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/troubleshoot"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/underplayedcomposers"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/usetips"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/win11"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://www.bbritten.com/_media/wiki/dokuwiki.svg">
        <title>BBritten.com</title>
        <link>https://www.bbritten.com/</link>
        <url>https://www.bbritten.com/_media/wiki/dokuwiki.svg</url>
    </image>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/adminmenu">
        <dc:format>text/html</dc:format>
        <dc:date>2025-11-27T12:23:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>adminmenu</title>
        <link>https://www.bbritten.com/softwares/giocoso/adminmenu</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;the_administration_menu&quot;&gt;The Administration Menu&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/beethoven99.png?w=220&amp;amp;tok=22e484&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;The Administation menu contains options which, in sum, represent a bit of a mish-mash of functionality!
&lt;/p&gt;

&lt;p&gt;
Most of it bears on how the program behaves or goes about the business of selecting music to be played. Other options are concerned with setting the program up correctly to work with your system&amp;#039;s audio hardware or involve resetting that audio hardware when needed. Another very important option allows you to check for whether I&amp;#039;ve released newer versions of the software and to have them automatically downloaded and applied to your system if so.
&lt;/p&gt;

&lt;p&gt;
Links to a detailed description of each menu option are listed below:&lt;br/&gt;
&lt;br/&gt;

&lt;/p&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/adminmenu/updates&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:adminmenu:updates&quot; data-wiki-id=&quot;softwares:giocoso:adminmenu:updates&quot;&gt;Check for program updates&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/adminmenu/settings&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:adminmenu:settings&quot; data-wiki-id=&quot;softwares:giocoso:adminmenu:settings&quot;&gt;Create or Edit the Configuration file&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/adminmenu/excludes&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:adminmenu:excludes&quot; data-wiki-id=&quot;softwares:giocoso:adminmenu:excludes&quot;&gt;Edit the Excludes file&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/adminmenu/exempts&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:adminmenu:exempts&quot; data-wiki-id=&quot;softwares:giocoso:adminmenu:exempts&quot;&gt;Edit the Exempts file&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/adminmenu/licence&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:adminmenu:licence&quot; data-wiki-id=&quot;softwares:giocoso:adminmenu:licence&quot;&gt;Display the Giocoso software licence&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/adminmenu/audio&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:adminmenu:audio&quot; data-wiki-id=&quot;softwares:giocoso:adminmenu:audio&quot;&gt;Test Audio Device configuration&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/adminmenu/pulse&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:adminmenu:pulse&quot; data-wiki-id=&quot;softwares:giocoso:adminmenu:pulse&quot;&gt;Reset PulseAudio Server&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Giocoso 3 Home Page&lt;/a&gt;&lt;/strong&gt; |
&lt;/p&gt;

&lt;/div&gt;

&lt;!-- cachefile /var/www/dokuwiki/data/cache/6/6632381834dfab6cf4ca97bfa488bfc8.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/changelog">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-01T09:06:19+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>changelog</title>
        <link>https://www.bbritten.com/softwares/giocoso/changelog</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;giocoso_version_3_changelog&quot;&gt;Giocoso Version 3 Changelog&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/beethoven99.png?w=220&amp;amp;tok=22e484&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
The Changelog will record code changes to the release version of Giocoso Version 3 as they are themselves scheduled and, eventually, released.
&lt;/p&gt;

&lt;p&gt;
Changes are listed in reverse chronological order (i.e., the most recent releases appear first). 
&lt;/p&gt;

&lt;p&gt;
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 &lt;em&gt;in conjunction with&lt;/em&gt; this Changelog to get a full understanding of the &lt;em&gt;current&lt;/em&gt; program functionality and its capabilities. 
&lt;/p&gt;

&lt;p&gt;
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.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Version 3 Changelog&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_version_3_changelog&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-882&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;giocoso_version_338_-_no_current_scheduled_date&quot;&gt;Giocoso Version 3.38 - No current scheduled date&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Fix&lt;/em&gt;&lt;/strong&gt;: Last release introduced a logo picture size parameter, governing the size of the &amp;#039;Beethoven with Headphones&amp;#039; image and defaulting it to 220&amp;times;220 pixels. On reflection, that is probably much too big for most standard monitor displays, so this release changes the default to 110&amp;times;110 pixels. It remains possible, of course, to set it to any square size you like: it&amp;#039;s just the &lt;em&gt;default&lt;/em&gt; size which changes.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Code modification&lt;/em&gt;&lt;/strong&gt;: Of no practical difference at all, the pieces of code which ensure new shell scripts are downloaded during updates of existing installations has been moved from one shell script to another. It works in exactly the same way as before, but is just differently located.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Version 3.38 - No current scheduled date&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_version_338_-_no_current_scheduled_date&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;883-1657&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;giocoso_version_337_-_march_31st_2026&quot;&gt;Giocoso Version 3.37 - March 31st, 2026&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: The report on composers not played in past 60 days (Reporting menu, Option A) has been enhanced slightly with an additional column showing the number of &lt;em&gt;days.&lt;/em&gt; since that composer&amp;#039;s last play (previously, only a last-played calendar &lt;em&gt;date&lt;/em&gt; was shown: this is now also converted into a &amp;#039;number of days since now&amp;#039; display).
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug-fix&lt;/em&gt;&lt;/strong&gt;: There has long been an ARTSIZE parameter to control how large album artwork embedded into a set of FLACs should be displayed as music plays. It is expressed as a single number (say, 580) which is then treated as an instruction to resize the artwork to be displayed at 580 pixels wide by 580 pixels tall. Poor syntax implementation meant, however, that the resizing was not performed correctly in &lt;em&gt;both&lt;/em&gt; dimensions, but only in one. That has now been fixed. You will still end up with square imagery, sized in both dimensions to the one number of pixels specified in the configuration settings and with (deliberately!) no regard for aspect ratios; it will just now be done correctly!
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: Two new persistent configuration parameters have been added to the configuration screen options: “Program Logo size” (defaults to 220 pixels) and “Program Logo position” (defaults to 0). This last parameter is entered as a negative [to move left] or positive [to move right] integer. For example, an entry of “-2” means &amp;#039;position the logo two characters to the left of its programmed starting position&amp;#039;. These parameters have been necessitated by the realisation that Retina and non-Retina displays render things very differently… and what looks perfect on my iMac looks awful on my Lenovo laptop! Tweaking these two parameters allows you to make the program look good no matter the screen you&amp;#039;re running on.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Minor Enhancement&lt;/em&gt;&lt;/strong&gt;: The software licence is now viewable within a dialog form, rather than with the &lt;strong&gt;less&lt;/strong&gt; utility.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Significant Enhancement / Bug-fix&lt;/em&gt;&lt;/strong&gt;: The logic for doing default searches of music to play (Option 1 on the Play Music) has been significantly revised. As explained &lt;a href=&quot;https://www.bbritten.com/blog/giocoso_random_music_selection_logic_bomb&quot; class=&quot;wikilink1&quot; title=&quot;blog:giocoso_random_music_selection_logic_bomb&quot; data-wiki-id=&quot;blog:giocoso_random_music_selection_logic_bomb&quot;&gt;in this blog piece&lt;/a&gt;, there was a bit of a logic bomb lurking in Giocoso&amp;#039;s random selection code. By ranking per-composer recordings &lt;em&gt;before&lt;/em&gt; deciding whether any recording qualified, on configured selection grounds, to be played, Giocoso was making it very hard for an eligible recording to be actually selected. The code change now makes all eligible recordings capable of selection, meaning that Giocoso will now more easily find a diverse set of qualifying recordings to play. In plain English, Giocoso&amp;#039;s random selection was previously failing to find things to play when it could and should have because it was doing things in a logically over-restrictive way. Now, that won&amp;#039;t be the case.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Modification&lt;/em&gt;&lt;/strong&gt;: The &lt;em&gt;Pro&lt;/em&gt; menu used only to be visible if you&amp;#039;d configured the IP address of a MySQL database that was acting as a Pro database. Now, the Pro menu &lt;strong&gt;item&lt;/strong&gt; is visible all the time, no matter what you&amp;#039;ve configured… but you won&amp;#039;t actually be able to move into the Pro menu unless your configuration is set to point to a Pro database. In other words, if you are sitting on the top &amp;#039;Administration&amp;#039; item, you&amp;#039;ll always &lt;em&gt;see&lt;/em&gt; something labelled “Pro”. If you haven&amp;#039;t configured a Pro server, however, if you tap the right-arrow button you will jump over the Pro menu item and land on &amp;#039;Quit&amp;#039;. Tap the left-arrow key and again you&amp;#039;ll jump over the Pro menu and land back on &amp;#039;Administration&amp;#039;.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Modification/Bug-fix&lt;/em&gt;&lt;/strong&gt;: Some menus have more than 9 items (for example, Reporting, which had items A and B in addition to nine numbered items). Those extra items were inadvertently assigned letters which conflict with the top-menu items: for example, tapping &amp;#039;A&amp;#039; to produce the &amp;#039;Composers not played in past 60 days&amp;#039; report conflicted with the &amp;#039;A&amp;#039; for Administration menu move. That has now been resolved by making sure 10th and subsequent items do not use letter shortcuts that conflict with anything else. An altogether worse bug was that if you ever landed on the Pro menu, no other top menu options worked: you could tap &amp;#039;D&amp;#039; to jump to the Database Management menu and absolutely nothing would happen! That has now been fixed.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: The &lt;strong&gt;Administration&lt;/strong&gt; menu gets a new &lt;strong&gt;Option 8: Change the program colour scheme&lt;/strong&gt;. This brings up a form that lets you assign colour numbers to each of the Giocoso program display elements and thereby change the look of the program to something that suits you better than the defaults I designed it with:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-27_at_17.47.14.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-27_at_17.47.14.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-27_at_17.47.14.png?w=600&amp;amp;tok=cd8231&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Here, for example, I&amp;#039;m saying I want the Program logo and boilerplate text to appear bright red, rather than it&amp;#039;s default &amp;#039;normal cyan&amp;#039;. The result would be a rather garish confection like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-27_at_17.50.07.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-27_at_17.50.07.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-27_at_17.50.07.png?w=600&amp;amp;tok=4a7737&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Giocoso is thus brought into line with all my other software programs and now thereby caters to those users who don&amp;#039;t use jet-black terminal emulator colour profiles.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Version 3.37 - March 31st, 2026&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_version_337_-_march_31st_2026&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1658-6837&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;giocoso_version_336_-_march_18th_2026&quot;&gt;Giocoso Version 3.36 - March 18th, 2026&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug-fix&lt;/em&gt;&lt;/strong&gt;: Giocoso is written in the United Kingdom, where we expect numbers to be written as “1.43”, using a full-stop as the decimal point. Trouble is, anyone using Giocoso in Europe (for example) would expect that to be written as “1,43” with a comma as the decimal point. European operating systems presented with “1.43” will declare it to be an invalid number and mayhem results. This has recently come to light as an example of UK small-mindedness (and my inability to think globally) as a result of a user in Germany (or at least, using a German locale on a Tuxedo &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;) encountering an &amp;#039;invalid number&amp;#039; error when trying to implement Giocoso&amp;#039;s ReplayGain functionality. This has now been corrected, by forcing Giocoso to use a locale in which full-stops are regarded as &amp;#039;correct&amp;#039;, no matter what the wider operating system may think. My thanks to Helmut for the bug report and working with me to confirm the nature of the problem and success of the fix. If users in other non-UK lands have equally exotic number representation issues, this fix should resolve it for them too. 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug-fix&lt;/em&gt;&lt;/strong&gt;: Tiny issue, but the Aggregate Statistics report mentioned &amp;#039;Stat&amp;#039; in one section and &amp;#039;stat&amp;#039; in another: the inconsistency in capitalisation has now been resolved.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug-fix&lt;/em&gt;&lt;/strong&gt;: When reporting a completed play to the Giocoso Pro database, macOS would not identify itself correctly, resulting in the os_type column in the GLOBAL_PLAYS table remaining blank. It now reports &amp;#039;macOS &lt;em&gt;xxxxx&lt;/em&gt;&amp;#039; correctly, where the &amp;#039;xxxxx&amp;#039; bit will be &amp;#039;Tahoe&amp;#039;, &amp;#039;Sequoia&amp;#039;, &amp;#039;Sonoma&amp;#039;, &amp;#039;Ventura&amp;#039; and so on.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;New Feature&lt;/em&gt;&lt;/strong&gt;: MacOS can now do PulseAudio playback. That is, you can run Giocoso on your desktop iMac or Mac Mini and have the audio play via some other PC anywhere on your network. It&amp;#039;s a bit fiddly to configure (article incoming!!), but so long as your Mac has the environment variable PULSE_SERVER set, and has a version of ffmpeg installed that works with PulseAudio, and there&amp;#039;s a remote PC configured to act as a PulseAudio server, then you press play on the iMac and the sound comes out via a Debian box or an Arch PC.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;New Feature&lt;/em&gt;&lt;/strong&gt;: Not specific to macOS at all, but a consequence of me tinkering with the code required to achieve PulseAudio playback generally, even on Linux: there is a new configuration parameter:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-12_at_15.49.29.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-12_at_15.49.29.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-12_at_15.49.29.png?w=600&amp;amp;tok=9e699b&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This is under the &amp;#039;text entries&amp;#039; parameters: &lt;strong&gt;PulseAudio Server IP Address&lt;/strong&gt; is the IP address of the PC to which you wish your music playback to be directed over the network. It works in conjunction with the later (and long-existing) yes/no parameter to &lt;em&gt;Force the use of PulseAudio&lt;/em&gt;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-12_at_15.51.25.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-12_at_15.51.25.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-12_at_15.51.25.png?w=600&amp;amp;tok=4187df&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
In all earlier releases of Giocoso, if you set &amp;#039;force PulseAudio&amp;#039; to yes, the server to which audio would be sent would be dictated by whatever you had manually remembered to set with the PULSE_SERVER environment variable before you even launched Giocoso. Now, the IP address you set for the new &amp;#039;PulseAudio IP Address&amp;#039; will &lt;em&gt;override&lt;/em&gt; any environment variable you may have set. Note that if you type an invalid IP address entry into this new parameter field, it is ignored: type “192.168.137.876”, for example, and no valid PulseAudio server will have been specified at all. 
&lt;/p&gt;

&lt;p&gt;
Also note that if you set a valid value for the Server IP address, but do not &lt;em&gt;also&lt;/em&gt; set &amp;#039;force PulseAudio&amp;#039; to yes, then the IP address is ignored: audio being transmitted over the home network requires &lt;strong&gt;both&lt;/strong&gt; parameters to be set, not just one. New documentation for this feature is being prepared: PulseAudio is a complex subject! The new parameters do allow, however, for a powerful desktop PC to be the &amp;#039;playing PC&amp;#039;, but for sound to be heard coming out of a relatively trivial Raspberry Pi that happens to be hooked up to your DAC, amplifier and speakers! Being able to modify the IP address &amp;#039;inside&amp;#039; Giocoso also makes it convenient to broadcast audio to a variety of &amp;#039;player PCs&amp;#039; dotted around your house. If you need music playing in your greenhouse, you can set the IP address to 192.168.0.52; you come back inside and need music in your kitchen, just adjust the IP address to 192.168.0.76 and hit &amp;#039;play&amp;#039; once more… Sort of like a Sonos multi-room capability, but without the huge cost or proprietariness!
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Significant New Feature&lt;/em&gt;&lt;/strong&gt;: A minimal player mode has been created:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-14_at_17.59.28.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-14_at_17.59.28.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-14_at_17.59.28.png?w=400&amp;amp;tok=e0f643&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This is essentially a cut-down Play menu that lets you initiate a &amp;#039;default play&amp;#039; only: no filtered search allowed, no playing music directly in a folder, etc., etc. You get a standard, randomised search for something to play that depends on what you&amp;#039;ve configured in your persistent configuration file (and which requires the full-blown Giocoso interface to modify). Once play has been initiated, the display changes to this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-13_at_11.02.18.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-13_at_11.02.18.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-13_at_11.02.18.png?w=400&amp;amp;tok=2bcdc6&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You get to see information about the music playing but you don&amp;#039;t get any album art or play duration/countdown data as you would in the full-blown Giocoso interface: this is for kicking off music playback using a mobile telephone or tablet, on a remote device, over ssh. Usually such terminal emulators don&amp;#039;t handle graphics display in-terminal at all, so the lack of graphics components in this display is completely deliberate. The lack of a countdown timer is more a function of the lack of space on such terminal displays, to be fair!
&lt;/p&gt;

&lt;p&gt;
This new player mode essentially takes the place of Mgiocoso, which is now therefore deprecated (it&amp;#039;s still there for now and works as ever it did, but it will be removed in a future version). The new feature is enabled by running the command &lt;strong&gt;minig&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;New Feature&lt;/em&gt;&lt;/strong&gt;: Related to this new mini-player mode, the “Set up PulseAudio Server details” allows you to configure up to five &amp;#039;audio sinks&amp;#039;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-14_at_18.01.23.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-14_at_18.01.23.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-14_at_18.01.23.png?w=400&amp;amp;tok=4ba353&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Free-form text labels are paired with IP addresses (and stored in the &lt;strong&gt;local&lt;/strong&gt; Giocoso database as the table PULSESINKS). These can then be used when taking the new mini-player option 1, to &lt;em&gt;select&lt;/em&gt; a PulseAudio sink to &amp;#039;play to&amp;#039;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2026-03-14_at_18.04.08.png&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_2026-03-14_at_18.04.08.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2026-03-14_at_18.04.08.png?w=400&amp;amp;tok=f335cc&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
If your Giocoso installation is configured to use PulseAudio, whatever server/sink you select on this screen &lt;em&gt;overrides&lt;/em&gt; the one exported as the PULSE_SERVER in your shell environment and the one configured in the new Giocoso persistent parameter file, for the purposes of music playback initiated by the mini-player. In other words, there&amp;#039;s a hierarchy of specifying which PulseAudio server receives this Giocoso&amp;#039;s audio stream: the PULSE_SERVER environment variable, over-ridden by the new configuration parameter setting, over-ridden by this mini-player setting.
&lt;/p&gt;

&lt;p&gt;
Note that if you &lt;strong&gt;don&amp;#039;t&lt;/strong&gt; set &amp;#039;force the use of PulseAudio&amp;#039; to &amp;#039;yes&amp;#039; in the main configuration file, it won&amp;#039;t matter what PulseAudio server you pick here: playback will always be directed to the &lt;em&gt;local&lt;/em&gt; machine on which the miniplayer is running. Only when PulseAudio is forced will the server selection kick in and direct playback to whatever sink/server you&amp;#039;ve specified.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug-fix&lt;/em&gt;&lt;/strong&gt;: On the &lt;strong&gt;Reporting&lt;/strong&gt; menu, Option A is said to list &amp;#039;Composers not played in the past 60 days&amp;#039;. The report then went on to list composers not played in the past &lt;em&gt;120&lt;/em&gt; days. The report code has been adjusted to match what the menu says it will list!
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Changed Feature&lt;/em&gt;&lt;/strong&gt;: This is possibly a bug-fix too! I&amp;#039;ve long known that if your terminal didn&amp;#039;t use a jet-black background then the Giocoso program logo would appear awkwardly in the terminal:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-14_at_21.34.58.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-14_at_21.34.58.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-14_at_21.34.58.png?w=600&amp;amp;tok=97da0d&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The issue is simply that I put that logo together in some art package or other from &amp;#039;components&amp;#039; lying about the place without a lot of thought… and it&amp;#039;s black background thus got &amp;#039;baked&amp;#039; in-place for evermore, meaning it sticks out like a sore thumb when your terminal background &lt;em&gt;isn&amp;#039;t&lt;/em&gt; jet black to match. It&amp;#039;s not exactly a show-stopper, but it&amp;#039;s less than great for light-background terminals and the like. So: welcome to the new, almost-completely text-based logo:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2026-03-14_at_21.45.40.png&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_2026-03-14_at_21.45.40.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2026-03-14_at_21.45.40.png?w=600&amp;amp;tok=9dc988&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I am not a fan of &lt;abbr title=&quot;American Standard Code for Information Interchange&quot;&gt;ASCII&lt;/abbr&gt; art, but at least it keeps everything completely text-based and thus truly independent of the terminal background. Other terminal colour schemes work well, too:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/screenshot_2026-03-14_at_21.47.54.png&quot; class=&quot;media&quot; title=&quot;software:screenshot_2026-03-14_at_21.47.54.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/screenshot_2026-03-14_at_21.47.54.png?w=600&amp;amp;tok=778a11&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
But some will still be a disaster -but not for particularly logo-related reasons:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-14_at_21.48.39.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-14_at_21.48.39.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-14_at_21.48.39.png?w=600&amp;amp;tok=c9519d&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This is not the logo looking odd but the entire colour scheme of the terminal working against Giocoso&amp;#039;s choice of text colours. The only fix for that remains choosing a different terminal colour profile, I&amp;#039;m afraid!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Version 3.36 - March 18th, 2026&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_version_336_-_march_18th_2026&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;6838-15914&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;giocoso_version_335_-_february_22nd_2026&quot;&gt;Giocoso Version 3.35 - February 22nd, 2026&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug-fix&lt;/em&gt;&lt;/strong&gt;: Reports were re-coded carefully to work on macOS in Version 3.34… &lt;em&gt;provided&lt;/em&gt; you were using Giocoso Pro features! If you were only using a local database, then some of the reports would have failed to display properly. Now fixed: all reports run perfectly on macOS in both local and Pro modes.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: A new Report (&lt;strong&gt;Option A&lt;/strong&gt; on the Reporting menu) has been created that lists all composers who haven&amp;#039;t been played within the past 120 days (an arbitrary cut-off point, I&amp;#039;ll admit): these might be composers you want to force playback for.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: Further improvements in code to make Giocoso a first-class macOS citizen! A specific example: being able to tap the &amp;#039;B&amp;#039; key on any menu and have Sqlitebrowser launch, if that program is already installed. You could do that only on Linux before, but now it works on macOS, too.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Significant Enhancement&lt;/em&gt;&lt;/strong&gt;: Giocoso&amp;#039;s reporting capabilities have been overhauled. All reports now output as &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; to your system&amp;#039;s default browser, with polished and responsive formatting. For example:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-13_at_19.06.43.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-13_at_19.06.43.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-13_at_19.06.43.png?w=650&amp;amp;tok=a57f1f&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: You now no longer have to remember that Pro table names have a global_ prefix when doing Advanced SQL Reporting (&lt;strong&gt;Reporting&lt;/strong&gt; menu, &lt;strong&gt;Option 5&lt;/strong&gt;). In previous versions, you had to know that when querying in global mode, it was “select * from &lt;strong&gt;global_plays&lt;/strong&gt;”, but in local mode it&amp;#039;s just “select * from &lt;strong&gt;plays&lt;/strong&gt;”. Similarly, you had to know whether you were supposed to be querying &lt;strong&gt;global_recordings&lt;/strong&gt; or just &lt;strong&gt;recordings&lt;/strong&gt;. That&amp;#039;s all handled for you now: if you query “global_plays” when in non-Pro mode, your query will be silently re-written to mention “plays”. Likewise, querying “recordings” or “plays” when in Pro mode, your SQL will be silently re-written to refer to “global_recordings” or “global_plays”. The short version is that if all your queries mention just “plays” and “recordings”, they&amp;#039;ll work no matter which reporting mode you&amp;#039;re in.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;New Feature&lt;/em&gt;&lt;/strong&gt;: A new configuration parameter has been created to allow you to specify your preferred browser in which to open Giocoso reports:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-14_at_20.52.36.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-14_at_20.52.36.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-14_at_20.52.36.png?w=600&amp;amp;tok=6be671&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The new parameter is the last one on the first page: &lt;strong&gt;Preferred browser&lt;/strong&gt;. If you leave this field blank, Giocoso will use whatever your system&amp;#039;s default browser is. If you specify a name here, however, as I have done, then that will be the browser Giocoso uses instead (if it exists). If you name a browser that doesn&amp;#039;t exist (for example, you accidentally type “fyrefox”) then Giocoso will fall back to using the system&amp;#039;s default browser instead. This flexibility means that the new reporting functionality might produce results like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-14_at_20.51.40.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-14_at_20.51.40.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-14_at_20.51.40.png?w=600&amp;amp;tok=0fe370&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…or like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-14_at_21.00.16.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-14_at_21.00.16.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-14_at_21.00.16.png?w=600&amp;amp;tok=3e05cc&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
It&amp;#039;s the same data, just presented by (in the first case) Firefox and (in the second) w3m browsers: the option to keep things within the terminal window is still there, in other words. Incidentally, w3m has become a dependency of Giocoso&amp;#039;s: it will attempt to install it as part of its own install, though if it cannot do so for one reason or another, reporting capabilities will not be compromised.
&lt;/p&gt;

&lt;p&gt;
&lt;em class=&quot;u&quot;&gt;&lt;strong&gt;New Feature&lt;/strong&gt;&lt;/em&gt;: A new selection filter has been added to the form you see when you take the &lt;strong&gt;Play Music&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-16_at_17.30.49.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-16_at_17.30.49.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-16_at_17.30.49.png?w=600&amp;amp;tok=5fafa9&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The new filter says “Find me composers who haven&amp;#039;t been played in X number of days and play some of their music for me”. It is an unusual filter in one sense because it &lt;em&gt;negates&lt;/em&gt; every other filter you may have set on the form. That is, it cannot be combined with any of the other filters: if you set the &amp;#039;play me long-unplayed composers&amp;#039; filter &lt;strong&gt;and&lt;/strong&gt; the &amp;#039;where the maximum duration is 60 minutes&amp;#039;, you will get long-unplayed composers&amp;#039; music however long it plays for. The maximum duration filter will be silently ignored (and so will any other filter you may have set).
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: A new “timeout” parameter has been applied to all attempted connections to a Pro database (when one is in use, obviously). If your network was dodgy or you accidentally specified the wrong IP address for the Pro database, Giocoso would keep locking up and being unresponsive for up to around 10 seconds, until the database connection attempt failed (ask me how I know!). A new “connection-timeout” of 1 second has been applied to all attempts at connecting to a Pro database, so there is now only a momentary wait before the connection fails. This doesn&amp;#039;t much help you, of course, in the sense that not being able to connect to a Pro database rather spoils the fun of using Giocoso Pro: nothing works! But at least your system doesn&amp;#039;t now just appear to hang for no apparent reason.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: A streamlined upgrade procedure has been implemented. It&amp;#039;s simpler and faster than before.
&lt;/p&gt;

&lt;p&gt;
There has been quite a flurry of new Giocoso releases lately: that&amp;#039;s largely a function of the fact that I&amp;#039;ve been getting it to work on macOS and, in the process, tidying up quite a few long-standing irritations. I think it fair to say that this phase is now over: I will certainly keep releasing new versions as the need arises (and bugs are pointed out to me!) but, as of right now, I&amp;#039;m fairly convinced that Giocoso is working as I want it to, on all the platforms I need it to, and I don&amp;#039;t, therefore, anticipate very many new releases in the immediate future. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Version 3.35 - February 22nd, 2026&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_version_335_-_february_22nd_2026&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;15915-21622&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;giocoso_version_334_-_february_8th_2026&quot;&gt;Giocoso Version 3.34 - February 8th, 2026&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement/New Feature&lt;/em&gt;&lt;/strong&gt;: Giocoso has acquired ReplayGain playback capability. &lt;a href=&quot;https://en.wikipedia.org/wiki/ReplayGain&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://en.wikipedia.org/wiki/ReplayGain&quot; rel=&quot;ugc nofollow noopener&quot;&gt;ReplayGain&lt;/a&gt; is a standard way of describing how much to boost an audio signal by &lt;em&gt;at playback time&lt;/em&gt;, dynamically, with the information stored in special metadata tags. If enabled in the program configuration settings, Giocoso will now read the REPLAYGAIN_ALBUM_GAIN tag and apply the value it has been assigned to increase the playback volume by that amount. For example, when shown this set of FLACs:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/semplice/screenshot_2026-01-19_at_20.04.07.png&quot; class=&quot;media&quot; title=&quot;software:semplice:screenshot_2026-01-19_at_20.04.07.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/semplice/screenshot_2026-01-19_at_20.04.07.png?w=600&amp;amp;tok=d287a1&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…Giocoso will automatically play the music back with a +10.73dB volume boost (although it applies a hard cap, so that only a boost of +7.5dB will take place: this avoids making too dramatic a volume change to something the recording engineer presumably mastered excessively quietly for a reason).
&lt;/p&gt;

&lt;p&gt;
To support the new functionality, the Administration menu, Option 2 Create or Edit the Configuration file gets a new option:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-01-19_at_21.37.20.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-01-19_at_21.37.20.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-01-19_at_21.37.20.png?w=650&amp;amp;tok=9a22f5&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The parameter takes a value of yes or no: &lt;strong&gt;no is the default&lt;/strong&gt;. If set to yes &lt;em&gt;and if the first FLAC in a folder contains a REPLAYGAIN_ALBUM_GAIN metadata tag&lt;/em&gt;, then the appropriate volume boost will be dynamically applied. If set to no &lt;em&gt;or&lt;/em&gt; there is no REPLAYGAIN_ALBUM_GAIN tag, then no dynamic volume boost will take place.
&lt;/p&gt;

&lt;p&gt;
Playback of music will now show whether ReplayGain is being applied or not:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-04_at_16.51.43.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-04_at_16.51.43.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-04_at_16.51.43.png?w=650&amp;amp;tok=ed3c25&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The last line of descriptive text on the left of the screen will say &amp;#039;ReplayGain Applied: None“ if no REPLAYGAIN_ALBUM_GAIN tag exists or if the new configuration parameter is set to a value of “no”.
&lt;/p&gt;

&lt;p&gt;
Note that ReplayGain uses a completely different acoustic model than simply boosting a FLACs audio to its maximum loudness without distortion. As a result, if you&amp;#039;ve previously volume boosted your FLACs using Semplice&amp;#039;s &amp;#039;real&amp;#039; mode, you may well now see this happen when playing those FLACs in Giocoso:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-04_at_17.26.13.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-04_at_17.26.13.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-04_at_17.26.13.png?w=650&amp;amp;tok=bbee22&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That ”-0.18 dB“ Replay “gain” tells you that the physical FLAC has been boosted to a non-distorting loudness that ReplayGain considers too loud. That&amp;#039;s absolutely fine: it doesn&amp;#039;t mean the physical volume boost has done any harm to your FLACs. They are simply too loud for ReplayGain&amp;#039;s taste (which is hard-coded to think that an 89dB volume is just fine).
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Minor Enhancement&lt;/em&gt;&lt;/strong&gt;: The &lt;strong&gt;mgiocoso&lt;/strong&gt; script now displays what ReplayGain (if any) has been applied for playback of the currently-playing FLAC:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/semplice/screenshot_2026-01-22_at_18.50.26.png&quot; class=&quot;media&quot; title=&quot;software:semplice:screenshot_2026-01-22_at_18.50.26.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/semplice/screenshot_2026-01-22_at_18.50.26.png?w=400&amp;amp;tok=8814b2&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
If no ReplayGain is being applied, the line will display a value of “none”.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Interface Change&lt;/em&gt;&lt;/strong&gt;: The program display has been modified slightly during playback of music, as you&amp;#039;ve seen in the above screenshots. The composition details are now delineated apart from the &amp;#039;recording details/history&amp;#039; part of the display. A new “days since last played” item of data also makes an appearance (which will also display an approximate conversion into a years-since-last-played figure, if it&amp;#039;s been more than 365 days), as well as the new ReplayGain data.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Minor Bug Fixes&lt;/em&gt;&lt;/strong&gt;: Various fixes to code have been implemented to allow Giocoso to run on the latest versions of macOS running on Apple Silicon chips and using Homebrew packages to satisfy software dependencies. In particular, it was discovered that the default ImageMagick installation on these more modern Macs could not do text manipulation and would trigger Giocoso to fail in ugly ways. That is all now handled by the Giocoso installation script and by subtler code dealing with the production of the &amp;#039;caption bar&amp;#039; under any album art that is displayed during playback. On macOS, album art captions are now always coded to use the built-in Palatino font.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug Fixes&lt;/em&gt;&lt;/strong&gt;: The &lt;strong&gt;Reporting&lt;/strong&gt; menu, &lt;strong&gt;Options 6, 7, 8 and 9&lt;/strong&gt; had a bug in them that prevented reports from displaying at all on macOS (because they used a Linux-ism to open the reports in the system&amp;#039;s default browser). That has now been resolved and those reports will now also open in macOS&amp;#039; default browser, too.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: Not that anyone would really notice, but the code controlling the playback of music has been re-factored to make maintenance easier in the future. 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Major Enhancement&lt;/em&gt;&lt;/strong&gt;: Mgiocoso is Giocoso&amp;#039;s optional “control panel”: you run it on a mobile device, for example, to be able to send control commands to a playing Giocoso session (i.e., tell it to pause, resume, autostop or terminate etc). If you need the functionality (such as being able to see precisely what is playing on a headless Raspberry Pi that&amp;#039;s playing away in a drawer), it&amp;#039;s a nice tool. It was written in a hurry, however, and the display &amp;#039;flashed&amp;#039; repeatedly every 5 seconds as the thing re-checked what the playing session was doing. The whole thing has now been re-written to be much more intelligent about when it updates its display. It also acquires “ReplyGain” and “Days since last play” data in its display. Mgiocoso now runs properly on macOS, too:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-05_at_18.43.58.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-05_at_18.43.58.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-05_at_18.43.58.png?w=650&amp;amp;tok=248798&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: If you are running in Pro mode, a fast refresh to pick up new recordings has always triggered a &lt;em&gt;complete&lt;/em&gt; re-build of the Pro server&amp;#039;s copy of the recordings table. This means you discover 3 new recordings locally… but then have to endure loading 17000 records to the Pro server over the network! The new feature in this release of Giocoso is that fast refreshes only load the newly-discovered recordings to the remote database. If it happens that the global database knows about recordings that no longer exist in the local database (perhaps because you moved them to a different physical path or re-tagged them) then the fast refresh process now also deletes out the &amp;#039;unwanted&amp;#039; recordings from the global database, thereby keeping local and remote databases &amp;#039;in sync&amp;#039;. The result is a considerably faster remote data load. Full local refreshes still completely re-load the remote database, of course.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Version 3.34 - February 8th, 2026&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_version_334_-_february_8th_2026&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;21623-27937&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;giocoso_version_333_-_january_1st_2026&quot;&gt;Giocoso Version 3.33 - January 1st, 2026&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Minor Enhancement&lt;/em&gt;&lt;/strong&gt;: The font size used to generate the captions for display under the album art display when music is playing has always been fixed (at 14 or 16pt, depending on certain factors). On high-resolution screens or when Kitty graphics are used to do the artwork display, this is problematic: the caption text tends to come out much too small when you start increasing the display size of the artwork itself. This is now not the case. Giocoso will now take the configured artwork display size (for example, 500, meaning “500px x 500px), divide by 100 (i.e., 5 in this case) and multiply by 4 to give a final text size of 20pt. Change the artwork size to, say, 600&amp;times;600 and the caption text point size will become 24pt (i.e., 6*4). This seems to yield acceptable results on all manner of screen resolutions and with varying artwork size configurations. On a related note, the caption panel itself was also always previously fixed at 45 pixels tall: that looks absurdly small when album art is displayed at sizes of 600 or more pixels. Accordingly, it too is now sized dynamically to be as wide as the album art work and as tall as 10% of that. That is, if you set album art to display at 600 pixels, the caption bar will be 600 pixels wide and 60 tall; set a size of 475 and the caption bar will be 475&amp;times;47 and so on.
&lt;/p&gt;

&lt;p&gt;
The difference is subtle, but apparent:
&lt;/p&gt;

&lt;p&gt;
Here&amp;#039;s the before-shot, when caption bar height and text point size were fixed:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/blog/screenshot_2025-12-16_at_14.00.57.png&quot; class=&quot;media&quot; title=&quot;blog:screenshot_2025-12-16_at_14.00.57.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/blog/screenshot_2025-12-16_at_14.00.57.png?w=650&amp;amp;tok=7eff27&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…where I think we can agree that the two-line caption under the album art is a bit spidery, a tad small and quite hard to read. And here&amp;#039;s the revised version:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/blog/screenshot_2025-12-16_at_14.02.14.png&quot; class=&quot;media&quot; title=&quot;blog:screenshot_2025-12-16_at_14.02.14.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/blog/screenshot_2025-12-16_at_14.02.14.png?w=650&amp;amp;tok=5bcd38&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…where the caption is taller, the text is in a larger font and it&amp;#039;s all a bit more legible.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug Fix&lt;/em&gt;&lt;/strong&gt;: From the screenshots above, you&amp;#039;ll notice that Giocoso, when running on macOS, was not doing a very good job at presenting the &amp;#039;Selection 2 of 2&amp;#039; data in the top right-hand corner of the program display. There, you&amp;#039;ll see it padding the first number with zeroes and the second with spaces …and padding with enough spaces or zeroes to represent a 5-digit number in each case. Not a good look …and entirely down to the variables involves being treated as strings, not numbers. This has now been corrected, and Giocoso on macOS displays the counts much more appropriately:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/blog/screenshot_2025-12-16_at_14.57.50.png&quot; class=&quot;media&quot; title=&quot;blog:screenshot_2025-12-16_at_14.57.50.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/blog/screenshot_2025-12-16_at_14.57.50.png?w=650&amp;amp;tok=e81e68&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Minor Enhancements&lt;/em&gt;&lt;/strong&gt;: Other minor tweaks and improvements to the way Giocoso installs and runs on macOS have been made, in light of further testing on more modern &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; releases, and with due regard to the difference between the way Homebrew and MacPorts work.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Significant Enhancement&lt;/em&gt;&lt;/strong&gt;: Screen redrawing has always been fairly slow, such that on less powerful computers (such as Raspberry Pi, or old Intel hardware) the screen could seem to &amp;#039;flash&amp;#039; annoyingly when, for example, you tapped along the top menu options (from Play to Database to Reporting, for example). Sometimes, screen refreshes were so slow to occur that you&amp;#039;d be able to see escape sequences (such as “&lt;strong&gt;^[[C&lt;/strong&gt;”) displayed on the screen as menu navigation took place, making things very ugly indeed. Accordingly, the screen redrawing code has been completely overhauled and now the program responds much more cleanly and swiftly to events that trigger screen redraws. The result is that even on low &lt;abbr title=&quot;specification&quot;&gt;spec&lt;/abbr&gt; hardware, Giocoso now &amp;#039;flashes&amp;#039; very infrequently and the random appearance of escape sequences on screen should almost never occur. This is achieved basically by replacing calls to the external “tput” utility with a pure Bash approach that keeps everything within the one Bash session, resulting in much less context switching on the CPU, and hence a swifter-feeling interface.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug Fix&lt;/em&gt;&lt;/strong&gt;: The new handling of Kitty graphics in Version 3.32 introduced a logic error which prevented the display of the program logo properly under many non-kitty-related conditions. Now fixed: the logo should display properly in all terminals that support in-terminal display of either sixel or kitty graphics.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug Fix&lt;/em&gt;&lt;/strong&gt;: I recently increased my &amp;#039;timebar&amp;#039; parameter from 720 hours (basically, 30 days) to 1440 (60 days). If I play Mahler on January 1st, he can&amp;#039;t be played again until March 1st, give or take, unless especially exempted. Unfortunately, I&amp;#039;d forgotten that back in the dim mists of time, I couldn&amp;#039;t conceive why anyone would ever want to bar a composer from being replayed beyond 999 hours: any time bar submitted larger than that limit was automatically set to a paltry 6 hours… which is why I suddenly started hearing Bruckner and Perti just days after having played them! In this version, the upper limit on the time bar has been completely removed. One of 1000 hours or above will work just fine… though, bear in mind, a huge time bar will potentially leave you with very few candidate composers for the next play!
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement/Bug Fix&lt;/em&gt;&lt;/strong&gt;: On macOS, support for running Giocoso in Pro mode was extremely hit-and-miss. If you were using a very old version of MariaDB client to talk to your Pro Server (as you would if you had installed MariaDB via MacPorts on old hardware) then connections to the Pro server would fail to be established. That&amp;#039;s because Giocoso really expects you to be using a modern client and thus be aware of the –skip-ssl component of a database connection string. Ancient versions of MariaDB had no idea what ssl connections to a database were and therefore choked on that –skip-ssl parameter: no Pro for them! If you manually removed that bit of the connection string to avoid this, but were using a modern version of MariaDB on more modern hardware, the MariaDB client would again choke, this time because failure to mention –skip-ssl would stop the database connection being made. The new version includes code which checks whether your MariaDB client understands ssl connections at all: if it does, it tells it to skip using them; if it doesn&amp;#039;t, it simply doesn&amp;#039;t mention them. All macOS Giocoso Pro connections thus work correctly, no matter how you installed your MariaDB client or how modern or old it is. This conceivably benefits ancient Linux distros too, though I&amp;#039;ve never met one in the wild with client software as old as it is on my iMac!
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement/Bug Fix&lt;/em&gt;&lt;/strong&gt;: On macOS, when using a &amp;#039;Magic Mouse&amp;#039;, accidental swipes left/right on the mouse would produce a trail of visible escape characters and garble the main Giocoso program display. Some of those escape characters could also be interpreted to mean &amp;#039;launch Sqlitebrowser&amp;#039; or &amp;#039;Enable/Disable Autostop&amp;#039;, meaning it wasn&amp;#039;t just visually annoying but could also affect program functionality: it was very annoying, basically! That is now fixed. New user-input handling code means that mouse (or trackpad) swipes are completely ignored and new ttype control means that the escape characters generated by such swipes are not echoed across the screen.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Version 3.33 - January 1st, 2026&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_version_333_-_january_1st_2026&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;27938-35055&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;giocoso_version_332_-_december_11th_2025&quot;&gt;Giocoso Version 3.32 - December 11th, 2025&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;General code tidying&lt;/em&gt;&lt;/strong&gt;: 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 ]] &amp;amp;&amp;amp; [[ $b == text ]], it&amp;#039;s cleaner to do if [[ $a == some &amp;amp;&amp;amp; $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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Minor Enhancement&lt;/em&gt;&lt;/strong&gt;: When playing music, Giocoso now blanks out the program&amp;#039;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&amp;#039;t now happen.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Minor Bug Fix&lt;/em&gt;&lt;/strong&gt;: If your graphics hardware is ancient, Giocoso could emit the following error when using the &amp;#039;B&amp;#039; key to launch the Sqlitebrowser database querying tool: &lt;em&gt;MESA-INTEL: warning: Haswell Vulkan support is incomplete […] Some incorrect rendering might occur because the selected Vulkan device […] doesn&amp;#039;t support base Zink requirements.&lt;/em&gt; 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&amp;#039;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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug Fix&lt;/em&gt;&lt;/strong&gt;: 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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Bug Fix&lt;/em&gt;&lt;/strong&gt;: The calculation of the &amp;#039;rechashvalue&amp;#039; for a played piece of music could be wrong if the composition or composer name  contained a single quote (e.g., Vincent d&amp;#039;Indy). This would mean that the program display would claim that there were &amp;#039;Previous plays: 0&amp;#039; 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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Minor Enhancement/Functionality Change&lt;/em&gt;&lt;/strong&gt;: 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 &amp;#039;sight&amp;#039; of what music you&amp;#039;re listening to. The new feature is that you can press the “Z” key (or lower-case &amp;#039;z&amp;#039;) at any time to re-display the standalone album art. If it&amp;#039;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 &lt;strong&gt;Administration&lt;/strong&gt; menu (option 6: &amp;#039;Re-display Album Art in pop-out window&amp;#039;) that was intended to achieve the same sort of thing, but it&amp;#039;s now been made redundant, so that option has disappeared. Other menu items in the Administration menu have been re-numbered accordingly.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Minor Enhancement/Bug Fix&lt;/em&gt;&lt;/strong&gt;: Sometimes when quitting Giocoso, the terminal might get &amp;#039;stuck&amp;#039; and appear unresponsive. You&amp;#039;d type things at the command line, but you wouldn&amp;#039;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 &amp;#039;reset&amp;#039; on quitting, which restores full functionality to the terminal: what you go on to type will display normally.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Major Enhancement&lt;/em&gt;&lt;/strong&gt;: For various reasons, Konsole and other terminals that &lt;em&gt;used&lt;/em&gt; to display in-terminal graphics have stopped doing so on specific distros. As described &lt;a href=&quot;https://www.bbritten.com/blog/giocoso_broken&quot; class=&quot;wikilink1&quot; title=&quot;blog:giocoso_broken&quot; data-wiki-id=&quot;blog:giocoso_broken&quot;&gt;here&lt;/a&gt;, the technical issue is whether a terminal emulator supports &lt;strong&gt;sixel graphics&lt;/strong&gt;. Many do not and the ones that do often have to have that support &amp;#039;compiled in&amp;#039; 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 &amp;#039;kitty graphics protocol&amp;#039;: some terminals support that when they don&amp;#039;t support sixel graphics. Accordingly: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; A new configuration option is provided to &amp;#039;Use Kitty Graphics for in-terminal graphics display&amp;#039;. The default value is &amp;#039;no&amp;#039;. &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; If nevertheless set to &amp;#039;yes&amp;#039;, 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.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; The way kitty graphics displays things is heavily dependent on your choice of terminal and terminal font. Use the configuration parameter &amp;#039;Size of album art when displayed&amp;#039; to make the kitty display bigger or smaller to suit.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
As a result of this change, the kitty terminal has become an installation dependency for Giocoso. You don&amp;#039;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&amp;#039;ll need to install Kitty yourself: &lt;span class=&quot;wrap_inlinecode &quot;&gt;sudo apt install kitty&lt;/span&gt; or &lt;span class=&quot;wrap_inlinecode &quot;&gt;sudo zypper install kitty&lt;/span&gt; and similar commands, depending on distro, will achieve the necessary.
&lt;/p&gt;

&lt;p&gt;
Note that kitty graphics are notably &amp;#039;blockier&amp;#039; than sixel graphics, so kitty is not the default display technology: it&amp;#039;s there for when sixel graphics fail!
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Significant Bug-Fix&lt;/em&gt;&lt;/strong&gt;: A horrible logic error on my part in Version 3.30 completely screwed up the application of the &amp;#039;Time Bar&amp;#039;. When you take the &lt;strong&gt;Play Music&lt;/strong&gt; menu, &lt;strong&gt;Option 1&lt;/strong&gt; Giocoso&amp;#039;s random selection of music to play is meant to take your value for the &amp;#039;Hours before &lt;strong&gt;composer&lt;/strong&gt; eligible for second play&amp;#039; configuration parameter and prevent playback of further music by any composer who&amp;#039;s had &lt;em&gt;something&lt;/em&gt; played within that number of hours. So, say you set the parameter to “240”, then if Composer A&amp;#039;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&amp;#039;s blocked from &lt;em&gt;random selection&lt;/em&gt; using the default music selection process for 10 days). Unfortunately, my logic flaw was to apply the time bar to the &lt;strong&gt;recordings&lt;/strong&gt; eligible for a second play, not the &lt;strong&gt;composer&lt;/strong&gt;! This meant that if Solti&amp;#039;s recording of Beethoven&amp;#039;s fifth took place on December 1st, Bernstein&amp;#039;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 &lt;em&gt;anything&lt;/em&gt; by Beethoven. Mea culpa. This has now been fixed and works as intended and as previously advertised.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Significant Enhancement&lt;/em&gt;&lt;/strong&gt;: 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 &amp;#039;don&amp;#039;t re-play a composer until at least 240 hours has elapsed&amp;#039;, 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 &lt;em&gt;also&lt;/em&gt; listed in the Exempts file, then that time bar is &lt;strong&gt;not&lt;/strong&gt; applied to Mahler, so something by him &lt;em&gt;could&lt;/em&gt; (not &amp;#039;will&amp;#039;) 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 &amp;#039;cleanly&amp;#039; and &lt;strong&gt;only&lt;/strong&gt; 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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: 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 &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; (sometimes called “Raspbian”, as it&amp;#039;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! Note that the Giocoso installer will now quit without doing anything if it detects that your system has pending updates: previously, Giocoso charged ahead and performed a full system update for you… but there are obvious issues with doing that, so now it won&amp;#039;t be quite so cavalier! You won&amp;#039;t be able to install Giocoso until and unless you&amp;#039;ve fully updated your system, even so: but such an update is left as a matter for you to deal with.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Enhancement&lt;/em&gt;&lt;/strong&gt;: Support for running Giocoso on macOS has been re-introduced. The installer now detects the presence of macOS and responds appropriately (though note: you&amp;#039;ll need to have pre-installed Homebrew or Macports yourself for the install to succeed). Giocoso then runs successfully on macOS -though there are still currently some rough edges and there is no support at all for pausing a music play. 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Version 3.32 - December 11th, 2025&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_version_332_-_december_11th_2025&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;35056-45263&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;giocoso_version_331_-_april_10th_2025&quot;&gt;Giocoso Version 3.31 - April 10th, 2025&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;Minor bug-fix&lt;/strong&gt;: 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 &amp;#039;ps&amp;#039; program. That has now been fixed.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Version 3.31 - April 10th, 2025&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_version_331_-_april_10th_2025&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;45264-45551&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;giocoso_version_330_-_march_7th_2025&quot;&gt;Giocoso Version 3.30 - March 7th, 2025&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
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 &amp;#039;check for updates&amp;#039; option as would normally be the case.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Significant New Feature&lt;/strong&gt;: The release of &amp;#039;Giocoso Pro&amp;#039;. 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 &lt;em&gt;any&lt;/em&gt; of them. Filters to &amp;#039;play me previously unplayed music&amp;#039; will therefore now correctly &lt;strong&gt;not&lt;/strong&gt; start playing music which &lt;em&gt;this&lt;/em&gt; device hasn&amp;#039;t played before but &lt;em&gt;that&lt;/em&gt; 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 &amp;#039;Pro&amp;#039; 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 &amp;#039;Pro&amp;#039; version doesn&amp;#039;t mean money is charged or functionality compromised. &amp;#039;Giocoso Pro&amp;#039; is still completely free of charge to use and full functionality is available to every user, without caveats or reservations. The &amp;#039;Pro&amp;#039; name arises simply because working with MySQL is generally considered to be &amp;#039;proper database administration territory&amp;#039;, 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&amp;#039;t want them, you can switch them off (and back on!) at will.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;New Feature&lt;/strong&gt;: Added a new &amp;#039;hotkey&amp;#039; option. Pressing &amp;#039;F&amp;#039; (or &amp;#039;f&amp;#039;, upper or lower case being irrelevant) &lt;strong&gt;during music playback&lt;/strong&gt; launches the system&amp;#039;s default file manager in the currently-playing recording&amp;#039;s folder. If Britten&amp;#039;s Peter Grimes was playing, for example, and I tapped &amp;#039;f&amp;#039;, Dolphin (the KDE default file manager) would open in (for me) &lt;em&gt;/sourcedata/music/classical/B/Benjamin Britten/Peter Grimes (Britten - 1958)&lt;/em&gt;. 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 &lt;em&gt;their&lt;/em&gt; default. Note that the program display does &lt;strong&gt;not&lt;/strong&gt; indicate that &amp;#039;f&amp;#039; is a valid keypress that will do something: you just have to know it&amp;#039;s there as an option!
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;New Feature&lt;/strong&gt;: Another new hotkey option is available &lt;strong&gt;during music playback&lt;/strong&gt;: if you press &amp;#039;K&amp;#039; or &amp;#039;k&amp;#039;, and there is a file called &amp;#039;booklet.pdf&amp;#039; in the folder being played, then it is opened in your system&amp;#039;s default PDF reader. It&amp;#039;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 &amp;#039;booklet.pdf&amp;#039; won&amp;#039;t be opened. Note that the program display does not indicate that &amp;#039;k&amp;#039; (or &amp;#039;K&amp;#039;) is a valid keypress that will do something: you just have to know it&amp;#039;s there as an option. Be aware that &amp;#039;K&amp;#039; tapped when music is &lt;strong&gt;not&lt;/strong&gt; playing does something completely different (recalling prior advanced SQL selections, a function that &lt;em&gt;is&lt;/em&gt; shown on the main menu display).
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Enhancement or possible feature removal&lt;/strong&gt;: Due to popular demand, the &amp;#039;scrolling logo&amp;#039; has been removed: whether that counts as &amp;#039;feature removal&amp;#039; or an enhancement is a matter of opinon! Instead the program starts up instantly with a new graphical logo:
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250205_162711.jpg?w=650&amp;amp;tok=68790a&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Enhancement&lt;/strong&gt;: For new installations, the Luxi Mono font is now the default. Upgrades won&amp;#039;t pick up this change automatically, however: the font &lt;a href=&quot;https://www.fontsquirrel.com/fonts/luxi-mono&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://www.fontsquirrel.com/fonts/luxi-mono&quot; rel=&quot;ugc nofollow noopener&quot;&gt;can be downloaded here&lt;/a&gt;, for free. Install it using your distro&amp;#039;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&amp;#039;t actually know how to draw.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Enhancement&lt;/strong&gt;: 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 &amp;#039;new&amp;#039; recording in the /symphonic folder, but the old entry for the same recording in its /orchestral folder location was &lt;em&gt;not&lt;/em&gt; cleared out (you needed a full refresh to do that). Now, it will be.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Enhancement&lt;/strong&gt;: The various ways of searching for music to play have been significantly tweaked to better deal with situations where folders the database &lt;em&gt;thinks&lt;/em&gt; exist actually don&amp;#039;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&amp;#039;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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Enhancement&lt;/strong&gt;: The &lt;strong&gt;default&lt;/strong&gt; 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 &lt;em&gt;batch&lt;/em&gt; of all eligible composers; then it selects a batch of all eligible compositions; then it limits them down to the size of your &amp;#039;Number of plays per cycle&amp;#039;. A bit of filtering ensures that within a play cycle, the same composer can&amp;#039;t be picked more than once. Sometimes, this will mean that there &lt;em&gt;won&amp;#039;t&lt;/em&gt; be 10 plays per cycle: if there aren&amp;#039;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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Removed Feature&lt;/strong&gt;: Because default search now operates on a &amp;#039;batch select&amp;#039; 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&amp;#039;t, but there&amp;#039;s no &amp;#039;having another go, over and over&amp;#039; as there used to be. That&amp;#039;s simply because that&amp;#039;s the way SQL works: if it didn&amp;#039;t return anything this time, there&amp;#039;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&amp;#039;s found in the active configuration file.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Removed Feature&lt;/strong&gt;: The &lt;strong&gt;Database Management&lt;/strong&gt; main menu &lt;strong&gt;Option 8 : Pull remote database to be primary&lt;/strong&gt; 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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Modified Feature&lt;/strong&gt;: 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 &amp;#039;1&amp;#039;. This was a feature introduced in Version 3.20. In Version 3.30, it is modified: it doesn&amp;#039;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&amp;#039;t actually do anything &amp;#039;dangerous&amp;#039; 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 &lt;em&gt;really&lt;/em&gt; 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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Modified Feature&lt;/strong&gt;: The aggregate statistics report has always reported on &amp;#039;Average number of plays per day&amp;#039;. That has now been modified to be &amp;#039;Average number of plays per day in past year&amp;#039;: the underlying query now only looks at &amp;#039;today minus 365 days&amp;#039;. It seemed pointless to average your plays over (potentially!) a decade or more, as if the figure would be meaningful.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;New Feature&lt;/strong&gt;: 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 &amp;#039;Pro mode&amp;#039;, notes are now stored in the globally-shared database, not as a single text file stored on the local playing device. &lt;strong&gt;Global Notes&lt;/strong&gt;, 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 &amp;#039;n&amp;#039; key (as in previous Giocoso versions) and the nano editor opens automatically. When saving the text file, it&amp;#039;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, &lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt;-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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Changed Feature&lt;/strong&gt;: 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 &lt;span class=&quot;wrap_redtext &quot;&gt;music_database_name&lt;/span&gt; &lt;span class=&quot;wrap_bluetext &quot;&gt;/some/dir/of/music&lt;/span&gt; &lt;span class=&quot;wrap_greentext &quot;&gt;--fullrefresh&lt;/span&gt; (or &lt;span class=&quot;wrap_greentext &quot;&gt;--fastrefresh&lt;/span&gt; if that&amp;#039;s the refresh mode you&amp;#039;re wanting to use). Basically, you invoke Giocoso with three arguments: &lt;span class=&quot;wrap_redtext &quot;&gt;database&lt;/span&gt;, &lt;span class=&quot;wrap_bluetext &quot;&gt;music folder&lt;/span&gt; and the full or fast &lt;span class=&quot;wrap_greentext &quot;&gt;refresh type switch&lt;/span&gt;, in that order.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;New Feature&lt;/strong&gt;: If you operate in &amp;#039;Pro mode&amp;#039;, 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 &lt;strong&gt;Global Pause/Resume&lt;/strong&gt;. 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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Bug Fix&lt;/strong&gt;: 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.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Bug Fix&lt;/strong&gt;: The “Selection: X of Y” counter did not increment the &amp;#039;X&amp;#039; component of the play count in any play mode &lt;em&gt;except&lt;/em&gt; the default. If you did a play by &amp;#039;selection filter&amp;#039; or an &amp;#039;advanced SQL selection&amp;#039; or a &amp;#039;play from a playlist&amp;#039;, the &amp;#039;X&amp;#039; 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&amp;#039;re using.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Bug Fix&lt;/strong&gt;: 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&amp;#039;t happen: the &lt;strong&gt;Play Music&lt;/strong&gt; menu, &lt;strong&gt;Option 7&lt;/strong&gt; now always creates completely-blank playlists.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Minor Enhancement&lt;/strong&gt;: The &lt;strong&gt;Database Management&lt;/strong&gt; menu, &lt;strong&gt;Option 6: Backup a local database&lt;/strong&gt; now displays a message explaining where the new local database backup can be found on your file system.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Minor Enhancement&lt;/strong&gt;: The &lt;strong&gt;Database Management&lt;/strong&gt; menu, &lt;strong&gt;Option 7: Optimise a local database&lt;/strong&gt; 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&amp;#039;s no size difference, before to after, then you&amp;#039;re told that too.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Minor Enhancement&lt;/strong&gt;: If you press &amp;#039;B&amp;#039; 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 &amp;#039;B&amp;#039; key simply appeared to do nothing in earlier Giocoso versions: now a message will be displayed explaining that for &amp;#039;B&amp;#039; to do anything, &lt;em&gt;you&lt;/em&gt; have to manually install sqlitebrowser first.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Minor Enhancement&lt;/strong&gt;: When editing the configuration file (&lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt;), 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 &lt;em&gt;and restores things to the way they were before you started editing anything&lt;/em&gt;. Instead of reverting to defaults, you revert to the configuration file values you began with, in other words.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Minor Enhancement&lt;/strong&gt;: When producing advanced SQL reports (&lt;strong&gt;Reporting&lt;/strong&gt; menu, &lt;strong&gt;Option 5&lt;/strong&gt;), the panel in which you type your query will now remember the last query you typed, so won&amp;#039;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 &lt;em&gt;ab initio&lt;/em&gt;. An additional refinement to the way advanced SQL queries work is that you don&amp;#039;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].
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Minor Enhancement&lt;/strong&gt;: When creating a database for the first time, Giocoso runs off to the proposed &amp;#039;root of the music collection&amp;#039; folder provided by the user and checks whether any FLACs are stored within that folder hierarchy. In previous versions, it performed a &lt;em&gt;complete&lt;/em&gt; count of FLACs before deciding whether the proposed folder was a &amp;#039;good&amp;#039; 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.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
&lt;span class=&quot;wrap_centermessage &quot;&gt;Please note: This indicates the end of the 3.2x line of Giocoso. Entries above this are for version 3.3x and higher.&lt;/span&gt;
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Version 3.30 - March 7th, 2025&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_version_330_-_march_7th_2025&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;45552-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/4/47f864c8bc49b6c3e4ef3c8ff94ec3d8.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/controlcmd">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-11T10:01:39+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>controlcmd</title>
        <link>https://www.bbritten.com/softwares/giocoso/controlcmd</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;controlling_music_playback&quot;&gt;Controlling Music Playback&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/beethoven98.png?w=220&amp;amp;tok=6afaea&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;The general &amp;#039;philosophy&amp;#039; of Giocoso is that listening to classical music is a pleasure -but that it&amp;#039;s a pleasure to be taken seriously. That&amp;#039;s why Giocoso doesn&amp;#039;t &amp;#039;do&amp;#039; tracks: you don&amp;#039;t listen to mere parts of whole compositions in the concert hall (on the whole), so you shouldn&amp;#039;t be doing that in your music listening room at home, either. It&amp;#039;s also why Giocoso doesn&amp;#039;t encourage you to skip through recordings; or repeat them; or pause them: if you don&amp;#039;t do it in public, you shouldn&amp;#039;t be getting into the habit of doing those things in private, either.
&lt;/p&gt;

&lt;p&gt;
That said, listening to a twenty minute symphony without pause or break is one thing; but even the most devout classical music fan is going to struggle listening through 4 hours of &lt;em&gt;Götterdämmerung&lt;/em&gt; without a break every now and then! So… yes, somewhat belatedly, Giocoso acquired &amp;#039;controls&amp;#039; that allow you to pause, resume, repeat and stop playback. These controls are displayed at the bottom of the program display area whenever music is playing (see the first screenshot below). Versions of Giocoso prior to Version 3.13 contained the same options in a dedicated &amp;#039;Control Menu&amp;#039;, but that disappeared in Version 3.13, since the &amp;#039;bottom control menu&amp;#039; completely replaces it.
&lt;/p&gt;

&lt;p&gt;
An entirely standalone package (called &lt;strong&gt;Mgiocoso&lt;/strong&gt;) was introduced in Version 3.04: it &lt;em&gt;only&lt;/em&gt; displays and processes the same set of playback control options on behalf of a second, music-playing Giocoso session. In Version 3.11, Mgiocoso was launched automatically every time Giocoso itself ran, by default (though it was configurable). In Version 3.13 and above, however, since all the music playback controls are now displayed as selectable options from the music playback screen itself, the need for Mgiocoso to control another, music-playing Giocoso session is thereby severely diminished. Mgiocoso thus reverts to being &lt;strong&gt;off&lt;/strong&gt; by default -though it still retains its usefulness as a way for a space-constrained device (such as a smartphone) to control a music-playing session running on a remote PC. The documentation below assumes you are using Giocoso Version 3.13 or higher, at any rate.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Controlling Music Playback&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;controlling_music_playback&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-2233&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;the_controls&quot;&gt;The Controls&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Playback controls appear within the main Giocoso window (from Version 3.13 and on) at the bottom of the main program display as soon as music playback commences:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20241114_150516.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20241114_150516.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20241114_150516.jpg?w=650&amp;amp;tok=16e343&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The control options shown in this &amp;#039;bottom menu&amp;#039; are hopefully self-explanatory. Each is invoked by tapping the letter associated in yellow with each option. That is, type &amp;#039;A&amp;#039; for &amp;#039;Autostop&amp;#039;, &amp;#039;S&amp;#039; for &amp;#039;Skip&amp;#039; and so on. Take note that it&amp;#039;s &amp;#039;x&amp;#039; for Exit, not E, though! Also be aware that the case of the letters you type is irrelevant: type A or a, and Autostop will be engaged regardless, for example.
&lt;/p&gt;

&lt;p&gt;
Taking each option in turn, then:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Autostop&lt;/strong&gt;: If you launch Giocoso with the &amp;#039;Number of plays per cycle&amp;#039; Persistent Configuration parameter set to (say) 10, but after the 2nd recording you need a break, you can take the autostop option to tell the playing session to &lt;strong&gt;complete the recording it&amp;#039;s already playing&lt;/strong&gt;, but not to start any new play after that. The currently-playing recording thus completes normally and will be recorded in the Giocoso database as a successful &amp;#039;play&amp;#039;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Terminate&lt;/strong&gt;: If you take this option, Giocoso will immediately cease playback of the currently-playing recording &lt;em&gt;and will not attempt to play anything else subsequently&lt;/em&gt;. No attempt to complete the playback is made: the music just stops abruptly. A terminated play thus hasn&amp;#039;t completed successfully and is therefore not recorded in Giocoso&amp;#039;s database as a play at all: you don&amp;#039;t get partial brownie points for almost-finishing listening to something!&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Pause/Resume&lt;/strong&gt;: This option tells a playing Giocoso session to immediately pause the recording it&amp;#039;s playing. If a recording has &lt;em&gt;already&lt;/em&gt; been paused, however, then the message is interpreted as an instruction to resume playback (from the precise moment where playback had previously reached). The pause/resume option is thus a &amp;#039;toggle switch&amp;#039;. Using it for the first time triggers a pause, using it a second time releases the pause and triggers resumption of playback; using it a third time again pauses playback… and so on, &lt;em&gt;ad infinitum&lt;/em&gt;. &lt;em class=&quot;u&quot;&gt;&lt;strong&gt;Please note&lt;/strong&gt;&lt;/em&gt;: As at December 2025, the Pause option will &lt;em&gt;not&lt;/em&gt; be displayed (or be operational) on macOS. That platform handles audio processes very differently than Linux, so the usual way of pausing/resuming a music-playing process simply doesn&amp;#039;t work correctly on macOS. A fix is in the works…&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Skip&lt;/strong&gt;: This option tells a playing Giocoso session to immediately cease playback of the currently-playing recording, but to then pick something new to play afterwards (assuming that &amp;#039;plays per cycle&amp;#039; is set to a number higher than 1 and that &amp;#039;unused&amp;#039; plays in that cycle exist). A skipped recording doesn&amp;#039;t count as a successful play, so isn&amp;#039;t recorded in Giocoso&amp;#039;s database. A skipped recording also &amp;#039;consumes&amp;#039; one of the plays in a cycle. If you&amp;#039;ve said, &amp;#039;play 10 recordings one after the other&amp;#039; (by setting &amp;#039;Number of plays per cycle&amp;#039; to 10) and you&amp;#039;re currently on play number 4 in that cycle… then a skip command stops the 4th playback and triggers Giocoso to start playing the 5th. If you were on play number 10 and issued a skip, then as there is no 11th play to be had in a cycle, all playback ceases when this 10th recording is stopped in its tracks. Skip is thus similar to &amp;#039;terminate&amp;#039;, except that Skip &lt;em&gt;will&lt;/em&gt; play new music after the current play&amp;#039;s termination, if possible, whereas Terminate just stops everything in its tracks.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Repeat&lt;/strong&gt;: This option tells a playing Giocoso session to repeat the currently-playing recording &lt;em&gt;once it has reached its natural conclusion.&lt;/em&gt; Nothing about the current play is interrupted or altered in any way; once it has finished, however, the same recording will get played again, in its entirety, from beginning to end. If you are in a 10-play cycle, however, and request the 10th recording to be played again, the repeat will not happen, because that would be an 11th play in the cycle: there have to be spare &amp;#039;plays&amp;#039; to accommodate the repeat, basically. Repeated plays are recorded in the database. A repeat request only lasts for the &amp;#039;lifetime&amp;#039; of the currently-playing recording. That is, if you&amp;#039;re playing a symphony, it will repeat …and as the symphony starts its second play, the repeat option is turned off automatically, so the same symphony will only play twice. You can, of course, re-use the Repeat option to trigger a third play at any time the second play is underway (and so on, until no more plays of any sort are possible).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Volume&lt;/strong&gt;: This option opens the ALSA volume control panel, allowing you to increase or decrease the volume of the music being played back. Please note that the ALSA volume control is an entirely separate utility that Giocoso merely &amp;#039;runs&amp;#039; for you. How you use it and how you configure it are really subjects beyond the scope of this document: Google for the term &lt;strong&gt;alsamixer&lt;/strong&gt;, however, and you should find third-party documentation that can help. An example might be &lt;a href=&quot;https://computing.help.inf.ed.ac.uk/alsa-mixer&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://computing.help.inf.ed.ac.uk/alsa-mixer&quot; rel=&quot;ugc nofollow noopener&quot;&gt;this page&lt;/a&gt;. I have nevertheless included some notes about it &lt;strong&gt;below&lt;/strong&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Notes&lt;/strong&gt;: This option invokes a text editor and pre-populates it with details of the recording that&amp;#039;s playing. The idea is that you can then just type freely anything you like by way of observations about the composition generally or that recording specifically. The text editor that launches when you take this control option will be that which is specified by your system&amp;#039;s EDITOR environment; if that&amp;#039;s not set at all, then &lt;strong&gt;nano&lt;/strong&gt; is the default editor of last resort. Again, you&amp;#039;ll need to know how to use your default text editor (and, specifically, how to &lt;em&gt;save&lt;/em&gt; your edits with it), but that is another subject beyond the scope of this particular documentation.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Exit&lt;/strong&gt;: Functionally, this option performs the same thing as &amp;#039;Terminate&amp;#039; but, once that part&amp;#039;s complete, it will then quit Giocoso completely.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Autostop, Repeat and Pause/Resume are all &lt;strong&gt;toggle&lt;/strong&gt; commands. That is, you can use them once to initiate some action in a playing Giocoso session -but, so long as you do it swiftly enough, you can also use the same option again to &lt;em&gt;reverse&lt;/em&gt; the earlier command. This is explicitly true of pause/resume: one press of menu Option 5 triggers playback pause; a second press of the same option reverses that; a third press would re-initiate a pause and so on, &lt;em&gt;ad infinitum&lt;/em&gt;. It is also true of the other commands mentioned: a request to stop all playback after the present recording ends (i.e., an Autostop) can be reversed by sending another Autostop request; likewise, a request to repeat the currently-playing recording can be revoked by sending the same request a second time.
&lt;/p&gt;

&lt;p&gt;
Options in the bottom control bar will highlight when they&amp;#039;re first taken; toggle options will &lt;em&gt;remain&lt;/em&gt; highlighted until they are toggled back off. Thus, you might end up with a display like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20241114_152743.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20241114_152743.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20241114_152743.jpg?w=650&amp;amp;tok=566f0d&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…which indicates that all three options, Autostop, Pause and Repeat have been taken at some point. If you were then to withdraw the request to &amp;#039;repeat&amp;#039; the play, you&amp;#039;d press the R button once more:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20241114_152920.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20241114_152920.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20241114_152920.jpg?w=650&amp;amp;tok=d64344&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…and now two of the options remain toggled on, but the Repeat option is now toggled back off.
&lt;/p&gt;

&lt;p&gt;
The non-toggle options will be highlighted briefly for as long as it takes for Giocoso to process them. Terminates and Skips are pretty instantaneous in operation, though, so it&amp;#039;s unlikely you&amp;#039;ll ever see them highlighted for long.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Controls&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_controls&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;2234-9887&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;non-listed_controls&quot;&gt;Non-Listed Controls&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Two options are &lt;strong&gt;not shown&lt;/strong&gt; on the control menu. They nevertheless work in precisely the same fashion as the others, as follows:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Launch Mgiocoso&lt;/strong&gt;: tap the letter &amp;#039;M&amp;#039; (or &amp;#039;m&amp;#039;, of course) and this triggers Giocoso to launch a new Mgiocoso session/window. If one already exists, it is killed off and a new one is launched to replace it. If no existing Mgiocoso session exists, a brand new one is launched.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Launch Sqlitebrowser&lt;/strong&gt;: tap the letter &amp;#039;B&amp;#039; (or &amp;#039;b&amp;#039; of course) and this will cause the Sqlitebrowser third-party SQL query tool to be launched, if it has been installed (by you!). If the package hasn&amp;#039;t been installed, then tapping B will achieve nothing. Note that Giocoso checks whether the package &lt;em&gt;has&lt;/em&gt; been installed, but doesn&amp;#039;t itself trigger its installation if it detects that it hasn&amp;#039;t been. Be warned that each new tap of the &amp;#039;B&amp;#039; key will trigger the automatic and forceful destruction of any &lt;em&gt;existing&lt;/em&gt; Sqlitebrowser windows before a new one is opened: if you had any complex SQL queries typed in the first session, they will be unceremoniously lost when that window is auto-closed.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Non-Listed Controls&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;non-listed_controls&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;9888-11036&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;alsa_volume_control&quot;&gt;ALSA Volume Control&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
I mentioned above that the &lt;strong&gt;alsamixer&lt;/strong&gt; utility can be used to control the output volume levels used for each audio device detected on the system, assuming that your system is using ALSA as its sound server in the first place. If you&amp;#039;re using Pipewire or other sound servers, it may not work at all. It also won&amp;#039;t do anything if, for example, your audio output is a toslink optical out: the light is either on or off, not dimmer or brighter! Even if you use non-optical digital outputs, they&amp;#039;re either on or off, so again, varying the signal strength to achieve volume alteration is a non-starter. Optical or digital outputs are brilliant for isolating your amplifier from electrical noise and for when a capable external DAC (digital to analogue converter) does a better job of signal processing than your PC&amp;#039;s built-in one… but abandon any thought of using software volume control if you go these routes: a good remote control for your amplifier will be what you&amp;#039;re after!
&lt;/p&gt;

&lt;p&gt;
If you are using a non-digital audio output and the ALSA sound server, however, then you can indeed use alsamixer to adjust music playback volume by software alone. Alsamixer controls one device at a time: you press F6 to obtain a list of &lt;em&gt;all&lt;/em&gt; audio devices and select one. Once a device has been selected to be the &amp;#039;active device&amp;#039;, you can increase or decrease the volume of that device using the up- and down-arrow cursor keys.
&lt;/p&gt;

&lt;p&gt;
As you know, of course, you tell &lt;em&gt;Giocoso&lt;/em&gt; the audio device you want a music signal to be sent to by setting the &amp;#039;Audio device to use as default output&amp;#039; parameter in the Persistent Configuration file, accessed via the Administration menu, Option 3. That parameter defaults to a default of, er… &amp;#039;default&amp;#039;: if that&amp;#039;s still true for you, then taking this ALSA Volume Control menu option will cause alsamixer to open to the &amp;#039;master channel&amp;#039; by default -which may or may not be the one you need to adjust the volume of, depending on your hardware specifics.
&lt;/p&gt;

&lt;p&gt;
If you have set Giocoso&amp;#039;s audio device parameter to something more specific than &amp;#039;default&amp;#039;, it will usually be to a named device in the format &lt;strong&gt;plughw:x,y&lt;/strong&gt; …and if that&amp;#039;s what your Giocoso is set to, then taking the ALSA Volume Control menu option will cause alsamixer to open with the device with device index &lt;em&gt;&lt;strong&gt;x&lt;/strong&gt;&lt;/em&gt; pre-set as the active channel (i.e., the first number after the &amp;#039;plughw:&amp;#039; bit will be treated as though it were the device index). Again, that might or might not be the correct device to alter the volume of, depending on your specific circumstances.
&lt;/p&gt;

&lt;p&gt;
If Giocoso opens alsamixer with the &amp;#039;wrong&amp;#039; audio device set as active, for whatever reason, remember you can always press F6 to get a pop-up list of all devices, from which you can select the correct one instead.
&lt;/p&gt;

&lt;p&gt;
Here is my current music room PC configuration, for example:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_174844.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231119_174844.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_174844.png?w=650&amp;amp;tok=ec1a86&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
In the Administration menu Option 3, I&amp;#039;ve said &amp;#039;plughw:2,0&amp;#039; is my audio device. So when I then take the Control menu Option 6, I see this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_174944.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231119_174944.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_174944.png?w=650&amp;amp;tok=a9f707&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That tells you that alsamixer has opened with the E30 &amp;#039;item&amp;#039; set as the active device. I happen to know that&amp;#039;s correct: I play my music via a Topping E30 Digital-to-Analogue converter. So, I can increase that device&amp;#039;s volume with the up-arrow:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_175114.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231119_175114.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_175114.png?w=650&amp;amp;tok=aac964&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…or lower it with the down-arrow:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_175149.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231119_175149.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_175149.png?w=650&amp;amp;tok=b436d4&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
But if I didn&amp;#039;t know what &amp;#039;E30&amp;#039; was, how would I know? Well, press F6:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_175247.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231119_175247.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_175247.png?w=650&amp;amp;tok=653249&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The blue pop-up dialog lists all known audio devices on this PC: you can see most of them relate to audio output via assorted HDMI ports… definitely not something I&amp;#039;d want to control the volume of, since they&amp;#039;re not what&amp;#039;s plugged into my amplifier! However, if it turned out that starting with the &amp;#039;E30&amp;#039; device was incorrect, I could just select one of the other devices  and up- and down-arrow for that device instead.
&lt;/p&gt;

&lt;p&gt;
You quit out of the alsamixer interface by pressing the ESC (&amp;#039;escape&amp;#039;) key: you should be returned to Giocoso&amp;#039;s own Control menu.
&lt;/p&gt;

&lt;p&gt;
Now, suppose you hadn&amp;#039;t the faintest clue how to configure Giocoso to use the correct audio device:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_175546.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231119_175546.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_175546.png?w=650&amp;amp;tok=d91b96&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Here, you see me having set the default audio device for Giocoso as &amp;#039;plughw:62,0&amp;#039;. That will mean alsamixer would try to open with device &amp;#039;6&amp;#039; as the controlled device (Giocoso only passes the &lt;em&gt;first&lt;/em&gt; character of the first device number to alsamixer, so 92 would be passed as &amp;#039;9&amp;#039; and so on)… but as no such device actually exists, that&amp;#039;s going to get quite messy:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_175729.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231119_175729.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231119_175729.png?w=650&amp;amp;tok=4dd292&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
As you can see, alsamixer tries manfully to tell you that device 6 doesn&amp;#039;t exist… but it&amp;#039;s getting a bit cluttered on-screen at this point, because Giocoso cannot control the way alsamixer displays its messages. The Giocoso menu is actually working fine, despite appearances, so tapping &amp;#039;p&amp;#039; at this point, for example, would re-display the Play Music menu and tidy up all the messy messages.
&lt;/p&gt;

&lt;p&gt;
In short:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; if your Giocoso default audio device is configured to &amp;#039;default&amp;#039;, alsamixer will open the &amp;#039;master&amp;#039; audio channel, which may or may not allow you to set the volume correctly. Try pressing F6 and selecting another listed device and altering the volume of that if the master device is not what is needed&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; if your Giocoso default audio device is &lt;strong&gt;&lt;em&gt;correctly&lt;/em&gt;&lt;/strong&gt; configured to a numbered plughw device, then alsamixer should open that device and volume control on it will probably work correctly, assuming you&amp;#039;re using the ALSA sound server technology at all in the first place. Again, use the F6 trick to select another device if it doesn&amp;#039;t seem to work&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; if your Giocoso default audio device is &lt;em&gt;incorrectly&lt;/em&gt; configured to mention a hardware device number that doesn&amp;#039;t actually exist… then invoking alsamixer will result in an error and the Giocoso menu will appear a bit scrambled. Fix your Persistent Configuration file with Administration menu Option 3 before trying to get this ALSA Volume Control option working once more!&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
You can always adjust the volume using whatever standard controls your distro gives you, entirely outside of Giocoso&amp;#039;s purview, of course: this control option is only provided as a possible convenience, whereby volume can be achieved entirely within the context of Giocoso program operation. You don&amp;#039;t have to use it if you don&amp;#039;t want to, or if it&amp;#039;s giving incorrect results.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;ALSA Volume Control&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;alsa_volume_control&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;11037-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/a/a0fc08ae7a6b697be36fc3f1fb632d5d.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/customvis">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-03T19:50:30+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>customvis</title>
        <link>https://www.bbritten.com/softwares/giocoso/customvis</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;visual_appearance_customisations&quot;&gt;Visual Appearance Customisations&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/beethoven99.png?w=220&amp;amp;tok=22e484&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;Giocoso Version 2 had a veritable plethora of options that could be set in the Persistent Configuration File to control the visual appearance of the program display -the colour of text used, and so on. &lt;em&gt;Most&lt;/em&gt; of those options have gone in Giocoso Version 3, at least in a form that is readily settable and re-configurable. 
&lt;/p&gt;

&lt;p&gt;
On the other hand, Giocoso Version 3 uses the &lt;strong&gt;dialog&lt;/strong&gt; utility to draw a lot of its visual components, so provided you are prepared to tinker with dialog&amp;#039;s own configuration files, you can still tweak Giocoso&amp;#039;s visual appearance to dramatic effect.
&lt;/p&gt;

&lt;p&gt;
Here I&amp;#039;ll list a few of the simpler colour/visual tweak customisations it&amp;#039;s possible to do to knock Giocoso Version 3 into a shape you&amp;#039;re happy with.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Visual Appearance Customisations&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;visual_appearance_customisations&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-827&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;colour_constants&quot;&gt;1.0 Colour Constants&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The Persistent Configuration file is generally edited by taking &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/adminmenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:adminmenu&quot; data-wiki-id=&quot;softwares:giocoso:adminmenu&quot;&gt;the Administration menu Option 2&lt;/a&gt;. However, the file is merely a text file and it contains some parameters which are &lt;em&gt;not&lt;/em&gt; exposed or made editable by that particular menu option. For example:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231114_105541.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231114_105541.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231114_105541.png?w=650&amp;amp;tok=5a8cca&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Here I&amp;#039;ve opened the file in the Kate text editor that is generally standard on KDE-using distros, but I could have opened it in any available text editor. The file is, of course, found in &lt;strong&gt;$HOME/.local/share/giocoso3/txt/giocoso.conf&lt;/strong&gt;. The key parameters to worry about in this context are those appearing on line 6 of the file: the &amp;#039;colour constants&amp;#039;. The colour &lt;strong&gt;names&lt;/strong&gt; shown here &lt;em&gt;&lt;strong&gt;must not be altered&lt;/strong&gt;&lt;/em&gt;, because otherwise Giocoso will break badly. But the &lt;em class=&quot;u&quot;&gt;numbers&lt;/em&gt; assigned to those names can be fiddled with at will: they are the ANSI colour codes and the entire set of them is visible here:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/ansi_fig_02-768x460-503393.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:ansi_fig_02-768x460-503393.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/ansi_fig_02-768x460-503393.png?w=650&amp;amp;tok=181c7c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You can see the configuration file says &amp;#039;RED=1&amp;#039;… and the ANSI color chart confirms that 1 is indeed red. There is nothing, however, to stop you setting RED=9 and achieve a brighter, pinker red… or set it to 13 and get a purple instead. Thus, the &amp;#039;normal&amp;#039; Giocoso program display looks like this with the default colour constants:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-03_at_19.36.58.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2025-12-03_at_19.36.58.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-03_at_19.36.58.png?w=650&amp;amp;tok=c4044c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…but if I set the constants to this:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;YELLOW=226 RED=9 BLUE=104 CYAN=130 GREEN=220 NORMAL=176 WHITE=128&lt;/pre&gt;

&lt;p&gt;
…and then re-launch Giocoso, it will now appear like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2025-12-03_at_19.39.35.png&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_2025-12-03_at_19.39.35.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2025-12-03_at_19.39.35.png?w=650&amp;amp;tok=7d0285&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
All sorts of other graphical nightmares are made by possible by fiddling the colour constants in this way, as you can no doubt imagine!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Colour Constants&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;colour_constants&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;828-2675&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;xterm_colours&quot;&gt;2.0 XTerm Colours&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Giocoso tends to run inside an XTerm terminal: if you use the program launcher that the Giocoso installation procedure creates for you, it will contain a launch command such as:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;/usr/bin/xterm -bg black -fg green -geometry 103x28 -fa &amp;#039;Space Mono:style=Regular&amp;#039; -fs 12 -ti 340 -tn xterm-256color -e giocoso3.sh&lt;/pre&gt;

&lt;p&gt;
…which is certainly pretty nasty, but basically says &amp;#039;launch xterm at a certain size, using a certain font, and then run the giocoso3.sh shell script within it&amp;#039;. Rather crucially, however, it also contains a “bg” command, which sets the background terminal colour and an “fg” command, which sets the default foreground terminal colour. Note that not all implementations of xterm support these parameters, so you&amp;#039;ll have to experiment! If your xterm does support setting foreground and background colours in this way, though, you can edit the launcher command to specify any of the possible foreground and background colours, by name. Available colours are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; black&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; blue&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; green&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; yellow&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; cyan&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; white&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; magenta&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; red&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
If you set &lt;strong&gt;-bg magenta -fg blue&lt;/strong&gt; within the launcher command, therefore, you can end up with this sort of nightmare:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20231114_111415.png&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_20231114_111415.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20231114_111415.png?w=650&amp;amp;tok=990e39&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I&amp;#039;m not saying I&amp;#039;m &lt;em&gt;recommending&lt;/em&gt; this approach, in case that wasn&amp;#039;t obvious! I&amp;#039;m just saying that extensive control over Giocoso Version 3&amp;#039;s appearance is &lt;em&gt;possible&lt;/em&gt;, if you are prepared to fiddle enough with the launcher command and Giocoso&amp;#039;s own colour constants. The interaction between them can be quite tricky to predict ahead of time, though, so extensive experimentation is probably required!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 XTerm Colours&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;xterm_colours&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2676-4357&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;dialog_colours&quot;&gt;3.0 Dialog Colours&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
No matter how ghastly a colour scheme you&amp;#039;ve managed to cook up using the techniques mentioned in Sections 1 and 2 above, the moment you take a Giocoso option that invokes the display of a dialog box of some kind, the program&amp;#039;s colours will immediately switch to those configured for use by the Dialog utility. For example, here&amp;#039;s my weird choice of colours (in a &lt;em&gt;vaguely&lt;/em&gt; sane terminal colour scheme!) from a couple of screenshots ago:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2025-12-03_at_19.39.35.png&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_2025-12-03_at_19.39.35.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2025-12-03_at_19.39.35.png?w=650&amp;amp;tok=7d0285&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…but the second I take Option 2 on the Play Music menu, which triggers the display of a music selection filter form, I see this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-03_at_19.46.12.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2025-12-03_at_19.46.12.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-03_at_19.46.12.png?w=650&amp;amp;tok=7dc0ad&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That black/white/grey/blue/red colour scheme is that belonging to the &lt;strong&gt;dialog&lt;/strong&gt; utility and is immune from colour changes you may make to Giocoso or XTerm. In fact, it&amp;#039;s controlled by its own, entirely independent, configuration file: &lt;strong&gt;$HOME/.local/share/giocoso3/txt/abgiodialog.conf&lt;/strong&gt;. It&amp;#039;s simply a text file and can thus be edited in any standard text editor. It contains a bazillion lines such as:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;screen_color = (WHITE,BLACK,ON)
shadow_color = (BLACK,BLACK,ON)
dialog_color = (BLACK,WHITE,OFF)
title_color = (GREEN,WHITE,OFF)
border_color = (WHITE,WHITE,ON)
button_active_color = (WHITE,RED,ON)
button_inactive_color = dialog_color
button_key_active_color = button_active_color
button_key_inactive_color = (RED,WHITE,ON)
button_label_active_color = (WHITE,RED,ON)
button_label_inactive_color = (BLACK,WHITE,ON)&lt;/pre&gt;

&lt;p&gt;
…and hopefully you can see where the red, green, white and black colours are being configured. 
&lt;/p&gt;

&lt;p&gt;
This is a pretty hard file to understand or edit intelligently, I&amp;#039;ll warn you in advance: the key thing to spot is that each dialog display element is described with a foreground, background and highlight combo. Hence, the default colouration of all dialogs invoked by Giocoso (governed by the &amp;#039;screen_color&amp;#039; parameter) is to have a black background, white foreground text, and the white will be bright-white, because highlighting has been set &amp;#039;ON&amp;#039;. Armed with this little knowledge, therefore, it&amp;#039;s possible to replace colour names and see what effect such replacement has on things. If you&amp;#039;re going to fiddle with this, I&amp;#039;d strongly recommend only changing one colour/parameter at a time, though!
&lt;/p&gt;

&lt;p&gt;
Available colour names for the dialog utility are: black, red, green, yellow, blue, magenta, cyan and white.
&lt;/p&gt;

&lt;p&gt;
Thus, by merely editing the first of the dialog configuration options to read: 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;screen_color = (WHITE,YELLOW,ON)&lt;/pre&gt;

&lt;p&gt;
…you can achieve this thing of beauty:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231114_114044.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231114_114044.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231114_114044.png?w=650&amp;amp;tok=20f509&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Again: I&amp;#039;m not recommending you should actually do this! I&amp;#039;d rather you spent your time listening to music instead, of course… but the capability to tailor these things is definitely there.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Dialog Colours&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dialog_colours&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;4358-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/7/72f5c2fb0ea36b0247a80d3d0a1e5323.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/dbmenu">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-04T17:43:46+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>dbmenu</title>
        <link>https://www.bbritten.com/softwares/giocoso/dbmenu</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;the_database_management_menu&quot;&gt;The Database Management Menu&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/dbmenu/beethoven95.png&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:dbmenu:beethoven95.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/dbmenu/beethoven95.png?w=220&amp;amp;tok=ad69c3&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The music database is central to the &lt;em&gt;way&lt;/em&gt; Giocoso works. It contains listings of what FLAC files exist and where on the hard disk they can be found. The Giocoso database does &lt;strong&gt;not&lt;/strong&gt; however store the FLAC files themselves. Think of it as an directory of FLACs, rather than as a jukebox of them.
&lt;/p&gt;

&lt;p&gt;
So central to the workings of Giocoso is this &amp;#039;database of FLACs&amp;#039;, creating one is actually &lt;em&gt;compulsory&lt;/em&gt;: even plays of music sourced directly from the hard disk (see &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/playmenu/playfld&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:playmenu:playfld&quot; data-wiki-id=&quot;softwares:giocoso:playmenu:playfld&quot;&gt;Play Menu Option 3&lt;/a&gt;) have to be recorded in Giocoso&amp;#039;s &amp;#039;history of plays&amp;#039; table. Accordingly, &lt;strong&gt;the very first thing you should do after installing Giocoso is to create a new music database&lt;/strong&gt; (see Option 1).
&lt;/p&gt;

&lt;p&gt;
Part of the database creation process is to point Giocoso in the direction of your FLAC music files collection: for each FLAC the program discovers, the database will capture and record data extracted from the tag metadata you&amp;#039;ve (hopefully!) added to your FLACs, such as the composer, the performers, the recording date, the genre and so on. The presence of this metadata within a fairly small database is what makes it possible for Giocoso to randomly select &amp;#039;all choral works by Haydn that were recorded by Thomas Beecham&amp;#039; (for example): the data is readily accessible and searchable and database randomisation techniques can be applied to it very easily. It&amp;#039;s much easier doing it that way than, for example, having to freshly analyse every FLAC every time you think you might want to play it!
&lt;/p&gt;

&lt;p&gt;
This means, however, that after once creating the music database, you need to keep its contents up-to-date. If you had acquired 15 new CDs, ripped them and added them to your collection, you&amp;#039;d better tell Giocoso about that: the program cannot select to play that which it doesn&amp;#039;t know to exist, after all.
&lt;/p&gt;

&lt;p&gt;
The music database is used, too, every time a recording plays: Giocoso records the fact of a completed &amp;#039;play&amp;#039; in its database, along with the associated metadata for that recording. In this way, a history of your plays is built up over time. A play history can be a mere curiosity (as in, &amp;#039;wow: I didn&amp;#039;t realise the last time I played Adolphe Adam was over a year-and-a-half ago&amp;#039;); it can also be useful, in the sense of &amp;#039;play me choral music by Haydn conducted by Beecham &lt;em&gt;that I&amp;#039;ve never played before&lt;/em&gt;&amp;#039;. Without a play history to scan, that last clause of your requirements cannot be answered.
&lt;/p&gt;

&lt;p&gt;
Being able to create, protect, query and refresh the music database is thus a core Giocoso function: and the Database Management menu is how you go about doing all those things.
&lt;/p&gt;

&lt;p&gt;
Links to a detailed description of each menu option are listed below:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit2&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/dbmenu/createdb&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:dbmenu:createdb&quot; data-wiki-id=&quot;softwares:giocoso:dbmenu:createdb&quot;&gt;Create a music database&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/dbmenu/fastscan&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:dbmenu:fastscan&quot; data-wiki-id=&quot;softwares:giocoso:dbmenu:fastscan&quot;&gt;Fast Scan for new recordings&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/dbmenu/fullscan&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:dbmenu:fullscan&quot; data-wiki-id=&quot;softwares:giocoso:dbmenu:fullscan&quot;&gt;Full Scan all recordings&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/dbmenu/switchdb&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:dbmenu:switchdb&quot; data-wiki-id=&quot;softwares:giocoso:dbmenu:switchdb&quot;&gt;Select &amp;amp; use a different database&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/dbmenu/importdb&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:dbmenu:importdb&quot; data-wiki-id=&quot;softwares:giocoso:dbmenu:importdb&quot;&gt;Import plays to a database&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/dbmenu/backupdb&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:dbmenu:backupdb&quot; data-wiki-id=&quot;softwares:giocoso:dbmenu:backupdb&quot;&gt;Backup a database&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/dbmenu/optimsdb&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:dbmenu:optimsdb&quot; data-wiki-id=&quot;softwares:giocoso:dbmenu:optimsdb&quot;&gt;Optimise a database&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;2762-3253&amp;quot;} --&gt;&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; |
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;

&lt;!-- cachefile /var/www/dokuwiki/data/cache/8/85e2b3fdf1f2975bfe2be39011125c7e.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/giocoso">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-19T08:30:11+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>giocoso</title>
        <link>https://www.bbritten.com/softwares/giocoso/giocoso</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;giocoso_version_3the_flac_player&quot;&gt;Giocoso Version 3 : The FLAC Player&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/beethoven99.png?w=220&amp;amp;tok=22e484&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Version 3 : The FLAC Player&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_version_3the_flac_player&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-102&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;user_manual_index&quot;&gt;User Manual Index&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/gioinstall&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:gioinstall&quot; data-wiki-id=&quot;softwares:giocoso:gioinstall&quot;&gt;Installing Giocoso&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/linux&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:linux&quot; data-wiki-id=&quot;softwares:giocoso:linux&quot;&gt;Linux Distro-specific Notes and observations&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/win11&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:win11&quot; data-wiki-id=&quot;softwares:giocoso:win11&quot;&gt;Giocoso on Windows 11&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/macos&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:macos&quot; data-wiki-id=&quot;softwares:giocoso:macos&quot;&gt;Giocoso on macOS&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/playmenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:playmenu&quot; data-wiki-id=&quot;softwares:giocoso:playmenu&quot;&gt;The Play Music Menu&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/dbmenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:dbmenu&quot; data-wiki-id=&quot;softwares:giocoso:dbmenu&quot;&gt;The Database Management Menu&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/rptmenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:rptmenu&quot; data-wiki-id=&quot;softwares:giocoso:rptmenu&quot;&gt;The Reporting Menu&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/adminmenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:adminmenu&quot; data-wiki-id=&quot;softwares:giocoso:adminmenu&quot;&gt;The Administration Menu&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/controlcmd&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:controlcmd&quot; data-wiki-id=&quot;softwares:giocoso:controlcmd&quot;&gt;Controlling Music Playback&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/customvis&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:customvis&quot; data-wiki-id=&quot;softwares:giocoso:customvis&quot;&gt;Visual Appearance Customisation&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giopro&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giopro&quot; data-wiki-id=&quot;softwares:giocoso:giopro&quot;&gt;Giocoso Pro&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/proconcepts&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:proconcepts&quot; data-wiki-id=&quot;softwares:giocoso:proconcepts&quot;&gt;Giocoso Pro Concepts&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/probuild1&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:probuild1&quot; data-wiki-id=&quot;softwares:giocoso:probuild1&quot;&gt;Building a Giocoso Pro Server on non-Arch Linux&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/probuild2&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:probuild2&quot; data-wiki-id=&quot;softwares:giocoso:probuild2&quot;&gt;Building a Giocoso Pro Server on Arch Linux&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promdbchoice&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promdbchoice&quot; data-wiki-id=&quot;softwares:giocoso:promdbchoice&quot;&gt;Running Giocoso Pro on MySQL rather than MariaDB&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;The Pro Menu&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/minig&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:minig&quot; data-wiki-id=&quot;softwares:giocoso:minig&quot;&gt;The Mini Player&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/hotkeys&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:hotkeys&quot; data-wiki-id=&quot;softwares:giocoso:hotkeys&quot;&gt;Hot Keys&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/usetips&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:usetips&quot; data-wiki-id=&quot;softwares:giocoso:usetips&quot;&gt;Usability Tips and Techniques&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/pulseaudio&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:pulseaudio&quot; data-wiki-id=&quot;softwares:giocoso:pulseaudio&quot;&gt;Using PulseAudio&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/troubleshoot&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:troubleshoot&quot; data-wiki-id=&quot;softwares:giocoso:troubleshoot&quot;&gt;Troubleshooting&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/changelog&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:changelog&quot; data-wiki-id=&quot;softwares:giocoso:changelog&quot;&gt;Changelog&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;User Manual Index&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;user_manual_index&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;103-1487&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;what_is_giocoso&quot;&gt;1.0 What is Giocoso?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

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

&lt;p&gt;
Which is a bit of a mouthfull! So let&amp;#039;s break that down a bit:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Gapless&lt;/strong&gt;: 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 &amp;#039;gapless playback&amp;#039;, but some do it better than others. Giocoso does it properly.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Trackless&lt;/strong&gt;: Giocoso plays entire folders of music as though they were one composition (which, if you follow &lt;a href=&quot;https://www.bbritten.com/articles/axioms&quot; class=&quot;wikilink1&quot; title=&quot;articles:axioms&quot; data-wiki-id=&quot;articles:axioms&quot;&gt;my axioms of classical tagging&lt;/a&gt;, 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&amp;#039;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&amp;#039;t go to a classical music concert and walk out of the concerto after just the first movement -or walk &lt;em&gt;in&lt;/em&gt; 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 &amp;#039;tracks&amp;#039; or &amp;#039;movements&amp;#039; that can be ripped from their context and played standalone.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Optionally Randomising&lt;/strong&gt;: Giocoso can be instructed to play specific pieces of music (for example, &amp;#039;play &lt;em&gt;Peter Grimes&lt;/em&gt;&amp;#039; or &amp;#039;play &lt;em&gt;Fantasia on a Theme of Thomas Tallis&lt;/em&gt;&amp;#039;). But it can also be asked to &amp;#039;play a choral work&amp;#039;, or &amp;#039;play something by Beethoven&amp;#039;: 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 &amp;#039;degree of freedom of choice&amp;#039; the randomiser will exercise can be limited: for example, &amp;#039;Play me Choral works by Prokofiev that last between 30 and 50 minutes&amp;#039;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Command Line&lt;/strong&gt;: 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 &amp;#039;pretty&amp;#039;, Giocoso will by default display the album art associated with the composition it&amp;#039;s playing at any given time (assuming you&amp;#039;ve remembered -or bothered!- to tag the music files with that album art in the first place). Even this can be turned off, however.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;FLAC Player&lt;/strong&gt;: Classical music deserves being listened to in excellent audio quality. This means that playing music files which are encoded as MP3, OGG or other &lt;em&gt;lossy audio formats&lt;/em&gt;, 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 &lt;em&gt;only&lt;/em&gt; audio format that Giocoso sees, understands and plays is FLAC -the Free Lossless Audio Codec. There are other &lt;em&gt;lossless audio formats&lt;/em&gt; 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.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Classical Music Player&lt;/strong&gt;: To be honest, Giocoso plays FLACs and couldn&amp;#039;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&amp;#039;s nothing intrinsically that makes Giocoso &lt;em&gt;only&lt;/em&gt; 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.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Windows, macOS, Linux and ARM&lt;/strong&gt;: 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 &lt;em&gt;Windows Subsystem for Linux&lt;/em&gt; that allows it to run full-fat Linux &amp;#039;within&amp;#039; 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&amp;#039;s a usable platform on which to run Giocoso, too. MacOS is slightly tricker: at heart, it&amp;#039;s Unix (BSD) with a proprietary user land. It can therefore run Giocoso natively, provided certain Linux-y software environments are provided to it beforehand.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Another way of describing what Giocoso means to &lt;em&gt;me&lt;/em&gt; is simply this: &lt;strong&gt;it&amp;#039;s a personal &amp;#039;radio station&amp;#039; for classical music&lt;/strong&gt;, capable of playing a &amp;#039;wall&amp;#039; 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.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 What is Giocoso?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;what_is_giocoso&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1488-7331&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;why_giocoso&quot;&gt;2.0 Why Giocoso?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
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&amp;#039;s whims and wishes. So why bother writing a new one? Because none of the media players on any of the platforms I&amp;#039;ve mentioned were, I think, designed with classical music in mind and thus none of them were entirely &amp;#039;right&amp;#039; for me and my classically-inspired requirements. Some of these requirements I&amp;#039;ve already touched on in Section 1, but they perhaps bear repeating a little here!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 Why Giocoso?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;why_giocoso&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;7332-7958&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;tracks&quot;&gt;2.1 Tracks&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Every software music player I know of displays and works with &amp;#039;tracks&amp;#039;. Here&amp;#039;s DeaDBeef playing some Brahms, for example:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20210619_130311.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20210619_130311.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20210619_130311.png?w=650&amp;amp;tok=069d88&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Is the display here of any usefulness? To some extent, yes: it&amp;#039;s good to know that Brahm&amp;#039;s Symphony No. 3 consists of four movements, and it&amp;#039;s nice to know each movement&amp;#039;s general tempo marking. You could get that information from &lt;a href=&quot;https://en.wikipedia.org/wiki/Symphony_No._3_(Brahms)&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://en.wikipedia.org/wiki/Symphony_No._3_(Brahms)&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Wikipedia&lt;/a&gt;, of course, or even (perish the thought, I realise) a book! But you can&amp;#039;t deny that seeing the information here, within your music player, is convenient.
&lt;/p&gt;

&lt;p&gt;
So no, it&amp;#039;s not the &lt;em&gt;display&lt;/em&gt; of track information that bothers me. It&amp;#039;s the fact that this display invites &amp;#039;selective clicking&amp;#039; 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&amp;#039;m talking about if I mention &amp;#039;Radio 3 v. Classic FM&amp;#039;; Australian readers will similarly spot the similarity of approach if I say &amp;#039;2MBS FM v ABC Classic FM&amp;#039;. The one tends to play whole compositions without interruption; the other tends to play just &amp;#039;the good bits&amp;#039;, without taxing its audience too much :)
&lt;/p&gt;

&lt;p&gt;
Now, it&amp;#039;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&amp;#039;t think you should want to be distracted or tempted by the existence of &amp;#039;tracks&amp;#039; -and hence my desire to write a &lt;em&gt;&lt;strong&gt;trackless&lt;/strong&gt;&lt;/em&gt; music player.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.1 Tracks&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;tracks&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;7959-9641&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;optionally_randomising&quot;&gt;2.2 Optionally Randomising&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Over the years, I have got into the bad habit of over-playing some composers and under-playing others. There&amp;#039;s nothing morally wrong with doing that! We have favourites, of course, and there&amp;#039;s no harm in indulging ourselves with our favourites, whether that&amp;#039;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 &lt;em&gt;new&lt;/em&gt; favourites. For a wider musical experience, in other words, I wanted a music player that would &lt;em&gt;make&lt;/em&gt; 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&amp;#039;s ability to randomise its plays was thus a crucial and key reason for writing it in the first place.
&lt;/p&gt;

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

&lt;p&gt;
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 &lt;em&gt;only&lt;/em&gt; play Britten&amp;#039;s music… but which &lt;em&gt;specific&lt;/em&gt; bit of Britten it decides, by more random selection. In other words, I&amp;#039;m after a spectrum from &amp;#039;totally random&amp;#039; through &amp;#039;random within a specified preference&amp;#039; all the way to &amp;#039;not random at all: I&amp;#039;ll tell you what to play&amp;#039;. Giocoso fits these requirements, but I don&amp;#039;t know of another player that comes close to doing so. So that&amp;#039;s another reason why I felt &amp;#039;writing my own&amp;#039; was required.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.2 Optionally Randomising&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;optionally_randomising&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;9642-11489&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;work_with_the_metadata&quot;&gt;2.3 Work with the Metadata&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

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

&lt;p&gt;
So, for example, the &lt;a href=&quot;https://www.strawberrymusicplayer.org/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://www.strawberrymusicplayer.org/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Strawberry music player&lt;/a&gt; will certainly let me search for the word &amp;#039;Bernstein&amp;#039;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_200449.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20230912_200449.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_200449.png?w=650&amp;amp;tok=08e261&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…but why are works by Copland, Berg, Milhaud,  Mahler and Wagner appearing in that list? Because Bernstein &lt;em&gt;conducted&lt;/em&gt; those recordings, even if he didn&amp;#039;t &lt;strong&gt;compose&lt;/strong&gt; them! Now, it&amp;#039;s possible with Strawberry and other players I know of to fix this by adding some &amp;#039;search syntax&amp;#039; to proceedings:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_200705.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20230912_200705.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_200705.png?w=650&amp;amp;tok=df7713&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
By using the search term &amp;#039;Composer:Bernstein&amp;#039;, you force Strawberry to inspect &lt;em&gt;only&lt;/em&gt; the &amp;#039;composer&amp;#039; tag, and that obviously works to narrow things down nicely. Great! So what&amp;#039;s the problem? Well, the problem is that this &amp;#039;tag:value&amp;#039; search syntax is the way Strawberry does it, but it&amp;#039;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:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/2023-09-28-14_06_40-foobar-search.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:2023-09-28-14_06_40-foobar-search.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/2023-09-28-14_06_40-foobar-search.png?w=650&amp;amp;tok=66d6b8&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

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

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/2023-09-28-14_06_41-foobar-search.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:2023-09-28-14_06_41-foobar-search.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/2023-09-28-14_06_41-foobar-search.png?w=650&amp;amp;tok=75c307&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You can see that you have to change the filter text to be in the form of &amp;#039;field HAS &amp;lt;some value&amp;gt;&amp;#039; or &amp;#039;field IS &amp;lt;something&amp;gt;&amp;#039; and so on: the syntax is not exactly difficult, but it&amp;#039;s different to that used by Strawberry (and other players) and something else to have to remember -and in Foobar2000&amp;#039;s case, if you don&amp;#039;t type the HAS or IS in upper-case, it won&amp;#039;t work at all. It&amp;#039;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.
&lt;/p&gt;

&lt;p&gt;
Giocoso Version 3&amp;#039;s approach to this is as follows:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_193227-820x538.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20230912_193227-820x538.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_193227-820x538.png?w=650&amp;amp;tok=cc437a&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

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

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_193450-820x538.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20230912_193450-820x538.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_193450-820x538.png?w=650&amp;amp;tok=f7bb4f&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…and there&amp;#039;s not a dose of Mahler or Bartók in sight!
&lt;/p&gt;

&lt;p&gt;
If I fill in the search filter this way instead:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_192902-820x538.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20230912_192902-820x538.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_192902-820x538.png?w=650&amp;amp;tok=fa51b3&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…now I&amp;#039;m asking Giocoso to look for any recording where Bernstein is listed as one of the performers (perhaps as pianist, but most commonly he&amp;#039;s going to be the conductor). The playlist this search produces looks as follows:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_193711-820x538.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20230912_193711-820x538.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20230912_193711-820x538.png?w=650&amp;amp;tok=faca76&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

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

&lt;p&gt;
I wanted a music player, in other words, that understood how I&amp;#039;d tagged my music and would work with that tagging strategy to enable meaningful musical &lt;em&gt;discovery&lt;/em&gt; 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 &lt;em&gt;meaning&lt;/em&gt; 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.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.3 Work with the Metadata&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;work_with_the_metadata&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;11490-16313&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;statistics&quot;&gt;2.4 Statistics&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
I am quite fanatical about keeping track of what I&amp;#039;ve listened to, who my most-listened-to composers are, and so on. Few music players I&amp;#039;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 &lt;em&gt;local&lt;/em&gt; 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 &lt;a href=&quot;https://www.bbritten.com/agstats/agstats&quot; class=&quot;wikilink1&quot; title=&quot;agstats:agstats&quot; data-wiki-id=&quot;agstats:agstats&quot;&gt;to my own website&lt;/a&gt; in ways which allow easy, graphical visualisation of what I&amp;#039;ve been listening to: see, for example, &lt;a href=&quot;https://www.bbritten.com/current/chart&quot; class=&quot;wikilink1&quot; title=&quot;current:chart&quot; data-wiki-id=&quot;current:chart&quot;&gt;this page&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
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.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.4 Statistics&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;statistics&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;16314-17392&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;summary&quot;&gt;2.5 Summary&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
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 &lt;em&gt;that&amp;#039;s&lt;/em&gt; why Giocoso exists! If any of these points ring a bell with you, then you&amp;#039;re definitely the target market for Giocoso -and I think you&amp;#039;ll find it useful, too.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.5 Summary&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;summary&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;17393-17821&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;is_giocoso_for_everyone&quot;&gt;3.0 Is Giocoso for Everyone?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
With all the above in mind, I hope it&amp;#039;s clear that Giocoso isn&amp;#039;t intended as a general purpose music player that everyone will find appropriate! Whilst music &lt;em&gt;can&lt;/em&gt; be pure entertainment, to be sampled and dabbled in, like a plate of &lt;em&gt;petits fours&lt;/em&gt;, Giocoso doesn&amp;#039;t expect you to be listening to music that way! It plays without interruption; it doesn&amp;#039;t display pretty visualizations on your computer screen whilst it&amp;#039;s doing it; it puts sound quality above hard disk space; it expects you to have tagged your music files &lt;a href=&quot;https://www.bbritten.com/articles/axioms&quot; class=&quot;wikilink1&quot; title=&quot;articles:axioms&quot; data-wiki-id=&quot;articles:axioms&quot;&gt;&amp;#039;properly&amp;#039;&lt;/a&gt;; 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&amp;#039;t &lt;em&gt;have&lt;/em&gt; to be classical music that you&amp;#039;re listening to, but Giocoso was written expecting it to be. If you&amp;#039;re the kind of listener that loves classical &lt;em&gt;and&lt;/em&gt; jazz, for example, I think you&amp;#039;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&amp;#039;t play well with “pop music”, however that might be defined.
&lt;/p&gt;

&lt;p&gt;
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&amp;#039;t fit &lt;em&gt;its&lt;/em&gt; model, it&amp;#039;s not going to fit &lt;em&gt;your&lt;/em&gt; requirements, therefore.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Is Giocoso for Everyone?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;is_giocoso_for_everyone&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;17822-19318&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;what_s_with_the_name&quot;&gt;4.0 What&amp;#039;s with the name?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
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.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/gioinstall&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:gioinstall&quot; data-wiki-id=&quot;softwares:giocoso:gioinstall&quot;&gt;Installing Giocoso 3&lt;/a&gt;&lt;/strong&gt; | [Using Giocoso 3] | [Giocoso Pro] | [Miscellaneous] |
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.0 What&amp;#039;s with the name?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;what_s_with_the_name&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;19319-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/0/0c76bffec93cdfa2dfb3726e6af648e7.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/gioinstall">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-31T10:59:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>gioinstall</title>
        <link>https://www.bbritten.com/softwares/giocoso/gioinstall</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;installing_giocoso&quot;&gt;Installing Giocoso&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Installing Giocoso&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_giocoso&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-33&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;operating_system_support&quot;&gt;1.0 Operating System Support&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
There are four levels of support for installing Giocoso onto assorted Linux distros and other operating systems, as follows:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Tier 1: Used by me daily, on real hardware, extensively tested, guaranteed to work&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Tier 2: Used by me infrequently, only in virtual machines, lightly tested, tested extensively in the past, things will almost certainly work&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Tier 3: Hardly ever used by me and then only in virtual machines. No testing done, unless specific issues are reported, but has worked in the past just fine, so things &lt;em&gt;ought&lt;/em&gt; still to work, too&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Tier 4: Thought to work, and tested to work in the past, but you&amp;#039;re really on your own.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Putting specific, named distros into each tier goes as follows:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Tier 1: AlmaLinux 9 and 10; Raspberry Pi &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;, Fedora, Linux Mint, Apple macOS&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Tier 2: Debian, EndeavourOS, Ubuntu&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Tier 3: OpenSuse Leap &amp;amp; Tumbleweed, GeckoLinux, Arch, Manjaro, Garuda Linux, Devuan, Linux Mint Debian Edition, Peppermint &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;, MX Linux, AntiX Linux, Pop! &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;, Linux Lite, Zorin &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;, Elementary &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;, KDE Neon, Tuxedo &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;, Nobara, Ultramarine&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Tier 4: Windows&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Every listed distro &lt;em&gt;did&lt;/em&gt; run Giocoso perfectly at some time in the past and, if the distro developers haven&amp;#039;t messed around with core libraries too much, they &lt;em&gt;should&lt;/em&gt; still work. However, only those distros in Tier 1 will receive extensive real-world testing from Version 3.32 and up. Other distros will receive either light-touch testing to make sure most things seem to work fine (Tier 2), or will only be tested on-demand by users reporting specific problems (Tier 3). I&amp;#039;ve provided some distro-specific notes and gotchas elsewhere.
&lt;/p&gt;

&lt;p&gt;
Apple became a Tier 1 operating system when I decided at the end of January 2026 to invest in a brand new Apple Silicon iMac. It&amp;#039;s now my principle desktop operating system and, as my daily driver, is going to be the platform on which I test things out most thoroughly. I also have access to a couple of old Apple iMacs (from 2015 and 2012) that use Intel CPUs and can only run modern versions of the operating system thanks to Open Core Legacy Patcher: their &amp;#039;officially supported&amp;#039; operating systems end with Catalina and Monterey respectively. Accordingly, Giocoso will be a Tier 1 supported application on only Catalina, Monterey and whatever &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; version runs on a 2024 iMac (Tahoe, probably). All other &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; versions will be Tier 4 support: definitely do-able and definitely done and &lt;a href=&quot;https://bbritten.com/softwares/giocoso/macos&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://bbritten.com/softwares/giocoso/macos&quot; rel=&quot;ugc nofollow noopener&quot;&gt;documented&lt;/a&gt;: but you&amp;#039;re essentially on your own.
&lt;/p&gt;

&lt;p&gt;
Windows is a bit of a special case, because it probably runs Giocoso just fine… but I have no means of knowing that for sure. Windows 10 reached end of Microsoft&amp;#039;s official support back in October 2025, so all the hardware I have running Giocoso on Windows 10 is now no longer representative of anything supported by the operating system&amp;#039;s own manufacturer. Windows 11 is, of course, fully supported by Microsoft -but I literally have no hardware that is officially supported for running it. I can &lt;em&gt;hack&lt;/em&gt; Windows 11 onto a bunch of spare hardware, but it will be an unsupported and unrepresentative platform. The principle, however, is that if you get Windows running the Windows Subsystem for Linux (WSL2) then you can install one of the supported distros on that (for example, Ubuntu or Fedora) and Giocoso will run perfectly well in that environment. So, it&amp;#039;s not that Giocoso won&amp;#039;t run on Windows: it&amp;#039;s just that I now expend zero development effort proving it does so. Any issues arising as you try to run it are therefore really yours to resolve. I will certainly offer advice and help if asked, but it will be merely on a &amp;#039;best efforts&amp;#039; basis. In the meantime, I have written &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/win11&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:win11&quot; data-wiki-id=&quot;softwares:giocoso:win11&quot;&gt;installation instructions for Windows 11 here&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Giocoso does &lt;strong&gt;not&lt;/strong&gt; work on the Solus Linux distro.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Operating System Support&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;operating_system_support&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;34-3899&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;installation&quot;&gt;2.0 Installation&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The basic installation procedure for any supported operating system is, in a new terminal session:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wget https://software.bbritten.com/gioinst&lt;/pre&gt;

&lt;p&gt;
The installer is small (around 20KB) , so it will take hardly any time to download it. Once  the installer has been downloaded, you launch it in the same folder you saved it to, with the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;bash gioinst&lt;/pre&gt;

&lt;p&gt;
You will first see a screen warning you that the installer will make quite a few changes to your system, if you let it:
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20251017_164858.jpg?w=650&amp;amp;tok=a5056e&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
You need to type &amp;#039;y&amp;#039; (and then press [Enter]) to proceed. If you type anything else, the installer will terminate without having touched your system at all.
&lt;/p&gt;

&lt;p&gt;
At the end of the installation, when you first run Giocoso, you &lt;em&gt;may&lt;/em&gt; find the program display garbled (it is equally possible you won&amp;#039;t!). If you do, just visit the &lt;strong&gt;Administration&lt;/strong&gt; menu, take &lt;strong&gt;Option 2&lt;/strong&gt; to “edit the configuration file” and then press [Enter] through the various options (without changing any of them, really) until you return to the main program display: you should find all visual glitches gone (though you may need to go &lt;em&gt;back&lt;/em&gt; into the configuration options to adjust the size of the program logo: it defaults to being 220&amp;times;220 pixels in size and that might be too large on standard 1080p resolution displays).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 Installation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;3900-5274&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;software_packages_needed_for_giocoso_to_work&quot;&gt;2.1 Software packages needed for Giocoso to work&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
To start with, the Giocoso installer will check for the presence of various packages on your system and will seek to install any that it finds to be missing. You can usually just let it do it&amp;#039;s thing at this point, but if you are interested, here are the packages/programs that Giocoso deems essential to install:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; sqlite3 (a database)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ImageMagick (an image processing program)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ncurses (a program that allows command-line interfaces to look a bit more like graphical interfaces)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; grep (a text processing program)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; libsixel (a program which allows pictures to be displayed inside a terminal)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; util-linux (a program that allows for the generation of universally unique identifiers, or UUIDs)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; fontconfig (a utility for managing fonts) bc (a computational library that allows Bash to do floating point arithmetic)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; fmt (a tool allowing text messages to be wrapped across a terminal with proper formatting)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; xdotool (a utility allowing command-line management of window placement and sizing)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; xdpyinfo (a utility for determining the current screen resolution)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; flac (the library that allows FLAC audio files to be read and understood)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ffmpeg (an audio player)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; xclip (a little utility allowing command line management of the clipboard)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; nano (a simple text editor)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; curl (a command line tool for fetching files across the Internet)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; xterm (a terminal emulator or console window)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; dialog (a program that allows programs to draw &lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt;-like message boxes, file selectors and so on)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
If having any of those installed on your system gives you cause for concern, type &amp;#039;n&amp;#039; when the installer prompts you and give up on the idea of installing Giocoso altogether: the program cannot run without all of them being present, I&amp;#039;m afraid.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.1 Software packages needed for Giocoso to work&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;software_packages_needed_for_giocoso_to_work&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;5275-7108&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;a_word_about_fonts_and_display_sizes&quot;&gt;2.2 A Word About Fonts and Display Sizes&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Giocoso runs in a terminal session that is ideally at least 103 columns wide and 28 tall. Your choice of default font to use in such a terminal session will determine how Giocoso appears. It can look like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_peppermint_2025-10-21_13_34_40.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_peppermint_2025-10-21_13_34_40.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_peppermint_2025-10-21_13_34_40.png?w=650&amp;amp;tok=8066d6&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…or like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_peppermint_2025-10-21_13_35_44.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_peppermint_2025-10-21_13_35_44.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_peppermint_2025-10-21_13_35_44.png?w=650&amp;amp;tok=390f1f&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…or, if you really decide to pick unfortunate choices of default font and font-size, this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_peppermint_2025-10-21_13_36_17.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_peppermint_2025-10-21_13_36_17.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_peppermint_2025-10-21_13_36_17.png?w=650&amp;amp;tok=a27395&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
From that last example in particular, you can see that injudicious font choice (or font-size choice) can really mess with Giocoso&amp;#039;s display, with the program logo over-writing or colliding with the line drawing characters. To mitigate against this, Giocoso installs a few open source fonts whose existence can then be relied on to produce acceptable-looking program display. The main one is &lt;em&gt;Luxi Mono&lt;/em&gt;: choose that as your terminal&amp;#039;s default font at 12-point size and Giocoso is more or less guaranteed to display things correctly. The program shortcuts that the Giocoso installer places on your desktop and in your start menu are pre-configured to use Luxi Mono 12-point for their display, too, so they are auto-configured to display things correctly &amp;#039;out of the box&amp;#039;.
&lt;/p&gt;

&lt;p&gt;
If you choose to use different fonts, that&amp;#039;s fine too: but you may have to play around with point sizes to get an acceptable program display.
&lt;/p&gt;

&lt;p&gt;
Also note that the Giocoso installer will install the Libre Baskerville font (another open source font, so no licensing issues arise). This is a non-monospaced font (so has nothing to do with the program display in a terminal session), but is instead used to create the &amp;#039;caption labels&amp;#039; that appear underneath displayed album art. The use of this font is hard-coded and cannot be changed.
&lt;/p&gt;

&lt;p&gt;
A final factor to consider that will affect program display is the size of the album art that Giocoso will display as each new recording starts. This is configurable in the Administration menu, Option 2:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20251021_135006.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20251021_135006.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20251021_135006.jpg?w=650&amp;amp;tok=11ccdf&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The default size is 320 (meaning that images will be displayed with a width of 320 pixels). You can increase or decrease this as the mood takes you, but don&amp;#039;t expect the results to look very good if you over-size things:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231013_121247.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231013_121247.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231013_121247.png?w=650&amp;amp;tok=12cb75&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Use of Giocoso may need a little bit of finagling at the start, in order to get these sorts of visual issues sorted. In general, however, if you&amp;#039;re displaying Giocoso in a 103&amp;times;28 terminal with a default, monospaced font that&amp;#039;s 12px in size and with album art dimensions set to 320px, you will &lt;em&gt;probably&lt;/em&gt; have zero display problems.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.2 A Word About Fonts and Display Sizes&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;a_word_about_fonts_and_display_sizes&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;7109-9936&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;getting_started_post-install&quot;&gt;3.0 Getting Started, post-Install&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Once Giocoso is installed, you can launch it by (a) clicking on the launcher provided on the Desktop (some distros require you to &amp;#039;trust&amp;#039; or &amp;#039;mark as executable&amp;#039; the launcher before it will work); or (b) clicking the option provided somewhere in the main menu, which is usually to be found under &amp;#039;Multimedia&amp;#039; or (depending on distro) &amp;#039;Sounds &amp;amp; Video&amp;#039;. The main program display should then appear:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20251017_171540.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20251017_171540.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20251017_171540.jpg?w=650&amp;amp;tok=b68b64&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Operation of the program beyond this point is hopefully self-explanatory: the &lt;strong&gt;Play Music&lt;/strong&gt; menu lets you select and play music; the &lt;strong&gt;Database Management&lt;/strong&gt; menu lets you create a music database and then add new recordings to it; the &lt;strong&gt;Reporting&lt;/strong&gt; menu lets you query your music database and generate reports from it, such as how many recordings you own, what proportion of them you&amp;#039;ve played and so on; the &lt;strong&gt;Administration&lt;/strong&gt; menu lets check for program updates or re-configure the persistent configuration file, and similar tasks. The &lt;strong&gt;Pro&lt;/strong&gt; menu is where advanced networking functionality resides (for example, pausing a play of music in your listening room and resuming it in the garden shed!). 
&lt;/p&gt;

&lt;p&gt;
Use the left- and right-arrow keys to select a menu option and have its various options displayed. You can also tap the letter corresponding to the relevant menu: &amp;#039;R&amp;#039; jumps you to the &lt;strong&gt;R&lt;/strong&gt;eporting menu, for example; &amp;#039;D&amp;#039; gets you directly to the &lt;strong&gt;D&lt;/strong&gt;atabase Management menu, and so on. Once any given menu is displayed, tap the number shown against a menu item to select that item. For example, tap &amp;#039;2&amp;#039; when the Play Music menu is selected to perform a &amp;#039;play music from selection filters&amp;#039; operation.
&lt;/p&gt;

&lt;p&gt;
The usual way to get started with the program would be, though not necessarily in this order:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Database Management → Create a music database&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Administration → Create or Edit the Configuration File&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Play Music → Play music with defaults&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The underlying issue here is that you need (a) to have a database listing all the FLACs you possess; and (b) to have Giocoso configured to open that database by default; and (c) only when the configured default database name matches the database you&amp;#039;ve actually created can you then play music using it.
&lt;/p&gt;

&lt;p&gt;
By default, Giocoso is configured to expect the existence of a database called &lt;strong&gt;music&lt;/strong&gt;. If you therefore start by creating a database of that name, Giocoso will be fine: as soon as a database of that name is populated with details of the music you own, you&amp;#039;ll be able to use Giocoso to play it. If you want to name your database something else, that&amp;#039;s OK too: use the Database Management menu to create it, then use the Administration menu to adjust the configuration file to use that distinctively-named database as the default and &lt;em&gt;then&lt;/em&gt; you&amp;#039;ll be able to play music.
&lt;/p&gt;

&lt;p&gt;
Beyond that quick-start approach, however, you should read the relevant pages elsewhere in &lt;a href=&quot;https://www.bbritten.com/giocoso&quot; class=&quot;wikilink2&quot; title=&quot;giocoso&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;giocoso&quot;&gt;the user manual&lt;/a&gt; for an exploration (and explanation!) of the rest of the program&amp;#039;s functionality.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Getting Started, post-Install&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;getting_started_post-install&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;9937-13015&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;conclusion&quot;&gt;4.0 Conclusion&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Summarising things as compactly as I can, then:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Read your distro&amp;#039;s specific installation notes, to see if there are any pre- or post-installation steps you&amp;#039;ll need to take&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Fully update your distro, so that it&amp;#039;s using the latest packages and patches&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;wget &lt;a href=&quot;https://software.bbritten.com/gioinst&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://software.bbritten.com/gioinst&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://software.bbritten.com/gioinst&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;bash gioinst&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Launch Giocoso and create a new database. If it&amp;#039;s called “music”, play music immediately. If it&amp;#039;s called something other than “music”, alter the configuration file to use the non-default-named database instead and &lt;em&gt;then&lt;/em&gt; play music&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
I hope all your Giocoso Version 3 installations work successfully and that you get up-and-running with the new program quickly and painlessly!
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
[ &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Home Page&lt;/a&gt; ]
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.0 Conclusion&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;conclusion&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;13016-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/2/2acb764c9467bee1e565cb1a0e79b764.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/giopro">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-09T14:08:02+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>giopro</title>
        <link>https://www.bbritten.com/softwares/giocoso/giopro</link>
        <description>
&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/playmenu/giocosoicopro.png?w=220&amp;amp;tok=e52da2&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;
&lt;/p&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;giocoso_pro&quot;&gt;Giocoso Pro&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
“Giocoso Pro” is the name I gave to a set of extensions to basic Giocoso functionality that permit multiple playing devices to access a single, shared database of recordings and plays. That&amp;#039;s it. There&amp;#039;s no cost involved in switching these features on: it&amp;#039;s &lt;em class=&quot;u&quot;&gt;not&lt;/em&gt; as if there&amp;#039;s &amp;#039;freebie, cheapie, Giocoso&amp;#039; and then &amp;#039;pay to drive the gleaming, clever Pro version&amp;#039;. Everything Pro is available to every user of perfectly standard Giocoso, too. In fact, Pro features are switch off-and-on-able at will. The only factor in deciding whether you want to use the Pro features is: do I have multiple computers playing the same set of recordings, and if the bedroom laptop plays something at night, I&amp;#039;d like reports from my downstairs main PC to know about those plays the next morning.
&lt;/p&gt;

&lt;p&gt;
A special &amp;#039;Pro&amp;#039; menu appears when you enable Pro functionality (and disappears if you turn that functionality back off at any point). The links below step you through the various options of that Pro menu. There&amp;#039;s also an introductory essay introducing you to the architectural and practical underpinnings of the Pro features, and a couple of essays on how you go through the necessary prerequisite of building a special Giocoso Pro Server.
&lt;/p&gt;
&lt;div class=&quot;table sectionedit2&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/proconcepts&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:proconcepts&quot; data-wiki-id=&quot;softwares:giocoso:proconcepts&quot;&gt;Giocoso Pro Concepts&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/probuild1&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:probuild1&quot; data-wiki-id=&quot;softwares:giocoso:probuild1&quot;&gt;Building a Giocoso Pro Server on Non-Arch Linux&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/probuild2&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:probuild2&quot; data-wiki-id=&quot;softwares:giocoso:probuild2&quot;&gt;Building a Giocoso Pro Server on Arch Linux&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promdbchoice&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promdbchoice&quot; data-wiki-id=&quot;softwares:giocoso:promdbchoice&quot;&gt;Running Giocoso Pro with MySQL rather than MariaDB&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;The Pro Menu&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;1312-1686&amp;quot;} --&gt;&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; |
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Pro&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_pro&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;64-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/9/97a4710c33c51debeea065969a1f5d42.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/hotkeys">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T18:00:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>hotkeys</title>
        <link>https://www.bbritten.com/softwares/giocoso/hotkeys</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;hot_keys&quot;&gt;Hot Keys&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
“Hot keys” are alpha-numeric keys you can tap at various points when using Giocoso to achieve various things or invoke particular bits of functionality. You will see all sorts of hot keys indicated in the main Giocoso program display, of course: when you&amp;#039;re playing music, for example, the bottom of the screen displays this sort of thing:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250225_103517.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250225_103517.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250225_103517.jpg?w=650&amp;amp;tok=742945&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…which tells you precisely what tapping the A, T, P and S keys do. The top of the screen similarly displays options for selecting the &lt;strong&gt;P&lt;/strong&gt;lay Music, &lt;strong&gt;D&lt;/strong&gt;atabase Administration, &lt;strong&gt;R&lt;/strong&gt;eports and so on menus. These are &lt;em&gt;obvious&lt;/em&gt; hot keys.
&lt;/p&gt;

&lt;p&gt;
In this short article, however, I&amp;#039;m not interested in listing hot keys which are clearly indicated and explained on the main program displays in this way. Rather, I want to list the  “hidden” hot keys which do things, but for which no indication is given even for their mere existence!
&lt;/p&gt;

&lt;p&gt;
As of Giocoso Version 3.32, therefore, these hidden hot keys are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; M - Launches the Mgiocoso control panel application&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; G - Launches a secondary non-music-playing instance of Giocoso (so you can reports, for example, whilst music is playing in the initial session)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; B - Launches the Sqlitedbbrowser program (to query and manage a local, Sqlite database) &lt;strong&gt;if&lt;/strong&gt; it has been installed on your system. Giocoso checks for its presence and launches it if it knows it&amp;#039;s been installed. If it happens, tapping &amp;#039;B&amp;#039; simply brings up a message advising you to install the program yourself. You&amp;#039;ll need to use your distro&amp;#039;s innante package management features to accomplish that (on Ubuntu, for example, a simple &lt;strong&gt;sudo apt install sqlitebrowser&lt;/strong&gt; will usually do the trick).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; V - Invokes the ALSA volume mixer, allowing you to alter playback volume (or alter left/right balance etc)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Q or X - Quits Giocoso immediately, without going via a menu option first&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; F - &lt;em&gt;Only available during music playback&lt;/em&gt;. If music is playing, the &amp;#039;F&amp;#039; key opens your system file manager in the folder that the playing music comes from (so you can, for example, open the booklet PDF that you might store in the same folder as the FLACs)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; K - &lt;em&gt;Only available during music playback&lt;/em&gt;. If music is playing, the &amp;#039;K&amp;#039; key will search through the currently-playing folder for a file called &amp;#039;booklet.pdf&amp;#039; and, if present, will open it in your system&amp;#039;s default PDF reader. If no such file exists, then the K key does nothing at all, and no warnings are given.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Note that all hot keys are case-&lt;strong&gt;in&lt;/strong&gt;sensitive. Whether you tap &amp;#039;K&amp;#039; or &amp;#039;k&amp;#039;, for example, is irrelevant: the function the key performs will be invoked just as successfully either way.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;

&lt;!-- cachefile /var/www/dokuwiki/data/cache/a/a18af6f775717a1a1686b98ee012790b.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/linux">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-29T18:03:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>linux</title>
        <link>https://www.bbritten.com/softwares/giocoso/linux</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;linux_quirks_and_notes&quot;&gt;Linux Quirks and Notes&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Linux Quirks and Notes&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;linux_quirks_and_notes&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-37&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The main instructions for installing Giocoso on Linux are to be found in &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/gioinstall&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:gioinstall&quot; data-wiki-id=&quot;softwares:giocoso:gioinstall&quot;&gt;the main, parent article&lt;/a&gt;. Some distros will have odd &amp;#039;quirks&amp;#039; that need addressing before the &amp;#039;standard install steps&amp;#039; can work, however, and that&amp;#039;s what will be documented here.
&lt;/p&gt;

&lt;p&gt;
Obviously, too, issues can arise depending on the &lt;em&gt;desktop environment&lt;/em&gt; you choose to use, rather than the distro: the default terminal emulator used by some DEs will work fine with Giocoso… and then sometimes they won&amp;#039;t! Those sorts of quirks and issues are also discussed here.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;38-618&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;general_album_art_display_issues&quot;&gt;2.0 General Album Art Display Issues&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Giocoso likes to display album art whenever music is playing and, by default, it likes to display that album art &lt;em&gt;within&lt;/em&gt; the terminal emulator in which Giocoso itself is running. To do that, Giocoso uses what are called “sixel graphics”: if your chosen terminal emulator supports sixel graphics, you&amp;#039;ll get album art; if not, you won&amp;#039;t. Unfortunately, some terminals that &lt;em&gt;used&lt;/em&gt; to support sixel graphics have recently &lt;em&gt;stopped&lt;/em&gt; supporting it. 
&lt;/p&gt;

&lt;p&gt;
For example, here is a screenshot from Debian 13 running KDE Plasma and with Giocoso running in that desktop environment&amp;#039;s default terminal emulator, Konsole:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-28_at_14.02.06.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2025-12-28_at_14.02.06.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-28_at_14.02.06.png?w=650&amp;amp;tok=4b11a3&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
So, Konsole (version 25.04) is quite happy to display sixel graphics. But here&amp;#039;s Endeavour &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; using KDE Plasma and again running Giocoso in Konsole (version 15.12),
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_10.30.36.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2025-12-29_at_10.30.36.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_10.30.36.png?w=650&amp;amp;tok=7c69c5&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Notice that the music playback is working just fine… but there is no album art on display. Somewhere between April and December of 2025, the Konsole developers stopped compiling the terminal with sixel graphics support. Endeavour &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; being a rolling distro based on Arch, its packages are always being kept bang up-to-date and it has therefore picked up the newer version without sixel graphics whereas &amp;#039;solid, stable&amp;#039; Debian hasn&amp;#039;t (yet).
&lt;/p&gt;

&lt;p&gt;
This is &lt;em&gt;not&lt;/em&gt; just a KDE/Konsole issue, however. On most distros, the Giocoso installer will leave a launcher icon for Giocoso on your desktop. Double-click on that and Giocoso will launch within the &lt;strong&gt;uxterm&lt;/strong&gt; terminal emulator. Here&amp;#039;s Debian running Giocoso in &lt;em&gt;that&lt;/em&gt;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_10.55.12.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2025-12-29_at_10.55.12.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_10.55.12.png?w=650&amp;amp;tok=de4f6f&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The little &amp;#039;X&amp;#039; icon in the top left-hand corner of the display shows you that this is uxterm: the presence of album art tells you that Debian&amp;#039;s version of uxterm has no problem with sixel graphics. Again, on Endeavour &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; that same scenario produces this result:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_10.58.44.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2025-12-29_at_10.58.44.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_10.58.44.png?w=650&amp;amp;tok=174759&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You&amp;#039;ll have to take my word for it that that&amp;#039;s still Giocoso running inside uxterm, because the &amp;#039;X&amp;#039; icon has been over-written by Giocoso&amp;#039;s own icon. But it &lt;em&gt;is&lt;/em&gt; uxterm, this time being &lt;strong&gt;unable&lt;/strong&gt; to display album art. 
&lt;/p&gt;

&lt;p&gt;
I hasten to add that this is &lt;strong&gt;not&lt;/strong&gt; a Debian v. Endeavour &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; issue. It&amp;#039;s not even a KDE v. Gnome or any other desktop environment issue. It all depends on how up-to-date your terminal emulation software is and whether its developers have compiled in support for sixel graphics or not …and that can affect any distro and any default terminal application. Here, for example, is Giocoso running on Endeavour &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; inside the Gnome Terminal:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_11.03.52.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2025-12-29_at_11.03.52.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_11.03.52.png?w=650&amp;amp;tok=27b6c0&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…and again, there&amp;#039;s no in-terminal album art. In this case, however, the result of using Gnome Terminal on Debian &lt;em&gt;would be exactly the same&lt;/em&gt;: that particular terminal has never supported sixel graphics, to my knowledge.
&lt;/p&gt;

&lt;p&gt;
The issue is therefore one that can affect different distros and different terminals in a slightly unpredictable way. There are a couple of workarounds available to you, however. One is to stop relying on sixel graphics and instead switch to using &lt;strong&gt;kitty graphics&lt;/strong&gt;, which was a capability introduced to Giocoso in version 3.32. You do that by taking the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt; and switching the last of the yes/no parameters, &lt;em&gt;Use kitty graphics for in-terminal display&lt;/em&gt;, to a value of &lt;strong&gt;yes&lt;/strong&gt;. Do that and Giocoso will attempt to draw in-terminal graphics using a protocol that many terminal emulators that don&amp;#039;t do sixel graphics support natively. Here&amp;#039;s Konsole in Endeavour &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;, for example, after switching on the option to use kitty graphics: 
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_11.13.13.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2025-12-29_at_11.13.13.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_11.13.13.png?w=650&amp;amp;tok=75db99&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…and, as you can see, Konsole suddenly has no problem displaying album art once more. If you try using kitty graphics in a terminal that &lt;em&gt;doesn&amp;#039;t&lt;/em&gt; support that protocol, however, the results will be ugly:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_11.17.14.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2025-12-29_at_11.17.14.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2025-12-29_at_11.17.14.png?w=650&amp;amp;tok=57ced1&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s Gnome Terminal once more: it doesn&amp;#039;t support kitty &lt;em&gt;or&lt;/em&gt; sixel graphics!
&lt;/p&gt;

&lt;p&gt;
If you find yourself in a Gnome desktop environment, therefore, you won&amp;#039;t find that simply switching Giocoso to using kitty graphics resolves the dilemma. Instead, you&amp;#039;d really need to switch to using the &lt;strong&gt;Kitty Terminal&lt;/strong&gt;, which Giocoso has installed as a dependency since version 3.32: it should be accessible from your standard distro&amp;#039;s start menu. Kitty graphics don&amp;#039;t &lt;em&gt;have&lt;/em&gt; to be used within the Kitty terminal emulator (as the example of kitty graphics working in Konsole showed earlier), but obviously the Kitty Terminal is designed to understand the kitty graphics protocol from the get-go, so it&amp;#039;s a reliable fall-back option.
&lt;/p&gt;

&lt;p&gt;
On macOS, I find I need to install the WezTerm terminal emulator (which understands sixel graphics) and &lt;em&gt;not&lt;/em&gt; enable the use of kitty graphics. WezTerm is also &lt;a href=&quot;https://wezterm.org/install/linux.html#raw-linux-binary&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://wezterm.org/install/linux.html#raw-linux-binary&quot; rel=&quot;ugc nofollow noopener&quot;&gt;available for Linux&lt;/a&gt;, provided your distro supports the use of Flatpack packaged applications.
&lt;/p&gt;

&lt;p&gt;
Another alternative (though one I find less than satisfactory) is to not use in-terminal display of album art at all: the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt; also gives you a chance to set a parameter to &amp;#039;Display album art in its own window&amp;#039;, which is a much simpler proposition, involving no particular graphics protocol dependencies: that option will work on every distro, desktop environment and operating system without a drama.
&lt;/p&gt;

&lt;p&gt;
&lt;em class=&quot;u&quot;&gt;&lt;strong&gt;In Summary&lt;/strong&gt;&lt;/em&gt;: It&amp;#039;s not whether Giocoso is working correctly or not; it&amp;#039;s not whether you&amp;#039;re using a particular &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;, distro or desktop environment: it&amp;#039;s entirely down to different terminals having different capabilities &amp;#039;baked in&amp;#039; by their developers and ensuring that Giocoso is configured to exploit those capabilities once you understand what they are.
&lt;/p&gt;

&lt;p&gt;
Konsole used to handle sixel graphics; the latest versions now only seem to handle kitty graphics. Gnome terminal doesn&amp;#039;t seem to handle anything these days. Xterm (and uxterm) have variable support for sixel graphics, depending on distro, but zero support for kitty graphics. Whether Giocoso correctly displays album art in-terminal is thus a bit of a lottery, but on all platforms there are a choice of terminals (Kitty and WezTerm, for example) that can handle things properly.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 General Album Art Display Issues&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;general_album_art_display_issues&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;619-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/5/56d4a8041b552114d74b6e7144379f46.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/macos">
        <dc:format>text/html</dc:format>
        <dc:date>2026-02-03T21:24:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>macos</title>
        <link>https://www.bbritten.com/softwares/giocoso/macos</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;installing_giocoso_on_macos&quot;&gt;Installing Giocoso on macOS&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Installing Giocoso on macOS&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_giocoso_on_macos&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-42&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/blog/shopping.jpg?w=220&amp;amp;tok=8f226f&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;For several years, the best I could do by way of offering support for running Giocoso on macOS was to say, “It probably works fine, but I can&amp;#039;t really say for sure” because all my Apple hardware dated from 2012, 2014 or 2015. My various iMacs and Mac Minis thus all used Intel hardware and were severely restricted in what versions of macOS they could run without adding the complication of using the Open Core Legacy Patcher to the mix.
&lt;/p&gt;

&lt;p&gt;
From the end of January 2026, however, that is no longer true. I still have all those Intel Macs, so I can test Giocoso on those and their assorted old versions of macOS… but I now own an M4 iMac and can therefore attest that Giocoso installs and runs on Apple Silicon just fine and that the latest version of macOS (Tahoe, at the time of writing) works perfectly fine with the latest version of Giocoso (version 3.34 at the time of writing).
&lt;/p&gt;

&lt;p&gt;
For this reason, running Giocoso on Apple&amp;#039;s hardware is now Tier 1 support territory: it is, in fact, my new daily driver and I can therefore state with confidence not merely that it &lt;em&gt;ought&lt;/em&gt; to work but that it very much &lt;strong&gt;does&lt;/strong&gt; work.
&lt;/p&gt;

&lt;p&gt;
There are a couple of caveats, though: Giocoso does not, because it cannot, work precisely the same on macOS as it does on Linux. In particular, the way that macOS handles audio is quite different from the way Linux does it, to the point that freezing the music playback process certainly halts music playback, but when you resume, the player will attempt to &amp;#039;catch up&amp;#039; to clock time, with disastrous results. Accordingly, &lt;em&gt;pausing and resuming music playback doesn&amp;#039;t work on macOS&lt;/em&gt;. Giocoso won&amp;#039;t even show you the &lt;em&gt;option&lt;/em&gt; to pause/resume if it detects macOS is in use. A completely different approach is needed to implement a pause/resume functionality on macOS which &lt;em&gt;may&lt;/em&gt; happen in a future release… but might well not!
&lt;/p&gt;

&lt;p&gt;
That said, the basic principle of getting Giocoso to run on macOS is, essentially, to install a quasi-Linux &amp;#039;userland&amp;#039; of tools and utilities, thus creating an environment Linux-y enough for Giocoso to cope. There are two possible ways of doing that: by using &lt;strong&gt;Homebrew&lt;/strong&gt; or &lt;strong&gt;MacPorts&lt;/strong&gt; as a quasi-package manager.
&lt;/p&gt;

&lt;p&gt;
&lt;em class=&quot;u&quot;&gt;Homebrew&lt;/em&gt; supports only newer macOS releases (basically, Sonoma, Sequoia and Tahoe). It will &lt;em&gt;work&lt;/em&gt; on older releases, but with quirky glitches and errors that have to be worked around. On those older releases, too, Homebrew tends to compile things from scratch, which works eventually but takes &lt;em&gt;ages&lt;/em&gt; to complete: one install on Catalina took over 6 hours to finish! I really wouldn&amp;#039;t recommend Homebrew installs unless you&amp;#039;re running newer macOS versions on decent hardware, therefore.
&lt;/p&gt;

&lt;p&gt;
&lt;em class=&quot;u&quot;&gt;MacPorts&lt;/em&gt; supports older macOS releases very well (and the newer ones, too) and its installs are relatively quick in all cases. I would certainly recommend the MacPorts approach to running Giocoso, therefore.
&lt;/p&gt;

&lt;p&gt;
However, it&amp;#039;s not a free choice: if you&amp;#039;ve &lt;em&gt;ever&lt;/em&gt; used Homebrew before, you must &lt;strong&gt;not&lt;/strong&gt; switch to using MacPorts, nor vice versa. It&amp;#039;s one or the other, but software mayhem awaits anyone trying to use both. 
&lt;/p&gt;

&lt;p&gt;
So, if you&amp;#039;ve used neither package manager before, I&amp;#039;d recommend MacPorts, especially for older macOS releases. If you&amp;#039;ve used one or other before, you &lt;em&gt;must&lt;/em&gt; continue to use that manager now. Anything older than Monterey is really a problem for Homebrew installations, however, so if you &lt;em&gt;can&lt;/em&gt; avoid that, I&amp;#039;d strongly recommend you to do so.
&lt;/p&gt;

&lt;p&gt;
Anyway, if macOS is detected, Giocoso&amp;#039;s installer will prompt you to tell it which package manager it should use. 
&lt;/p&gt;

&lt;p&gt;
This documentation will thus chart two paths forward: one, the Homebrew approach; the other, the MacPorts one. Pick &lt;strong&gt;one&lt;/strong&gt; and only one! In both cases, however, you end up with a system that is capable of running Giocoso, so the two paths merge thereafter for the purposes of running and using Giocoso. My recommendation remains, however, that the MacPorts approach is simpler and faster (and better tested!)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;43-4080&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;installing_homebrew&quot;&gt;2.0 Installing Homebrew&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Before we can install Homebrew, we need to install all the command line utilities that allow software to be compiled. In a terminal window, type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;xcode-select --install&lt;/pre&gt;

&lt;p&gt;
Once that install has completed, type:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;/bin/bash -c &amp;quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&amp;quot;&lt;/pre&gt;

&lt;p&gt;
That will download the Homebrew software itself and install it: respond appropriately to any prompts put to you. At the end of the Homebrew installation, you&amp;#039;ll see a message that tells you to type three convoluted commands that put Homebrew in your system&amp;#039;s path. Mine were:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;echo &amp;gt;&amp;gt; /Users/hjr/.zprofile
echo &amp;#039;eval &amp;quot;$(/usr/local/bin/brew shellenv)&amp;quot;&amp;#039; &amp;gt;&amp;gt; /Users/hjr/.zprofile
eval &amp;quot;$(/usr/local/bin/brew shellenv)&amp;quot;&lt;/pre&gt;

&lt;p&gt;
Obviously, yours won&amp;#039;t say “hjr”! Also note that later versions of Homebrew install into &lt;strong&gt;/opt/homebrew&lt;/strong&gt; rather than /usr/local/bin/brew, so on those versions (e.g., Tahoe) make sure you run the commands &lt;em&gt;as Homebrew itself&lt;/em&gt; tells you to, because it will get the paths and username correct.
&lt;/p&gt;

&lt;p&gt;
At this point, you will need to install a couple of pieces of critical software that are needed just to obtain the Giocoso installer, let alone to run it. I also suggest that you manually install a few other packages, largely because (a) I&amp;#039;ve had errors when the Giocoso installer tries to do the same; and (b) a couple of these packages can take literally 5 or 6 hours to compile (though I will note that Homebrew installs on more modern versions of macOS are &lt;em&gt;much&lt;/em&gt; quicker than that. I think it better that you &lt;em&gt;see&lt;/em&gt; that happening for that length of time, rather than sit staring at an apparently &amp;#039;stuck&amp;#039; Giocoso installer attempting to do the same things. Get the pain out of the way early, rather than experience it during the Giocoso install, in other words. Type these commands one at a time, in the order shown, bearing in mind that the first one might take nearly six hours to complete on older hardware:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;brew install wget bash wezterm fd flac ffmpeg xterm dialog freetype xquartz
brew postinstall openssl
brew postinstall llvm&lt;/pre&gt;

&lt;p&gt;
Those last two commands may or may not be needed: if they are, Homebrew will tell you in its output. Read it carefully and follow its instructions. On Tahoe, for example, neither command was needed: back on Monterey, both were. It depends on how up-to-date your version of macOS is, basically.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 Installing Homebrew&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_homebrew&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;4081-6507&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;installing_imagemagick&quot;&gt;2.1 Installing ImageMagick&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Installing ImageMagick with Homebrew is a problem, partly because they have changed the way the software is configured over time, so your results will vary depending on what version of the brew &amp;#039;bottles&amp;#039; you manage to pull down (which will depend on your version of macOS, of course). It&amp;#039;s also a pain to do on seriously old versions of macOS: on Catalina, for example, a &amp;#039;brew install imagemagick&amp;#039; failed with the error “Failed to download resource libzip (1.11.4)”.
&lt;/p&gt;

&lt;p&gt;
So, the path here is a little treacherous. Let&amp;#039;s take it step by step: first, try issuing the vanilla command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;brew install imagemagick&lt;/pre&gt;

&lt;p&gt;
…all lower-case and with a &amp;#039;k&amp;#039; on the end of the program name. If that appears to succeed, type this command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;magick --version&lt;/pre&gt;

&lt;p&gt;
You will see a response similar to this:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Version: ImageMagick 7.1.2-13 Q16-HDRI aarch64 23522 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/license/
Features: Cipher DPC HDRI Modules OpenMP 
Delegates (built-in): bzlib cairo fontconfig freetype gslib heic jng jp2 jpeg jxl lcms lqr ltdl lzma openexr png ps raw rsvg tiff uhdr webp xml zip zlib zstd
Compiler: clang (17.0.0)&lt;/pre&gt;

&lt;p&gt;
So, first the response means ImageMagick is installed and functional. But a crucial feature needs to be visible on that “Delegates (built-in):” line. If it &lt;strong&gt;doesn&amp;#039;t&lt;/strong&gt; mention &lt;em&gt;fontconfig&lt;/em&gt; and &lt;em&gt;freetype&lt;/em&gt; then you&amp;#039;ve installed (through no fault of your own) a version of ImageMagick that can handle artwork but cannot handle text. Which is an absolute disaster for Giocoso!
&lt;/p&gt;

&lt;p&gt;
So, if your output &lt;em&gt;does&lt;/em&gt; mention freetype and fontconfig, you have installed ImageMagick correctly and can proceed to the next step.
&lt;/p&gt;

&lt;p&gt;
If you output &lt;strong&gt;fails&lt;/strong&gt; to mention them, however, you now need to issue these two commands:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;brew uninstall imagemagick
brew install imagemagick-full&lt;/pre&gt;

&lt;p&gt;
ImageMagick-full is a differently-compiled version of ImageMagick that definitely &lt;em&gt;does&lt;/em&gt; include linkages to fontconfig and freetype. So, when that installation has completed, you should be able to do a &lt;strong&gt;magick –version&lt;/strong&gt; and see those two packages mentioned in the Delegates line of output at last.
&lt;/p&gt;

&lt;p&gt;
There&amp;#039;s just one slight problem: Homebrew installs the imagemagick-full package into a completely non-standard folder that won&amp;#039;t be searched by your system by default. So, once you&amp;#039;ve confirmed that font-aware ImageMagick is installed correctly, type this command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo nano /etc/paths&lt;/pre&gt;

&lt;p&gt;
At the top of whatever is already present in that file, add the line:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;/opt/homebrew/opt/imagemagick-full/bin&lt;/pre&gt;

&lt;p&gt;
Then &lt;strong&gt;quit&lt;/strong&gt; your terminal: I mean, really quit it, not just close it down: right-click the launcher and select &amp;#039;Quit&amp;#039; from the context menu). Or open a new terminal and select &lt;em&gt;Terminal → Quit Terminal&lt;/em&gt; from the top menu.
&lt;/p&gt;

&lt;p&gt;
So, that&amp;#039;s two scenarios: (1) installing plain imagemagick works and gives you font support; (2) installing vanilla imagemagick works but fails to give you font support, so uninstalling it and installing imagemagick-full, plus adjusting the /etc/paths file.
&lt;/p&gt;

&lt;p&gt;
The third scenario is that (1) failed with nasty-looking error messages. If that happens, do this in a new terminal session:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; cd&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; cd Downloads&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; wget &lt;a href=&quot;https://imagemagick.org/archive/binaries/ImageMagick-x86_64-apple-darwin20.1.0.tar.gz&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://imagemagick.org/archive/binaries/ImageMagick-x86_64-apple-darwin20.1.0.tar.gz&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://imagemagick.org/archive/binaries/ImageMagick-x86_64-apple-darwin20.1.0.tar.gz&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; tar -xzf ImageMagick-x86_64-apple-darwin20.1.0.tar.gz&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; sudo mv ImageMagick-7.0.10 /usr/local/ImageMagick&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Next:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; sudo nano /etc/paths&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; At the top of the file, add a new line reading: &lt;strong&gt;/usr/local/ImageMagick/bin&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; sudo cp -R /usr/local/ImageMagick/lib/* /usr/local/lib&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; sudo cp -R /usr/local/ImageMagick/bin/* /usr/local/bin&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Verify this old binary version works as intended with:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;magick -version&lt;/pre&gt;

&lt;p&gt;
…and, again, make sure you see some sort of response that mentions fontconfig and freetype.
&lt;/p&gt;

&lt;p&gt;
Now, just to add icing on the cake: Giocoso will actually try to install &lt;em&gt;both&lt;/em&gt; the imagemagick &lt;strong&gt;and&lt;/strong&gt; the imagemagick-full packages onto your system. That &lt;em&gt;might&lt;/em&gt; mean you end up with both present on the one system -and &lt;em&gt;then&lt;/em&gt; the problem becomes which one will Giocoso try to use by default. That depends on the content of your /etc/paths file. If you list /opt/homebrew/bin (or the &amp;#039;standard&amp;#039; Homebrew binaries folder) &lt;strong&gt;above&lt;/strong&gt; the weirder /opt/homebrew/opt/imagemagick-full/bin folder, then it&amp;#039;ll be the &lt;strong&gt;imagemagick&lt;/strong&gt; binary that gets found first when Giocoso asks to use it. If you list the &amp;#039;weird&amp;#039; folder above the &amp;#039;standard&amp;#039; one, Giocoso will find and use the -full version first.
&lt;/p&gt;

&lt;p&gt;
So, here&amp;#039;s a worked example (using Homebrew on Tahoe, a bang up-to-date scenario): I&amp;#039;ve got both imagemagick and imagemagick-full installed, thanks to Giocoso. Here&amp;#039;s my paths file:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hjr@Howards-iMac ~ % cat /etc/paths 
/opt/homebrew/bin
/opt/homebrew/opt/imagemagick-full/bin
/usr/local/bin
/System/Cryptexes/App/usr/bin
/usr/bin
/bin
/usr/sbin
/sbin&lt;/pre&gt;

&lt;p&gt;
So which version will get used first? In this case, it&amp;#039;ll be the “imagemagick” one:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hjr@Howards-iMac ~ % magick --version
Version: ImageMagick 7.1.2-13 Q16-HDRI aarch64 23522 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/license/
Features: Cipher DPC HDRI Modules 
Delegates (built-in): bzlib heic jng jpeg lcms ltdl lzma png tiff webp xml zlib zstd&lt;/pre&gt;

&lt;p&gt;
Notice that the Delegates line &lt;em&gt;doesn&amp;#039;t&lt;/em&gt; mention fontconig: Giocoso will break in this environment, rather horribly, with warnings about not being able to read assorted fonts. So let me edit my /etc/paths to this:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;/opt/homebrew/opt/imagemagick-full/bin
/opt/homebrew/bin
/usr/local/bin
/System/Cryptexes/App/usr/bin
/usr/bin
/bin
/usr/sbin
/sbin&lt;/pre&gt;

&lt;p&gt;
Quit Terminal and re-launch and I&amp;#039;d hope that you would now expect the -full version of imagemagick to be found and used, right? Wrong!
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hjr@Howards-iMac ~ % magick --version
Version: ImageMagick 7.1.2-13 Q16-HDRI aarch64 23522 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/license/
Features: Cipher DPC HDRI Modules 
Delegates (built-in): bzlib heic jng jpeg lcms ltdl lzma png tiff webp xml zlib zstd&lt;/pre&gt;

&lt;p&gt;
Still the font-less version! The reason &lt;em&gt;this&lt;/em&gt; happens is because Homebrew is too damned clever for its own good! It modifies &lt;em&gt;another&lt;/em&gt; file which trumps the contents of the /etc/paths file: $HOME/.zprofile:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt; hjr@Howards-iMac ~ % cat .zprofile
 eval &amp;quot;$(/opt/homebrew/bin/brew shellenv zsh)&amp;quot;  
 &lt;/pre&gt;

&lt;p&gt;
That “eval” line has the effect of bumping the ordinary Homebrew binaries to the front of the path, whatever /etc/paths may say. We therefore need to modify that file by adding the line:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;export PATH=&amp;quot;/opt/homebrew/opt/imagemagick-full/bin:$PATH&amp;quot;&lt;/pre&gt;

&lt;p&gt;
…to the end of the file. That manually forces the -full version to the front of the path once more. Save the edited .zprofile, then quit terminal once more and launch a new one:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hjr@Howards-iMac ~ % magick --version
Version: ImageMagick 7.1.2-13 Q16-HDRI aarch64 23522 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/license/
Features: Cipher DPC HDRI Modules OpenMP 
Delegates (built-in): bzlib cairo fontconfig freetype gslib heic jng jp2 jpeg jxl...&lt;/pre&gt;

&lt;p&gt;
Bingo! We have fontconfig support at last.
&lt;/p&gt;

&lt;p&gt;
I wish I could simplify this for you, but it &lt;em&gt;is&lt;/em&gt; tricky and it all depends on the age of your operating system and the specific version of Homebrew you&amp;#039;re using. If you are very lucky, a vanilla imagemagick install will have font support and will be at the front of the path by default: the simultaneous existence of an imagemagick-full install won&amp;#039;t matter, because it&amp;#039;s in a location that no-one will search for and Giocoso doesn&amp;#039;t need.
&lt;/p&gt;

&lt;p&gt;
On more recent Homebrew and macOS versions, however, both versions will be present and the vanilla imagemagick will &lt;em&gt;not&lt;/em&gt; have font support, which will break Giocoso. You therefore need to manipulate system paths to make the -full version searchable and discoverable and thus the one that Giocoso will use.
&lt;/p&gt;

&lt;p&gt;
This is definitely the sort of low-level shenanigans that Unix and Linux administrators eat for breakfast. It&amp;#039;s unlikely to be appealing to a lot of Mac users, but there it is!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.1 Installing ImageMagick&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_imagemagick&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;6508-14743&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;add_homebrew_binaries_to_path&quot;&gt;2.2 Add Homebrew Binaries to Path&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Assuming you finally get the correct response from ImageMagic, you need to make sure that the &lt;strong&gt;/etc/paths&lt;/strong&gt; file knows how to find &lt;em&gt;all&lt;/em&gt; the Homebrew binaries the Giocoso installation will pull in as dependencies. You do that with the command &lt;strong&gt;sudo nano /etc/paths&lt;/strong&gt; and your job is to put the path to the Homebrew bin folder at the top of the list &lt;em&gt;if it&amp;#039;s not already there&lt;/em&gt;. This is again a version-dependent thing. On the latest macOS Tahoe, for example, Homebrew puts all the executables it installs into /opt/homebrew/bin and that&amp;#039;s &lt;strong&gt;not&lt;/strong&gt; in the paths listed in this file. On Monterey, though, Homebrew used to install into /usr/local/bin …and that &lt;em&gt;is&lt;/em&gt; already present in /etc/paths (probably!). 
&lt;/p&gt;

&lt;p&gt;
So, first determine where your Homebrew bin is: for example, type:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;which bash&lt;/pre&gt;

&lt;p&gt;
…and you should see a path returned to you. On Tahoe, I see a response of:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;/opt/homebrew/bin/bash&lt;/pre&gt;

&lt;p&gt;
…which tells me that “/opt/homebrew/bin” is definitely the right location. Failing that, cd  to /usr/local/bin and see if you can &lt;em&gt;ls&lt;/em&gt; any of the executables you&amp;#039;ve been installing.
&lt;/p&gt;

&lt;p&gt;
Once you&amp;#039;ve worked out the correct path, add that path to &lt;em&gt;the top&lt;/em&gt; of the list of paths in /etc/paths, unless it&amp;#039;s already present:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/etcpaths.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:etcpaths.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/etcpaths.png?w=650&amp;amp;tok=4fee4b&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Here, /usr/local/bin was already present and I&amp;#039;m just adding the Tahoe-esque version &lt;strong&gt;above&lt;/strong&gt; it. The order in which lines appear is important: you want Homebrew&amp;#039;s bin folder to be first in the list, otherwise when Giocoso says “use Bash as my shell”, it will discover the built-in Apple version which is from the early 2010s and is grossly out of date. Giocoso will break horribly when that happens. Listing Homebrew&amp;#039;s folder first makes sure the Bash version 5.x+ is picked up instead… and then things will work!
&lt;/p&gt;

&lt;p&gt;
Once those installations are complete, you&amp;#039;ll be free to download the Giocoso installer and run it… for the which, see Section 4 below! For now, &lt;strong&gt;close the terminal you were using to install these packages&lt;/strong&gt; and open a brand new one to do the Giocoso install: that way, new paths and installations are fully picked up by the new terminal session.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.2 Add Homebrew Binaries to Path&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;add_homebrew_binaries_to_path&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;14744-16936&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;installing_macports&quot;&gt;3.0 Installing MacPorts&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Before we can install MacPorts itself, we need to install the various command line utilities that MacPorts will expect to find on the system: these are programs that, for example, compile source code into executable binary packages. Fortunately, this is quite easy to do.
&lt;/p&gt;

&lt;p&gt;
Simply open a terminal and type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;xcode-select --install&lt;/pre&gt;

&lt;p&gt;
A graphical dialog will ask you if you really want to install the command line tools:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.39.22.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_08.39.22.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.39.22.png?w=650&amp;amp;tok=66720a&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Click [Install] and agree to the ludicrously long licence agreement that appears. A lengthy download of the relevant software then takes place, ending with this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.42.29.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_08.42.29.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.42.29.png?w=650&amp;amp;tok=603928&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Once those tools are installed, you need to obtain an appropriate version of MacPorts: different releases of macOS need different instances of the MacPorts software. At the time of writing (December 2025), these were the latest os-dependent releases available:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-26-Tahoe.pkg&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-26-Tahoe.pkg&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-26-Tahoe.pkg&lt;/a&gt;&lt;br/&gt;

&lt;a href=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-15-Sequoia.pkg&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-15-Sequoia.pkg&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-15-Sequoia.pkg&lt;/a&gt;&lt;br/&gt;

&lt;a href=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-14-Sonoma.pkg&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-14-Sonoma.pkg&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-14-Sonoma.pkg&lt;/a&gt;&lt;br/&gt;

&lt;a href=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-13-Ventura.pkg&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-13-Ventura.pkg&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-13-Ventura.pkg&lt;/a&gt;&lt;br/&gt;

&lt;a href=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-12-Monterey.pkg&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-12-Monterey.pkg&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-12-Monterey.pkg&lt;/a&gt;&lt;br/&gt;

&lt;a href=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-11-BigSur.pkg&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-11-BigSur.pkg&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-11-BigSur.pkg&lt;/a&gt;&lt;br/&gt;

&lt;a href=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.15-Catalina.pkg&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.15-Catalina.pkg&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.15-Catalina.pkg&lt;/a&gt;&lt;br/&gt;

&lt;a href=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.14-Mojave.pkg&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.14-Mojave.pkg&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.14-Mojave.pkg&lt;/a&gt;&lt;br/&gt;

&lt;a href=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.13-HighSierra.pkg&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.13-HighSierra.pkg&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.13-HighSierra.pkg&lt;/a&gt;&lt;br/&gt;

&lt;a href=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.12-Sierra.pkg&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.12-Sierra.pkg&quot; rel=&quot;ugc nofollow noopener&quot;&gt;https://github.com/macports/macports-base/releases/download/v2.11.6/MacPorts-2.11.6-10.12-Sierra.pkg&lt;/a&gt;&lt;br/&gt;

&lt;/p&gt;

&lt;p&gt;
Check &lt;a href=&quot;https://github.com/macports/macports-base/releases/tag/v2.11.6&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/macports/macports-base/releases/tag/v2.11.6&quot; rel=&quot;ugc nofollow noopener&quot;&gt;the Macports website&lt;/a&gt; for the actual versions current at the time you want to install. There are versions available for macOS releases earlier than Sierra, but installing Giocoso on such ancient operating systems is definitely not supported at all, so be my guest but you&amp;#039;re on your own for them!
&lt;/p&gt;

&lt;p&gt;
Once you&amp;#039;ve downloaded the correct package for your operating system, visit your Downloads folder in Finder and double-click the pkg file to launch the installation wizard:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.44.10.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_08.44.10.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.44.10.png?w=650&amp;amp;tok=01af91&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Click your way through the wizard, agreeing to the inevitable licence, and choosing an appropriate hard drive to install onto:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.45.20.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_08.45.20.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.45.20.png?w=650&amp;amp;tok=4f0d4a&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You&amp;#039;ll be prompted for your administrator password and then the software installation will begin. Once it&amp;#039;s complete, you&amp;#039;ll be asked whether to move the downloaded MacPorts package to the bin or keep it: either answer is fine, but you won&amp;#039;t need to install MacPorts again, so you might as well bin the package!
&lt;/p&gt;

&lt;p&gt;
Next you will need to add the MacPorts path to your system&amp;#039;s PATH variable: you do that by typing the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo nano /etc/paths&lt;/pre&gt;

&lt;p&gt;
At the very top of the file, before all other listed folder names, add the line:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;/opt/local/bin&lt;/pre&gt;

&lt;p&gt;
…and then save the modified file. It is important this new path appears first in the file, because that determines the order in which macOS searches for executables -and we want the MacPorts executables to be found &lt;em&gt;before&lt;/em&gt; macOS&amp;#039;s built-in ones. Only in this way can we be sure, for example, that the MacPorts version of Bash is used in preference to macOS&amp;#039;s ancient version of Bash (which won&amp;#039;t be able to run Giocoso properly).    
&lt;/p&gt;

&lt;p&gt;
You make this change of path variables take effect by &lt;strong&gt;closing your existing terminal window and opening a new one&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
Once that&amp;#039;s all done, you need to install a couple of software packages &lt;em&gt;before&lt;/em&gt; you can attempt to install Giocoso. Just type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo port install wget bash&lt;/pre&gt;

&lt;p&gt;
You&amp;#039;ll see MacPorts proposing to install a bunch of related software besides those two packages:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.48.19.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_08.48.19.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.48.19.png?w=650&amp;amp;tok=ec358e&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
When prompted, say &amp;#039;y&amp;#039; to continue. The software installation will be relatively swift, and will end with a wall of text that you can safely ignore:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.50.57.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_08.50.57.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.50.57.png?w=600&amp;amp;tok=b498a2&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Once you see that, your system is ready to install Giocoso. &lt;strong&gt;Be sure to close your terminal again at this point&lt;/strong&gt; and open a new one: if you don&amp;#039;t, you&amp;#039;ll be trying to launch the Giocoso installer in a terminal that only knows about the existence of the ancient, built-in version of Bash, which won&amp;#039;t work. Only a freshly-opened terminal will notice that you&amp;#039;ve just installed a Version 5+ copy of Bash and make use of it.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Installing MacPorts&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_macports&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;16937-22010&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;installing_giocoso&quot;&gt;4.0 Installing Giocoso&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Now you&amp;#039;re ready to install Giocoso, you first need to obtain the installation script itself. That&amp;#039;s easily done in a terminal, with the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wget software.bbritten.com/gioinst&lt;/pre&gt;

&lt;p&gt;
To launch the downloaded script, you then just type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;bash gioinst&lt;/pre&gt;

&lt;p&gt;
That should immediately trigger the following display:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.53.25.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_08.53.25.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.53.25.png?w=650&amp;amp;tok=d8271e&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This text just warns you that an assortment of software is about to be installed on your system and some configuration changes will be made. You can back out at this point, by tapping &amp;#039;n&amp;#039;, and nothing at all will have changed on your PC… but if you tap &amp;#039;y&amp;#039;, the installer will proceed. You&amp;#039;ll first be asked to supply the sudo password, so that the installer script can obtain the root privileges it needs to do its work. Once you supply that, you&amp;#039;ll see this bit of text:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.54.28.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_08.54.28.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.54.28.png?w=650&amp;amp;tok=3fb995&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This is quite a crucial prompt to get right. Giocoso can use &lt;em&gt;either&lt;/em&gt; Homebrew &lt;em&gt;or&lt;/em&gt; MacPorts to install the software it depends on …but it&amp;#039;s vital that it shouldn&amp;#039;t use the package manager that&amp;#039;s inappropriate for your system. If you&amp;#039;ve installed Homebrew, Giocoso mustn&amp;#039;t try to use MacPorts and, of course, the opposite also applies. Your job is therefore to tap &amp;#039;h&amp;#039; or &amp;#039;m&amp;#039; to tell the installer which package manager to use during the installation process. Make sure you pick the right one, or mayhem will ensue!
&lt;/p&gt;

&lt;p&gt;
As soon as you&amp;#039;ve selected the correct package manager, the screen will change to this sort of thing:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.54.48.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_08.54.48.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_08.54.48.png?w=650&amp;amp;tok=2700d7&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This part of proceedings can take quite a while (potentially a &lt;em&gt;very&lt;/em&gt; long time if you&amp;#039;re using the Homebrew package manager): be patient and let it do its thing! Eventually, the screen will change to this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_09.02.15.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_09.02.15.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_09.02.15.png?w=650&amp;amp;tok=6130f2&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
With the software prerequisites dealt with, the installer will now download Giocoso itself: just click OK (or press [Enter]) to move on to that next step:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_09.02.28.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_09.02.28.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_09.02.28.png?w=650&amp;amp;tok=02a18a&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This part of the process will speed by pretty quickly: Giocoso&amp;#039;s bits and pieces are measured in kilobytes, not gigabytes! When they&amp;#039;ve all been downloaded, you&amp;#039;ll be prompted once more to begin a verification process, where the installer computes a hash sum for the things it has downloaded and compares those hash values to ones this website thinks &lt;em&gt;ought&lt;/em&gt; to be true:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_09.02.55.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_09.02.55.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_09.02.55.png?w=600&amp;amp;tok=e7fd87&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
If any mismatches are detected, the installer will try to download the various components again, hopefully with a better result. One way or another, however, you&amp;#039;ll end up seeing this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_09.03.09.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-13_at_09.03.09.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-13_at_09.03.09.png?w=650&amp;amp;tok=aa3512&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
And that&amp;#039;s it! Giocoso is now successfully installed and can be immediately launched by typing the command &lt;strong&gt;giocoso&lt;/strong&gt; into a terminal, though the results might not be ideal:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-14_at_05.28.23.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-14_at_05.28.23.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-14_at_05.28.23.png?w=650&amp;amp;tok=8c008d&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You will note that, running in the standard macOS terminal, the colour scheme used by Giocoso doesn&amp;#039;t really work very well, with grey text that&amp;#039;s practically impossible to read! We&amp;#039;ll sort this out shortly, but for now the point is that Giocoso is installed &lt;em&gt;and works&lt;/em&gt;!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.0 Installing Giocoso&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_giocoso&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;22011-25503&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;wezterm_to_the_rescue&quot;&gt;5.0 WezTerm to the Rescue!&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Appearing in all the wrong colours is not the default terminal&amp;#039;s only failing: you&amp;#039;ll soon find out that it is not able to display album artwork inside itself, either. Technically, Giocoso displays artwork using the “sixel graphics” protocol… and that protocol has to be support (i.e., &amp;#039;compiled in&amp;#039;) to any terminal application for it to work. The default macOS terminal doesn&amp;#039;t do that, so in-terminal graphics are a no-no.
&lt;/p&gt;

&lt;p&gt;
If you are using MacPorts, therefore, I recommend you run the following command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo port install wezterm&lt;/pre&gt;

&lt;p&gt;
…which will install the WezTerm terminal emulator, which &lt;em&gt;does&lt;/em&gt; know how to render sixel graphics. It should appear in the Launchpad display as a black square with a blue “$W” in it. There&amp;#039;s no need to do this now if you&amp;#039;re using Homebrew, because I included the command to install that way back in Section 2 anyway.
&lt;/p&gt;

&lt;p&gt;
WezTerm will tend to want open by default using a small window with small fonts: I suggest you would want to change that up a bit. The way you do that is to issue these commands:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;cd
nano .wezterm.lua&lt;/pre&gt;

&lt;p&gt;
Paste into the new file the following:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;local wezterm = require &amp;#039;wezterm&amp;#039;
local config = wezterm.config_builder()
config.initial_cols = 103
config.initial_rows = 28

config.colors = {
    -- The default text color (green is dark green, lime is bright green)
    foreground = &amp;#039;lime&amp;#039;,
    -- The default background color
    background = &amp;#039;black&amp;#039;, 
}

config.font = wezterm.font(&amp;quot;Courier New&amp;quot;, {weight=&amp;quot;Regular&amp;quot;, stretch=&amp;quot;Normal&amp;quot;, style=&amp;quot;Normal&amp;quot;})
config.font_size = 16

wezterm.on(&amp;#039;format-window-title&amp;#039;, function(window, pane, tabs, panes, config)
    return &amp;quot;Giocoso : The Classical Music Player&amp;quot;
end)

return config&lt;/pre&gt;

&lt;p&gt;
Save the modified file. Hopefully, most of this is self-explanatory: it tells WezTerm to open at an initial 103 columns by 28 rows; to use the built-in Courier font (more on this below) at 16pt size, and to auto-launch Giocoso when it itself launches. With these parameters configured, launch WezTerm by clicking its icon in the Launchpad:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-17_at_12.02.57.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-17_at_12.02.57.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-17_at_12.02.57.png?w=650&amp;amp;tok=29053c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s a rather pleasing display, I think.
&lt;/p&gt;

&lt;p&gt;
Be aware that Giocoso supplies a font it &lt;em&gt;thinks&lt;/em&gt; you might want to use instead of the &amp;#039;Courier New&amp;#039; one I&amp;#039;ve mentioned in the above configuration file: &lt;strong&gt;Luxi Mono&lt;/strong&gt;. It can be found in the &lt;strong&gt;/Users/hjr/.local/share/giocoso3/art&lt;/strong&gt; folder (the “hjr” bit is my username: substitute in your own, obviously!), as a file called &lt;strong&gt;luximr.ttf&lt;/strong&gt;. Double-click that to launch the Apple Font Book utility which lets you install it:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-14_at_06.47.56.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-14_at_06.47.56.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-14_at_06.47.56.png?w=400&amp;amp;tok=d9d151&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Once the font has been installed, re-edit the .wezterm.lua file and replace the name “Courier New” with “Luxi Mono”, leaving all other text unchanged, and save the file. You should see the existing terminal update itself to display the new font:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-17_at_11.56.49.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-17_at_11.56.49.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-17_at_11.56.49.png?w=650&amp;amp;tok=415a08&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The new font is slightly serif (the characters have little hooks at their tips and so on) and not quite as spidery as Courier New… but the choice of font is, ultimately, up to you.
&lt;/p&gt;

&lt;p&gt;
If you now take the &lt;strong&gt;Database Management&lt;/strong&gt; menu, &lt;strong&gt;Option 1&lt;/strong&gt; you&amp;#039;ll be able to create a database of what music files exist on your system. After that, you&amp;#039;ll be able to take the &lt;strong&gt;Play Music&lt;/strong&gt; menu, &lt;strong&gt;Option 1&lt;/strong&gt; and have some of it start playing to you:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-14_at_06.52.41.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-14_at_06.52.41.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-14_at_06.52.41.png?w=650&amp;amp;tok=00a7e9&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…music &lt;em&gt;with&lt;/em&gt; in-terminal display of album art!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;5.0 WezTerm to the Rescue!&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wezterm_to_the_rescue&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;25504-29148&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;final_graphical_tweaks&quot;&gt;6.0 Final Graphical Tweaks&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The last thing you &lt;em&gt;might&lt;/em&gt; want to consider is creating a proper program launcher for Giocoso that &lt;em&gt;looks&lt;/em&gt; like it belongs to Giocoso and not Wezterm! Here, for example, is my dock:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-15_at_16.24.40.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-15_at_16.24.40.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-15_at_16.24.40.png?w=650&amp;amp;tok=020154&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You&amp;#039;ll note that the second icon in from the left is, indeed, something that looks like it might want to launch Giocoso. How do you achieve that?
&lt;/p&gt;

&lt;p&gt;
Well, first open Finder and visit the Application section: there you&amp;#039;ll find a MacPorts folder (assuming you&amp;#039;ve used MacPorts to install everything, of course):
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.44.03.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-18_at_18.44.03.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.44.03.png?w=650&amp;amp;tok=b9b32c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Inside that folder, you&amp;#039;ll find the icon used to launch WezTerm:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.44.24.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-18_at_18.44.24.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.44.24.png?w=650&amp;amp;tok=f5e791&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Right-click that icon and select &amp;#039;Copy&amp;#039; from the context menu; then click back to the Applications section and right-click and select &amp;#039;Paste&amp;#039;: you&amp;#039;ll now have a WezTerm icon in the &amp;#039;root&amp;#039; of the Applications folder:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.44.48.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-18_at_18.44.48.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.44.48.png?w=650&amp;amp;tok=4fcca7&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Right-click this new icon and select &amp;#039;Rename&amp;#039; from the context menu and then change the text label for the icon to &amp;#039;Giocoso&amp;#039;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.45.05.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-18_at_18.45.05.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.45.05.png?w=650&amp;amp;tok=b14428&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Now comes the slightly tricky bit to describe! Right-click the new &amp;#039;Giocoso&amp;#039; icon and select &amp;#039;Get Info&amp;#039; from the context menu. That will open up an information panel about the executable associated with the icon. Keep that open whilst, back in Finder, you select &amp;#039;Go → Go to Folder…&amp;#039; from the top menu: for the path to go to, type &lt;strong&gt;/Users/hjr/.local/share/giocoso3/art&lt;/strong&gt; (replacing &amp;#039;hjr&amp;#039; with your own username, of course):
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.45.55.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-18_at_18.45.55.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.45.55.png?w=650&amp;amp;tok=d83354&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Your job now is to click-and-drag the giocosoico.png from the art folder in Finder on top of the tiny &amp;#039;$W&amp;#039; icon in the top left-hand corner of the Giocoso Info panel. Drop the png on top of the existing icon and you should see both the little and big icon at the bottom of the Info panel change:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.46.13.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-18_at_18.46.13.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.46.13.png?w=400&amp;amp;tok=05020b&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Now you can close the Info panel down. In the Finder window, you can now double-click the new Giocoso icon to launch WezTerm. That will put the running application-with-Giocoso-icon into your dock: right-click it to say &amp;#039;Keep in Dock&amp;#039; and then drag it to where you want to see it in future. Bingo: you now have a proper-looking application launcher that will allow you to run Giocoso easily within a terminal emulator that knows how to display album art properly.
&lt;/p&gt;

&lt;p&gt;
A couple of additional notes of caution and advice. First: earlier versions of macOS (think: Catalina, especially) do not allow you to drag .png files onto the Info panel as I&amp;#039;ve described here. On those versions, you first have to convert the .png supplied by Giocoso to a &lt;strong&gt;.icns&lt;/strong&gt; format and then drop &lt;em&gt;that&lt;/em&gt; version of the artwork onto the Info panel&amp;#039;s little icon placeholder. I use &lt;a href=&quot;https://cloudconvert.com/png-to-icns&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://cloudconvert.com/png-to-icns&quot; rel=&quot;ugc nofollow noopener&quot;&gt;this free on-line converter&lt;/a&gt; to do that. Point the site to the .local/share/giocoso3/art/giocosoico.png file, click convert, then download the converted file. Drag &lt;em&gt;that&lt;/em&gt; to the Info panel and you can delete the download afterwards.
&lt;/p&gt;

&lt;p&gt;
Second: if you used Homebrew to install Giocoso, you won&amp;#039;t find WezTerm inside a MacPorts folder: it will be directly in the Applications section of Finder. The same technique applies, however: copy it, paste it, rename it, re-icon it.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;6.0 Final Graphical Tweaks&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;final_graphical_tweaks&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;29149-32766&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;giocoso_pro_complications&quot;&gt;7.0 Giocoso Pro Complications&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Giocoso Pro is an extension to the basic Giocoso functionality of playing local music files: it allows a Giocoso instance to consult a &lt;em&gt;remote&lt;/em&gt; database of what music files exist to determine what to play. This remote database is a MariaDB or MySQL database and thus your local Giocoso installation needs MariaDB or MySQL &lt;em&gt;client&lt;/em&gt; software to talk to it.
&lt;/p&gt;

&lt;p&gt;
Such a client has, in fact, been installed for you automatically, as part of the standard Giocoso installation. The trouble is that macOS &lt;em&gt;probably&lt;/em&gt; won&amp;#039;t know how to find it! Worse, what it should be hunting for changes depending on whether you use MacPorts or Homebrew as your installation package manager. For me, using MacPorts, the correct executable ended up being found in &lt;strong&gt;/opt/local/lib/mariadb/bin&lt;/strong&gt; and was called &lt;strong&gt;mysql&lt;/strong&gt;, even though Giocoso only ever installs the MariaDB client. 
&lt;/p&gt;

&lt;p&gt;
&lt;em class=&quot;u&quot;&gt;&lt;strong&gt;Sidenote&lt;/strong&gt;&lt;/em&gt;: On my brand new M4 iMac, I did the Homebrew install and MariaDB &lt;strong&gt;was&lt;/strong&gt; located correctly, first time of asking: just type &lt;strong&gt;mariadb&lt;/strong&gt; in a terminal session and if it returns a message about &amp;#039;ERROR 2002 Can&amp;#039;t connect to local server&amp;#039;, you&amp;#039;re in business and need read no further in this section. 
&lt;/p&gt;

&lt;p&gt;
The key point to make is that Giocoso expects to find either a “mariadb” or a “mysql” executable in &lt;strong&gt;/opt/local/bin&lt;/strong&gt;. Chances are that this is &lt;em&gt;not&lt;/em&gt; where Homebrew or MacPorts put it, however! Therefore, we need to do some slight of hand to make it so: in a terminal, type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo ln -s &amp;quot;/opt/local/lib/mariadb/bin/mysql&amp;quot; &amp;quot;/opt/local/bin/mariadb&amp;quot;
sudo ln -s &amp;quot;/opt/local/lib/mariadb/bin/mysql&amp;quot; &amp;quot;/opt/local/bin/mysql&amp;quot; &lt;/pre&gt;

&lt;p&gt;
That creates a link between a placeholder called “mariadb” in the &lt;em&gt;correct&lt;/em&gt; location to the actual executable in the weird and deeply-nested place that MacPorts put it. A functionally-identical link is also established between a placeholder called “mysql” in the right place to the actual executable. That means whether Giocoso issues “mysql” commands or “mariadb” ones, it will always find that actual executable.
&lt;/p&gt;

&lt;p&gt;
With those links in place, you should be able to type the plain command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mariadb&lt;/pre&gt;

&lt;p&gt;
..or:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mysql&lt;/pre&gt;

&lt;p&gt;
…and, in either case, get the same response:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;ERROR 2002 (HY000): Can&amp;#039;t connect to local MySQL server through socket &amp;#039;/opt/local/var/run/mariadb/mysqld.sock&amp;#039; (2)&lt;/pre&gt;

&lt;p&gt;
Don&amp;#039;t worry about the apparent error: that&amp;#039;s just a consequence of not trying to connect to a specific database for now. The point is, if MariaDB or MySQL is producing error messages, the program has been found and is running: if &lt;em&gt;you&lt;/em&gt; can find the program, so can Giocoso… and that means Pro functionality becomes possible.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Be warned&lt;/em&gt;&lt;/strong&gt;: I could not install MariaDB on Catalina via Homebrew. I &lt;em&gt;was&lt;/em&gt; able to &lt;strong&gt;brew install mysql-client&lt;/strong&gt;, but that then leaves a MySQL client trying to talk to my MariaDB Giocoso Pro server: not a combination I support or approve of! For such an old version of macOS, I suppose it was foolish to imagine Homebrew being reliable (remember: Homebrew is only supported for &lt;em class=&quot;u&quot;&gt;recent&lt;/em&gt; &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; releases; it&amp;#039;s MacPorts that works on ancient versions), so this is not a failing that is likely to trip you up, but it&amp;#039;s another factor to bear in mind when considering whether to go the Homebrew or MacPorts route.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;7.0 Giocoso Pro Complications&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_pro_complications&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;32767-36056&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;conclusion&quot;&gt;8.0 Conclusion&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
I&amp;#039;ve personally installed Giocoso 3.32 on (a) Catalina; (b) Big Sur; (c) Monterey; (d) Sonoma, (e) Sequoia and (f) Tahoe. The older versions were using Intel chips; Tahoe uses the Apple Silicon M4 chip, so Giocoso is known to work on most macOS versions released since 2019 and on both major CPU architectures.
&lt;/p&gt;

&lt;p&gt;
Speaking generally, MacPorts is the way to go to get Giocoso&amp;#039;s prerequisites/dependencies installed if you are using anything earlier than Sonoma; conversely, Homebrew is a reliable way forward if you&amp;#039;re using Sonoma onwards. Catalina is pushing it, though ultimately gets there. Everything else is most plain sailing, using the appropriate package management technology for the &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; version.
&lt;/p&gt;

&lt;p&gt;
As a final flourish, I give you parting screenshots of my assorted real-world Giocoso-on-Mac installations:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em class=&quot;u&quot;&gt;&lt;strong&gt;Catalina, 2.7GHz, 8GB RAM (via Homebrew and MacPorts)&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_11.43.11.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-18_at_11.43.11.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_11.43.11.png?w=650&amp;amp;tok=071d36&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em class=&quot;u&quot;&gt;&lt;strong&gt;Big Sur, 1.4GHz, 4GB RAM (via MacPorts)&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-17_at_13.57.13.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-17_at_13.57.13.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-17_at_13.57.13.png?w=650&amp;amp;tok=222ebf&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em class=&quot;u&quot;&gt;&lt;strong&gt;Monterey, 3.1GHz, 16GB RAM (via MacPorts)&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-17_at_12.34.35.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-17_at_12.34.35.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-17_at_12.34.35.png?w=650&amp;amp;tok=6c3439&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em class=&quot;u&quot;&gt;&lt;strong&gt;Ventura, 1.4GHz, 4GB RAM (via Homebrew and Macports, using Legacy Core Patcher)&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-20_at_18.39.12.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-20_at_18.39.12.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-20_at_18.39.12.png?w=650&amp;amp;tok=f6d076&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em class=&quot;u&quot;&gt;&lt;strong&gt;Sonoma, 2.7GHz, 8GB RAM (via MacPorts, using Legacy Core Patcher)&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.39.04.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-18_at_18.39.04.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-18_at_18.39.04.png?w=650&amp;amp;tok=af1be5&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em class=&quot;u&quot;&gt;&lt;strong&gt;Sequoia, 2.7GHz, 8GB RAM (via Homebrew, using Legacy Core Patcher)&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-19_at_09.01.39.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:macos:screenshot_2025-12-19_at_09.01.39.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/macos/screenshot_2025-12-19_at_09.01.39.png?w=650&amp;amp;tok=a47c47&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em class=&quot;u&quot;&gt;&lt;strong&gt;Tahoe, ~4.4GHz, 16GB RAM (via Homebrew, M4 iMac)&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-01_at_10.57.57.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-01_at_10.57.57.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-01_at_10.57.57.png?w=650&amp;amp;tok=22cd7c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; |
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;8.0 Conclusion&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;conclusion&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;36057-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/1/109bfad9db1cfa72a836b1f1c74ae488.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/minig">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-20T18:25:54+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>minig</title>
        <link>https://www.bbritten.com/softwares/giocoso/minig</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;minigthe_giocoso_mini_player&quot;&gt;Minig : The Giocoso Mini Player&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Minig : The Giocoso Mini Player&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;minigthe_giocoso_mini_player&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-46&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Starting with Giocoso Version 3.6, Giocoso ships with the ability to run in “minimal mode”: a stripped-down Play Music menu that allows you to initiate randomised playback from an interface that is width-constricted, such as a mobile telephone:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2026-03-19_at_08.31.52.png&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_2026-03-19_at_08.31.52.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2026-03-19_at_08.31.52.png?w=400&amp;amp;tok=6534ac&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Taking the &amp;#039;Play Music&amp;#039; menu option on this screen is exactly equivalent to taking Option 1 on the standard Play Music menu in full-blown Giocoso: you get the &amp;#039;default&amp;#039; music selection that results from applying parameters specified in your persistent configuration, excludes and exempts files, randomly-ordered.
&lt;/p&gt;

&lt;p&gt;
This mini-mode Giocoso is invoked by typing the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;minig&lt;/pre&gt;

&lt;p&gt;
…at the command line. The intent is that you might do this whilst connected to a music-playing PC over ssh, on your mobile (cell) phone. You thereby acquire the ability to start and control playback of music, remotely.
&lt;/p&gt;

&lt;p&gt;
With this scenario in mind, the mini player deliberately avoids displaying any form of album art or other in-terminal graphics since doing so generally results in this kind of garbled display:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/blog/screenshot_2026-03-13_at_15.42.22.png&quot; class=&quot;media&quot; title=&quot;blog:screenshot_2026-03-13_at_15.42.22.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/blog/screenshot_2026-03-13_at_15.42.22.png?w=400&amp;amp;tok=34f58b&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The mini player therefore only displays textual data related to the music being played, like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-19_at_08.38.03.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-19_at_08.38.03.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-19_at_08.38.03.png?w=400&amp;amp;tok=dd19f0&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
As music plays, the usual sort of &amp;#039;play control&amp;#039; menu options are available at the bottom of the screen: &lt;strong&gt;Autostop&lt;/strong&gt; (to allow the current play to continue but prevent progress thereafter to any new play); &lt;strong&gt;Terminate&lt;/strong&gt; (to immediately halt the current play and to not progress to any other play, either); &lt;strong&gt;Skip&lt;/strong&gt; (to immediately halt the current play but to progress to the next play, if any are available); and &lt;strong&gt;Repeat&lt;/strong&gt; (to allow the current play to continue to completion and then to begin playing it again from the start). Play controls you would see when the full-fat Giocoso plays music (such as Pause, Volume and Notes) are &lt;strong&gt;not&lt;/strong&gt; available in mini-mode.
&lt;/p&gt;

&lt;p&gt;
Note that the mini player doesn&amp;#039;t just initiate music playback: if you have already begun playing music in full-fat Giocoso on server X, then connecting to server X and running &lt;strong&gt;minig&lt;/strong&gt; will show you what music is already playing:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-19_at_08.46.21.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-19_at_08.46.21.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-19_at_08.46.21.png?w=600&amp;amp;tok=d2383c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Here, for example, you see that some Gabrieli is playing in full-fat Giocoso on the left; the mini player has then been launched on the right: it immediately displays the details of what is already being played, rather than giving you the option to &lt;em&gt;initiate&lt;/em&gt; music playback. The mini player&amp;#039;s music play controls still function, however: if you press Autostop in the mini player, the Autostop option in the main player will light up, for example.
&lt;/p&gt;

&lt;p&gt;
The only thing to really note about the mini player in this &amp;#039;control mode&amp;#039; (as opposed to it being the playback initiator) is that the play controls are not persistent or interactive: if you tap &amp;#039;Repeat&amp;#039;, for example, the mini player&amp;#039;s &amp;#039;Repeat&amp;#039; option will &lt;em&gt;not&lt;/em&gt; stay highlighted, though the one in the main player will. In similar fashion, if the main player stops playing one piece of music and starts playing a new piece, the mini player&amp;#039;s display &lt;em&gt;will not update to reflect this&lt;/em&gt;: it will continue to display the details of the original recording only: you would need to tap &amp;#039;x&amp;#039; to quit the mini player and re-launch it to see the details of the new recording being played.
&lt;/p&gt;

&lt;p&gt;
Another feature of this &amp;#039;control mode&amp;#039; functionality: if you take the mini player&amp;#039;s “Skip” option, you&amp;#039;ll trigger the main player to terminate the current music playback and start the configured countdown before play of a new recording begins. That causes the mini player to return to the main menu (since there is no music playing whose details it can display). It will &lt;em&gt;remain&lt;/em&gt; at this main menu, even though the main player moves on to playing something new: again, the point is that in control mode, the mini player is not interactive with the main player. That&amp;#039;s why the mini player has an &lt;strong&gt;Option 3: Refresh screen&lt;/strong&gt; menu item. Tap &amp;#039;3&amp;#039;, and the mini player&amp;#039;s display &lt;em&gt;will&lt;/em&gt; update to display the details of the new recording that the main player has begun to play.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;47-4321&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;pulse_audio_configuration&quot;&gt;2.0 Pulse Audio Configuration&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Remember the situation the mini- layer was invented for: initiating or controlling music playback from a Giocoso-enabled computing device &lt;em&gt;via a handheld device&lt;/em&gt;. In that context, where control is separate from the thing doing the actual playing, it makes sense that the controller should be able to direct the player to send its music to wherever the controller wants it to, rather than to the device on which the player is actually running.
&lt;/p&gt;

&lt;p&gt;
Imagine this scenario: you have a music-playing PC in a dedicated listening room, attached to a good DAC, amplifier and speakers. Today, however, you want to sit out in your garden and thus require music to sound out from the garden shed (it happens!). The garden shed is equipped with an ancient PC that can barely run anything usefully… but it happens to be connected to an amplifier and speakers. In this case, therefore, you want the listening room PC to send its audio signal not to the DAC, amplifier and speakers to which it is directly connected but over the network, to the garden shed PC: it is &lt;em&gt;playing&lt;/em&gt; in the listening room, but it is &lt;em&gt;sounding&lt;/em&gt; in the shed!
&lt;/p&gt;

&lt;p&gt;
This is functionality that comes with a technology called &lt;strong&gt;PulseAudio&lt;/strong&gt; (and its newer, backward-compatible equivalents, such as PipeWire). Giocoso has always been “PulseAudio &lt;em&gt;capable&lt;/em&gt;”, but the mini player extends this capability to making it trivially easy to select any of multiple &amp;#039;audio sinks&amp;#039; to which music playback can be directed. (An “audio sink” in this context is simply a fancy way of referring to “the device that does the sounding of music, even if it&amp;#039;s not doing the playing”)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 Pulse Audio Configuration&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pulse_audio_configuration&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;4322-5986&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;setting_up_pulseaudio_server_details&quot;&gt;2.1 Setting up PulseAudio Server Details&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The Giocoso mini player comes with &lt;strong&gt;Option 2 : Set up PulseAudio Server details&lt;/strong&gt; which, when taken, reveals this sort of screen:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-20_at_17.39.53.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-20_at_17.39.53.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-20_at_17.39.53.png?w=400&amp;amp;tok=500178&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The screen allows five pairs of “Sink Name” and “Associated IP Address” to be entered: the name can be anything you like but will be truncated to 14 characters long upon saving. The IP addresses have to be valid IP addresses to be meaningful! When submitted, these entries are written to a table in the &lt;em&gt;local&lt;/em&gt; Giocoso database, called PULSESINKS, with columns &lt;em&gt;identifier&lt;/em&gt; (the textual data) and &lt;em&gt;ipaddress&lt;/em&gt; (the associated IP address).
&lt;/p&gt;

&lt;p&gt;
You don&amp;#039;t have to fill in all five available sinks: I&amp;#039;ve shown five for explanatory purposes but in fact only ever direct my music to either the bedroom or the summerhouse, so in reality, I&amp;#039;d only ever fill in two sinks.
&lt;/p&gt;

&lt;p&gt;
Note, however, that if the mini player is going to be run on a one of the PCs that you also listen to music on &lt;em&gt;directly&lt;/em&gt; then it should be entered as its own possible sink. In other words, I also listen to music in the listening room: if this mini player is running on the listening room PC, I&amp;#039;ll need the ability for the listening room PC not only to direct audio to the bedroom or summerhouse &lt;em&gt;but also to itself&lt;/em&gt;… otherwise, I won&amp;#039;t be listening to much in the listening room in future!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.1 Setting up PulseAudio Server Details&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;setting_up_pulseaudio_server_details&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;5987-7409&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;selecting_a_pulseaudio_server&quot;&gt;2.2 Selecting a PulseAudio Server&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Once you&amp;#039;ve created a set of PulseAudio sinks and their associated IP addresses, you can select one of them using the mini player&amp;#039;s &lt;strong&gt;Option 1: Select a PulseAudio Server&lt;/strong&gt; menu item:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2026-03-20_at_17.49.52.png&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_2026-03-20_at_17.49.52.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_2026-03-20_at_17.49.52.png?w=400&amp;amp;tok=8c4c22&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
On this screen, all configured sinks will appear with a set of empty brackets next to them. &lt;strong&gt;One&lt;/strong&gt; of the sets of brackets will have an asterisk in them: that is the &lt;em&gt;currently configured&lt;/em&gt; PulseAudio Sink (that is, the one mentioned in the full-fat Giocoso&amp;#039;s &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-20_at_17.52.00.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-20_at_17.52.00.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-20_at_17.52.00.png?w=600&amp;amp;tok=50273c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You can see here that I&amp;#039;ve pre-configured IP address 91 to be my &amp;#039;default sink&amp;#039; and from the earlier mini player screen, you can see that the .91 address is, indeed, associated with my listening room PC. However: it&amp;#039;s a nice sunny day and I want to have music play &lt;em&gt;from&lt;/em&gt; the listening room out to my garden: so, on the mini player, I&amp;#039;ve highlighted the &amp;#039;Summerhouse Pi&amp;#039; item by up- and down-arrowing to it. Once it&amp;#039;s highlighted, press the Space Bar:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-20_at_17.54.40.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-20_at_17.54.40.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-20_at_17.54.40.png?w=400&amp;amp;tok=694534&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Now the asterisk jumps to the &amp;#039;Summerhouse Pi&amp;#039; item, indicating that it&amp;#039;s been selected. Press [Enter] to confirm. Immediately, the mini player screen will update to show the change in selected sink:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-20_at_17.56.10.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-20_at_17.56.10.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-20_at_17.56.10.png?w=400&amp;amp;tok=a77ce4&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Were you to go into the full-fat Giocoso&amp;#039;s administration menu, option 2 once more, you&amp;#039;d see the newly-selected audio sink had also been changed there. The mini player selection changes the &lt;em&gt;main&lt;/em&gt; Giocoso&amp;#039;s persistent configuration file settings, therefore.
&lt;/p&gt;

&lt;p&gt;
All this now means that if you were to initiate play from either the mini player (by tapping the &amp;#039;P&amp;#039; key) &lt;em&gt;or&lt;/em&gt; from the main Giocoso play menu, the resulting audio stream would “sound out” on the .116 computer: and the birds and I would be happy!
&lt;/p&gt;

&lt;p&gt;
There is just one catch before the pigeons and I can be truly satisfied in the sun: it isn&amp;#039;t enough only to select a PulseAudio sink to play to. You &lt;em&gt;also&lt;/em&gt; must tell the main Giocoso&amp;#039;s configuration file that it &lt;strong&gt;must&lt;/strong&gt; use PulseAudio to distribute its audio via PulseAudio in the first place. That&amp;#039;s done with another of the persistent configuration file settings:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-20_at_18.00.53.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-03-20_at_18.00.53.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-03-20_at_18.00.53.png?w=600&amp;amp;tok=b18baf&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Here, the “Force the use of PulseAudio” configuration item has been set to &lt;strong&gt;yes&lt;/strong&gt; (it defaults to a &amp;#039;no&amp;#039; value). Only when this says &amp;#039;yes&amp;#039; &lt;em&gt;and&lt;/em&gt; a PulseAudio server&amp;#039;s IP address has been configured using either the main Giocoso program or the mini player will music be played on one PC and sounded out on another.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.2 Selecting a PulseAudio Server&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;selecting_a_pulseaudio_server&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;7410-10173&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;conclusion&quot;&gt;3.0 Conclusion&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The mini player is not all to do with PulseAudio: it&amp;#039;s there as a remote control for &amp;#039;proper&amp;#039; Giocoso, allowing you to repeat, skip, terminate and autostop plays already begun with the main player, but via an ssh session and a mobile phone. In this mode of operation, the mini player takes over most of the functionality of &lt;strong&gt;mgiocoso&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
In addition to controlling existing plays, however, the mini player can do something mgiocoso never could: &lt;strong&gt;initiate&lt;/strong&gt; default, randomised plays by itself.
&lt;/p&gt;

&lt;p&gt;
Only in a third, subsidiary mode of operation can the mini player be used to setup a group of PulseAudio &amp;#039;sinks&amp;#039; and then direct plays of music that it initiates to one of them, over the network, provided you&amp;#039;ve already configured PulseAudio on all appropriate computing devices. Doing that necessary configuration of PulseAudio servers can actually get quite tricky and is beyond the scope of this particular piece of documentation, though additional documentation helping you achieve it is &lt;a href=&quot;https://www.bbritten.com/articles/proxmoxaudio&quot; class=&quot;wikilink1&quot; title=&quot;articles:proxmoxaudio&quot; data-wiki-id=&quot;articles:proxmoxaudio&quot;&gt;in preparation&lt;/a&gt;.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Conclusion&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;conclusion&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;10174-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/a/a653a98be3828e9bdbb36e2759d850c6.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/playmenu">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-23T20:04:03+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>playmenu</title>
        <link>https://www.bbritten.com/softwares/giocoso/playmenu</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;the_play_music_menu&quot;&gt;The Play Music Menu&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/playmenu/beethoven2.png?w=220&amp;amp;tok=740aee&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;Giocoso is, first and foremost, a classical music &lt;em&gt;player&lt;/em&gt;… so the Play Music menu is pretty much the meat-and-potatoes of the entire program! Almost all the options found on this menu will initiate music playback (the exceptions are a couple of menu options that deal with playlist housekeeping matters).
&lt;/p&gt;

&lt;p&gt;
The various music-playing menu items controls &lt;em&gt;what&lt;/em&gt; music Giocoso will play, by altering the &lt;strong&gt;source&lt;/strong&gt; of the music it knows about. Most commonly, Giocoso will use a music database to tell it what FLAC files exist and where they can be found on disk: Giocoso will query that database and pick one of those files to play, more-or-less at random. However, you can also make specific queries of that database using your own selection criteria and Giocoso will then play the results of your queries. Finally, you can simply &amp;#039;point&amp;#039; to a folder of music on your hard disk and tell Giocoso to &amp;#039;play that&amp;#039;, which it will then do, quite happily.
&lt;/p&gt;

&lt;p&gt;
Whenever you make a manual selection of music to play, you can store the results of that selection into a text file called a &lt;strong&gt;playlist&lt;/strong&gt;. Playlists can then also become a source of future Giocoso play selections. Since a playlist is simply a text file, you can create your own playlists in a simple text editor and feed that to Giocoso as a source of plays, too.
&lt;/p&gt;

&lt;p&gt;
I must emphasis, however, that practically &lt;em&gt;nothing&lt;/em&gt; on the Play Music menu will work &lt;strong&gt;until you have created a music database&lt;/strong&gt;: if you haven&amp;#039;t already created a database, therefore, please skip to &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/dbmenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:dbmenu&quot; data-wiki-id=&quot;softwares:giocoso:dbmenu&quot;&gt;the Database Management menu&lt;/a&gt; options to do that first! Also: please note that there can only be one Giocoso session playing music at a time, though you are free to launch multiple Giocoso sessions to do other things (like running reports or editing the Persistent Configuration file) whilst another is playing music. Most of the menu options on the Play Music menu will simply be silently &lt;em&gt;inoperative&lt;/em&gt; if acting on them would cause two sessions to start playing music at the same time. Indeed, if you &lt;em&gt;launch&lt;/em&gt; a second Giocoso session after one is already playing music, the entire Play Music menu will be off-limits: no menu items at all will be displayed.
&lt;/p&gt;

&lt;p&gt;
Links to a detailed description of each menu option are listed below:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit2&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/playmenu/playdef&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:playmenu:playdef&quot; data-wiki-id=&quot;softwares:giocoso:playmenu:playdef&quot;&gt;Play music with defaults&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/playmenu/playsel&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:playmenu:playsel&quot; data-wiki-id=&quot;softwares:giocoso:playmenu:playsel&quot;&gt;Play music from selection filters&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/playmenu/playfld&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:playmenu:playfld&quot; data-wiki-id=&quot;softwares:giocoso:playmenu:playfld&quot;&gt;Play music in specified folder&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/playmenu/playsql&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:playmenu:playsql&quot; data-wiki-id=&quot;softwares:giocoso:playmenu:playsql&quot;&gt;Play music by advanced SQL selection&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/playmenu/playlst&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:playmenu:playlst&quot; data-wiki-id=&quot;softwares:giocoso:playmenu:playlst&quot;&gt;Play music from a playlist&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/playmenu/playglb&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:playmenu:playglb&quot; data-wiki-id=&quot;softwares:giocoso:playmenu:playglb&quot;&gt;Resume a Global Play&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/playmenu/playcrl&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:playmenu:playcrl&quot; data-wiki-id=&quot;softwares:giocoso:playmenu:playcrl&quot;&gt;Create or edit a playlist&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/playmenu/playdll&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:playmenu:playdll&quot; data-wiki-id=&quot;softwares:giocoso:playmenu:playdll&quot;&gt;Delete old playlists&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;2365-2954&amp;quot;} --&gt;
&lt;p&gt;
An additional note about &lt;em&gt;how&lt;/em&gt; Giocoso can play back music using ReplayGain technology &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/replaygain&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:replaygain&quot; data-wiki-id=&quot;softwares:giocoso:replaygain&quot;&gt;is found here&lt;/a&gt;.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; |
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;

&lt;!-- no cachefile used, but created /var/www/dokuwiki/data/cache/4/4c438c0ba4a7ec21d9cb12d3d94ecdb7.xhtml --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/probuild1">
        <dc:format>text/html</dc:format>
        <dc:date>2026-02-18T18:47:04+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>probuild1</title>
        <link>https://www.bbritten.com/softwares/giocoso/probuild1</link>
        <description>
&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/playmenu/giocosoicopro.png?w=220&amp;amp;tok=e52da2&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;
&lt;/p&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;build_a_giocoso_pro_server&quot;&gt;Build A Giocoso Pro Server&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Build A Giocoso Pro Server&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;build_a_giocoso_pro_server&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;63-103&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
A Giocoso Pro Server is simply a PC (or virtual PC) that runs a copy of the MySQL database (or MariaDB). Such a computer does not need to be particularly powerful or well-resourced: a single CPU, 1GB RAM and (say) 40GB of hard disk space should be more than adequate, though of course more of any of these things is always welcome!
&lt;/p&gt;

&lt;p&gt;
Since it is a server, there is no need for a fancy graphical desktop to make things look &amp;#039;nice&amp;#039;: a Linux distro that provides the bare minimum of computing capabilities whilst managing to run the database is all that is really required: so Arch, or Ubuntu Server or Fedora Server are ideal candidates, because they ship &amp;#039;out-of-the-box&amp;#039; without &lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt; bells and whistles. Personally, my Giocoso Pro Server runs in a FreeBSD jail, so not even Linux is a necessity!
&lt;/p&gt;

&lt;p&gt;
A fixed IP address for networking purposes is a good idea (servers need to be contacted by client machines, so it&amp;#039;s a good idea for the server to stay fixed at a known address, rather than to dynamically wander around the place!) but it is &lt;em&gt;not&lt;/em&gt; a requirement that the server has to be able to see your music collection, either directly or via a storage sharing technology (such as NFS or SMB). The Giocoso &lt;em&gt;clients&lt;/em&gt; will inform the server about what music exists: the server itself doesn&amp;#039;t need to be able to confirm the details.
&lt;/p&gt;

&lt;p&gt;
I&amp;#039;ve written &lt;a href=&quot;http://absolutelybaching.com:81/how-to-build-a-giocoso-pro-server-with-arch-linux/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;http://absolutelybaching.com:81/how-to-build-a-giocoso-pro-server-with-arch-linux/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;a separate article on how to build a Giocoso Pro server using Arch&lt;/a&gt;, because the Arch installation process itself is so unusual, compared to any other distros you might want to use. In this article, I&amp;#039;ll be using Fedora Server 41 specifically -but the principles demonstrated work on any non-Arch distro you&amp;#039;re likely to want to use. The basic story is:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Install your operating system using defaults&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Download a preparation script from this website&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Run the preparation script&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Confirm things are working&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Check your clients can access the new server&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;104-2130&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;install_your_operating_system&quot;&gt;2.0 Install your Operating System&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
I&amp;#039;m building a virtual machine in which to install Fedora Server: I&amp;#039;ve deliberately configured it with fairly minimal resource settings:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_152848.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250209_152848.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_152848.jpg?w=650&amp;amp;tok=90be13&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Anything vaguely similar in physical hardware capabilities would suffice just as well: before I built my FreeBSD Jail, I was using a 2011-vintage Dell desktop PC with an Intel i3 CPU, 4GB of total RAM and a 60GB solid state hard drive as a test platform, and it worked fine.
&lt;/p&gt;

&lt;p&gt;
As far as the operating system installation went, I ran with all the defaults proposed:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_153222.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250209_153222.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_153222.jpg?w=650&amp;amp;tok=b326c0&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Specifically, I chose automatic disk partitioning and the default Fedora Server software selection. The one thing I &amp;lt;em&amp;gt;did&amp;lt;/em&amp;gt; manually intervene on was the networking: by default, it&amp;#039;s configured with DHCP, which makes life convenient but means your server is assigned an IP address dynamically and in a way that means the address could change every time the server is rebooted. Changing IP addresses makes life hard for clients wanting to &amp;lt;em&amp;gt;find&amp;lt;/em&amp;gt; the server! Therefore, I assigned a &amp;lt;strong&amp;gt;static IP address&amp;lt;/strong&amp;gt;, as follows:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_153608.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250209_153608.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_153608.jpg?w=650&amp;amp;tok=c0717a&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Now, the specific addresses you see here are &amp;lt;em&amp;gt;mine&amp;lt;/em&amp;gt;, appropriate to my home network setup. They are unlikely to apply to your environment. Here is not the place to explain the basics of home networking, but if you aren&amp;#039;t sure what entries to make for your own Giocoso Pro Server, please read &amp;lt;a href=“&lt;a href=&quot;http://absolutelybaching.com:81/music-articles/how-to-rip-an-sacd/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;http://absolutelybaching.com:81/music-articles/how-to-rip-an-sacd/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;http://absolutelybaching.com:81/music-articles/how-to-rip-an-sacd/&lt;/a&gt;”&amp;gt;Section 2.3 (“The Home Network”) of my article on doing SACD ripping, where I explain network addresses in some detail.&amp;lt;/a&amp;gt;
&lt;/p&gt;

&lt;p&gt;
I also clicked the IPv6 Settings tab in the above screenshot and set the &amp;#039;Method&amp;#039; to &amp;#039;Disabled&amp;#039;: your Giocoso Pro Server is not going to need to know how to handle IPv6 connections!
&lt;/p&gt;

&lt;p&gt;
Fedora&amp;#039;s installation prompts for the creation of a non-root user account: you should take the opportunity to do that:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_154319.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250209_154319.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_154319.jpg?w=650&amp;amp;tok=73dd34&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You also get the opportunity to enable or disable the root account:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_154448.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250209_154448.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_154448.jpg?w=650&amp;amp;tok=b87ce3&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I chose to leave the root account disabled. It would be like that in Ubuntu Server, for example, without even asking you about it …and isn&amp;#039;t a bad thing to do in any distro. Provided there is a non-root &lt;em&gt;administrator&lt;/em&gt; account created (as you can see my &amp;#039;hjr&amp;#039; account will be), you can always exercise root powers via the magic of the &lt;strong&gt;sudo&lt;/strong&gt; command, so there&amp;#039;s no need to ever actually &lt;em&gt;be&lt;/em&gt; root directly.
&lt;/p&gt;

&lt;p&gt;
They&amp;#039;re really all the things you need to consider at operating system installation time: non-root user account, fixed IP address, standard/default disk partitioning and software selections. After that, you just click the &amp;#039;Begin installation&amp;#039; button and sit back and wait. It took about 10 minutes for the O/S installation to complete for me.
&lt;/p&gt;

&lt;p&gt;
When the installation completes, reboot the machine and log in as the non-root administrator user you created earlier:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_155329.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250209_155329.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_155329.jpg?w=650&amp;amp;tok=47fa8c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
As you see, you end up at no-frills command line prompt… just what servers are &lt;em&gt;supposed&lt;/em&gt; to look like!
&lt;/p&gt;

&lt;p&gt;
The only other order of business at this point is to stop the machine being called “localhost”, which is what Linux calls things that don&amp;#039;t have &amp;#039;proper&amp;#039; host names. Some operating system installers allow you to specify a proper hostname as part of their installation wizard, but Fedora doesn&amp;#039;t. So lLet&amp;#039;s fix that the manual way, like so:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo hostnamectl set-hostname giocosopro&lt;/pre&gt;

&lt;p&gt;
I&amp;#039;m assigning the name &amp;#039;giocosopro&amp;#039; here, but you can pick any single-word name of your fancy. You&amp;#039;ll need to log out and then log back in to have the change picked up and applied:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_155847.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250209_155847.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_155847.jpg?w=650&amp;amp;tok=b1f551&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Apart from that, though, you&amp;#039;re now running a server that can become a Giocoso Pro server… we just need to make that bit happen next!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 Install your Operating System&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;install_your_operating_system&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2131-6263&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;update_the_os_run_the_giocoso_pro_installation_script&quot;&gt;3.0 Update the O/S &amp;amp; run the Giocoso Pro Installation Script&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Before we do the Giocoso Pro bit, it&amp;#039;s a good idea to make sure &lt;em&gt;all&lt;/em&gt; the software on your new server is as up-to-date as it can be. If you don&amp;#039;t do this manually now, the Giocoso Pro installer will do it for you anyway, but it&amp;#039;s nice if that script doesn&amp;#039;t have to take hours to complete! Getting the updates done now means the Giocoso installer will have to do much less of the heavy lifting later. At the command prompt, therefore, type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo dnf update&lt;/pre&gt;

&lt;p&gt;
On Ubuntu or Debian, you&amp;#039;d type &amp;#039;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&amp;#039;; on Arch it would be &amp;#039;sudo pacman -Syu&amp;#039;; on OpenSuse, &amp;#039;sudo zypper update&amp;#039; and on FreeBSD, &amp;#039;pkg update&amp;#039;. All do the same thing: inspect the software on the system, fetch updates to all of it from across the Internet, then apply it. On Fedora, my update was not terribly big:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_160217.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250209_160217.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_160217.jpg?w=650&amp;amp;tok=9e4c6c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…but it depends on how recently a particular version of your server&amp;#039;s operating system was released or refreshed as to precisely how much software will need to be downloaded and applied.
&lt;/p&gt;

&lt;p&gt;
Once your operating system has been updated, type this command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wget software.bbritten.com/pro&lt;/pre&gt;

&lt;p&gt;
If you get told &amp;#039;command not found&amp;#039;, you&amp;#039;ll first need to install the wget program itself (this happens commonly on Debian-based distros, for example): &lt;strong&gt;sudo dnf install wget&lt;/strong&gt; would be the command on Fedora; &lt;strong&gt;sudo apt install wget&lt;/strong&gt; on Debian and Ubuntu; &lt;strong&gt;sudo zypper install wget&lt;/strong&gt; on OpenSuse and &lt;strong&gt;pkg install wget&lt;/strong&gt; on FreeBSD.
&lt;/p&gt;

&lt;p&gt;
You can confirm the script has downloaded correctly, like so:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_160951.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250209_160951.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_160951.jpg?w=650&amp;amp;tok=7659fe&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The exact size of the script will vary over time, so don&amp;#039;t place too much reliance on specific numbers: the point is simply that you can &lt;em&gt;see&lt;/em&gt; the downloaded file. It&amp;#039;s a shell script, which means it&amp;#039;s fundamentally merely a text file. You&amp;#039;re welcome (indeed, encouraged) to open the file in a text editor to check its contents and make sure it doesn&amp;#039;t do nefarious things. A suitable command might therefore be &lt;strong&gt;less pro&lt;/strong&gt;. Just tap the letter &amp;#039;q&amp;#039; to quit the less program when you&amp;#039;re satisfied with the script&amp;#039;s contents.
&lt;/p&gt;

&lt;p&gt;
When you&amp;#039;re ready to launch the pro script, just type:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;bash pro&lt;/pre&gt;

&lt;p&gt;
You will immediately be prompted for your sudo password (i.e., the password of the non-root account you&amp;#039;re operating under). Depending on how long the script runs for, you may be prompted for the sudo password more than once: just type it in whenever prompted.
&lt;/p&gt;

&lt;p&gt;
The script does the following things to your server:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Updates all its software (which shouldn&amp;#039;t do much, if you&amp;#039;ve just done the job manually anyway!)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Installs MariaDB database software (equivalent to installing MySQL)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Enables MariaDB to restart automatically whenever the server reboots&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Configures MariaDB to accept network connections&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Opens the MariaDB default port (3306) in any running firewall&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Runs the mysql_secure_installation script to tighten up the default security within MariaDB&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Creates a new MariaDB database, called “giocoso3” and a user to own and administer it, also called “giocoso3”, with a password of “giocoso3”&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
It should all generally whizz by at a rate of knots without too much drama. Debian doesn&amp;#039;t install sudo by default, so there are some root passwords required to get it to the point of using sudo, I&amp;#039;m afraid: this means that Debian-based distros will generally prompt for the root password multiple times before it finally prompts for the sudo password. Stay aware of which one it&amp;#039;s asking for at any given time.
&lt;/p&gt;

&lt;p&gt;
Please note that on FreeBSD, you will probably get an error about &amp;#039;bash not found&amp;#039;, so you&amp;#039;ll have to do a &lt;strong&gt;pkg install bash&lt;/strong&gt; before you can run the &lt;strong&gt;bash pro&lt;/strong&gt; command.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Update the O\/S &amp;amp; run the Giocoso Pro Installation Script&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;update_the_os_run_the_giocoso_pro_installation_script&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;6264-10092&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;post-installation_checks&quot;&gt;4.0 Post-Installation Checks&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Once the pro script has run its course, it&amp;#039;s probably wise to run a few checks, just to make sure everything worked as intended.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.0 Post-Installation Checks&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;post-installation_checks&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;10093-10263&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;is_the_mysql_configuration_file_correctly_set_to_accept_network_connections&quot;&gt;4.1. Is the MySQL Configuration File correctly set to accept network connections?&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The MySQL database needs to be configured to &amp;#039;bind&amp;#039; to a network address, and not just to localhost connections. The pro script &lt;em&gt;should&lt;/em&gt; have done that for you, but it&amp;#039;s best to be sure. The relevant configuration file is either /etc/mysql/my.cnf or /etc/my.cnf, depending on distro (Fedora and OpenSuse use the /etc/my.cnf location; most other platforms use /etc/mysql/my.cnf. Just cat the file and check the results:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_164159.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250209_164159.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_164159.jpg?w=650&amp;amp;tok=ff8e4c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You need to see a &amp;#039;mysqld&amp;#039; section at the end of the file, together with a bind address that reads your server&amp;#039;s actual IP address, not a &amp;#039;127.0.0.1&amp;#039; placeholder. If you see something similar to the above, your MySQL server is configured to accept connections from across the network, which is what we want to see.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.1. Is the MySQL Configuration File correctly set to accept network connections?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;is_the_mysql_configuration_file_correctly_set_to_accept_network_connections&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;10264-11161&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;is_the_firewall_port_3306_open&quot;&gt;4.2. Is the Firewall port 3306 open?&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
This can be tricky to do in a bit of distro-agnostic documentation, because different distros use different firewalls, if they use a firewall at all by default. Thus, the specific commands to check the status of the firewall on any given distro might well vary. On Fedora Server, the firewall software is called &lt;strong&gt;firewalld&lt;/strong&gt; and &amp;#039;&lt;strong&gt;firewall-cmd&lt;/strong&gt;&amp;#039; commands are used to query and control it.
&lt;/p&gt;

&lt;p&gt;
To check if a firewall is running at all, issue the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo firewall-cmd --state&lt;/pre&gt;

&lt;p&gt;
If it returns with a reply of &lt;strong&gt;running&lt;/strong&gt;, then you know that there &lt;em&gt;is&amp;lt;&lt;/em&gt; a firewall in use and that therefore it needs to permit MySQL traffic through. To check that the MySQL port is open for network traffic, therefore, then issue this command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo firewall-cmd --query-port=3306/tcp&lt;/pre&gt;

&lt;p&gt;
That will either return &amp;#039;yes&amp;#039; or &amp;#039;no&amp;#039;. If it returns &lt;strong&gt;yes&lt;/strong&gt;, you&amp;#039;re in business and need do no more. If it returns &lt;strong&gt;no&lt;/strong&gt;, however, then you need to manually force the port open with the commands:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload&lt;/pre&gt;

&lt;p&gt;
A re-run of the &amp;#039;query port&amp;#039; command should then return a &amp;#039;yes&amp;#039; reply.
&lt;/p&gt;

&lt;p&gt;
On Ubuntu Server, the firewall software is called &lt;strong&gt;ufw&lt;/strong&gt; so the command to check if port 3306 is open is: 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo ufw status&lt;/pre&gt;

&lt;p&gt;
If you get a little table of results when issuing that command, you should be good to go. OpenSuse apparently uses the &lt;strong&gt;firewalld&lt;/strong&gt; firewall, just as Fedora does …so the above commands should work on that distro, too. Debian is a law unto itself, so on that distro you&amp;#039;d issue the command 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo nft list ruleset&lt;/pre&gt;

&lt;p&gt;
If a bunch of code comes back that lists &amp;#039;dport 3306&amp;#039; within curly braces, you&amp;#039;re &lt;em&gt;probably&lt;/em&gt; good to go!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.2. Is the Firewall port 3306 open?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;is_the_firewall_port_3306_open&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;11162-12899&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;is_there_a_giocoso3_database&quot;&gt;4.3. Is there a Giocoso3 Database?&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The last thing to check on the server is whether the script correctly created a giocoso3 database for you. Issue the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo mysql&lt;/pre&gt;

&lt;p&gt;
At the new prompt that then appears, type: 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;show databases;&lt;/pre&gt;

&lt;p&gt;
Be sure to include that trailing semi-colon, which is the delimiter that tells the database engine your command &amp;#039;ends here&amp;#039;. You should see something like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_170832.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250209_170832.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250209_170832.jpg?w=650&amp;amp;tok=b71130&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You can see the name &amp;#039;giocoso3&amp;#039; shown in the little list of databases there: that means the script has done its job correctly. Type the word &lt;strong&gt;quit&lt;/strong&gt; to get back to the normal command prompt.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.3. Is there a Giocoso3 Database?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;is_there_a_giocoso3_database&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;12900-13574&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;final_checks_from_clients&quot;&gt;4.4 Final Checks from Clients&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
One final check is probably worth performing: can your client devices actually see and connect to the new Giocoso Pro server? To check that, you&amp;#039;ll need a client device onto which the MySQL server &lt;em&gt;client&lt;/em&gt; software has been installed. Explaining how to do that in detail is outside the scope of this article, but in brief:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Arch&lt;/strong&gt;: sudo pacman -S mariadb&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Debian&lt;/strong&gt;: sudo apt install mariadb-client&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Ubuntu&lt;/strong&gt;:  sudo apt install mariadb-client&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;OpenSuse&lt;/strong&gt;:  sudo zypper install mariadb-client&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Fedora&lt;/strong&gt;:  sudo dnf install mariadb&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Assuming the client software &lt;em&gt;has&lt;/em&gt; been installed, switch to using one of those client devices and in a new terminal session type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mariadb -u giocoso3 -pgiocoso3 -h 192.168.137.187 -D giocoso3 --skip-ssl&lt;/pre&gt;

&lt;p&gt;
…which means “connect to a database called &amp;#039;giocoso3&amp;#039;, as a user called &amp;#039;giocoso3&amp;#039; and with a password of &amp;#039;giocoso3&amp;#039; (notice there&amp;#039;s no space between the -p and the password!)”. The specific IP address you use should be whatever your new Giocoso Pro Server is using, of course. The username and password are, however, &lt;strong&gt;hard-coded and fixed&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
The response should be something like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250127_160550.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250127_160550.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250127_160550.jpg?w=650&amp;amp;tok=df67ae&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You&amp;#039;ll notice that I threw in a &amp;#039;show tables;&amp;#039; command there -the result was &amp;#039;empty set&amp;#039;, because no tables actually exist within this database as yet, but the fact that the command produce a response of any sort at all indicates that remote connections to the server are working as intended. To create appropriate tables is the job of the Giocoso Pro initialisation process, which is launched from within Giocoso itself… and which is resolutely &lt;em&gt;outside&lt;/em&gt; the scope of this particular article! For now, it&amp;#039;s sufficient to know that you&amp;#039;ve got a working Pro server that is able to be used by Giocoso clients successfully.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.4 Final Checks from Clients&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;final_checks_from_clients&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;13575-15479&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;final_notes_on_security_and_the_pro_script&quot;&gt;5.0 Final Notes on Security and the Pro Script&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The Pro script aims to automate the setup of a MySQL server on Arch, Debian, Devuan, Fedora, OpenSuse, Ubuntu and FreeBSD. It &lt;em&gt;may&lt;/em&gt; work on distros derived from those &amp;#039;parent distros&amp;#039;, but I haven&amp;#039;t tested them and I can&amp;#039;t vouch that anything will work in such environments. Generally speaking, you don&amp;#039;t want to be setting up dedicated database servers on &amp;#039;niche&amp;#039; distros anyway: I&amp;#039;ve never seen Oracle installed on Peppermint Linux or Garuda Linux, for example! Stick to the mainstream &amp;#039;parent&amp;#039; distros, though, and you should be OK.
&lt;/p&gt;

&lt;p&gt;
That said, I&amp;#039;m disclaiming all responsibility at this point! You run the Pro script at your own risk. I haven&amp;#039;t wrapped it in layers of error detection and robustness, for example. I&amp;#039;ve tested it on virtual machines running fresh installs of the latest versions of the various distros mentioned (latest at the time of writing that is, being mid-February 2025) and it does what I expect it to do on all of them. If you run it on a server you&amp;#039;re already using for other things, who knows what the results might be. If a pre-loved server is your intended platform, therefore, I would recommend you &lt;em&gt;reading&lt;/em&gt; the Pro script and working out what it does… and then doing those same things yourself, manually… and carefully!
&lt;/p&gt;

&lt;p&gt;
Finally, please note that the MySQL database the Pro script creates (and which Giocoso Pro expects) is &lt;strong&gt;not secure&lt;/strong&gt; and &lt;strong&gt;&lt;em class=&quot;u&quot;&gt;isn&amp;#039;t intended&lt;/em&gt;&lt;/strong&gt; to be secure. It&amp;#039;s administrative user is &lt;strong&gt;giocoso3&lt;/strong&gt;, password &lt;strong&gt;giocoso3&lt;/strong&gt;, and he has complete authority to create or destroy everything in the giocoso3 database. There&amp;#039;s no subtlety about that and it&amp;#039;s entirely by deliberate design: a Giocoso Pro database is not meant to be as secure as Fort Knox. It&amp;#039;s intended for internal use in a home network environment, without access to the wider world via the Internet, so any potential threat to it is entirely inside your own home. Knowing the credentials involved potentially gives your miscreant children the ability to screw with the Giocoso global database …but it&amp;#039;s expected that this is a problem &lt;em&gt;you&amp;#039;ll&lt;/em&gt; resolve in whatever way seems appropriate to you! Just be warned that you &lt;em&gt;should not attempt to change the giocoso3 username or password&lt;/em&gt;. That combo of credentials is hard-coded throughout Giocoso&amp;#039;s code, so changing it on the database will definitely break things, badly.
&lt;/p&gt;

&lt;p&gt;
In conclusion:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Start with a vanilla, fresh server installation&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Fully update your server&amp;#039;s operating system&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;wget software.bbritten.com/pro&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;bash pro&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Check your firewall allows traffic on port 3306&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
…and then go configure your client devices to point to and make use of the new Giocoso Pro Server&amp;#039;s database.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;5.0 Final Notes on Security and the Pro Script&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;final_notes_on_security_and_the_pro_script&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;15480-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/c/c2fd743f4e0c7ddef30bb0af8a356745.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/probuild2">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T10:49:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>probuild2</title>
        <link>https://www.bbritten.com/softwares/giocoso/probuild2</link>
        <description>
&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/playmenu/giocosoicopro.png?w=220&amp;amp;tok=e52da2&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;
&lt;/p&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;build_a_giocoso_pro_server_with_arch_linux&quot;&gt;Build A Giocoso Pro Server With Arch Linux&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Build A Giocoso Pro Server With Arch Linux&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;build_a_giocoso_pro_server_with_arch_linux&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;63-119&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Giocoso Pro is the name given to a MySQL (or MariaDB) database that provides details of what music files exist and what plays of them have taken place, shared amongst all your computing devices that might be involved in playing classical music. It is a very lightweight implementation of a relational database, with just two tables and not a lot of relations between them! Running such a database therefore requires very little in the way of hardware resources: it&amp;#039;s recommended to have a dual core CPU, 2GB of RAM and 20GB of hard disk space, though more of any of these resources is always handy &lt;img src=&quot;https://www.bbritten.com/lib/images/smileys/smile.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:-)&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
Since it is a server, there is no need for a fancy graphical desktop to make things look &amp;#039;nice&amp;#039;: a Linux distro that provides the bare minimum of computing capabilities whilst managing to run the database is all that is really required -and that makes Arch an ideal distro for implementing Giocoso Pro, because it starts out about as barebones an operating system as it&amp;#039;s possible to get. You choose what to add to it (not much, as it turns out!) and the end result remains extremely minimalist, yet fully functional. As such, this article sort-of reproduces &lt;a href=&quot;https://www.bbritten.com/articles/buildarch&quot; class=&quot;wikilink1&quot; title=&quot;articles:buildarch&quot; data-wiki-id=&quot;articles:buildarch&quot;&gt;my earlier article on how to build an Arch desktop&lt;/a&gt;, but simplifies things dramatically, as no desktop environment is involved.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;120-1461&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;the_basics&quot;&gt;2.0 The Basics&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
I built what follows in VMware Workstation as a virtual machine, with:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 4096 &lt;abbr title=&quot;Megabyte&quot;&gt;MB&lt;/abbr&gt; of virtual RAM&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 2 virtual CPUs&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 20GB virtual hard disk&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Those are above-minimum specs and I could certainly have halved the RAM allocation without too much drama. It&amp;#039;s still fairly lightweight, however. If I were doing this on one of the spare physical machines I have sitting around in my loft, my 2011-vintage Dell desktop PC with an Intel i3 CPU, 4GB of total RAM and a 60GB solid state hard drive would work perfectly well.
&lt;/p&gt;

&lt;p&gt;
It is configured to use bridged networking, as it will need to be able to connect to the Internet -and, of course, as a Giocoso Pro machine, client music-playing devices will want to be able to connect to &lt;em&gt;it&lt;/em&gt;!
&lt;/p&gt;

&lt;p&gt;
I obtained my Arch Linux &lt;a href=&quot;https://archlinux.org/download/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://archlinux.org/download/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;installation medium from here&lt;/a&gt;, specifically the &lt;strong&gt;archlinux-2025.01.01-x86_64.iso&lt;/strong&gt; file, via the torrent link provided on that page.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 The Basics&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_basics&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1462-2418&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;getting_started&quot;&gt;3.0 Getting Started&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
When you first boot your PC or virtual machine, you&amp;#039;ll see this boot menu:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-14-27-08.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:arch-mysql-2025-01-27-14-27-08.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-14-27-08.png?w=650&amp;amp;tok=ccc057&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The top menu option is the correct option to take: either let the automatic boot countdown time itself out or press [Enter] to accept the top menu selection. This will trigger the display of a pile of unintelligible messages, at the end of which you are somewhat unceremoniously dumped at a command prompt, logged in as root:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-14-30-34.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:arch-mysql-2025-01-27-14-30-34.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-14-30-34.png?w=650&amp;amp;tok=ce60f5&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Everything from this point on consists of typing some textual commands in order to get the operating system installed on your computer -and ensuring you type them correctly!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Getting Started&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;getting_started&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2419-3172&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;initial_steps&quot;&gt;4.0 Initial Steps&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.0 Initial Steps&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;initial_steps&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;3173-3202&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;keyboard_selection&quot;&gt;4.1 Keyboard Selection&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Arch assumes you are using a standard US keyboard. If that&amp;#039;s not true for you, you&amp;#039;ll need to tell it what keyboard you&amp;#039;re &lt;em&gt;actually&lt;/em&gt; using. Type the following command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;ls /usr/share/kbd/keymaps/**/*.map.gz | less&lt;/pre&gt;

&lt;p&gt;
…and a long list of available keyboard mappings will be displayed, one page at a time (tap &amp;#039;q&amp;#039; to quit back to the command prompt at any time). Read the list carefully until you see the one you need. The bit you need to take note of is the last part of the file name, but ignoring the “.map.gz” extension. So, a Spanish keyboard would probably be listed under &amp;#039;es&amp;#039; for &amp;#039;España&amp;#039;; an Italian one under &amp;#039;it&amp;#039; and so on. The standard UK Qwerty keymap is listed as &amp;#039;uk.map.gz&amp;#039;, so lopping off the extension, you arrive at plain &amp;#039;uk&amp;#039;. Knowing that, issue the loadkeys command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;loadkeys uk&lt;/pre&gt;

&lt;p&gt;
You can then tap some keys on your keyboard to validate that you&amp;#039;ve selected the correct keymap.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.1 Keyboard Selection&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;keyboard_selection&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;3203-4143&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;prepare_the_hard_disk&quot;&gt;4.2 Prepare the Hard Disk&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
You next need to know what hard disk(s) you&amp;#039;ve got and onto which one you&amp;#039;ll be installing the operating system. Type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;fdisk -l&lt;/pre&gt;

&lt;p&gt;
…and you&amp;#039;ll see output such as this one:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-14-38-41.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:arch-mysql-2025-01-27-14-38-41.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-14-38-41.png?w=650&amp;amp;tok=28f1b1&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This tells me I have one real hard disk (ignore things called /dev/loop…) called &lt;strong&gt;/dev/sda&lt;/strong&gt;: I can tell that&amp;#039;s the &amp;#039;right&amp;#039; device identifier because the display tells me it&amp;#039;s 20GB big, which is the hard disk size I was expecting. You replace &amp;#039;/dev/sda&amp;#039; in everything that follows with the device identifier that is displayed for &lt;em&gt;your&lt;/em&gt; hard disks.
&lt;/p&gt;

&lt;p&gt;
Knowing the device identifier for your hard disk, we now need to &lt;strong&gt;parttition&lt;/strong&gt; it and write a file system onto it. The command to do that is:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;fdisk /dev/sda&lt;/pre&gt;

&lt;p&gt;
That takes you &lt;em&gt;into&lt;/em&gt; the fdisk utility where it unhelpfully sits there prompting you to type a &amp;#039;command&amp;#039; of some sort. These are issued by typing individual letters. The key sequence you need to supply now is as follows:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; n&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; p&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; [Enter] [Enter] [Enter]&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; w&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
That creates you a &lt;strong&gt;n&lt;/strong&gt;ew &lt;strong&gt;p&lt;/strong&gt;rimary partition, accepting the defaults for its size and location on the disk, and &lt;strong&gt;w&lt;/strong&gt;riting those configuration details to disk, so they actually take effect: congratulations, you now have a new partition on the hard drive, called &lt;strong&gt;/dev/sda1&lt;/strong&gt; (notice the &amp;#039;1&amp;#039; gets appended to the base device identifier, to indicate that it&amp;#039;s the first partition (and the only one, as it happens) on this disk. Once the partitioning is complete, you could do another &lt;strong&gt;fdisk -l&lt;/strong&gt; to confirm that a numbered partition is listed in the output.
&lt;/p&gt;

&lt;p&gt;
Assuming it is, you now need to format it (and I&amp;#039;m only going to use the very unexotic ext4 file system to do so), using the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mkfs.ext4 /dev/sda1&lt;/pre&gt;

&lt;p&gt;
That command should complete relatively quickly and at this point you now have a usable hard disk onto which we can install the Arch operating system and software itself.
&lt;/p&gt;

&lt;p&gt;
We finish up this stage of proceedings by &lt;em&gt;mounting&lt;/em&gt; the new hard drive partition into a folder, allowing us to write to it by directing things &amp;#039;into&amp;#039; that folder. The command to do that is simply:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mount /dev/sda1 /mnt&lt;/pre&gt;

&lt;p&gt;
…and this means that if we were to store or write anything into /mnt, we&amp;#039;ll be writing onto the physical hard drive we&amp;#039;ve just formatted.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.2 Prepare the Hard Disk&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;prepare_the_hard_disk&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;4144-6490&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;installing_the_operating_system&quot;&gt;4.3 Installing the Operating System&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The command to fetch the operating system files from the Internet and copy them into /mnt is:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;pacstrap /mnt base linux linux-firmware nano sudo make wget gcc binutils bc networkmanager inetutils man coreutils&lt;/pre&gt;

&lt;p&gt;
That triggers a lot of activity:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-14-50-50.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:arch-mysql-2025-01-27-14-50-50.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-14-50-50.png?w=650&amp;amp;tok=fae223&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Around 600MB of files are now downloaded from the Internet and written into various sub-folders within the /mnt folder. The process should be entirely automatic, so be patient and just let the process complete in its own good time. Should your network connection fail for any reason, don&amp;#039;t panic: just re-issue the same pacstrap command again once normal network service has been resumed. The process will pick up from where it last reached.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.3 Installing the Operating System&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_the_operating_system&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;6491-7298&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;post_os-installation_configuration&quot;&gt;4.4 Post OS-Installation Configuration&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
At this point, your new operating system is downloaded and installed, but is fundamentally not usable and won&amp;#039;t even boot correctly. We need to tweak some things before you can turn the raw install into a usable operating system.
&lt;/p&gt;

&lt;p&gt;
The first thing we need to do is create an fstab so that the new &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; knows what drive(s) it&amp;#039;s got to mount in the first place. Issue this command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;genfstab -U /mnt &amp;amp;gt;&amp;amp;gt; /mnt/etc/fstab&lt;/pre&gt;

&lt;p&gt;
That&amp;#039;s the &amp;#039;live&amp;#039; Arch system writing into the contents of the /mnt folder, so that what it sees as /mnt/etc/fstab will, eventually, become the new system&amp;#039;s actual /etc/fstab.
&lt;/p&gt;

&lt;p&gt;
Everything else we need to tweak cannot really be written &amp;#039;into&amp;#039; the new operating system from &amp;#039;outside&amp;#039; like this, however. Instead, we actually have to sort-of &amp;#039;go into&amp;#039; /mnt and do everything from &lt;em&gt;within&lt;/em&gt; that system. The command to do that is:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;arch-chroot /mnt&lt;/pre&gt;

&lt;p&gt;
You&amp;#039;ll see the start of the command prompt changes to reflect the fact that you are now &amp;#039;in&amp;#039; /mnt, as though it were your root folder. There are bunch of fairly low-level commands we must now issue to get things &amp;#039;right&amp;#039;. First, we ought to set the new system&amp;#039;s time zone correctly. To find out what time zones even exist, type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;timedatectl list-timezones | less&lt;/pre&gt;

&lt;p&gt;
Once you&amp;#039;ve found one that seems suitable (I&amp;#039;m going for &amp;#039;Europe/London&amp;#039;!), tap &amp;#039;q&amp;#039; to quit the listing and then type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;timedatectl set-timezone Europe/London&lt;/pre&gt;

&lt;p&gt;
Next, we need to say what &amp;#039;locale&amp;#039; our system should use. In my case, I want to say I&amp;#039;m using UK currency, date and time conventions and also using the UTF-8 character set (I need the ability to type the occasional umlaut, or cedilla, given I listen to a lot of classical music by European composers!). So:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;nano /etc/locale.gen&lt;/pre&gt;

&lt;p&gt;
That document lists every &lt;em&gt;possible&lt;/em&gt; locale: your job is to find the one you want and to remove the hash from the start of the line so that it is uncommented. In my case, I&amp;#039;m looking for &lt;strong&gt;en_&lt;abbr title=&quot;Gigabyte&quot;&gt;GB&lt;/abbr&gt;.UTF-8&lt;/strong&gt; (English, Great Britain, UTF-8 characterset). Once uncommented, press Ctrl+X to quit and then tap &amp;#039;y&amp;#039; to save when prompted, finishing with a final [Enter] to accept the proposed file name. With one locale un-commented in this way, type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;locale-gen&lt;/pre&gt;

&lt;p&gt;
…and you should see confirmation that the correct locale has been generated.
&lt;/p&gt;

&lt;p&gt;
If you had to change your keyboard settings right at the start of proceedings (see Section 4.1 above), then you should configure that keyboard change now, too:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;nano /etc/vconsole.conf&lt;/pre&gt;

&lt;p&gt;
…and type in:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;KEYMAP=uk&lt;/pre&gt;

&lt;p&gt;
(or whatever keymap you chose back in Section 4.1).
&lt;/p&gt;

&lt;p&gt;
The new operating system now needs to know about its network identity. So, issue this command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;echo stravinsky &amp;gt; /etc/hostname&lt;/pre&gt;

&lt;p&gt;
…to set your new device&amp;#039;s hostname to &amp;#039;stravinsky&amp;#039;. If you want a different name, be my guest and supply it instead -but make sure you replace all future mentions of &amp;#039;stravinsky&amp;#039; in this article with whatever alternative name you decided upon!
&lt;/p&gt;

&lt;p&gt;
Now, finish things off with:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;nano /etc/hosts&lt;/pre&gt;

&lt;p&gt;
Into this mostly-empty file, append the following information:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;127.0.0.1 localhost
::1 localhost
127.0.1.1 stravinsky.dizwell.home stravinsky&lt;/pre&gt;

&lt;p&gt;
Of course, replace &amp;#039;stravinsky&amp;#039; with your actual choice of hostname. Also note that &amp;#039;dizwell.home&amp;#039; is my home network&amp;#039;s &amp;#039;domain name&amp;#039;: you&amp;#039;d have to change that to whatever you use in your home network, too. Save the edited file.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.4 Post OS-Installation Configuration&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;post_os-installation_configuration&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;7299-10731&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;configure_some_users&quot;&gt;4.5 Configure Some Users&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
We&amp;#039;re nearly done! We should now set a password for our root user, with the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;passwd&lt;/pre&gt;

&lt;p&gt;
Type something memorable and complicated twice, when prompted. Don&amp;#039;t forget what you supply at this point! Now we move on to creating a non-root user, who I&amp;#039;m calling &amp;#039;hjr&amp;#039;, but substitute in whatever feels more appropriate for you! The commands to give are:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;useradd -m -G wheel hjr
passwd hjr&lt;/pre&gt;

&lt;p&gt;
The first command creates a user called &amp;#039;hjr&amp;#039; and makes him a member of the &amp;#039;wheel&amp;#039; group for reasons which will shortly become apparent! The second command sets a new password for the new user: follow the prompts and type in a suitable password, twice.
&lt;/p&gt;

&lt;p&gt;
Lastly, type these commands:
&lt;/p&gt;

&lt;p&gt;
export EDITOR=nano
visudo
&lt;/p&gt;

&lt;p&gt;
This will open up the sudoers file inside the nano text editor. Your job is to find the line which reads &lt;strong&gt;%wheel ALL=(ALL:ALL) ALL&lt;/strong&gt; and remove the &amp;#039;#&amp;#039; character from the start of that line, so that the line becomes a real, operative one rather than just being commented-out. Press Ctrl+X to exit the editor when ready and then tap &amp;#039;y&amp;#039; when asked whether you want to &amp;#039;save the modified buffer&amp;#039;: this exit+save is how the edited file will get saved back to disk safely. The new line in the sudoers file means that anyone who is a member of the &amp;#039;wheel&amp;#039; group can now exercise sudo powers (and thus be the equivalent of root). From the way I created the &amp;#039;hjr&amp;#039; user earlier, you can see this means that if I log in as hjr, I should be able to issue sudo commands without trouble.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.5 Configure Some Users&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;configure_some_users&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;10732-12252&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;and_finally&quot;&gt;4.6 And finally...&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
We are almost done!! We just need to make sure that the new operating system knows how to bootstrap itself at boot time. That&amp;#039;s done with the commands:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;pacman -S grub
grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg&lt;/pre&gt;

&lt;p&gt;
That installs a boot loader called &amp;#039;grub&amp;#039;, makes it take note of the /dev/sda device that was initialised way back in Section 4.2 and creates a boot configuration which enables the new operating system to boot correctly in future.
&lt;/p&gt;

&lt;p&gt;
At this point, the only thing left to do is to ensure the new PC&amp;#039;s network connection comes up properly on subsequent reboots. Issue this command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;systemctl enable NetworkManager.service&lt;/pre&gt;

&lt;p&gt;
And with that done, you can quit the chroot environment we entered earlier and ask for your new PC to reboot:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;exit
reboot&lt;/pre&gt;

&lt;p&gt;
You should end up at a command-line login prompt, at which point you can log in as yourself (in my case, as &amp;#039;hjr&amp;#039;).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.6 And finally...&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;and_finally&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;12253-13183&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;installing_giocoso_pro&quot;&gt;5.0 Installing Giocoso Pro&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Now that you have a working Arch server, it&amp;#039;s time to install Giocoso Pro onto it. This basically means downloading a script from this website which (a) installs the MariaDB relational database program; and (b) creates and configures a database suitable to act as a shared Giocoso database. The process, once launched, should be mostly automated: the occasional prompt to supply your password at various points may arise, but otherwise it should be fairly painless.
&lt;/p&gt;

&lt;p&gt;
So, first obtain the Giocoso Pro installation script by typing the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wget https://software.bbritten.com/pro&lt;/pre&gt;

&lt;p&gt;
You then run that script, once it&amp;#039;s been downloaded, with the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;bash pro&lt;/pre&gt;

&lt;p&gt;
The script will produce a lot of output, similar to this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-15-44-29.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:arch-mysql-2025-01-27-15-44-29.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-15-44-29.png?w=650&amp;amp;tok=5f9d2a&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Most of the output can be safely ignored: the key thing to watch out for is that you should see reference to &amp;#039;mariadb&amp;#039;: that&amp;#039;s the clue that MariaDB is being installed and configured for you. Once MariaDB is running and configured appropriately, all that is needed is a reboot of the entire server to ensure that MariaDB really does come back up and running automatically afterwards, so type:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;reboot&lt;/pre&gt;

&lt;p&gt;
When your PC comes back, log in as yourself and type:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo mariadb&lt;/pre&gt;

&lt;p&gt;
…followed by:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;show databases;&lt;/pre&gt;

&lt;p&gt;
If MariaDB really is running correctly, you should see this sort of thing:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-15-59-21.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:arch-mysql-2025-01-27-15-59-21.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/arch-mysql-2025-01-27-15-59-21.png?w=650&amp;amp;tok=5643f2&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Notice in the list of databases that there is one called &amp;#039;giocoso3&amp;#039;: that&amp;#039;s the proof you need that your Giocoso Pro server is ready to accept connections from client devices. You can then just type &lt;strong&gt;exit&lt;/strong&gt; to get back to a standard command prompt.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;5.0 Installing Giocoso Pro&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_giocoso_pro&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;13184-14937&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;final_checks_from_clients&quot;&gt;6.0 Final Checks from Clients&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
One final check is probably worth performing: can your client devices actually see and connect to the new Pro server? The way to test that is to switch to using one of those client devices, onto which you&amp;#039;ve previously installed the MariaDB client software. This command should be typed in a terminal session launched on one such device:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mariadb -u giocoso3 -pgiocoso3 -h 192.168.137.188 -D giocoso3 --skip-ssl&lt;/pre&gt;

&lt;p&gt;
…which means “a user called &amp;#039;giocoso3&amp;#039; and with a password of &amp;#039;giocoso3&amp;#039; (notice there&amp;#039;s no space between the -p and the password!) wishes to connect to the MariaDB Server running on host 192.168.137.188 and connect to the database called &amp;#039;giocoso3&amp;#039;”. The response should be something like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250127_160550.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250127_160550.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250127_160550.jpg?w=650&amp;amp;tok=df67ae&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You&amp;#039;ll notice that I threw in a &amp;#039;show tables;&amp;#039; command there -the result was &amp;#039;empty set&amp;#039;, because no tables actually exist within this database as yet, but the fact that the command produce a response of any sort at all indicates that remote connections to the server are working as intended. To create appropriate tables is the job of the Giocoso Pro initialisation process, which is launched from within Giocoso itself… and which is resolutely &lt;em&gt;outside&lt;/em&gt; the scope of this particular article! For now, it&amp;#039;s sufficient to know that you&amp;#039;ve got a working Pro server that is able to be used by clients successfully.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;6.0 Final Checks from Clients&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;final_checks_from_clients&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;14938-16379&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit14&quot; id=&quot;conclusion&quot;&gt;7.0 Conclusion&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Building an Arch server is not particularly hard, but it &lt;em&gt;is&lt;/em&gt; fiddly! There are quite a lot of commands to type, all of which are important, all of which demand being typed in correctly &lt;img src=&quot;https://www.bbritten.com/lib/images/smileys/smile.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:-)&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
Once built, however, turning the barebones server into a Giocoso Pro server is a simple matter of downloading the appropriate script and launching it. After that, a simple couple of checks performed both on the server itself and on the client devices that hope to make use of it will hopefully demonstrate that you&amp;#039;re in business for running Giocoso in shared database mode.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;7.0 Conclusion&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;conclusion&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;16380-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/1/14c93b94a93c4a76eb85f2e6bc28d0a9.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/proconcepts">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-09T14:08:25+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>proconcepts</title>
        <link>https://www.bbritten.com/softwares/giocoso/proconcepts</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;giocoso_pro_concepts&quot;&gt;Giocoso Pro Concepts&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Pro Concepts&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_pro_concepts&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-35&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;high-level_overview&quot;&gt;1.0 High-level Overview&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Giocoso Pro is an entirely &lt;strong&gt;free&lt;/strong&gt; and optional &lt;em&gt;addition&lt;/em&gt; to standard Giocoso&amp;#039;s functionality. It enables a local installation of Giocoso (what is termed hereafter a &amp;#039;Giocoso client&amp;#039; or &amp;#039;client device&amp;#039;) to push its recordings and plays data to a remote server or PC hosting a special kind of Giocoso Pro database. The Pro databases uses the MySQL database engine (though see Section 12 below for more details regarding the database engine actually in use on any given computing device).
&lt;/p&gt;

&lt;p&gt;
The point of doing that is to enable the client&amp;#039;s play history to be shared out to &lt;em&gt;other&lt;/em&gt; Giocoso clients: in this way, plays made on a laptop in the bedroom at night are visible to the desktop PC that is used throughout the day, or vice versa. Reports and statistics produced by &lt;em&gt;any&lt;/em&gt; Giocoso client will therefore accurately reflect the nature of the music played by &lt;strong&gt;all&lt;/strong&gt; clients, not just the reports and statistics that could be derived from a client&amp;#039;s &lt;em&gt;local&lt;/em&gt; Giocoso database (which is only ever aware of the plays made on that specific device). The Pro database doesn&amp;#039;t replace the local database: that&amp;#039;s still there, present on every device; it is, however, an &amp;#039;aggregation&amp;#039; of lots of local databases. Its play history is thus comprehensive, not device-specific.
&lt;/p&gt;

&lt;p&gt;
Diagrammatically, you might imagine a Giocoso Pro implementation looking a bit like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/giocoso3pro5.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:giocoso3pro5.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/giocoso3pro5.png?w=650&amp;amp;tok=af51f7&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Here we have two client PCs (one could be a laptop, another a single-board computer, whatever: the specifics don&amp;#039;t matter!). Each client device is part of a single home network and can therefore access a shared storage device (here labelled a NAS, but it could simply be a third PC&amp;#039;s hard disk shared out via SMB or similar), which contains the home&amp;#039;s digital music collection. Thus each PC can play network-accessible music files. 
&lt;/p&gt;

&lt;p&gt;
Their non-Pro database of what is playable and what has been played is stored on each client&amp;#039;s internal hard disk, local to each device and only really accessible by the Giocoso software installed on each specific PC. 
&lt;/p&gt;

&lt;p&gt;
It&amp;#039;s important to notice that no data passes directly between the client PCs: in earlier versions of Giocoso, there &lt;em&gt;was&lt;/em&gt; a mechanism for one client to pass a copy of its local database to another, but that was clumsy and prone to error, so has been removed from Giocoso Version 3.30 and above. The current situation is as shown above: the Giocoso clients do &lt;em&gt;not&lt;/em&gt; talk to each other at all, but each talks to a single, jointly-accessible Pro server.
&lt;/p&gt;

&lt;p&gt;
Giocoso Pro is the addition of the bit you see in the top right of the diagram: a new server, labelled &amp;#039;Pro Server&amp;#039;, is visible to the two client devices across the network. It runs a database of recordings and plays, so each client PC can access that Server-based database to store data about recordings and plays that the other client can immediately see (and add to as needed). Note that the Pro Server here is &lt;strong&gt;not&lt;/strong&gt; accessing the NAS device: a Pro Server doesn&amp;#039;t need access to the music collection itself. It knows about what digital music files exist and where they can be found because the &lt;em&gt;clients&lt;/em&gt; tell it, not because it works it out for itself. 
&lt;/p&gt;

&lt;p&gt;
Since each client can see the same Pro server as the other(s), what one client writes there, the other can immediately read intelligibly. If the first client says “There&amp;#039;s a Beethoven symphony stored in folder X”, because &amp;#039;X&amp;#039; is a folder on the shared NAS device, that&amp;#039;s going to be true for the second client too. And if the second device says, “I played a Mozart concerto found in folder Y”, the first client will immediately know precisely what concerto was played because it too can see &amp;#039;folder Y&amp;#039;. In short: what one device can see, all others can see too.
&lt;/p&gt;

&lt;p&gt;
For this diagram to work as a matter of practical reality, you need to do three things:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Build a Giocoso Pro Server&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Install a MySQL client on each client device&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Switch on Pro features for each client device&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;a href=&quot;http://absolutelybaching.com:81/build-a-giocoso-pro-server&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;http://absolutelybaching.com:81/build-a-giocoso-pro-server&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Separate instructions for building a Giocoso Pro Server are are provided elsewhere&lt;/a&gt;, but it basically involves installing MySQL server and then running a special configuration script that is downloaded from this website.
&lt;/p&gt;

&lt;p&gt;
If you were performing a completely fresh installation of Giocoso Version 3.30 or above then the MySQL client software would be automatically installed as part of Giocoso&amp;#039;s software prerequisite checks. However, upgrading to Version 3.30 from an earlier Giocoso release doesn&amp;#039;t trigger this important software installation -so I&amp;#039;ve provided separate documentation that explains how to do the job manually, if you have to.
&lt;/p&gt;

&lt;p&gt;
Finally, switching on Pro features for a client device is simply a matter of setting three new persistent configuration options: I&amp;#039;ll discuss the details of this immediately below.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 High-level Overview&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;high-level_overview&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;36-4935&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;switching_pro_client_features_on&quot;&gt;2.0 Switching Pro Client features on&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
After installing or upgrading a client&amp;#039;s Giocoso version to 3.30 or above, the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2: Create or Edit the Configuration file&lt;/strong&gt; can be used to edit the local persistent configuration file:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250211_110946.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250211_110946.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250211_110946.jpg?w=650&amp;amp;tok=8b92c8&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Three new configuration options are provided, as shown: a MySQL IP Address and Port number, and a &amp;#039;local folder prefix&amp;#039;. A fourth new option asks whether this is a primary device or not: we&amp;#039;ll see how that works in Section 5 below. A fourth parameter (“Is this a primary device”) determines whether a local database refresh &lt;em&gt;also&lt;/em&gt; updates the Pro server&amp;#039;s database: primary devices do, non-primary ones don&amp;#039;t.
&lt;/p&gt;

&lt;p&gt;
For now, it&amp;#039;s important to know that Pro features are turned &lt;strong&gt;on&lt;/strong&gt; by setting a value for the &lt;strong&gt;MySQL Server IP Address&lt;/strong&gt; parameter. If it is blank (as shown above, and as it will be by default) then all Pro features are turned &lt;em class=&quot;u&quot;&gt;off&lt;/em&gt;. The IP address needs to be the IP address of the server running MySQL that has already been configured to act as a Giocoso Pro database. That will vary, depending on your own home network setup and configuration -but the client PC definitely needs to be able to connect to it over the network. Note that the IP Address parameter &lt;em&gt;has&lt;/em&gt; to be a raw IP address, not a hostname that is resolved into an address via a &lt;abbr title=&quot;Domain Name System&quot;&gt;DNS&lt;/abbr&gt; server or a hosts file. Giocoso checks any entry here at the point of submission and will blank out anything that is not submitted in the form &lt;em&gt;a.b.c.d&lt;/em&gt;, where a, b, c and d are all numbers between 0 and 255. However, Giocoso does &lt;strong&gt;not&lt;/strong&gt; check that the IP address entered actually exists on your network or is contactable by the client PC …or that, even though it&amp;#039;s contactable, whether or not a MySQL database can be reached at the address. So: typing in a nonsensical IP address &lt;em&gt;will&lt;/em&gt; generate an error; but typing in a sensible address that happens not to exist &lt;em&gt;won&amp;#039;t&lt;/em&gt; generate a thing -though all attempts to play some music after making such an entry will fail.
&lt;/p&gt;

&lt;p&gt;
The default MySQL port number (i.e., the port on which the MySQL listens out for remote connections) is 3306, and the configuration options screen will have this entered by default. Without an IP address entry, however, the presence of a port number here will &lt;em&gt;not&lt;/em&gt; switch on Pro features. It is generally unlikely that you would ever want to configure a Giocoso Pro server to use a non-default port, so the default provided here to client devices is probably not going to need to change… but if you do elect to use a non-default port, here&amp;#039;s where you tell the client what you&amp;#039;ve done. Note that if you are running an internal firewall, you need to open it to allow traffic through on whatever port is configured here, otherwise the port will be considered closed and network communications will not be able to flow between clients and server.
&lt;/p&gt;

&lt;p&gt;
It is &lt;strong&gt;critically&lt;/strong&gt; important when enabling Pro functionality in a Giocoso client device that you specify a valid value for the &amp;#039;Local folder prefix&amp;#039; parameter, and I&amp;#039;ll discuss that in some detail next.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 Switching Pro Client features on&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;switching_pro_client_features_on&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;4936-8076&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;file_storage_locations&quot;&gt;3.0 File Storage Locations&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The Pro database contains a global_recordings table which will contain data about all the recordings that any client device might want to play. It&amp;#039;s important to realise, however, that the Pro database only stores a &lt;em&gt;location&lt;/em&gt; to a digital file, not the file itself. It follows that if this global_recordings table is to be shared between multiple clients, then the recording location has to be applicable to, and valid for, all clients.
&lt;/p&gt;

&lt;p&gt;
Imagine the scenario, therefore, where the shared NAS device on which your digital music files exist stores its music at, say: &lt;strong&gt;/mnt/bulkdata/music/classical/…&lt;/strong&gt; and in lots of sub-folders within that basic path. You make this NAS location available to all your network client devices via file-sharing technologies such as SMB or NFS. Each client device then maps this network-accessible folder to a &lt;em&gt;local mountpoint&lt;/em&gt;… and the problem is that different clients might mount the network location to very different mountpoints.
&lt;/p&gt;

&lt;p&gt;
For example, my desktop happens to be the &amp;#039;source of truth&amp;#039; for all digital music in my house, so it finds music at &lt;strong&gt;/home/hjr/Music&lt;/strong&gt;. My main listening PC happens, for historical reasons, to map the NAS folder to &lt;strong&gt;/sourcedata/music&lt;/strong&gt;. My laptops, unconstrained by history, tend to map the same NAS folder to &lt;strong&gt;/netmusic&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
The problem is that the Pro database must respond to queries from all these devices about &amp;#039;where do I find Beethoven&amp;#039;s Symphony No. 5?&amp;#039; and provide a response that works for &lt;em&gt;all&lt;/em&gt; of them. If it replied &amp;#039;at /home/hjr/Music/Beethoven/Symphonic/Symphony No. 5&amp;#039;, that would make my desktop PC happy, but would be completely wrong for my main listening PC and my laptops. Indeed, if it &lt;em&gt;ever&lt;/em&gt; answered with a &lt;strong&gt;full&lt;/strong&gt; path, the path would have to be identical on all client devices for it to &lt;em&gt;work&lt;/em&gt; for all of them… and constraining things that way would defeat the intended purpose of making Giocoso &amp;#039;device independent&amp;#039;.
&lt;/p&gt;

&lt;p&gt;
So what Giocoso Pro does is to store, in the global database, only the part of the path which genuinely does apply to all client devices. This is called the &lt;strong&gt;folder suffix&lt;/strong&gt;. Each client device then &lt;em&gt;prepends&lt;/em&gt; the part of the path which makes the file suffix work for that specific device: this is called the &lt;strong&gt;folder prefix&lt;/strong&gt;. So, for example, imagine I have these devices and paths:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;* Main PC:  /home/hjr/Music/Beethoven/Symphonic/Symphony No. 5
* Laptop: /netmusic/Beethoven/Symphonic/Symphony No. 5
* Listening PC: /sourcedata/music/Beethoven/Symphonic/Symphony No. 5&lt;/pre&gt;

&lt;p&gt;
…then I hope it&amp;#039;s obvious that &lt;strong&gt;/Beethoven/Symphonic/Symphony No. 5&lt;/strong&gt; would be valid for all my client devices and thus be a suitable folder &lt;em&gt;suffix&lt;/em&gt;, and the &lt;strong&gt;/home/hjr/Music&lt;/strong&gt;, &lt;strong&gt;/netmusic&lt;/strong&gt; and &lt;strong&gt;/sourcedata/music&lt;/strong&gt; parts of the paths must therefore be valid device-specific folder &lt;em&gt;prefixes&lt;/em&gt;.
&lt;/p&gt;

&lt;p&gt;
Here&amp;#039;s the completed configuration screen for my main PC, therefore:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250211_111314.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250211_111314.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250211_111314.jpg?w=650&amp;amp;tok=ae1241&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
When the global, shared Pro database tells my main PC to play “/Beethoven/Symphonic/Symphony No. 5”, therefore, my PC automatically sticks “/home/hjr/Music” onto the front of that and thus searches my hard disk for the complete path of /home/hjr/Music/Beethoven/Symphonic/Symphony No. 5… and will be successful in accessing that &lt;em&gt;complete&lt;/em&gt; path. Different devices can look in paths that make sense to them, too, because they&amp;#039;ll be configured with different folder prefixes, each one appropriate to each specific device. In this way, Giocoso Pro ensures device independence yet provides single, centralised responses to &amp;#039;what recordings exist?&amp;#039; queries.
&lt;/p&gt;

&lt;p&gt;
Incidentally, note that it doesn&amp;#039;t matter if you enter your local folder prefix with a trailing slash or not: Giocoso Pro treats “/home/hjr/Music/” identically to “/home/hjr/Music” (without the trailing slash).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 File Storage Locations&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;file_storage_locations&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;8077-11946&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;consequent_changes_to_the_local_installation&quot;&gt;4.0 Consequent Changes to the local installation&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
When you switch Pro features on for a client devices by configuring a Remote MySQL Server IP Address, the behaviour of the local client installation changes significantly, as follows:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; All options on the Play Music menu that have to do with selecting things to play (except for the &amp;#039;play music in specified folder&amp;#039;) now source their selections from the shared Giocoso Pro database, over the network&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Numbered options on the Play Music menu have changed position to accommodate the new Global Resumption feature (see Section 10 below). Options 6 and 7, to do with using playlists, are now Option 7 and 8, and global resumptions are handled by a new Option 6.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; During plays of music, the &amp;#039;n&amp;#039; key now invokes the &amp;#039;Global Notes&amp;#039; mechanism (see below, Section 9), not the local one.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; When a play concludes, it is &lt;strong&gt;still&lt;/strong&gt; recorded in the &lt;strong&gt;local&lt;/strong&gt; plays table; it is then copied to the remote, Pro database. In other words, the local plays table continues to be a complete record of what this specific device has played.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Playlists created before Pro features get enabled are still valid and can be played perfectly fine in Pro or local mode, though only on the device on which they were created.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; All options on the Database Management menu continue to reference the local database: if you create a database, it&amp;#039;s a local one; if you fast or full-scan refresh a database, it&amp;#039;s the local database that is being refreshed (but see below); if you backup or optimise a database, these are operations that only affect the local database… and so on.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; As just stated, any fast or full scan database refresh is always of the &lt;strong&gt;local&lt;/strong&gt; database… but if Pro mode has been enabled &lt;em&gt;and&lt;/em&gt; the local configuration file has declared this device to be a &amp;#039;primary device&amp;#039; (i.e. “Is this a Primary Device?” is set to &amp;#039;yes&amp;#039;), then Giocoso will perform a &lt;strong&gt;full&lt;/strong&gt; push of the local recordings table to the remote, shared database &lt;em&gt;after&lt;/em&gt; the local database has been brought up to date. If a primary device refreshes its local device, it will eventually update the global database -and, at that point, &lt;em class=&quot;u&quot;&gt;all&lt;/em&gt; Giocoso devices will be aware of (and can play) any new recordings discovered by the refresh operation.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; The reporting menu can use &lt;em&gt;either&lt;/em&gt; the local database as its source &lt;em&gt;or&lt;/em&gt; the remote, shared database: but it can&amp;#039;t use both at the same time. &lt;strong&gt;Option 9&lt;/strong&gt; on the new Pro menu allows you to switch sources back and forth, between local and remote mode.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; If reporting is done in Pro mode, then all output from the &lt;strong&gt;Advanced Reporting by SQL&lt;/strong&gt; function (Option 5) will open in your system&amp;#039;s default browser.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Nothing in the Administration menu changes meaning or functionality&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; A new Pro menu is accessible. This allows a client to wipe the remote recordings table and to re-populate it &lt;em&gt;ab initio&lt;/em&gt;. It also allows you to produce a couple of &amp;#039;aggregated statistics&amp;#039; reports, whereby you can see which devices are playing how-much music and what operating systems they&amp;#039;re using to do so.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Configured parameters that affect music search (e.g., setting a maximum and/or minimum duration, or setting the unplayed works or under-played composers flags on) still affect searches performed &lt;em&gt;by that device&lt;/em&gt; but by no other device.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
It&amp;#039;s important to note that Pro features can be switched on &lt;strong&gt;and&lt;/strong&gt; off, at will. You do so by supplying or removing an entry for the &amp;#039;Remote MySQL Server IP Address&amp;#039; configuration parameter (accessible via the Administration menu, Option 2). If you switch them on, all the changes mentioned above immediately kick in. If you switch them back off, then everything reverts to the way Giocoso behaved before remote databases were even a thing: plays revert to being sourced from the &lt;em&gt;local&lt;/em&gt; recordings table and completed plays continue to be stored in the local plays table, for example.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.0 Consequent Changes to the local installation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;consequent_changes_to_the_local_installation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;11947-15864&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;are_all_clients_equal&quot;&gt;5.0 Are All Clients Equal?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Conceptually, all Giocoso clients have access to the same collection of digital music files (though the specifics of the paths needed to get to them might vary, as previously discussed), so each is as equally well-equipped to talk to the remote Pro database as any other. However, the file prefix/suffix business &lt;em&gt;does&lt;/em&gt; affect the answer to the &amp;#039;are all clients equal&amp;#039; question!
&lt;/p&gt;

&lt;p&gt;
Suppose you have one PC whose folder structure to get to the music files is: /sourcedata/music/classical/A/Aaron Copland… and another PC has /netmusic/classical/A/Aaron Copland… Further suppose that the first PC has its file prefix set to &amp;#039;/sourcedata/music/classical&amp;#039; and the second to &amp;#039;/netmusic&amp;#039;. Can you see that this is now a problem, because if the first PC does a full refresh, it will strip its prefix from the paths it ends up uploading to the Pro database. So a recording found in (say) “/sourcedata/music/classical/A/Aaron Copland/Ballet/Billy the Kid” would be stored by the first PC with the file &lt;em&gt;suffix&lt;/em&gt; “/A/Aaron Copland/Ballet/Billy the Kid”. That&amp;#039;s not an issue for the first PC next time it wants to play that recording: it takes its prefix and adds it to the suffix and ends up with “/sourcedata/music/classical/A/Aaron Copland/Ballet/Billy the Kid”… and that&amp;#039;s completely correct. The trouble starts when the second PC tries to play the same recording: it will do the &amp;#039;prefix+suffix&amp;#039; trick and go looking for a recording in “/netmusic/A/Aaron Copland/Ballet/Billy the Kid”… and the “/classical” sub-folder name is entirely missed out. Net result: the second PC won&amp;#039;t be able to find the relevant recording.
&lt;/p&gt;

&lt;p&gt;
Of course, if you then let the &lt;em&gt;second&lt;/em&gt; PC do a full refresh, its results would be written up to the Pro database… and now all the paths would be wrong for the &lt;em&gt;first&lt;/em&gt; PC, because again the prefix+suffix equation ends up producing the wrong result.
&lt;/p&gt;

&lt;p&gt;
Wekk, the real fix for this is to sort out the prefix definitions so that they correctly result in suffixes that apply to all devices. In this case, /sourcedata/music and /netmusic would work, resulting in suffixes of &amp;#039;/classical/A/Aaron Copland…&amp;#039;; so would /sourcedata/music/classical and /netmusic/classical which would result in suffixes of &amp;#039;/A/Aaron Copland…&amp;#039;. Either alternative would result in a prefix+suffix combo that &lt;em&gt;would&lt;/em&gt; work for &lt;em&gt;both&lt;/em&gt; PCs.
&lt;/p&gt;

&lt;p&gt;
So that&amp;#039;s the &lt;em class=&quot;u&quot;&gt;correct&lt;/em&gt; fix for this sort of situation: ensure your prefixes are configured for every device that uses Giocoso so that the re-constructed full paths are always right, for every device.
&lt;/p&gt;

&lt;p&gt;
There&amp;#039;s always the risk, however, that you&amp;#039;ll not quite manage to do that correctly for one or other device you casually add to your network… and if that ever happens, you&amp;#039;ll wake up one morning unable to play anything on all your other devices because the new device has clobbered the file suffixes stored in the Pro database as a result of a scheduled full refresh! Ask me how I know! Therefore, an option in the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2: Create or Edit the Configuration File&lt;/strong&gt; allows you to declare that &amp;#039;this device is, yes, a Primary Device&amp;#039;. A “primary device” uploads new data to a Pro database whenever it performs a local database refresh; a non-primary device will only refresh its own local database: there won&amp;#039;t be a subsequent push of recordings data to the Pro Server. Practically, this means it is the primary device&amp;#039;s choice of file prefix/suffix that becomes the one that all other devices then have to work with.
&lt;/p&gt;

&lt;p&gt;
Now: there&amp;#039;s nothing to stop you declaring &lt;em&gt;all&lt;/em&gt; your client devices as primary: Giocoso isn&amp;#039;t keeping count and doesn&amp;#039;t care if you arrange for &lt;em&gt;every&lt;/em&gt; local device to upload its database scans to the Pro database. There&amp;#039;s no harm in things working this way: if you&amp;#039;ve got your file suffixes and prefixes sorted out correctly across all devices then any device&amp;#039;s updates won&amp;#039;t disrupt the suffixes stored in the Pro database and thus won&amp;#039;t break any other device&amp;#039;s ability to play music. It would be a lot of &lt;em&gt;unnecessary&lt;/em&gt; writing to the Pro database, of course, since whatever recordings one device discovers to exist will be exactly the same recordings that every other device would discover! But you could certainly configure things this way if you wanted. This again implies that, conceptually, all client devices are as equal as each other. &lt;strong&gt;Practically&lt;/strong&gt;, however, it makes more sense to declare one device the sole primary device on the network: its music discoveries become the truth for all other devices and writes to the Pro database are therefore kept to a minimum. Other, non-primary, devices simply &lt;em&gt;read&lt;/em&gt; the results of the primary device&amp;#039;s work, but don&amp;#039;t add to them.
&lt;/p&gt;

&lt;p&gt;
Bear in mind, too: the Pro menu, &lt;strong&gt;Option 4: Push Recordings to remote database&lt;/strong&gt; is there to allow &lt;em&gt;any&lt;/em&gt; client device to push its local recordings table to the remote Pro Server database, under manual control. The &amp;#039;primary-ness&amp;#039; of a device only affects whether it &lt;em&gt;automatically&lt;/em&gt; pushes its recordings to the remote database every time it locally refreshes. It&amp;#039;s also true that you can re-designate a primary device as a non-primary one, and promote a non-primary one to be primary as your needs and requirements dictate. It&amp;#039;s not a set-and-forget option, incapable of modification.
&lt;/p&gt;

&lt;p&gt;
But to the question that heads up this section, the answer is: yes and no, it depends! Conceptually, all devices are &lt;em&gt;capable&lt;/em&gt; of being exactly equal to any other. Practically, however, it makes sense to declare &lt;strong&gt;one&lt;/strong&gt; device to be a little more equal than the others, so that it&amp;#039;s version of &amp;#039;what music exists&amp;#039; is the one that the others use, rather than having to work it out for themselves.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;5.0 Are All Clients Equal?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;are_all_clients_equal&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;15865-21580&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;do_clients_need_a_local_database_any_more&quot;&gt;6.0 Do Clients need a local database any more?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Since all clients, once Pro features are enabled, get their &amp;#039;source of plays&amp;#039; from the Pro server; and since they write their &amp;#039;history of plays&amp;#039; to the same Pro server, it&amp;#039;s a reasonable question to ask whether or not the &lt;em&gt;local&lt;/em&gt; Giocoso database is necessary any more on client devices. The answer to that is unequivocably: &lt;strong&gt;yes&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
There are a number of reasons for this. First and most important: when a play concludes, as was mentioned in Section 3.0 above, the details of the play are &lt;em&gt;&lt;strong&gt;first&lt;/strong&gt;&lt;/em&gt; written to the &lt;em&gt;local&lt;/em&gt; database and only then copied to the Pro one. If there is no local database, that first write would fail, messily.
&lt;/p&gt;

&lt;p&gt;
Secondly, the Pro database is a &lt;strong&gt;summation&lt;/strong&gt; or aggregation of multiple local databases, not a replacement for any of them. Thirdly, and related to the prior point: the network might go down and if it does, it should be possible to continue using Giocoso in local mode. Once connections to the Pro database are available again, fine: the stuff that took place locally should be push-able to the Pro database by way of catch-up (that&amp;#039;s what the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 2: Push plays to global database&lt;/strong&gt; is for, after all). If there were no local record of plays made, that sort of catch-up wouldn&amp;#039;t be possible; and if we instead said &amp;#039;make the Pro database the only one that clients use&amp;#039;, Giocoso would be rendered unusable the second the network or the Pro server itself failed. Putting point 3 in a different way, then: we don&amp;#039;t want a single point of failure to render Giocoso unusable; having a local database we can read from and write to means we don&amp;#039;t have to take that risk.
&lt;/p&gt;

&lt;p&gt;
Finally, as has been mentioned previously, Pro mode is switchable: you can turn it off and on. If you didn&amp;#039;t have a local database, you couldn&amp;#039;t do that usefully.
&lt;/p&gt;

&lt;p&gt;
So: in short, you &lt;strong&gt;must have&lt;/strong&gt; a local database when you want to run in Pro mode. Get your local database created and populated first, and &lt;em&gt;then&lt;/em&gt; turn on Pro mode to unlock the new features it provides, whilst still having a usable local installation should it prove necessary.
&lt;/p&gt;

&lt;p&gt;
It is &lt;em class=&quot;u&quot;&gt;technically&lt;/em&gt; true that only &lt;em&gt;one&lt;/em&gt; client device needs to do a scan for music files and thus populate the local &lt;strong&gt;recordings&lt;/strong&gt; table, before pushing this to the Pro database. That&amp;#039;s because all other clients will thereafter be told what music to play and what location it can be found in by the Pro database: a local &lt;em&gt;recordings&lt;/em&gt; table is therefore not needed to perform that function (and one could be created easily enough should Pro-mode ever be turned off). But this &amp;#039;lack of necessity&amp;#039; definitely does &lt;em class=&quot;u&quot;&gt;not&lt;/em&gt; extend to the local &lt;strong&gt;plays&lt;/strong&gt; table. If you want to play music on a Giocoso client device, it &lt;em&gt;must&lt;/em&gt; have access to a local plays table… which means a local database is a necessity, at all times.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;6.0 Do Clients need a local database any more?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;do_clients_need_a_local_database_any_more&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;21581-24446&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;definition_of_uniqueness&quot;&gt;7.0 Definition of Uniqueness&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
In Pro mode, the definition of a unique &lt;strong&gt;recording&lt;/strong&gt; is the COMPOSER tag plus the COMPOSITION tag, conjoined: this is called the &lt;strong&gt;RECHASHVALUE&lt;/strong&gt;. The definition of a unique play is COMPOSER+COMPOSITION+PLAY_DATE: this is called the &lt;strong&gt;PLAYHASHVALUE&lt;/strong&gt;. In both cases, in Pro mode, the uniqueness of a composition or a recording are derived from the tag data stored within FLACs themselves. If you modify the composer or composition metadata associated with a FLAC after it has been added to your Giocoso database, then it will appear as a new recording when ultimately transferred across to the shared Pro database.
&lt;/p&gt;

&lt;p&gt;
This is very different to the way old-school Giocoso (and current, but non-Pro, Giocoso) works. In non-Pro mode, it is the full path to a FLAC on the hard disk which defines uniqueness (called the DIRNAME in both the plays and the recordings tables). If you were to move a FLAC from a folder called /orchestral to one called /symphonic, for example, then this would look like a new FLAC to non-Pro Giocoso… but since the composer and composition tags didn&amp;#039;t change, it &lt;em&gt;won&amp;#039;t&lt;/em&gt; look like a new recording to Giocoso in Pro mode.
&lt;/p&gt;

&lt;p&gt;
The significance of this is that some Giocoso behaviours depend on the definition of &amp;#039;what constitutes a unique recording&amp;#039;. If you are asking to play unplayed recordings, for example, then the test in &lt;strong&gt;non-Pro&lt;/strong&gt; mode is &amp;#039;does this recording&amp;#039;s full path (i.e., DIRNAME) appear in the PLAYS table?&amp;#039; In Pro mode, however, the definition is &amp;#039;does this recording&amp;#039;s RECHASHVALUE appear in the GLOBAL_PLAYS table?&amp;#039;. Going back to that previous example, then, it becomes obvious that in non-Pro mode a physical move of a file will make Giocoso think the file is new and thus unplayed …but if neither the composer nor composition tags were modified, Giocoso running in Pro mode will know the file has been played before, because the physical move won&amp;#039;t have changed the file&amp;#039;s RECHASHVALUE. This means not only music &lt;em&gt;selection&lt;/em&gt; can change between Pro and non-Pro modes (recordings one thinks are previously-played might look unplayed to the other) but the &lt;em&gt;reporting&lt;/em&gt; on things like &amp;#039;how many recordings are unplayed&amp;#039; will vary between the two modes, too.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;7.0 Definition of Uniqueness&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;definition_of_uniqueness&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;24447-26692&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;table_and_column_definition_changes&quot;&gt;8.0 Table and Column Definition Changes&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
In standard Giocoso, non-Pro mode, you would query the RECORDINGS and PLAYS tables. When Giocoso is running in Pro mode, however, you will query the almost-equivalent GLOBAL_RECORDINGS and GLOBAL_PLAYS tables. The GLOBAL_ tables are functionally equivalent to their non-global equivalents, but there are actually quite considerable internal differences between RECORDINGS/GLOBAL_RECORDINGS and PLAYS/GLOBAL_PLAYS, some of which have been mentioned above, but which I&amp;#039;ll re-iterate here.
&lt;/p&gt;

&lt;p&gt;
In RECORDINGS and PLAYS, every record is uniquely identified by an automatically-assigned ID number. Every new full scan of recordings (&lt;strong&gt;Database Management&lt;/strong&gt; menu, &lt;strong&gt;Option 3&lt;/strong&gt;) completely wipes the RECORDINGS table and potentially assigns different IDs to the same recording than it had before. Accordingly, the ID is really a meaningless piece of data in RECORDINGS (it is less volatile in the PLAYS table, however, since that is never wiped).
&lt;/p&gt;

&lt;p&gt;
In GLOBAL_RECORDINGS, the unique identifier is RECHASHVALUE. This is an MD5 hash string which is directly derived from the COMPOSER and COMPOSITION metadata tags found within the digital music file itself. In the GLOBAL_PLAYS table, the unique identifier is PLAYHASHVALUE, which is another MD5 hash string derived directly from the COMPOSER and COMPOSITION tags, plus the date and time of the conclusion of the specific play. Since these hash values are derived from metadata, they are genuinely invariant unless the metadata associated with a digital music file is actually changed.
&lt;/p&gt;

&lt;p&gt;
I&amp;#039;ve also already mentioned that non-Pro RECORDINGS and PLAYS tables used a column called DIRNAME to store the full path to the location of a digital music file; in Pro mode, the GLOBAL_RECORDINGS table has a column called FILESUFFIX and this stores only the device-independent part of the path that locates any given digital music file. The non-Pro PLAYS table also stores the DIRNAME when a play concludes: in Pro mode, the GLOBAL_PLAYS table merely stores the RECHASHVALUE of a recording, without &lt;em&gt;any&lt;/em&gt; indication of the physical location of the file(s) just played. Both PLAYS and RECORDINGS &lt;em&gt;and&lt;/em&gt; their Pro equivalents go on to store the GENRE, COMMENT, PERFORMER and DURATION of each recording or play, so there is no change there.
&lt;/p&gt;

&lt;p&gt;
Finally, the GLOBAL_PLAYS table stores the name of the client device doing the music play, and the details of the operating system it is running, in columns called DEVICENAME and &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;_TYPE. There are no equivalents of this data in non-Pro mode.
&lt;/p&gt;

&lt;p&gt;
Being aware of these details is important when it comes to constructing Advanced SQL play requests (Play Music menu, Option 4) or Advanced SQL reports (Reports menu, Option 5). If, for example, you had previously wanted to play previously-played masses by Haydn, you might have submitted a query such as:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;composer=&amp;#039;Joseph Haydn&amp;#039; and genre=&amp;#039;Choral&amp;#039; and composition like &amp;#039;%missa%&amp;#039; and dirname in (select dirname from plays)&lt;/pre&gt;

&lt;p&gt;
In Pro mode, that same query would have to be re-written as:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;composer=&amp;#039;Joseph Haydn&amp;#039; and genre=&amp;#039;Choral&amp;#039; and composition like &amp;#039;%missa%&amp;#039; and rechashvalue in (select rechashvalue from global_plays)&lt;/pre&gt;

&lt;p&gt;
Note the change from testing &amp;#039;dirname&amp;#039; to &amp;#039;rechashvalue&amp;#039; and the change of table name from &amp;#039;plays&amp;#039; to &amp;#039;global_plays&amp;#039;, for example. These changes are not applied automatically for you: there&amp;#039;s a reason this stuff is called &amp;#039;Pro&amp;#039;… you&amp;#039;re deemed to understand what&amp;#039;s needed to construct valid SQL statements!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;8.0 Table and Column Definition Changes&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table_and_column_definition_changes&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;26693-30191&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;global_note-taking&quot;&gt;9.0 Global Note-taking&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Since Giocoso Version 3.12, it&amp;#039;s been possible to tap the &amp;#039;n&amp;#039; key as a recording plays and thereby open up a text document (called &lt;strong&gt;classical_music_notes.txt&lt;/strong&gt;, stored in $HOME/.local/share/giocoso3/txt) where you can type in assorted notes and observations. This facility remains unchanged in Version 3.30, but if you switch on Pro features, the new &amp;#039;Global Notes&amp;#039; feature is invoked instead.
&lt;/p&gt;

&lt;p&gt;
“Global Notes” means that a new table is created in the Giocoso Pro database, called (somewhat unimaginatively!) &lt;strong&gt;GLOBAL_NOTES&lt;/strong&gt;. It is queried when the &amp;#039;n&amp;#039; key is tapped: either existing notes for the currently-playing recording are found in the global database, in which case they are opened in nano for editing; or no existing notes for the current recording are found, in which case nano is opened with a new document that is blank:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250205_122336.jpg&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_20250205_122336.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250205_122336.jpg?w=650&amp;amp;tok=dbcab4&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
In either case, you can just start typing your notes and observations as before. You will note that the text wraps when needed, but not particularly nicely (see, for example, the way &amp;#039;from the trumpets and drums&amp;#039; wraps in the above screenshot on line 3 of the main text): it is a basic text editor that&amp;#039;s being used for its simplicity and ubiquity, not because it handles long lines of text particularly well! Once you&amp;#039;re done writing, the edited text is saved (by pressing Ctrl+X) and, at that point, it is written back to the Pro database: no copy of the text is stored locally, at all. Once nano closes, Giocoso returns back to the &amp;#039;now playing&amp;#039; screen, which continued to run in the background for as long as you were editing text.
&lt;/p&gt;

&lt;p&gt;
Note that any local notes you may have made before enabling Pro features are &lt;em&gt;not&lt;/em&gt; transferred across to the global database. They remain accessible in the local classical_music_notes.txt file, but transferring them across to the global database is a manual job.
&lt;/p&gt;

&lt;p&gt;
The GLOBAL_NOTES table consists of only two columns: &lt;strong&gt;rechashvalue&lt;/strong&gt; as the unique key, identifying the work for which the notes are provided; and &lt;strong&gt;notes&lt;/strong&gt; -which is a long text field, accepting up to 4GB of input (which should be sufficient for most recordings, I think!)
&lt;/p&gt;

&lt;p&gt;
Global notes can be viewed by taking the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 8&lt;/strong&gt;. Dialog screens display first all the composers for whom notes have ever been made; you select one and then every recording associated with that composer for which notes exist. You select one from the list and then the note text is displayed in a quasi-graphical form, like so:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250308_145323.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250308_145323.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250308_145323.jpg?w=650&amp;amp;tok=acd4f0&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Notes displayed in this way are read-only.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;9.0 Global Note-taking&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;global_note-taking&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;30192-32868&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;global_pause_and_resume&quot;&gt;10.0 Global Pause and Resume&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
When Giocoso clients operate in &amp;#039;Pro&amp;#039; mode, if music playback is ever paused, data about what recording was being listened to and the point to which playback had reached is written back to the Giocoso Pro database (into a table called &lt;strong&gt;GLOBAL_PAUSESTATUS&lt;/strong&gt;). If playback is resumed on that original client device, the previously-created playstatus record is deleted. The playstatus table therefore only contains data about recordings that have been, and still are, paused.
&lt;/p&gt;

&lt;p&gt;
Whilst playback remains paused on the first Pro client device, therefore, it&amp;#039;s possible for &lt;em&gt;another&lt;/em&gt; Giocoso Pro client device to use the contents of the playstatus table to start playback itself, of the same recording, from the point to which the first device had reached. Putting it as bluntly as I can: one device can resume a play that another device was in the middle of. Practically, this means that I can listen to a long opera on my headphones using my laptop in bed at night; hit the pause button when I think I&amp;#039;m too tired to continue; then in the morning, I can resume the opera from the point I&amp;#039;d reached &lt;em&gt;but on the main listening room PC&lt;/em&gt;. The journey can be done in the other direction, too, of course: hit pause in the listening room, resume the playback once I&amp;#039;m safely in bed with the laptop at the ready.
&lt;/p&gt;

&lt;p&gt;
The resumption is not perfect: Giocoso rounds things to whole seconds, so playback resumption might skip a fraction of unplayed music, or repeat a fraction of played music. The resumption on a second device also doesn&amp;#039;t stop the original client device from thinking it&amp;#039;s paused in the middle of playback: if you were to return to the original device, it will still think it&amp;#039;s paused in the middle of whatever piece it had been playing. You can always simply hit the &amp;#039;Terminate&amp;#039; option to deal with this, of course -though listening to a &lt;em&gt;good&lt;/em&gt; opera second time round is no bad thing, either!
&lt;/p&gt;

&lt;p&gt;
Pauses are device-specific. That is, the global_playstatus has &lt;em&gt;three&lt;/em&gt; columns: the device that has paused, the recording it was in the middle of and the playback position it had reached. When a device wishes to resume a global play, therefore, it &lt;em&gt;might&lt;/em&gt; be the case that &lt;strong&gt;multiple&lt;/strong&gt; other devices have paused playback: we&amp;#039;ll therefore need to know &lt;em class=&quot;u&quot;&gt;which&lt;/em&gt; paused device is to be &amp;#039;taken over&amp;#039;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250207_205049.jpg&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_20250207_205049.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250207_205049.jpg?w=650&amp;amp;tok=fe1d2f&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Note that if there&amp;#039;s only one device is in pause mode, this &amp;#039;prompt for a device&amp;#039; doesn&amp;#039;t appear: the one and only device in pause mode is assumed to be the one you&amp;#039;re trying to resume.
&lt;/p&gt;

&lt;p&gt;
If the prompt for a device &lt;em&gt;does&lt;/em&gt; appear, however, you simply use the up and down arrow keys to select the appropriate device name, then press [Space] to select a device and finally press [OK] to confirm the choice: playback then starts on the new device immediately. I trust it&amp;#039;s obvious that a device can only play one piece of music at a time: therefore, only one piece of &lt;em&gt;paused&lt;/em&gt; music can exist on (or &amp;#039;for&amp;#039;) a device at a time. Accordingly, by picking the device name in this dialog box, you&amp;#039;ve implicitly said what music you want to resume.
&lt;/p&gt;

&lt;p&gt;
Resumed plays always start immediately: the usual &amp;#039;countdown&amp;#039; of the number of &amp;#039;seconds to wait before playback starts&amp;#039; (as configured in the Administration menu, Option 2) &lt;strong&gt;does not apply&lt;/strong&gt; to resumed plays, because resumption is a deliberate one-time act that it&amp;#039;s assumed you&amp;#039;re in control of! That said, be warned that if you are resuming a 4 hour-long opera that you&amp;#039;d managed to get 3 hours into before pausing, the resuming machine will have to silent &amp;#039;scan through&amp;#039; the &lt;em&gt;entire&lt;/em&gt; opera (not in real time, I hasten to add!) in order to locate the resumption point correctly. That takes just a second or two when the resuming device has local access to music on a fast SSD; it can take over a minute if the resuming device has to pull music data over the network from a NAS, for example. So, when I say &amp;#039;resumed plays always start immediately&amp;#039;, I mean only that there&amp;#039;s no deliberate &amp;#039;countdown&amp;#039; but there may be a physically-imposed wait for the resuming device to work out where, precisely, play resumption should begin.
&lt;/p&gt;

&lt;p&gt;
Attempting to perform a Global Resume when not operating in Pro mode results merely in the display of an error message explaining that resuming someone else&amp;#039;s play requires Pro mode. Similarly, if you attempt to resume something when no other client device has paused playback, you&amp;#039;ll simply see a message to this effect and nothing further will happen.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;10.0 Global Pause and Resume&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;global_pause_and_resume&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;32869-37410&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;a_plan_of_action&quot;&gt;11.0 A Plan of Action&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Switching over to running Giocoso in Pro mode can be a little awkward and one client device can trip things up for all the others if you&amp;#039;re not careful. Here are a few guidelines for how to go about a successful Pro implementation:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Make every client device a proper non-Pro Giocoso device &lt;strong&gt;first&lt;/strong&gt;. Create a local database and populate it with recordings from your collection. Make a few plays on that device, too, to ensure everything is working correctly in non-Pro mode first&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Choose one device to be the primary client: the one that will be responsible for refreshing its own local database of recordings on a regular basis and then pushing that to the global database. Other clients then need to be set to be non-primary: their local database refreshes will still happen but &lt;em&gt;won&amp;#039;t&lt;/em&gt; be pushed to the global database&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Make sure that the primary device&amp;#039;s folder structure can be split into suitable prefix and suffix components that will work for all proposed client devices&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://absolutelybaching.com:81/build-a-giocoso-pro-server/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;http://absolutelybaching.com:81/build-a-giocoso-pro-server/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Build a Giocoso Pro Server&lt;/a&gt; and ensure it&amp;#039;s ready to accept client connections from across the network&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Configure the MySQL IP address for all non-Pro clients that you wish to convert to Pro clients, along with appropriate Port, File Prefix and Primary flags in the Administration menu, Option 2.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Double-check the file prefix settings: are you sure that when applied to your music folder structure, they will correctly identify a physical location where that device can find the necessary FLAC files?&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; On the chosen primary device, use the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 1: Initialise a remote Global Database&lt;/strong&gt; to push the local recordings and plays tables across to the Pro server&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; On all the non-primary devices, use the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 3: Push Plays to remote database&lt;/strong&gt; to add their plays into the global_plays history: there&amp;#039;s obviously no need to push their &lt;em&gt;recordings&lt;/em&gt; to the Pro database, because they&amp;#039;ll be the same as those already pushed by the primary device.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
After that lot, you should be ready to run in Pro-mode in earnest: good luck!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;11.0 A Plan of Action&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;a_plan_of_action&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;37411-39571&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;mysql_or_mariadb&quot;&gt;12.0 MySQL or MariaDB?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Throughout this documentation, the database engine the Pro server uses will be called MySQL. However, in practice, nearly all Linux distros these days install a database engine called &lt;strong&gt;MariaDB&lt;/strong&gt;, even if you explicitly ask to install MySQL: the two names are basically aliases of each other and are treated as such by nearly all mainstream Linux distros, with MariaDB being regarded as a &amp;#039;drop in replacement&amp;#039; for MySQL. If you are not aware of the history, it might cause some confusion when I talk &amp;#039;MySQL&amp;#039; and commands seem to talk &amp;#039;mariadb&amp;#039;. The short version of that history, therefore, is that MySQL was an independently-developed and mostly open source database engine before being purchased by Solaris, who in turn got purchased by Oracle Corporation. Now, Oracle Corporation is not enamoured of open source projects and are renowned for being a corporate nightmare to have dealings with: I used to work for them and &lt;em&gt;&amp;#039;Orrible Oracle&lt;/em&gt; was a common enough epithet to hear thrown about by staff and customers alike!
&lt;/p&gt;

&lt;p&gt;
Accordingly, the moment Oracle bought Solaris, the MySQL software was forked, which basically means &amp;#039;copied and re-named and independently-developed thereafter&amp;#039;. The forked copy was called MariaDB. That&amp;#039;s all perfectly legal to do in the world of open source software -and it meant that further development of MariaDB could be pursued without Oracle involvement. Thus, MySQL and MariaDB are no longer the identical copies of each other that they were immediately after the fork happened. Nevertheless, for the sort of functionality that Giocoso is making of MySQL/MariaDB, they can be considered equivalent, practically identical, database engines.
&lt;/p&gt;

&lt;p&gt;
This then explains why most Linux distros (who prefer not to touch proprietary software with a bargepole, and who definitely don&amp;#039;t want to be in Oracle Corporation&amp;#039;s legal and licensing sights) have quietly aliased MySQL and MariaDB, such that if you ask for the one to be installed, you&amp;#039;ll get the non-Oracle other instead.
&lt;/p&gt;

&lt;p&gt;
This complex history needn&amp;#039;t detain you for long: just know that the two names can, for the current purposes of Giocoso Pro, be used completely interchangeably. If I say &amp;#039;start MySQL&amp;#039; the command to do that may well be to &amp;#039;start MariaDB&amp;#039;, but the results will be the same in either case.
&lt;/p&gt;

&lt;p&gt;
Putting it simply, therefore, &lt;em&gt;&lt;strong&gt;Giocoso Pro can be run on MySQL or MariaDB with equally successful results in either case&lt;/strong&gt;&lt;/em&gt;: the code has been tested on both database platforms and functionality is identical on both.
&lt;/p&gt;

&lt;p&gt;
&lt;em class=&quot;u&quot;&gt;&lt;strong&gt;However&lt;/strong&gt;&lt;/em&gt;: &lt;strong&gt;you should not mix the products&lt;/strong&gt;. If your Pro Server is running MySQL, your clients should also run MySQL; if it&amp;#039;s running MariaDB, your clients should run MariaDB. Now, technically, it&amp;#039;s true that I &lt;em&gt;did&lt;/em&gt; test connecting one type of client to another type of server… and it all worked. But that&amp;#039;s not a combination I&amp;#039;m ever going to test again, so it&amp;#039;s emplhatically &lt;strong&gt;unsupported&lt;/strong&gt; to mix products like that. On your own head be it, if you insist! Otherwise, for an easier life for everyone: one platform or the other, then, but not both, please!
&lt;/p&gt;

&lt;p&gt;
&lt;em class=&quot;u&quot;&gt;&lt;strong&gt;Also note&lt;/strong&gt;&lt;/em&gt;: Giocoso provides a number of scripts to get things done automatically. For example, to create a Pro Server, you can download a &lt;a href=&quot;https://software.bbritten.com/pro&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://software.bbritten.com/pro&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Pro Script&lt;/a&gt; which will do everything necessary for you. If you install Giocoso 3.30 using the &lt;strong&gt;gioinst&lt;/strong&gt; script, things are also automated for you… and the point is that at all points of automation, &lt;strong&gt;Giocoso will automatically install and configure MariaDB, not MySQL&lt;/strong&gt;. This can get quite serious: if you were to run the Pro automation script on a system that, say, is already running a webserver using MySQL, the Pro script will actually trigger the &lt;em&gt;uninstallation&lt;/em&gt; of MySQL and its replacement by MariaDB! That is not a substitution that is likely to go well for you!
&lt;/p&gt;

&lt;p&gt;
A &lt;a href=&quot;http://absolutelybaching.com:81/giocoso-pro-on-mysql/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;http://absolutelybaching.com:81/giocoso-pro-on-mysql/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;separate article&lt;/a&gt; explains how you can &lt;strong&gt;manually&lt;/strong&gt; set up a Giocoso Pro Server and Client using proper, Oracle MySQL -but the underlying point is that, though MySQL will work just fine, you &lt;strong&gt;must not do things automatically&lt;/strong&gt; but should instead take &lt;em&gt;manual&lt;/em&gt; charge of things.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;12.0 MySQL or MariaDB?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;mysql_or_mariadb&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;39572-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/b/b0fb058ed8091c868a0d9561e9ccd367.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/promdbchoice">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T11:05:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>promdbchoice</title>
        <link>https://www.bbritten.com/softwares/giocoso/promdbchoice</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;giocoso_pro_on_mysql&quot;&gt;Giocoso Pro On MySQL&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso Pro On MySQL&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_pro_on_mysql&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-35&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;MySQL&lt;/strong&gt; is a relational database. Around 2009, it was purchased by Oracle Corporation, which made it a licensing nightmare of a relational database, because Oracle Corporation is not a &lt;em&gt;nice&lt;/em&gt; Corporation: &lt;a href=&quot;https://en.wikipedia.org/wiki/Larry_Ellison&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://en.wikipedia.org/wiki/Larry_Ellison&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Larry Ellison&lt;/a&gt; doesn&amp;#039;t get to buy too many luxury yachts with niceness, I&amp;#039;m afraid. So, the code for MySQL was forked (i.e., copied) and thus was created &lt;strong&gt;MariaDB&lt;/strong&gt;. MariaDB is practically identical to MySQL in functionality terms, though in the intervening 15+ years the two products have diverged in significant ways, too. Nevertheless, they are &lt;em&gt;sufficiently&lt;/em&gt; identical that many database nerds use the name &amp;#039;MySQL&amp;#039; when they, technically, ought to use &amp;#039;MariaDB&amp;#039;, and vice versa. This site and its Giocoso documentation is no exception: it will talk about &amp;#039;MySQL&amp;#039; and expect you to mentally add the extra words &amp;#039;or MariaDB&amp;#039;!
&lt;/p&gt;

&lt;p&gt;
Giocoso Pro was, technically, written to work with MariaDB: running it using the &amp;#039;proper&amp;#039; MySQL Oracle software was something of an afterthought …and I&amp;#039;d accordingly recommend that you stick to using MariaDB for both the Pro database server and the Giocoso client end of things. The main reason for that is: testing. I use MariaDB on real, varied hardware and therefore the Giocoso Pro code gets tested extensively in that environment. I have some virtual machines which run &amp;#039;proper&amp;#039; Oracle MySQL: I test in those too, but nowhere near as frequently as I do for MariaDB installations, and on nowhere near as diverse a range of hardware.
&lt;/p&gt;

&lt;p&gt;
So, my recommendation is: use MariaDB, client and server.
&lt;/p&gt;

&lt;p&gt;
However, if you insist on using proper Oracle MySQL, you can definitely do so -though you need to use it on both Giocoso clients and the Pro server. You &lt;em&gt;cannot&lt;/em&gt; use a MariaDB client with a MySQL server, nor a MariaDB server with a MySQL client. One family or the other is fine, but don&amp;#039;t mix them!
&lt;/p&gt;

&lt;p&gt;
The trouble these days with trying to use proper Oracle MySQL is that most distros will automatically install MariaDB software components if you mention MySQL: they alias the two product names and proceed to install the free, open source, license-complications-free MariaDB despite you explicitly asking to install the Oracle-laden one &lt;img src=&quot;https://www.bbritten.com/lib/images/smileys/sad.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:-(&quot; /&gt; Worse, if you run the usual Giocoso installation or upgrade scripts &lt;em&gt;after&lt;/em&gt; you&amp;#039;ve installed the proper MySQL software, you&amp;#039;ll usually find that the MySQL stuff is auto-deleted and &lt;strong&gt;replaced&lt;/strong&gt; by MariaDB equivalents, because that&amp;#039;s what most distro&amp;#039;s package managers are programmed to do. If you insist on using proper MySQL, therefore, you&amp;#039;ll need to do things manually -which is what the following steps achieve.
&lt;/p&gt;

&lt;p&gt;
I&amp;#039;ve written the following steps using Ubuntu and Debian-based distros, but they should be generally applicable to all other distros, provided only that you replace the &amp;#039;&lt;strong&gt;sudo apt&lt;/strong&gt;&amp;#039; commands with the equivalent package manager command for your distro (e.g., &lt;strong&gt;sudo dnf&lt;/strong&gt; for Fedora, &lt;strong&gt;sudo zypper&lt;/strong&gt; for OpenSuse and so on). Refer to your distro&amp;#039;s specific documentation for variations in package names, too.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;36-3125&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;mysql_server&quot;&gt;2.0 MySQL Server&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The Giocoso Pro server is built on MariaDB by running a script downloadable from this site, and everything gets automated for you. Doing it with proper MySQL, however, is an entirely manual affair. To start with, you bring your distro up-to-date and then install the MySQL Server package, like so:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo apt update
sudo apt install mysql-server&lt;/pre&gt;

&lt;p&gt;
Once that has been installed, you need to perform some configuration steps to make the database server accessible across the network, like so:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf&lt;/pre&gt;

&lt;p&gt;
In the nano text editor, scroll around until you find the entry for &lt;strong&gt;bind-address&lt;/strong&gt; and set it to the IP address of the server itself (which can be determined with the command &lt;strong&gt;ip addr&lt;/strong&gt;). Here&amp;#039;s me doing it for an Ubuntu box:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_ubuntu_2025-03-05_084557.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_ubuntu_2025-03-05_084557.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_ubuntu_2025-03-05_084557.png?w=650&amp;amp;tok=30d4f1&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The right-hand terminal shows you the IP address of this server is 192.168.137.147. You then see me editing the mysqld.cnf file in the left-hand window, setting the bind-address to that IP address. Save the file: to have the changes picked up, you then need to restart the MySQL server daemon:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo systemctl daemon-reload
sudo systemctl restart mysql.service&lt;/pre&gt;

&lt;p&gt;
Next, we make the installation a little more secure than it is by default by issuing the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo mysql_secure_installation&lt;/pre&gt;

&lt;p&gt;
You are prompted with various questions, to which you should supply the following answers:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;n&lt;/strong&gt; (implement password validation)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;y&lt;/strong&gt; (remove anonymous users)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;y&lt;/strong&gt; (disallow remote root logins)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;y&lt;/strong&gt; (remove test database)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;y&lt;/strong&gt; (reload privileges)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Next, we need a firewall that allows MySQL database traffic but blocks everything else. Issue the commands:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 3306/tcp
sudo ufw enable
sudo systemctl enable mysql.service&lt;/pre&gt;

&lt;p&gt;
And finally, you then need to create the tables and user that Giocoso clients will expect to exist before they can connect to the new server:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo /usr/bin/mysql -e &amp;quot;create database giocoso3 character set = &amp;#039;utf8mb4&amp;#039; collate = &amp;#039;utf8mb4_general_ci&amp;#039;&amp;quot;
sudo /usr/bin/mysql -e &amp;quot;create user &amp;#039;giocoso3&amp;#039;@&amp;#039;localhost&amp;#039; identified by &amp;#039;giocoso3&amp;#039;&amp;quot;
sudo /usr/bin/mysql -e &amp;quot;create user &amp;#039;giocoso3&amp;#039;@&amp;#039;%&amp;#039; identified by &amp;#039;giocoso3&amp;#039;&amp;quot;
sudo /usr/bin/mysql -e &amp;quot;grant all on *.* to &amp;#039;giocoso3&amp;#039;@&amp;#039;localhost&amp;#039;&amp;quot;
sudo /usr/bin/mysql -e &amp;quot;grant all on *.* to &amp;#039;giocoso3&amp;#039;@&amp;#039;%&amp;#039;&amp;quot;
sudo /usr/bin/mysql -e &amp;quot;flush privileges&amp;quot;&lt;/pre&gt;

&lt;p&gt;
At this point, you&amp;#039;ve got a proper, Oracle MySQL database server ready to offer services to Giocoso clients.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 MySQL Server&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;mysql_server&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;3126-5742&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;mysql_on_the_giocoso_client_device&quot;&gt;3.0 MySQL on the Giocoso Client Device&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The simplest way to get a Giocoso Pro client using MySQL is to install Giocoso as normal: that triggers the automatic installation of the MariaDB client, but removing that and replacing it with the Oracle MySQL software is relatively straightforward, as follows:
&lt;/p&gt;

&lt;p&gt;
Install or upgrade to Giocoso 3.30 in the normal way. For installation, the commands would be:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wget https://bbritten.com/gioinst
bash gioinst&lt;/pre&gt;

&lt;p&gt;
Once that&amp;#039;s done, removal of the auto-installed MariaDB components and their replacement with Oracle MySQL ones is done as follows:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo apt remove mariadb-client mariadb-client-core
wget https://dev.mysql.com/get/mysql-apt-config_0.8.30-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.30-1_all.deb&lt;/pre&gt;

&lt;p&gt;
That last command triggers this sort of response:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_peppermint_2025-03-05_092126.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_peppermint_2025-03-05_092126.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_peppermint_2025-03-05_092126.png?w=650&amp;amp;tok=78a07d&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Arrow up and down each item in the main list, pressing Enter to select it and change it. You want to end up with the selections: &lt;strong&gt;mysql-8.0&lt;/strong&gt;, MySQL Tools &lt;strong&gt;enabled&lt;/strong&gt; and MySQL Preview &lt;strong&gt;enabled&lt;/strong&gt; (though the last one &lt;em&gt;can&lt;/em&gt; be disabled without consequence).
&lt;/p&gt;

&lt;p&gt;
Once those three values are visible in the main list, arrow down to the &amp;#039;OK&amp;#039; item in the main list and press [Enter] to confirm. This will take you back to the command prompt, where you then type:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo apt update
sudo apt install mysql-client&lt;/pre&gt;

&lt;p&gt;
At this point, your distro is running &amp;#039;proper&amp;#039; MySQL and you can proceed to enable Pro functionality within Giocoso itself as normal (i.e., take the Administration menu, Option 2 and set the &amp;#039;MySQL IP address&amp;#039; to the IP address of the MySQL Server you prepared in Section 2 above). Use of Giocoso Pro functionality is standard fare from that point on.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 MySQL on the Giocoso Client Device&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;mysql_on_the_giocoso_client_device&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;5743-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/6/6cf480421ccc0a64eeb1438d8f2eca60.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/promenu">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T14:58:47+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>promenu</title>
        <link>https://www.bbritten.com/softwares/giocoso/promenu</link>
        <description>
&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/playmenu/giocosoicopro.png?w=220&amp;amp;tok=e52da2&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;
&lt;/p&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;the_pro_menu&quot;&gt;The Pro Menu&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
“Giocoso Pro” is the name given to a set of features that allows a local Giocoso installation to communicate with a remote MySQL database -and thus share its own play history with that of other devices who were running Giocoso. In this way, statistics would accurately reflect what was being played on &lt;em&gt;all&lt;/em&gt; Giocoso devices, not just one. Similarly, you could make notes about a recording on a laptop and then review them later on a PC: data again being shared between devices, thanks to storing it in a common, shared database that all clients could access equally well.
&lt;/p&gt;

&lt;p&gt;
Switching &amp;#039;Pro Mode&amp;#039; on involves editing your Persistent Configuration File (see the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt;) and filling in the IP address of the remote Giocoso Pro server to which all client devices will send their play histories. Only when you&amp;#039;ve switched on Pro mode in this way will the Pro menu appear on the main program interface.
&lt;/p&gt;

&lt;p&gt;
The Pro menu thus handles what you do after taking those two first steps of Giocoso Pro Server creation and client-Pro Mode-switch-on. Putting it simply, four of the Pro menu options are all to do with pushing a local client&amp;#039;s data to the remote Pro server, so that it comes to know about previous plays and what recordings are available to play in the future. Other options generate reports or data extracts from the remote Pro database. Another option allows you to view notes about recordings that may have been created on multiple Giocoso clients. Finally, there&amp;#039;s an option to switch the operation of the Reports menu from purely-local to purely-remote mode: when you run the aggregate statistics report, for example, do you want to see the statistics that only &lt;em&gt;this&lt;/em&gt; PC has generated, or do you want to see the ones that &lt;em&gt;all&lt;/em&gt; your Giocoso devices produce when aggregated? You can flip back and forth between either reporting mode, as the mood takes you.
&lt;/p&gt;

&lt;p&gt;
The Pro menu therefore is important in &lt;em&gt;initiating&lt;/em&gt; Giocoso running in shared-database, Pro mode. It also has a couple of potentially useful features that only make sense once that shared-database environment has been created. Links to a detailed description of each menu option are listed below:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit2&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/proinitdb&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:proinitdb&quot; data-wiki-id=&quot;softwares:giocoso:promenu:proinitdb&quot;&gt;Initialise a remote Global Database&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/pushplays&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:pushplays&quot; data-wiki-id=&quot;softwares:giocoso:promenu:pushplays&quot;&gt;Push Plays to a remote database&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/clearrec&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:clearrec&quot; data-wiki-id=&quot;softwares:giocoso:promenu:clearrec&quot;&gt;Clear the remote recordings table&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/pushrecs&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:pushrecs&quot; data-wiki-id=&quot;softwares:giocoso:promenu:pushrecs&quot;&gt;Push Recordings to a remote database&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/xtrctplay&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:xtrctplay&quot; data-wiki-id=&quot;softwares:giocoso:promenu:xtrctplay&quot;&gt;Extract remote plays to CSV&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/xtrctplay&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:xtrctplay&quot; data-wiki-id=&quot;softwares:giocoso:promenu:xtrctplay&quot;&gt;Extract remote recordings to CSV&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/devicerpt&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:devicerpt&quot; data-wiki-id=&quot;softwares:giocoso:promenu:devicerpt&quot;&gt;Analyse plays by device &amp;amp; OS&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/viewnote&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:viewnote&quot; data-wiki-id=&quot;softwares:giocoso:promenu:viewnote&quot;&gt;View a global note&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/togglemode&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:togglemode&quot; data-wiki-id=&quot;softwares:giocoso:promenu:togglemode&quot;&gt;Switch reports to local/remote mode&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/clearpause&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:clearpause&quot; data-wiki-id=&quot;softwares:giocoso:promenu:clearpause&quot;&gt;Clear all global pauses&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;2287-3063&amp;quot;} --&gt;&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; |
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Pro Menu&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_pro_menu&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;64-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/7/773d7d5136aa859348ebec0e1f576a72.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/pulseaudio">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-14T18:40:22+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>pulseaudio</title>
        <link>https://www.bbritten.com/softwares/giocoso/pulseaudio</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;pulseaudio&quot;&gt;PulseAudio&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;PulseAudio&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pulseaudio&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-25&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
PulseAudio is a fairly complex and potentially abstruse feature of most Linux distros (including when running under Windows Subsystem for Linux) and macOS. You can read about it at &lt;em&gt;exhaustive&lt;/em&gt; length &lt;a href=&quot;https://gavv.net/articles/pulseaudio-under-the-hood/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://gavv.net/articles/pulseaudio-under-the-hood/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;here&lt;/a&gt;, but the really high-level overview is this: PulseAudio is to audio what X is to video. Allow me to explain!
&lt;/p&gt;

&lt;p&gt;
An application wants to draw its main program window on a screen, so you can interact with it. Using the X Server technology, the application is an “X Client”: it wants to draw itself. To do so, it must find an “X Server”: a PC which happens to have a monitor or screen attached, on which things can be drawn. Most commonly, the X client and server run on the same PC: so you click the Calc icon and LibreOffice Calc launches and draws its main screen on the same PC where you clicked the launch icon. From the outset, however, the X developers recognised that wouldn&amp;#039;t always be true: if you&amp;#039;re sat at a weedy Raspberry Pi 3, you really don&amp;#039;t want LibreOffice laboriously launching itself on that feeble computer. You&amp;#039;ll be there &amp;#039;till Christmas! No: ssh to a really powerful PC running in your home server room under the stairs and have Calc run on that server… but pass its  interface drawing instructions to your Pi desktop. The X client is the machine under the stairs, powerful and capable; the X server is your Raspberry Pi, able to draw things on a monitor but not much else. In this way, X made wanting to draw and being able to draw separate things that can be separated over a network connection: you can interact with a thin-client Pi, but the powerful PC under the stairs can be doing all the calculating and computational heavy lifting.
&lt;/p&gt;

&lt;p&gt;
Well: PulseAudio is the same, but for audio. Your PulseAudio client is a program that wants to output audio; the PulseAudio Server is a computer that has a set of loudspeakers attached, able to &amp;#039;sound&amp;#039; that audio. Generally, we expect client and server to be running on the same physical PC, but the protocol was invented to allow the client and the server to be entirely &lt;em&gt;separate&lt;/em&gt; machines, communicating over a network.
&lt;/p&gt;

&lt;p&gt;
Giocoso can use PulseAudio. It&amp;#039;s a lightweight program, but it has to do quite a bit of computation and processing to &lt;em&gt;generate&lt;/em&gt; an audio stream: that requires a reasonably capable PC. To &amp;#039;sound&amp;#039; that audio stream, however, only requires a weak and feeble computer that happens to be attached to some sort of loudspeaker output (or headphone or bluetooth output, etc.) Thus, the machine on which Giocoso runs will be a PulseAudio &lt;strong&gt;client&lt;/strong&gt; and the machine which makes the audio stream physically audible will be the PulseAudio &lt;strong&gt;server&lt;/strong&gt; …and those could be two completely separate computing devices.
&lt;/p&gt;

&lt;p&gt;
What&amp;#039;s more, a single PulseAudio client could direct its output to &lt;em&gt;multiple&lt;/em&gt; PulseAudio servers. Think of a decent PC running under the stairs that is able to output music to a feeble Raspberry Pi running in your conservatory one minute, your kitchen the next, your bedroom sometime later that evening and your main listening room during the afternoon. Without PulseAudio, your conservatory, kitchen, bedroom and listening room would all need their own hefty PCs, each running Giocoso. &lt;em&gt;With&lt;/em&gt; PulseAudio, you set up one capable PC with Giocoso, once; you can then direct its audio output to small computing devices in each of those rooms as your needs arise. You&amp;#039;ll still need speakers in each of those rooms, of course: audio doesn&amp;#039;t manifest itself from nothing! But you could, for example, hook a Raspberry Pi up to a small Bluetooth speaker in each of the rooms, rather than a full-blown PC plus monitor plus keyboard plus amplifier plus speaker.
&lt;/p&gt;

&lt;p&gt;
PulseAudio allows for &lt;em&gt;computing devices&lt;/em&gt; to sound forth the audio stream: headless, keyboardless, small and discreet; the need for substantial &lt;em&gt;computers&lt;/em&gt; with keyboard, mouse, monitor and speakers is eliminated (unless you want that sort of setup everywhere, of course).
&lt;/p&gt;

&lt;p&gt;
In this article, I&amp;#039;ll explain how I use a virtual Giocoso installation on a server hidden in the corners of my house to play music to any room I happen to be in: it all depends on PulseAudio! 
&lt;/p&gt;

&lt;p&gt;
[Under Construction]
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;26-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/9/9a4e68a41463b1be67b31e88f40142a1.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/replaygain">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-26T09:53:57+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>replaygain</title>
        <link>https://www.bbritten.com/softwares/giocoso/replaygain</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;giocoso_and_replaygain&quot;&gt;Giocoso and ReplayGain&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Giocoso and ReplayGain&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;giocoso_and_replaygain&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-37&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/software/semplice/lissajous.png?w=220&amp;amp;tok=9f6b3c&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;ReplayGain (the Camel Case spelling is obligatory, I&amp;#039;m afraid!) is a standard developed back around 2001/2002 as a way of normalizing &amp;#039;perceived loudness&amp;#039; when playing back digital music files. In essence, the aim was to have all the tracks on an album play back at around the same sort of volume level so that you weren&amp;#039;t constantly fiddling with the volume control on your amplifier. It was cooked up, originally, by Joachim Heintz and Florian Fricke, primarily for use with MP3 and Ogg Vorbis file formats, but it soon spread to other audio codecs and can be employed perfectly well by FLAC players, too.
&lt;/p&gt;

&lt;p&gt;
The traditional way of normalising volume was to scan through your audio files and discover their peak loudness: if that was significantly below 0dB (the traditional way of describing maximum, non-distorting volume) you would boost the volume in your audio file until it &lt;em&gt;did&lt;/em&gt; reach 0dB, or close to it. This is, indeed, the way &lt;a href=&quot;https://www.bbritten.com/softwares/semplice/semplice&quot; class=&quot;wikilink1&quot; title=&quot;softwares:semplice:semplice&quot; data-wiki-id=&quot;softwares:semplice:semplice&quot;&gt;Semplice&lt;/a&gt; did all its volume boosting for the best part of half a decade. It&amp;#039;s still a valid way of doing it but, because it&amp;#039;s driving off transitory bursts of volume, it might leave &amp;#039;volume on the table&amp;#039; as it were. A quiet piece with fleeting seconds of loud cymbal crashes would remain extremely quiet, because those crashes would leave little room for much volume boosting.
&lt;/p&gt;

&lt;p&gt;
ReplayGain uses &lt;del&gt;black magic&lt;/del&gt; clever acoustic analysis to analyze the overall &amp;#039;perceptual loudness&amp;#039; of a track, rather than concerning itself with transient peaks. It computes a volume boost sufficient to bring the overall loudness up to a reference loudness of 89dB. The effect is basically the same: your music volumes get adjusted so that you don&amp;#039;t have to keep fiddling with the volume knob on your amplifier, but it&amp;#039;s done in a subtler way than peak-driven boosting.
&lt;/p&gt;

&lt;p&gt;
ReplayGain can be done on a per-track basis, or on a per-album basis. That is, given a four movement symphony, comprising four separate FLAC files, do you want to do a perceptual analysis of each movement separately, resulting in four different volume boosts? Or would you rather treat the four FLACs as part of a single entity and compute a single boost to get the symphony as a whole to a desired loudness level? I hope it&amp;#039;s obvious that in the world of classical music, per-track ReplayGain would be a disaster! You do &lt;em&gt;not&lt;/em&gt; want your quiet movements being boosted a lot and ending up as loud as your loud finales! Be assured, therefore, that when Giocoso uses ReplayGain &lt;strong&gt;it only ever does whole-album ReplayGain&lt;/strong&gt;: each recording (i.e., composition and thus physical folder of FLACs) is &lt;strong&gt;always&lt;/strong&gt; treated as a single, whole entity.
&lt;/p&gt;

&lt;p&gt;
The danger with album-wide ReplayGain is that you boost quite a bit to get the symphony as a whole playing at a perceived 89dB… but those darn&amp;#039;d cymbal crashes still take place and spike wildly above the point where distortion kicks in! If you simply let the ReplayGain tide rise and float all boats, some transient &amp;#039;masts&amp;#039; are going to rise to the point where they&amp;#039;ll hit the bridge above them &lt;img src=&quot;https://www.bbritten.com/lib/images/smileys/sad.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:-(&quot; /&gt; There is a way to fix this, though: in the trade it&amp;#039;s called “doing ReplayGain but avoiding clipping”. Over-simplifying greatly, having determined that you can boost a recording&amp;#039;s volume by (say) 4dB to achieve an overall, album-wide gain, you then scale it back a bit to prevent transients exceeding the no-distortion threshold. There&amp;#039;s actually a formula for computing this properly (brace yourself!):
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;safe_gain_dB=ALBUM_GAIN−20⋅log10​(ALBUM_PEAK)&lt;/pre&gt;

&lt;p&gt;
Be assured that Giocoso computes all that for you in the background whenever a recording begins to play, if you configure it to do so (see below). It means that Giocoso has the same sort of &amp;#039;Album-wide ReplayGain without clipping“ that players like Foobar2000 can use.
&lt;/p&gt;

&lt;p&gt;
One final word: sometimes, recording engineers master their recordings at exceedingly low levels &lt;em&gt;for a reason&lt;/em&gt;. Usually, that reason has something to do with background noise which is mostly drowned out by music in the foreground but which would become noticeable if everything got volume boosted by &lt;em&gt;a lot&lt;/em&gt;. I have several recordings in my collection that were made in Kingsway Hall, which happened to be right next to a London tube line (subway): at quiet moments in the music, there&amp;#039;s a distinct rumble of a train passing in the background! Boost the volume of that recording and the rumble becomes extremely noticeable; left at the level provided on the CD, you probably wouldn&amp;#039;t notice it unless wearing headphones. Another recording I have is of organ music played in Norwich Cathedral, mastered at an extraordinary -21dB. Boost that to near 0dB and you soon realise that the Cathedral must have remained open for the duration of the recording, because footsteps and people shuffling and coughing their way around the place are extremely annoying. Down at the original -21dB, however, and it&amp;#039;s just a boomy, Cathedral acoustic that you can hear which doesn&amp;#039;t interfere with the thunderous organ in the foreground at all. All of which is by way of saying that sometimes you don&amp;#039;t want an &lt;em&gt;enormous&lt;/em&gt; ReplayGain, even if the analysis and statistics suggest one is required &lt;em&gt;in theory&lt;/em&gt;. Accordingly, Giocoso imposes an absolute limit of a +7.5dB ReplayGain: even if the numbers say a bigger boost should be possible, Giocoso won&amp;#039;t allow one to take place.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;In Summary&lt;/strong&gt;: ReplayGain is a useful technology for making quiet music louder in a way that preserves the &lt;em&gt;relative&lt;/em&gt; volume differences within a composition, which is psychoacoustically rigorous and justified, which is limited on the up-side to prevent over-boosting of quiet recordings and which will not introduce clipping or distortion when applied. &lt;strong&gt;And Giocoso supports using it&lt;/strong&gt; -though it&amp;#039;s optional.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;38-5896&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;configuring_giocoso_to_use_replaygain&quot;&gt;Configuring Giocoso to use ReplayGain&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Giocoso &lt;em&gt;does not use ReplayGain&lt;/em&gt; by default. For it to do so, you need to take the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt; to modify your persistent configuration file:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-01-23_at_20.52.55.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-01-23_at_20.52.55.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-01-23_at_20.52.55.png?w=650&amp;amp;tok=9b0e78&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This is the fourth (and last) page of configuration options and the relevant parameter is the last one shown: &lt;strong&gt;Use ReplayGain if appropriate tags present&lt;/strong&gt;. By default, that&amp;#039;s set to a value of “no” but setting it to “yes” effectively &amp;#039;switches on&amp;#039; ReplayGain playback. Sort of!
&lt;/p&gt;

&lt;p&gt;
The issue is that Giocoso&amp;#039;s ReplayGain &amp;#039;engine&amp;#039; needs, as the parameter name indicates, some sort of &amp;#039;tags [to be] present&amp;#039; before it can do anything. These are the tags in question:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-01-23_at_20.59.38.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-01-23_at_20.59.38.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-01-23_at_20.59.38.png?w=650&amp;amp;tok=6ee387&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
There are five &amp;#039;canonical&amp;#039; ReplayGain metadata tags that need to be physically written into your FLAC files:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Reference Loudness (always 89dB)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; computed Track Peak transients&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; computed Track Gain volume adjustment&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; computed Album Peak transients&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; computed Album Gain volume adjustment&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
The computation of the numeric tag values has to be done as part of an analysis of your digital music files: it&amp;#039;s something that my own Semplice program can be configured to do as part of its &lt;a href=&quot;https://www.bbritten.com/softwares/semplive/semaudio/volboost&quot; class=&quot;wikilink1&quot; title=&quot;softwares:semplive:semaudio:volboost&quot; data-wiki-id=&quot;softwares:semplive:semaudio:volboost&quot;&gt;volume boosting capabilities&lt;/a&gt;, for example. Some CD rippers compute the data and write it into tags at the point of ripping the files off a CD, too. The point is that if you &lt;em&gt;haven&amp;#039;t&lt;/em&gt; done that sort of audio analysis and tag-writing, then switching the Giocoso parameter to use ReplayGain will have no effect:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-01-23_at_21.37.23.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-01-23_at_21.37.23.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-01-23_at_21.37.23.png?w=650&amp;amp;tok=18cafa&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The &amp;#039;ReplayGain Applied = none&amp;#039; data shown in the lower left-hand corner of the program display is what happens when the canonical ReplayGain tags are not present as tags within the FLACs being played, even though the configuration option says that ReplayGain &lt;em&gt;ought&lt;/em&gt; to be in use. It&amp;#039;s also what you&amp;#039;ll get if the tags are present but they&amp;#039;re set to null values, by the way. 
&lt;/p&gt;

&lt;p&gt;
When the tags &lt;em&gt;are&lt;/em&gt; present, with non-empty values &lt;strong&gt;and&lt;/strong&gt; the Giocoso parameter is set to use ReplayGain, you&amp;#039;ll instead see something like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-01-23_at_21.37.08.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-01-23_at_21.37.08.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-01-23_at_21.37.08.png?w=650&amp;amp;tok=0e671a&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This time, you&amp;#039;ll see that a numeric ReplayGain &lt;em&gt;has&lt;/em&gt; been applied, dynamically and in real-time, to the music being played back. You&amp;#039;ll notice that in this specific case, a &lt;em&gt;negative&lt;/em&gt; ReplayGain has been applied: the playback is being made at around 2.27dB &lt;strong&gt;quieter&lt;/strong&gt; than the audio signal in the FLACs is actually stored at. That&amp;#039;s perfectly valid and isn&amp;#039;t a sign of anything wrong. If you&amp;#039;re interested, it happens for me quite a bit because I used Semplice&amp;#039;s &lt;em&gt;other&lt;/em&gt; volume boosting technique of maximising to peak values: a lot of my recordings are thus physically rather loud in absolute terms (still without distortion, I hasten to add). ReplayGain being applied to such physically-boosted FLACs tends to find them too loud and adjusts downwards accordingly. Were I to rip a 1980s classical music CD today, without applying a Semplice physical (peak-driven) boost, it&amp;#039;s almost certain that the displayed ReplayGain value would be a positive one.
&lt;/p&gt;

&lt;p&gt;
Another little detail you&amp;#039;ll see in that last screenshot, too: the volume change is shown as -2.27 dB&lt;strong&gt;~&lt;/strong&gt;. That little squiggle after the numeric value tells you that clipping avoidance has been activated: that&amp;#039;s Giocoso&amp;#039;s way of saying that in achieving a &amp;#039;reference&amp;#039; perceived loudness, it&amp;#039;s taken care to ensure that transient loud spikes in volume won&amp;#039;t trigger clipping: it has applied a &amp;#039;safety margin&amp;#039; to the boost to prevent it. 
&lt;/p&gt;

&lt;p&gt;
If it ever happens that Giocoso can apply an album-level boost &lt;em&gt;without&lt;/em&gt; needing to apply clipping protection, that last character will be a simple &lt;strong&gt;.&lt;/strong&gt; and not a &lt;strong&gt;~&lt;/strong&gt;. That is, a period/fullstop indicates no clipping protection was needed, but a cedilla indicates that it was.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Configuring Giocoso to use ReplayGain&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;configuring_giocoso_to_use_replaygain&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;5897-9937&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;retro-fitting_replaygain&quot;&gt;3.0 Retro-fitting ReplayGain&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
I&amp;#039;ve come pretty late to ReplayGain but have found that when it&amp;#039;s being used by Giocoso, the results have been pleasing. Trouble is, I&amp;#039;ve been doing peak-level volume boosts for years and therefore none of my approximately 17,000 recordings have had ReplayGain computed for them: what I need, therefore, is a way of batch-updating my music files to &lt;em&gt;add&lt;/em&gt; ReplayGain in a hurry.
&lt;/p&gt;

&lt;p&gt;
Here&amp;#039;s the script I used to do that:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;clear
sqlite3 &amp;quot;$HOME/.local/share/giocoso3/db/test.db&amp;quot; &amp;quot;select dirname from recordings order by composer&amp;quot; &amp;gt; &amp;quot;directories.txt&amp;quot;
tput civis

# File containing the list of directories
DIRFILE=&amp;quot;directories.txt&amp;quot;

# Initialize counters
GAINCOUNTER=0
SKIPCOUNTER=0

# Loop through each line of the file
while IFS= read -r dirname || [[ -n &amp;quot;$dirname&amp;quot; ]]; do

  # Change into the directory
  cd &amp;quot;$dirname&amp;quot; || { echo &amp;quot;Failed to cd into $dirname&amp;quot;; continue; }

  FLACFILE=$(find &amp;quot;$(pwd)&amp;quot; -name &amp;quot;*.flac&amp;quot; | sort | head -n 1)
  DISPLAYFLAC=&amp;quot;${FLACFILE#/*/*/*/*/}&amp;quot;; DISPLAYFLACFILE=&amp;quot;$(basename &amp;quot;$DISPLAYFLAC&amp;quot;)&amp;quot;; DISPLAYFLACFILE=${DISPLAYFLACFILE:0:98}
  DISPLAYPATH=&amp;quot;$(dirname &amp;quot;$DISPLAYFLAC&amp;quot;)&amp;quot;; DISPLAYPATH=${DISPLAYPATH:0:98}
  GAIN=$(metaflac --show-tag=REPLAYGAIN_ALBUM_GAIN &amp;quot;$FLACFILE&amp;quot; 2&amp;gt;/dev/null | cut -d= -f2)
  tput cup 2 54; echo -n &amp;quot;ReplayGain Computed: $GAINCOUNTER - Skipped: $SKIPCOUNTER&amp;quot;
  if [[ -z &amp;quot;$GAIN&amp;quot; ]]; then
      tput cup 6 2; printf &amp;#039;%*s&amp;#039; 98 &amp;#039;&amp;#039;; tput cup 6 2; echo -n &amp;quot;$DISPLAYPATH&amp;quot;
      tput cup 7 2; printf &amp;#039;%*s&amp;#039; 98 &amp;#039;&amp;#039;; tput cup 7 2; echo -n &amp;quot;$DISPLAYFLACFILE&amp;quot;
      echo &amp;quot;$FLACFILE&amp;quot; &amp;gt;&amp;gt; &amp;quot;$HOME/Desktop/adjusted.txt&amp;quot;
      metaflac --add-replay-gain *.flac 2&amp;gt;/dev/null 
      ((GAINCOUNTER++))    
  else
      tput cup 6 2; printf &amp;#039;%*s&amp;#039; 98 &amp;#039;&amp;#039;; tput cup 6 2; echo -n &amp;quot;$DISPLAYPATH&amp;quot;
      tput cup 7 2; printf &amp;#039;%*s&amp;#039; 98 &amp;#039;&amp;#039;; tput cup 7 2; echo -n &amp;quot;$DISPLAYFLACFILE&amp;quot;
      ((SKIPCOUNTER++)) 
  fi
done &amp;lt; &amp;quot;$DIRFILE&amp;quot;
tput civvis&lt;/pre&gt;

&lt;p&gt;
The code depends on Giocoso having been installed and a &lt;em&gt;local&lt;/em&gt;, non-Pro database of all your music files being in existence. The line reading “sqlite3…” is the code needed to open that database for reading: obviously, you&amp;#039;d need to replace the “test.db” with whatever database name you&amp;#039;re actually using.
&lt;/p&gt;

&lt;p&gt;
Otherwise, the code simply queries the local database and extracts a list of folders containing FLACs from it, into a text file called “directories.txt”, stored in whatever folder you&amp;#039;re in when you launch this script.
&lt;/p&gt;

&lt;p&gt;
It then loops through each line of that text file. It cd&amp;#039;s to each folder in turn. It checks to see if ReplayGain has been previously computed or not: if it has, it simply skips doing anything further and merely increments a &amp;#039;skipped&amp;#039; counter. If it hasn&amp;#039;t, though, it analyses all the FLACs in that folder and writes the newly-computed REPLAYGAIN_* tags back to the FLACs and increments a &amp;#039;Gain Applied&amp;#039; counter. It also writes the name of the FLACs for which it has modified the metadata into an &amp;#039;adjusted.txt&amp;#039; on your Desktop.
&lt;/p&gt;

&lt;p&gt;
You save that code into a file called, say, “applyreplaygain.sh” on your Desktop. In a terminal, you then type:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;cd
cd Desktop
chmod +x applyreplaygain.sh
./applyreplaygain.sh&lt;/pre&gt;

&lt;p&gt;
…and then leave the thing to chug away for however long it takes to process your collection. It&amp;#039;s output is not pretty and isn&amp;#039;t meant to be: this is not something you&amp;#039;ll be running routinely!
&lt;/p&gt;

&lt;p&gt;
You &lt;em&gt;can&lt;/em&gt; run the script multiple times though: if you let it complete the first time, then the second time you run it, there should be nothing to do and you&amp;#039;ll get all skips and no gains applied. That isn&amp;#039;t actually what happened to me, though: I had three files that kept coming up time and time again as needing gain applied. The fact that gain failed to be written back to the files the first time of asking indicated that something was internally amiss with those files (knowing &lt;em&gt;which&lt;/em&gt; files had this problem is when the “adjusted.txt” file becomes handy). A re-rip of the three CDs in question then fixed the problem.
&lt;/p&gt;

&lt;p&gt;
I don&amp;#039;t generally approve of bulk updating of anything to do with my music collection: the risks of something going horribly wrong are too awful to contemplate. I made an exception for this only because the script is simply adding the five ReplayGain tags to the files and not messing with any other metadata or with the audio signal: it&amp;#039;s thus (a) safe; and (b) reversible. I still made sure my backup was fully updated before I began, though: and I strongly recommend you do likewise!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Retro-fitting ReplayGain&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;retro-fitting_replaygain&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;9938-14461&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;final_thoughts_on_replaygain&quot;&gt;4.0 Final Thoughts on ReplayGain&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
There are differing views on the utility and effectiveness of ReplayGain. Some people love it, as it allows you to achieve a sort-of &amp;#039;average, overall loudness&amp;#039; in a listening session, without having to fiddle with volume controls all the time. Some people find it ineffective. And some people hate it, preferring the peak-driven loudness boost approach instead, because that just makes everything louder without fancy psychoacoustic modelling mucking things up!
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s why the use of ReplayGain in Giocoso is optional: even if the ReplayGain tags are there and assigned real values, Giocoso&amp;#039;s &lt;em&gt;default&lt;/em&gt; behaviour is to ignore them and to just play the audio signal as it comes straight out of the FLAC files. The configuration option is there to make it easy to switch on the use of ReplayGain if you want to give it a go, though (provided you&amp;#039;ve previously done the analysis and tag-writing in other software first, of course).
&lt;/p&gt;

&lt;p&gt;
I should mention, however, that once switched on, ReplayGain stays on until you switch it off in the configuration options: you cannot flick it on and off as a piece of music plays, for example, to compare the &amp;#039;before&amp;#039; and &amp;#039;after&amp;#039; volumes. The way Giocoso is written, that sort of on/off mechanism is simply not physically possible.
&lt;/p&gt;

&lt;p&gt;
To my mind, it&amp;#039;s very clever and has the &lt;em&gt;great&lt;/em&gt; advantage of not messing with the actual audio signal you ripped off a CD or SACD. The adjustment to playback volume is handled by the &lt;em&gt;player&lt;/em&gt;, dynamically, not by altering the audio data directly or physically. It&amp;#039;s therefore reversible (i.e., just switch it on or off in the configuration options as the mood takes you), where physically boosting the volume of a FLAC by measuring its peak loudness and getting the peak as close to 0dB as you can is an irreversible alteration of the audio signal itself. If you care about reversibility and pristine data preservation, ReplayGain has a lot to offer, I think.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.0 Final Thoughts on ReplayGain&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;final_thoughts_on_replaygain&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;14462-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/4/4a69a38e1e09757999aaeea4740f2a78.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/rptmenu">
        <dc:format>text/html</dc:format>
        <dc:date>2026-02-21T11:26:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>rptmenu</title>
        <link>https://www.bbritten.com/softwares/giocoso/rptmenu</link>
        <description>
&lt;p&gt;
&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/e1a2a752-9a52-ccf2-2556-f434a378bc25-1.png?w=220&amp;amp;tok=b3714e&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;220&quot; /&gt;
&lt;/p&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;the_reporting_menu&quot;&gt;The Reporting Menu&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Giocoso stores data about what recordings are available and what recordings have been played in a database. If you are using Giocoso in &amp;#039;Global mode&amp;#039; because you&amp;#039;ve enabled Giocoso&amp;#039;s “Pro” features, those two tables are, respectively, GLOBAL_RECORDINGS and GLOBAL_PLAYS. If you are using Giocoso only in &amp;#039;Local mode&amp;#039;, they are called just RECORDINGS and PLAYS. You&amp;#039;ll know which reporting mode you&amp;#039;re running in by looking at the top of the screen for any Giocoso reporting option:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20251127_110113.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20251127_110113.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20251127_110113.jpg?w=650&amp;amp;tok=db6e57&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The &amp;#039;Reporting in GLOBAL mode&amp;#039; you see in this screenshot will instead read &amp;#039;Reporting in LOCAL mode&amp;#039; if that&amp;#039;s the mode you&amp;#039;re using. Whichever mode you&amp;#039;re using, this pair of recording/plays tables can be queried to generate reports. Production of any report is entirely non-destructive: reports show you what data exists, but cannot themselves delete or alter that data. Therefore, they are perfectly safe to experiment with -and I accordingly don&amp;#039;t propose to go through each reporting menu option in detail. Try them out, see if the data is of use to you and if not, move on!
&lt;/p&gt;

&lt;p&gt;
Here, then, I&amp;#039;ll mention some specific features of &lt;em&gt;all&lt;/em&gt; reports, before describing Option 4 (the &amp;#039;advanced reporting&amp;#039; option) in some detail.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Reporting Menu&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_reporting_menu&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;78-1389&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;general_report_behaviour&quot;&gt;General Report Behaviour&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
All Giocoso reports will be displayed as &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; documents in a web browser/viewer of some sort. &lt;em&gt;Which&lt;/em&gt; browser or viewer gets used to display data is configurable via the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-14_at_20.52.36.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-14_at_20.52.36.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-14_at_20.52.36.png?w=600&amp;amp;tok=6be671&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Here, I&amp;#039;ve set the Firefox browser to be my report viewer. I could type in any browser name &lt;em&gt;that is already installed on my system&lt;/em&gt;: Giocoso won&amp;#039;t check it actually exists, install it for you or even check that you&amp;#039;ve typed the name correctly. It does, however, force the installation of the &lt;strong&gt;&lt;a href=&quot;https://w3m.sourceforge.net/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://w3m.sourceforge.net/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;w3m&lt;/a&gt;&lt;/strong&gt; terminal-based browser as some sort of fallback (and for fans of things &lt;em&gt;staying&lt;/em&gt; in a terminal environment!) If you leave this setting blank (which is actually the default), Giocoso will use whatever your &lt;strong&gt;system&amp;#039;s default browser&lt;/strong&gt; has been set to. On many Linux distros, that will be Firefox; on macOS it might be Safari.
&lt;/p&gt;

&lt;p&gt;
In short: leave the setting blank to get your system&amp;#039;s default browser; or specify the name of a preferred &amp;#039;reporting browser&amp;#039;; or type in &lt;strong&gt;w3m&lt;/strong&gt; to use an in-terminal report viewer.
&lt;/p&gt;

&lt;p&gt;
Having set (or left to defaults) as report-viewing browser, &lt;strong&gt;all&lt;/strong&gt; of Giocoso&amp;#039;s reports will then appear as follows:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.04.13.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-15_at_11.04.13.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.04.13.png?w=600&amp;amp;tok=8e8ac6&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Or, depending on your preferred browser settings, the same data might look like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.05.22.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-15_at_11.05.22.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.05.22.png?w=600&amp;amp;tok=f1a668&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s the difference between setting &amp;#039;firefox&amp;#039; and &amp;#039;w3m&amp;#039; as the preferred browser! In all cases, an attempt has been made to make the data look &amp;#039;reasonably presentable&amp;#039; in &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt;, but the width of certain columns may necessitate a bit of manual window re-sizing before you are satisfied with the results.
&lt;/p&gt;

&lt;p&gt;
Once you can see a report in a browser, you can export it to a PDF file (or print it to paper!) using your browser&amp;#039;s standard menu options.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;General Report Behaviour&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;general_report_behaviour&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;1390-3365&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;advanced_reporting_by_sql&quot;&gt;Advanced Reporting by SQL&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The Reporting menu Option 5 presents a blank text box to you:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231112_122702.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231112_122702.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231112_122702.png?w=650&amp;amp;tok=513ff8&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
In this text box, you can type any valid SQL select statement. Keywords such as &amp;#039;update&amp;#039;, &amp;#039;insert&amp;#039; and &amp;#039;delete&amp;#039; are stripped from any input you provide, so this cannot be used to modify the contents of the Giocoso database, but if you know how to write a SQL select statement, this window lets you submit it and have its results returned to you.
&lt;/p&gt;

&lt;p&gt;
This is not the place to teach you how to write correct SQL, of course, but the simplest construction possible is always in the form of: &lt;strong&gt;select &lt;em&gt;something&lt;/em&gt; from somewhere&lt;/strong&gt;. The &amp;#039;something&amp;#039; is a comma-separated list of column names, and the &amp;#039;somewhere&amp;#039; is the name of a table. So, for example: &lt;strong&gt;select composition from recordings&lt;/strong&gt; which yields this result:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.11.42.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-15_at_11.11.42.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.11.42.png?w=600&amp;amp;tok=1e3564&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…at which point you suddenly decide that it might be useful to know &lt;em&gt;who&lt;/em&gt; composed each recording:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.13.24.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-15_at_11.13.24.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.13.24.png?w=650&amp;amp;tok=b00df0&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…and so a modified version of the query, with the extra column inserted into the &amp;#039;something&amp;#039; part of the query can be re-run, with the modified results displayed.
&lt;/p&gt;

&lt;p&gt;
You maybe look at that and think &amp;#039;the output appears to be in no particular order, but I prefered the original &amp;#039;composition-name&amp;#039; order. So, you need to add an instruction to &lt;strong&gt;order by something&lt;/strong&gt;, too:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.15.57.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-15_at_11.15.57.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.15.57.png?w=600&amp;amp;tok=3b5b7b&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…and now the rows of the report list compositions that start with punctuation, before those that start with a number, before those that start with standard letters.
&lt;/p&gt;

&lt;p&gt;
Of course, queries can also include aggregation and grouping. So, for example, it&amp;#039;s possible to look at all the RECORDINGS, group by composer and sum the total duration of each composer&amp;#039;s recordings, like so:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.18.08.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-15_at_11.18.08.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.18.08.png?w=600&amp;amp;tok=b42e68&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Note how complex queries can be broken up so that consist of multiple lines: Giocoso is happy to handle multi-line queries in this way, fortunately!
&lt;/p&gt;

&lt;p&gt;
Remember: this functionality can be run against a local database, or a remote &amp;#039;Pro&amp;#039; one… but if you&amp;#039;re querying a Pro database, you&amp;#039;ll need to use GLOBAL_RECORDINGS and GLOBAL_PLAYS table names, not just RECORDINGS and PLAYS. Fortunately, however, Giocoso is not stupid: it knows what sort of table name you&amp;#039;re &lt;em&gt;supposed&lt;/em&gt; to query in the appropriate local or global context: it will therefore automatically re-write your query if you happen to query PLAYS when you meant to query GLOBAL_PLAYS or vice versa (and the same is true for when you query RECORDINGS rather than GLOBAL_RECORDINGS). For all practical purposes, therefore, you can simply &amp;#039;select from plays&amp;#039; and &amp;#039;select from recordings&amp;#039; without having to worry about whether those are the technically correct names to be querying at any given time!
&lt;/p&gt;

&lt;p&gt;
Be aware that this &amp;#039;Advanced Reporting&amp;#039; functionality is not a replacement for a dedicated database querying tool, such as sqlitebrowser or DBeaver. It provides a minimal level of functionality, enabling you to knock together complex reports relatively easily, but it doesn&amp;#039;t do syntax checking and if your logic is wrong, you may well end up viewing reports like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.40.16.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-15_at_11.40.16.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.40.16.png?w=600&amp;amp;tok=b34122&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That is, nicely formatted &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; pages with absolutely no data on them! If you look closely at the foot of this report you&amp;#039;ll see &lt;em&gt;why&lt;/em&gt; this report is blank: the query submitted said “slect” not “select”: Giocoso won&amp;#039;t save you from such typographical howlers!
&lt;/p&gt;

&lt;p&gt;
It &lt;em&gt;will&lt;/em&gt;, however, strip out any mention of the words “delete” or “update” in your queries. This is a tool for &lt;strong&gt;viewing&lt;/strong&gt; data, not for modifying it!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Advanced Reporting by SQL&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;advanced_reporting_by_sql&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;3366-7221&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;report_mode_switching&quot;&gt;Report Mode Switching&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
It is entirely possible that you run Giocoso in Pro mode for day to day use, but suddenly get the urge to query the &lt;em&gt;local&lt;/em&gt; database for its own, unique plays (for example).
&lt;/p&gt;

&lt;p&gt;
Should you ever wish to do this, a toggle switch is provided under the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 9&lt;/strong&gt;. Obviously, being a Pro menu option, you&amp;#039;ll only ever &lt;em&gt;see&lt;/em&gt; this option if you&amp;#039;ve filled in the IP address of your remote Giocoso Pro server (using the Administration menu, Option 2). Doing that means, by definition, that you&amp;#039;re now running Giocoso in Pro mode. 
&lt;/p&gt;

&lt;p&gt;
At that point, Option 9 on the Pro menu will read, “Switch reports to local mode”. Taking that option will then immediately throw you onto the Reporting menu: anything you now report on will be from the local database only:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.43.24.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-15_at_11.43.24.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.43.24.png?w=600&amp;amp;tok=ca0a28&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
At the top of the terminal window in this screenshot, you&amp;#039;ll see Giocoso declaring that it&amp;#039;s “Using database Main &amp;amp; Pro”… so we&amp;#039;re definitely in Pro mode… and yet, at the top of the report being displayed in the browser window, we see we&amp;#039;re reporting the “Aggregate Statistics for &lt;strong&gt;local&lt;/strong&gt; database &amp;#039;main&amp;#039;”.
&lt;/p&gt;

&lt;p&gt;
You&amp;#039;ll stay in local reporting mode until you either quit Giocoso completely and re-launch it; or until you re-visit the Pro menu and once again take Option 9… which will now be reading “Switch reports to global mode”.
&lt;/p&gt;

&lt;p&gt;
Since the option to switch reporting modes only exists under the Pro menu, I hope it&amp;#039;s obvious that you cannot take a local-only Giocoso instance and switch it into reporting globally (because the entire Pro menu is invisible to Giocoso instances running in non-Pro mode).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Report Mode Switching&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;report_mode_switching&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;7222-8905&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;browsing_the_database_with_a_gui&quot;&gt;Browsing the Database with a GUI&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
A final data querying tool is made accessible by the Reporting menu: browsing the local database in a &lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt; tool, called SqliteBrowser. Note that this tool is nothing to do with Giocoso and Giocoso doesn&amp;#039;t install it as part of its own installation routine. It&amp;#039;s &lt;a href=&quot;https://sqlitebrowser.org/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://sqlitebrowser.org/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;a third-party tool&lt;/a&gt; produced to make working with Sqlite databases easy which you can install yourself, if you would like to -but it&amp;#039;s entirely optional to do so. If you &lt;em&gt;don&amp;#039;t&lt;/em&gt; install it, then you can tap the &amp;#039;B&amp;#039; key (or the &amp;#039;b&amp;#039; key: case doesn&amp;#039;t matter) whilst sitting on the Reporting menu until the cows come home: nothing will happen. But if it &lt;em&gt;is&lt;/em&gt; installed, then tapping &amp;#039;B&amp;#039; will produce this sort of response:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20251127_121135.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20251127_121135.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20251127_121135.jpg?w=650&amp;amp;tok=fe308e&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
A new window opens in which the Sqlite Browser program runs: notice from the window&amp;#039;s title bar that it has opened the &lt;em&gt;local&lt;/em&gt; database sitting on my hard drive, even though I&amp;#039;m allegedly in GLOBAL reporting mode, according to Giocoso. This is an inherent limitation: it doesn&amp;#039;t matter whether you&amp;#039;re running in Pro or Local mode, Sqlitebrowser can &lt;em&gt;only&lt;/em&gt; query local, sqlite databases (not the MySQL database that a Pro database consists of).
&lt;/p&gt;

&lt;p&gt;
I will not spend time here explaining how to use the Sqlite Browser tool itself: it&amp;#039;s an advanced tool and you should only really use it if you know what you&amp;#039;re doing… and if you know what you&amp;#039;re doing, you don&amp;#039;t need me to teach you! Just be warned: the &amp;#039;browser&amp;#039; has full read &lt;em&gt;and write&lt;/em&gt; access to the local Giocoso database, so if you want to use it to edit or delete data, you can do so. If you really wanted to, you can use it to completely screw around with your Giocoso local database and make it unusable… but I wouldn&amp;#039;t advise it. It&amp;#039;s a dangerous tools in incompetent hands, therefore… but also a very useful one in competent ones!
&lt;/p&gt;

&lt;p&gt;
Incidentally, if you are in Global mode and wanted an equivalent (and equivalently dangerous!) &lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt; tool for working with the MySQL/MariaDB global database, I can recommend &lt;a href=&quot;https://dbeaver.io/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://dbeaver.io/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;DBeaver&lt;/a&gt;, which has the same sort of querying and modifying tools for all sorts of databases, but especially for the type that Giocoso Pro uses. It&amp;#039;s again not something Giocoso ever installs for you, but it&amp;#039;s available in most distro&amp;#039;s standard package repositories, so shouldn&amp;#039;t be difficult to install (&lt;strong&gt;sudo apt install dbeaver&lt;/strong&gt; will do it on Debian/Ubuntu for example). No shortcut to launch DBeaver from within Giocoso is provided, however: running it and getting it to open the Giocoso Pro database is a matter left entirely to your own database administration skills!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Browsing the Database with a GUI&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;browsing_the_database_with_a_gui&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;8906-11609&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;a_quick_word_about_safari&quot;&gt;A Quick Word about Safari&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
I should mention that there is a known issue with using Safari as the report viewer on macOS:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.55.11.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-15_at_11.55.11.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-15_at_11.55.11.png?w=600&amp;amp;tok=8147f4&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You&amp;#039;ll note that whilst there&amp;#039;s nothing wrong with the report &lt;em&gt;data&lt;/em&gt;, the header presentation is a bit &amp;#039;off&amp;#039;: next to the report title, there&amp;#039;s supposed to be a thumbnail image of the Giocoso logo. There will always be such a logo on reports viewed in Firefox, Chromium and other common browsers. Safari, however, is very much part of the Apple security ecosystem and it doesn&amp;#039;t like displaying images from just any random folder on your hard disk, even if it&amp;#039;s inside your own home folder. There&amp;#039;s nothing to be done about this until Apple allows us to configure security exceptions for Safari, so it&amp;#039;s a feature, not a bug in the meantime!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;A Quick Word about Safari&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;a_quick_word_about_safari&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;11610-12462&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;some_other_browser_issues&quot;&gt;Some Other Browser &amp;quot;Issues&amp;quot;!&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Finally, be aware that on macOS, launching some browsers involve calling them by a name that has spaces in it. The Brave browser, for example, is launched by calling &lt;em&gt;Brave Browser&lt;/em&gt;, capital letters and spaces included. If you need to launch a browser that uses spaces in its executable name, you need to quote the parameter in the configuration file, like so:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-21_at_11.22.39.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_2026-02-21_at_11.22.39.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_2026-02-21_at_11.22.39.png?w=600&amp;amp;tok=2616a2&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
If you fail to provide the quotes, the reports will open in the system&amp;#039;s default browser (which might be Brave Browser anyway, I suppose). Quotes are &lt;em&gt;not&lt;/em&gt; necessary if you are using a browser whose &amp;#039;launch name&amp;#039; does &lt;strong&gt;not&lt;/strong&gt; include spaces.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Some Other Browser \&amp;quot;Issues\&amp;quot;!&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;some_other_browser_issues&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;12463-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/6/67b020ec5d9b2f4c6e85a70a0a0898ca.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/troubleshoot">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T18:24:23+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>troubleshoot</title>
        <link>https://www.bbritten.com/softwares/giocoso/troubleshoot</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;troubleshooting&quot;&gt;Troubleshooting&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Here I&amp;#039;ll list issues I come across myself when using Giocoso or which others notify me about and that I can reproduce. If I&amp;#039;ve been able to identify any solutions or workarounds, I&amp;#039;ll document them here too.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;q_i_m_running_giocoso_on_ubuntu_and_whenever_music_starts_playing_i_see_an_error_message_along_the_lines_of_invalid_date_-nan__what_s_wrong&quot;&gt;Q. I&amp;#039;m running Giocoso on Ubuntu and whenever music starts playing, I see an error message along the lines of &amp;#039;invalid date @-nan&amp;#039;. What&amp;#039;s wrong?&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
A. Confirmed. It&amp;#039;s not a problem with Giocoso as such, but a known bug with certain versions of Bash on Ubuntu. See &lt;a href=&quot;https://askubuntu.com/questions/1531490/printf-builtin-prints-nan-for-floating-point-numbers-in-ubuntu-24-10&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://askubuntu.com/questions/1531490/printf-builtin-prints-nan-for-floating-point-numbers-in-ubuntu-24-10&quot; rel=&quot;ugc nofollow noopener&quot;&gt;this Ubuntu support page&lt;/a&gt; for an overview. Giocoso rounds a recording&amp;#039;s duration from fractional to whole seconds. For example, if a recording actually lasts 306.89 seconds, Giocoso will round that to be a duration of 307 seconds. To do the rounding, it uses the &amp;#039;printf&amp;#039; built-in function, and until January 2025, there was a known bug whereby printf would return the text &amp;#039;-nan&amp;#039; instead of the actual numeric answer, on certain versions of Ubuntu 24.x. That bug was fixed at the end of January 2025, so if you update your system now (February 3rd 2025 at the time of writing), you should get the corrected version of printf installed: and this returns the correct numeric value. If you can&amp;#039;t upgrade, music will still play as normal, but the &amp;#039;Played x of y&amp;#039; and &amp;#039;Ending at…&amp;#039; displays won&amp;#039;t be correct, as there will be no valid computation of a duration for the recording and hence no possible computation of an end-time for the play can be made. You will also still see error messages, of course. Version 3.30 of Giocoso makes sure that if the rounding function ever errors again for similar reasons, you at least won&amp;#039;t see the distracting error messages.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;q_sometimes_when_new_music_starts_playing_the_program_display_area_shows_a_message_along_the_lines_of_convert-im6q16corruptimageprofilegiocoso3artalbumartjpg_xmp_warningprofilecvalidatexmpprofile1675_what_does_that_mean_and_what_can_i_do_to_stop_that_appearing&quot;&gt;Q. Sometimes, when new music starts playing, the program display area shows a message along the lines of &amp;quot;convert-im6.q16: CorruptImageProfile `.../giocoso3/art/albumart.jpg&amp;#039; (XMP) @ warning /profile.c/ValidateXMPProfile/1675.&amp;quot; What does that mean? And what can I do to stop that appearing?&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
A. Confirmed as an issue:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/software/screenshot_20231116_164150.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:software:screenshot_20231116_164150.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/software/screenshot_20231116_164150.png?w=650&amp;amp;tok=d53368&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The issue is not, technically, Giocoso&amp;#039;s but to do with ImageMagick, the tool Giocoso relies on to do image processing. It has all sorts of policies regarding who is allowed to convert images, how big they can be and how much memory they are allowed to take up, for example. It is possible that the artwork you&amp;#039;ve associated with particular recordings is too big or has internal issues that don&amp;#039;t manifest themselves in visual artefacts. The image in the above screenshot was a 1500&amp;times;1500 pixel one, though, which isn&amp;#039;t massive.
&lt;/p&gt;

&lt;p&gt;
The file which governs these ImageMagick policies is &lt;strong&gt;/etc/ImageMagick-6/policy.xml&lt;/strong&gt;. If your ImageMagick version is 7+, the folder name will be ImageMagick-7, of course. (Run &lt;strong&gt;convert --version&lt;/strong&gt; to find out if your distro uses ImageMagick 6 or 7). Whatever its precise location, the file contains lines such as these:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231116_164732.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231116_164732.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231116_164732.png?w=650&amp;amp;tok=8af849&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You could try increasing some of these resource limits (by editing the file as root), but my specific values look sufficient to me: 256MB of memory should be enough to handle very large images; an image width and height limit of &amp;#039;16KP&amp;#039; means 16000&amp;times;16000, which is about 100 times larger than the image which triggered the above error! So, if there are some limits you could increase, fine. If, as in this case, they seem fairly generous to begin with -it could just be a bug that ImageMagick has. They &lt;a href=&quot;https://github.com/ImageMagick/ImageMagick/issues/1419&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/ImageMagick/ImageMagick/issues/1419&quot; rel=&quot;ugc nofollow noopener&quot;&gt;are not unknown&lt;/a&gt;, after all!
&lt;/p&gt;

&lt;p&gt;
A more specific suggested reason and possible solution was mentioned &lt;a href=&quot;https://legacy.imagemagick.org/discourse-server/viewtopic.php?t=35171&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://legacy.imagemagick.org/discourse-server/viewtopic.php?t=35171&quot; rel=&quot;ugc nofollow noopener&quot;&gt;here&lt;/a&gt;:
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;Over the last year we have added checks in ImageMagick to help prevent security issues (e.g. aborts, uninitialized values, integer overflow). One new check is that the XMP profiles are compliant. The exception you received suggests that your image has a XMP profile that does not validate.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
Using this idea that an image&amp;#039;s embedded metadata might be tripping things up, I tried to fix the earlier error I was experiencing with one of my own recordings as follows:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Use &lt;a href=&quot;https://www.bbritten.com/softwares/semplice/semplice&quot; class=&quot;wikilink1&quot; title=&quot;softwares:semplice:semplice&quot; data-wiki-id=&quot;softwares:semplice:semplice&quot;&gt;Semplice&lt;/a&gt; in that recording&amp;#039;s folder to extract the existing album art (to a file called folder.jpg)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Use the command &amp;lt;strong&amp;gt;&lt;span class=&quot;wrap_courier &quot;&gt;exiftool -all= -overwrite_original folder.jpg&lt;/span&gt;&amp;lt;/strong&amp;gt; to remove all existing EXIF data from the image&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Use Semplice to re-tag the FLAC with the modified folder.jpg&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
…and when I then used Giocoso&amp;#039;s Play Music menu Option 3 to play music from the specific folder, the album art displayed correctly, without weird warning messages:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231116_181713.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231116_181713.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231116_181713.png?w=650&amp;amp;tok=bb1a8f&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
So, in my case, it would appear that something was definitely amiss in the album art&amp;#039;s metadata and it was this that was tripping up ImageMagick. Fixable outside of Giocoso, basically.
&lt;/p&gt;

&lt;p&gt;
The good news is that however ugly the error message is when it appears, it shouldn&amp;#039;t affect music playback at all -and the errors and generally screwed up display should resolve themselves when the next recording is played. You&amp;#039;ll notice from the above screenshot, too, that the message is a warning, not an error: it didn&amp;#039;t stop Giocoso correctly producing and displaying the appropriate album art+caption panel when needed.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;q_when_i_play_music_the_count-down_timer_thing_in_the_top-right_corner_of_the_main_display_doesn_t_seem_very_accurate_sometimes_it_stops_several_seconds_short_of_the_claimed_duration_before_something_new_starts_playing_though_it_sounds_as_if_the_whole_recording_was_played_what_s_wrong&quot;&gt;Q. When I play music, the count-down timer thing in the top-right corner of the main display doesn&amp;#039;t seem very accurate. Sometimes it stops several seconds short of the claimed duration before something new starts playing, though it sounds as if the whole recording was played. What&amp;#039;s wrong?&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
A. Nothing, but it&amp;#039;s a confirmed issue (see below for the eventual fix, however!). Here&amp;#039;s proof: a recording that has ended 2 seconds before it was thought it would:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231115_180505-1.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231115_180505-1.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231115_180505-1.png?w=650&amp;amp;tok=2edb13&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The &amp;#039;pausing play for 3 seconds…&amp;#039; text tells us that this recording has ended and the &amp;#039;pause between plays&amp;#039; timer has kicked in… yet the display in the top right-hand corner of the screen says that only 30 minutes and 10 seconds have been played of a 30 minutes 12 seconds-long recording. So you are spot on to observe that the countdown timer thing is not terribly accurate (I can confirm with my ears, which you&amp;#039;ll just have to trust, that the entire recording was actually played: it didn&amp;#039;t abruptly stop two seconds short of its final notes!)
&lt;/p&gt;

&lt;p&gt;
So what&amp;#039;s going on?
&lt;/p&gt;

&lt;p&gt;
Firstly, there are truncation errors: if a track lasts 3 minutes 27.51 seconds, Giocoso will calculate it to be 3 minutes 28 seconds long. Up to 0.99 seconds of a track&amp;#039;s duration can thus be lost by truncation: if you have multiple tracks making up a recording, that extra 0.99 seconds per track can start adding up to a claimed duration for the whole recording that&amp;#039;s significantly longer than it truly is. Truncation can also produce timing errors the other way, of course.
&lt;/p&gt;

&lt;p&gt;
More problematically, the bit of the display that says &amp;#039;how long has this recording been playing for&amp;#039; is computed in a loop of code that is meant to iterate every second. But if your PC is a bit underpowered (think: Raspberry Pi 4, for example, where this issue personally bit me hard!) and it suddenly has to do background housekeeping work, that loop starts taking a tiny bit more than a second to complete and that error can start to accumulate: the display will say &amp;#039;you&amp;#039;ve played 45 seconds of music&amp;#039; and actually it&amp;#039;s been 46 seconds: it&amp;#039;s just that the loop to update the counter is running slow versus clock time. It can even work the other way round: if your PC&amp;#039;s internal clock is less than perfect and has little to process in the background, it can skip through the loop in &lt;em&gt;less&lt;/em&gt; than a second, making the &amp;#039;you&amp;#039;ve played X seconds of music&amp;#039; display go &lt;em&gt;faster&lt;/em&gt; than it should (though this is rarer than the &amp;#039;running slow&amp;#039; scenario).
&lt;/p&gt;

&lt;p&gt;
I actually wrote some &amp;#039;clock correction&amp;#039; code to deal with this. By comparing the number of played seconds with the known number of elapsed clock seconds since playback began, Giocoso can sometimes &amp;#039;jump&amp;#039; a second, or display the same seconds for an extra second, depending on which way it needs to adjust the counter. This actually works quite well: you should generally never be more than 2 seconds out, &amp;#039;played time&amp;#039; v. &amp;#039;of time&amp;#039;, as a result of its continual clock-watching and counter auto-adjustment. On a reasonably fast PC, I find that the counter adjustment code rarely kicks in, anyway: “play v. of” discrepancies then tend to be entirely a matter of per-track rounding.
&lt;/p&gt;

&lt;p&gt;
But notice how the counter adjustment works: it compares &amp;#039;I have advanced the counter 50 seconds&amp;#039; with &amp;#039;the clock time on the system has advanced 51 seconds &lt;strong&gt;since play of this recording began&lt;/strong&gt;&amp;#039;. It therefore concludes, &amp;#039;I need to jump the counter forward 1 second&amp;#039;, which it will then do. The problem then arises: what if you now pause the playback for ten minutes? For then, the clock time will advance 600 seconds, but the &amp;#039;played&amp;#039; counter is stuck at 50 seconds -legitimately, because that&amp;#039;s what pausing playback &lt;em&gt;means&lt;/em&gt;! When you resume playback, how can you know if the counter is &amp;#039;out&amp;#039; any more? You cannot compare it to the number of clock time seconds since playback &lt;em&gt;began&lt;/em&gt; any more, because that&amp;#039;s now hundreds of seconds ahead of &amp;#039;played&amp;#039; time! So the short version is, the moment you pause playback of a recording, Giocoso can no longer invoke the counter-adjustment mechanism: the &amp;#039;seconds since play of this recording began&amp;#039; is now no longer a usable reference point against which to compare. As a result, if a play is paused, the auto-clock adjustment mechanism cannot be used upon playback resumption and ever-once-paused plays are therefore inevitably going to be many seconds, potentially tens of them, &amp;#039;out&amp;#039; in their calculations.
&lt;/p&gt;

&lt;p&gt;
I should just add that Giocoso will &lt;em&gt;always&lt;/em&gt; play through to the end of a recording. The thing which triggers the move onto a new recording is the genuine end of the present recording, not the numeric values displayed in the countdown timer. So, yes: recordings will reach their actual, natural end even when the timer still says several seconds (or more) of playback are due. It&amp;#039;s the recording that&amp;#039;s correct, not the timer.
&lt;/p&gt;

&lt;p&gt;
All of which is a long way of saying that the &amp;#039;played X of Y&amp;#039; display is &lt;em&gt;indicative&lt;/em&gt;, not an atomic clock! Yes, it will drift a little (and badly, after a pause), but it&amp;#039;s there more as a visual cue and general progress indicator than as a pin-point accurate timer. So, you&amp;#039;re observations are correct, but it&amp;#039;s the nature of the beast, I&amp;#039;m afraid. Sorry!
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;Updated for Version 3.20 and above:&lt;/em&gt;&lt;/strong&gt; Everything written above is now no longer true in Giocoso Version 3.20 and above!! That version introduced the ability of Giocoso to &lt;em&gt;directly&lt;/em&gt; read the music-playing engine&amp;#039;s location within the music stream, in near-realtime. This means that in the &amp;#039;Played X of Y&amp;#039; display, the &amp;#039;X&amp;#039; is always accurately and precisely known. The &amp;#039;Y&amp;#039; is easy to detect directly, too (it&amp;#039;s just the duration of the recording being played, which is trivially obtainable). Hence, all parts of the &amp;#039;X of Y&amp;#039; display are always accurate (sort of… see below). The &amp;#039;Ending at&amp;#039; computation is thus pretty accurate now, too. If I know you&amp;#039;ve played 5 minutes out of 20 and the current clock-time on your system is 10AM, I know this recording will end at 10:15. If at 10:10 you pause playback, you are now 15 minutes into the recording, with five minutes to go: as you initiate a pause of playback, the &amp;#039;X&amp;#039; component will stop incrementing (obviously, because you&amp;#039;ve stopped playing music!) and the &amp;#039;Ending at&amp;#039; time will begin to increment, one second for every one second of pause. The &amp;#039;Ending at&amp;#039; time gets pushed back, in other words, for as long as the pause continues. If you come back at 10:30 and re-initiate play, I know you&amp;#039;ve still got 5 minutes of the recording to play, so I can update the &amp;#039;Ending at&amp;#039; time to be 10:35: that then stays fixed, and the &amp;#039;X&amp;#039; component will resume incrementing once more.
&lt;/p&gt;

&lt;p&gt;
The times displayed in this part of Giocoso&amp;#039;s program output are now all accurate, &lt;strong&gt;from Version 3.20 up&lt;/strong&gt;. Only two sources of imprecision remain: 1) your system clock does not keep perfect time, so if it drifts at all, then Giocoso&amp;#039;s clock calculations will be &amp;#039;off&amp;#039;; and 2) Giocoso still truncates times to whole seconds, whereas the underlying music playback engine reports its progress down to centiseconds. That is, if X &lt;em&gt;really&lt;/em&gt; ought to be &amp;#039;you&amp;#039;ve played 00:05:33.34 seconds of this recording&amp;#039;, Giocoso will truncate the digits after the decimal point and report (and calculate) based on you having played 00:05:33 of it. The truncated tenths and hundredths of a second can add up for a long recording and introduce a second or so of inaccuracy. Giocoso will actually correct for this if accumulated drift from clock-time exceeds 2 seconds. Otherwise, a 2-second inaccuracy is something you still have to live with.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;q_when_i_play_music_the_album_art_displays_with_a_white_bar_and_some_illegible_yellow_text_underneath_it_what_s_wrong&quot;&gt;Q. When I play music, the album art displays with a white bar and some illegible yellow text underneath it. What&amp;#039;s wrong?&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
A. Definitely reproducible:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231030_140929.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231030_140929.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231030_140929.png?w=650&amp;amp;tok=d10405&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The problem is most likely that you&amp;#039;ve run out of usable disk space in /tmp, because Giocoso has to be able to write its analysis of the colours found in the album art to that file system. If /tmp is full, then it cannot write out the analysis, and thus ends up reading in blank for the discovered colours -and that means it makes the &amp;#039;text panel&amp;#039; under the album art completely white… and goes on to select entirely the wrong text colour as well, just for good measure! Here&amp;#039;s proof that the space problem in /tmp is an issue for me:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231030_141237.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231030_141237.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231030_141237.png?w=650&amp;amp;tok=d60354&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You can see I&amp;#039;m down to “0 avail” for /tmp, and 100% used. So: I cleaned out my /tmp folder (using the fairly crude technique of rm * issued as a non-root user whilst sitting inside the /tmp folder):
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231030_141758.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231030_141758.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231030_141758.png?w=650&amp;amp;tok=9244ee&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s got me back to just 1% used, 99% or 7.8GB available for use, and my album art is back to its usual self:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231030_141943.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20231030_141943.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20231030_141943.png?w=650&amp;amp;tok=8f394f&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The short version is, therefore, that Giocoso needs &amp;#039;working space&amp;#039; in /tmp (not much of it, mind; but some) and bad things will happen if it can&amp;#039;t get any at all.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;q_when_i_start_playing_music_using_my_local_pc_to_control_a_remote_ssh_session_the_display_gets_a_bit_garbled_with_blank_space_displaying_where_it_shouldn_t_what_s_up&quot;&gt;Q. When I start playing music, using my local PC to control a remote ssh session, the display gets a bit garbled with blank space displaying where it shouldn&amp;#039;t. What&amp;#039;s up?&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Reproducible. You are probably describing this sort of output:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20241205_091348.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20241205_091348.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20241205_091348.jpg?w=650&amp;amp;tok=c137d0&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That break in the line-drawing characters to the right of the &amp;#039;Ending at&amp;#039;, which appears to obliterate the first part of the next line, again leaving a blank space which shouldn&amp;#039;t be there, is probably what you&amp;#039;re looking at. The trick is to highlight that area of the screen and copy-and-paste the text into, say, a text editor of your choice …and then you&amp;#039;d see the text which is actually causing that &amp;#039;blank space&amp;#039;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20241205_091657.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20241205_091657.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20241205_091657.jpg?w=650&amp;amp;tok=8358f8&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Pulling that text out completely, you&amp;#039;d see it says: &lt;strong&gt;connect /tmp/.X11-unix/X1: No such file or directory&lt;/strong&gt;. That&amp;#039;s a fairly common ssh error and nothing technically to do with Giocoso: it&amp;#039;s just that Giocoso doesn&amp;#039;t know how to handle ssh-related errors gracefully.
&lt;/p&gt;

&lt;p&gt;
There are numerous online resources for solving this issue: see, for example, &lt;a href=&quot;https://unix.stackexchange.com/questions/57138/why-does-my-x11-forwarding-attempt-fail-with-connect-tmp-x11-unix-x0-no-such&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://unix.stackexchange.com/questions/57138/why-does-my-x11-forwarding-attempt-fail-with-connect-tmp-x11-unix-x0-no-such&quot; rel=&quot;ugc nofollow noopener&quot;&gt;this one&lt;/a&gt;. In a nutshell, it means that something is wrong with your ability to do X-forwarding and that the remote PC running Giocoso doesn&amp;#039;t know how to write back to the screen display your local PC is running. Commonly, that&amp;#039;s because the DISPLAY environment variable is set incorrectly. It can also be because your local PC has its own ssh server configuration which is messed up in some way. This recently happened to me, for example: I had actually just installed ssh server for the first time onto my local PC and this screwed up the remote PC&amp;#039;s ability to draw to my X server (display): a simple reboot resolved that particular issue. If a system update and a reboot (of your &lt;em&gt;local&lt;/em&gt; PC) doesn&amp;#039;t resolve the issue, then you will need to brush up on your Google-fu and try and diagnose your ssh/X forwarding issues using whatever online resources you can find. It fundamentally isn&amp;#039;t Giocoso going wrong, though.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;

&lt;!-- cachefile /var/www/dokuwiki/data/cache/2/2b6b38256bfec6c89756e0695bacf138.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/underplayedcomposers">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-25T16:35:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>underplayedcomposers</title>
        <link>https://www.bbritten.com/softwares/giocoso/underplayedcomposers</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;a_note_about_under-played_composers&quot;&gt;A Note about Under-played Composers&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;A Note about Under-played Composers&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;a_note_about_under-played_composers&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-50&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;general_thoughts&quot;&gt;1.0 General Thoughts&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
A central goal of Giocoso has always been: to help uncover music by composers who would otherwise tend to be forgotten. One of its central music-choosing strategies is randomisation, after all: pick something to play at random and it might just as well turn out to be by Kurpinskí or Kenins as by Mozart or Mahler. However, if you were to switch on Giocoso&amp;#039;s &amp;#039;Only play previously unplayed recordings&amp;#039; feature, you would slant the playing pitch the wrong way -because the likes of Mozart or Brahms or Bach wrote huge quantities of music and the likes of Kenins or Novák didn&amp;#039;t. It&amp;#039;s therefore easy to play the three pieces you have by Novák and have nothing else by him that hasn&amp;#039;t been played previously, whilst the well of unplayed Bach or Beethoven is likely to be very deep.
&lt;/p&gt;

&lt;p&gt;
So, is there a way to swing things back the other way and to give the Tormises, Peeterses and Salzedos of this world more of a chance of getting their limited wares before your ears? Sure: that&amp;#039;s what Giocoso&amp;#039;s new (to Version 3) &amp;#039;under-played composer&amp;#039; feature is for.
&lt;/p&gt;

&lt;p&gt;
The Underplayed Algorithm (as I&amp;#039;ll call it henceforth) takes as its starting premise the idea that if there are 500 composers represented in your music collection, then in a completely fair and reasonable world, each composer would constitute 1/500th of the &lt;em&gt;plays&lt;/em&gt; from that collection (or 0.2%). If you had collected music by fewer composers than that, the percentage would go up; with more composers, it would go down.
&lt;/p&gt;

&lt;p&gt;
But 0.2% of what? It can&amp;#039;t be simply the count of “plays”. A 45-second keyboard sonata by 4 year-old Mozart should not have the same mathematical significance as one of Wagner&amp;#039;s lengthier &lt;em&gt;Gesamtkunstwerks&lt;/em&gt;! Instead, it must be of cumulative play time: one play of Wagner counts for a lot more than one play by Tylman Susato (say), because it lasts an eternity whereas a Susato dance lasts mere minutes.
&lt;/p&gt;

&lt;p&gt;
Thus, to make a &amp;#039;fair deal for unknowns&amp;#039; algorithm work, we first have to know the length of time &lt;em&gt;all&lt;/em&gt; music plays performed to date have taken. Giocoso computes this as simply the total sum of the DURATION column in the PLAYS table, measured in seconds. We also have to know how many distinct composers we have in our collection: Giocoso computes this as a select distinct of the COMPOSER column in the RECORDINGS table.
&lt;/p&gt;

&lt;p&gt;
If the total duration is X seconds; and if there are Y unique composers in the collection, then a &amp;#039;fair deal&amp;#039; would result in 1/Y * X as a &amp;#039;fair play&amp;#039; time: we can use that formula to generate a &amp;#039;threshold amount of time&amp;#039; below which a composer is being hard-done by; above which, a composer is being played more often than is strictly &amp;#039;fair&amp;#039;. For ease of use, rather than derive the threshold as a number of seconds of playtime, we can also use straight percentages. If 1/500 is 0.2%, then a composer whose personal, total plays represent 0.3% of all play time is over-played; one whose personal play-time is 0.15% would be considered under-played.
&lt;/p&gt;

&lt;p&gt;
To put some numbers on that: say my collection consists of 602 composers; and its total duration if played end-to-end would be 400,000 seconds (6,666 minutes, or 111 hours). Then we can say any composer whose cumulative plays to date have lasted less than (1/602)*400000=664 seconds (around 11 minutes) would be classed as &amp;#039;under-played&amp;#039;. A single play of anything by Wagner would clearly make him &amp;#039;over-played&amp;#039;, but even a dozen plays of early stuff by Mozart would have difficulty crossing that threshold. In percentage terms, 1/602 composers is about 0.1667%, so any composer whose total, personal play-time was less than 0.1667% of the 400,000 global play-time would count as under-played.
&lt;/p&gt;

&lt;p&gt;
One slight fly in the ointment remains: you cannot just add up &amp;#039;cumulative plays to date&amp;#039; and declare the job complete: if your collection has recordings by composers who have &lt;em&gt;never&lt;/em&gt; previously been played, they should be regarded as &amp;#039;under-played&amp;#039; too… but if you were only to count up play durations from the PLAY table, they&amp;#039;d never be considered. Accordingly, the algorithm needs to do the previous mathematic calculation which does exclusively check the PLAYS table, but it must then also bolt on any composer who appears in RECORDINGS and not in PLAYS.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 General Thoughts&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;general_thoughts&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;51-4306&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;code&quot;&gt;2.0 Code&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
So with all that in mind, here&amp;#039;s the actual code which makes up Giocoso&amp;#039;s &amp;#039;under-played composer&amp;#039; algorithm:
&lt;/p&gt;

&lt;p&gt;
&lt;span&gt;&lt;strong&gt;select recordings where composer in (&lt;/strong&gt;&lt;br/&gt;

&lt;strong&gt;with&lt;/strong&gt; &lt;span class=&quot;wrap_greentext &quot;&gt;duration_in_secs as (select composer, substr(duration, 1,2)*3600 + substr(duration, 4,2)*60 + substr(duration, 7,2) as duration_secs from plays),&lt;/span&gt;&lt;br/&gt;

&lt;span class=&quot;wrap_bluetext &quot;&gt;total_durations as (select sum(duration_secs) as totalcount from duration_in_secs),&lt;/span&gt;&lt;br/&gt;

&lt;span class=&quot;wrap_orangetext &quot;&gt;composer_durations as (select composer, sum(duration_secs) as composertime from duration_in_secs group by composer),&lt;/span&gt;&lt;br/&gt;

&lt;span class=&quot;wrap_redtext &quot;&gt;percentages as (select c.composer, c.composertime, t.totalcount, cast(c.composertime as real) / t.totalcount * 100 as playpercentage from total_durations t, composer_durations c),&lt;/span&gt;&lt;br/&gt;

&lt;span class=&quot;wrap_pinktext &quot;&gt;threshold as (select cast(1 as float)/(select count(distinct composer) from recordings)*100 as threshold_value)&lt;/span&gt;&lt;br/&gt;

&lt;span class=&quot;wrap_browntext &quot;&gt;select composer from percentages where playpercentage &amp;lt; (select threshold_value from threshold)&lt;/span&gt;&lt;br/&gt;

&lt;strong&gt;union all&lt;/strong&gt;&lt;br/&gt;

&lt;span class=&quot;wrap_darkbluetext &quot;&gt;select distinct composer from recordings where composer not in (select composer from plays)&lt;/span&gt;&lt;br/&gt;

)&lt;br/&gt;

&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
With apologies for the colour-coding for any of my colourblind readers, we can pick that apart as follows:
&lt;/p&gt;

&lt;p&gt;
The &amp;#039;with&amp;#039; clause introduces five separate sub-queries:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span class=&quot;wrap_greentext &quot;&gt;Duration_in_Secs&lt;/span&gt; takes every record in the PLAYS table and, for each, isolates the COMPOSER and DURATION fields, whilst converting the DURATION (which is physically stored in hh:mm:ss format) into a simple count of seconds. So this sub-query tells us &amp;#039;here, composer X was played for Y seconds; here composer A was played for Z seconds…&amp;#039; and so on)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span class=&quot;wrap_bluetext &quot;&gt;Total_Durations&lt;/span&gt; takes all the records in the Duration_in_Secs subquery and simply generates a one-line total number of seconds of play for everyone, for all time. This is the sub-query that says every play you&amp;#039;ve ever made, regardless of who composed it, amounts to 400,000 seconds of play-time.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span class=&quot;wrap_orangetext &quot;&gt;Composer_Durations&lt;/span&gt; takes all the records in the Duration_in_Secs subquery and generates a per-composer total number of seconds-of-play. It&amp;#039;s this query that says &amp;#039;Copland was played for 450 seconds, Britten for 3,200 seconds, Brahms for 145 seconds…&amp;#039; and so on.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span class=&quot;wrap_redtext &quot;&gt;Percentages&lt;/span&gt; takes the results from Total_Durations and Composer_Durations. It takes the per-composer total playtime and divides by the total-total-playtime, to generate a percentage of total play by composer. Here, then, we take Copland&amp;#039;s 450 seconds of play-time, divides by the total 400,000 seconds of play-time and conclude that Copland was played 0.11% of the time; Britten&amp;#039;s 3200 seconds represents 0.8% of all play-time, and so on.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span class=&quot;wrap_pinktext &quot;&gt;Threshold&lt;/span&gt; simply counts up the total number of unique composers found in the RECORDINGS table and computes what 1 ÷ that total is: if I have 602 composers in RECORDINGS, the Threshold subquery is going to return a value of 1 ÷ 602 = 0.166%.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
We finally get to the &lt;span class=&quot;wrap_browntext &quot;&gt;main query&lt;/span&gt;: return composer names whose personal play-time percentage is less than the gobal, threshold play-time percentage. These are the underplayed composers: both Copland and Brahms would make my list of the under-played, but Britten would not.
&lt;/p&gt;

&lt;p&gt;
But this doesn&amp;#039;t account for composers who have never been played yet. We therefore &lt;span class=&quot;wrap_darkbluetext &quot;&gt;bolt on an extra query&lt;/span&gt; any composer whose name appears in RECORDINGS but which doesn&amp;#039;t appear in PLAYS: these are the never-before-played composers, and by adding them via a union all clause to the list of underplayed composers generated by the main query, we now have a complete list of composers we think have been underplayed to date.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 Code&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;code&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;4307-8168&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;observations&quot;&gt;3.0 Observations&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Note that the &lt;span class=&quot;wrap_pinktext &quot;&gt;Threshold&lt;/span&gt; is computed dynamically. This means it will change as you add new recordings (and new composers) to your music collection. If I own music by 602 composers, the threshold is about 0.166%; but if I add music by 32 new composers, the threshold changes automatically to 1÷634 = 0.1577%. A composer that was barely &amp;#039;under-played&amp;#039; before the addition (with a play percentage of, say, 0.162%) would now automatically be regarded as somewhat over-played now: there are 32 never-before-played composers to worry about before re-playing this fellow&amp;#039;s work again!
&lt;/p&gt;

&lt;p&gt;
At first glance, talking about thresholds of 0.16% sounds ridiculously low -but simple maths indicates it&amp;#039;s correct. If you only had music by 10 composers, then each would &amp;#039;fairly&amp;#039; have 10% of the total play-time; if there were 100 composers, then a fair-share would be just 1%. The moment you have music by more than 100 composers in your collection, the &amp;#039;fair share&amp;#039; threshold becomes a percentage less than 1%. Once you have music by 1,000 composers, the fair-share threshold becomes less than 0.1%… and so on.
&lt;/p&gt;

&lt;p&gt;
The necessity of using substrings to convert per-play durations from hh:mm:ss format into a simple number of seconds in the &lt;span class=&quot;wrap_greentext &quot;&gt;Duration_in_Secs&lt;/span&gt; sub-query is unfortunate, but arises from the way Giocoso version 1 (and it&amp;#039;s predecessor music player) stored play durations, coupled with my reluctance to alter the database structure for backward-compatibility considerations. The conversion works by knowing that if a duration is stored in hh:mm:ss format, then characters 1 to 2 are the hours, which need to be multipled by 3600 to convert to seconds. Characters 4 to 5 are the minutes, which thus need to be multipled by 60 to derive seconds. Finally, characters 7 to 8 are the seconds component, which need no conversion, because they are already in seconds. It&amp;#039;s a simple matter to add the three converted numbers together to thus derive a per-play duration in pure seconds.
&lt;/p&gt;

&lt;p&gt;
Another consequence of storing play durations in hh:mm:ss format is that the PLAYS table is not quite accurate -because durations in the RECORDINGS table is actually measured in seconds with multiple decimals. A recording that is said to last 1487.146667 seconds, for example, will be played as lasting for &lt;strong&gt;00:24:47&lt;/strong&gt;, which is close but not perfect, as the 0.146667 seconds decimals have been discarded. For a composer right on the threshold of being under- or over-played, the rounding that takes place at this point of the calculation might make a significant difference, but it&amp;#039;s something that has to be lived with due to prior database design consequences.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;em class=&quot;u&quot;&gt;A very important point to note&lt;/em&gt;&lt;/strong&gt;: the use of the &amp;#039;under-played composer&amp;#039; filter is determinative. By this I mean that, as you can see from the SQL query it triggers, it literally restricts the list of composers whose music can be regarded as an acceptable random choice for the next play. It doesn&amp;#039;t just mean that an under-played composer might get randomly picked for the next play: it means an under-played composer definitely will be the next pick. You just don&amp;#039;t know which under-played composer it will be. This is quite different from, for example, the use of the exempts file to exempt a composer from the usual time bar: mentioning Britten in the exempts file doesn&amp;#039;t mean a piece by Britten will be the next one played, but only that a piece by Britten could be the next one played. The exempts file is persuasive; the under-played filter is determinative.
&lt;/p&gt;

&lt;p&gt;
One final point: if you left this filter on long enough, every composer ought to more-or-less reach the threshold and thus cease to be a candidate for play: at which point, Giocoso would have no viable candidates for play and your life would go silent! Think of the filter as a way of roughly levelling the playing field for a time, not as something you&amp;#039;d leave on permanently, therefore.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Observations&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;observations&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;8169-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/1/108f7929a793b648ddac501ada9c0328.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/usetips">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T18:05:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>usetips</title>
        <link>https://www.bbritten.com/softwares/giocoso/usetips</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;usability_tips_techniques&quot;&gt;Usability Tips &amp;amp; Techniques&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
I thought it might be helpful to document how &lt;em&gt;I&lt;/em&gt; use Giocoso on a regular basis. Some of this may be useful to you, too!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Usability Tips &amp;amp; Techniques&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;usability_tips_techniques&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-166&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;remote_access&quot;&gt;1.0 Remote Access&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
I do not run Giocoso on my main, desktop PC. Instead, I have a Raspberry Pi 4 running completely silently in the drawer of a console table, to which I can connect via Ethernet network and I run Giocoso on &lt;em&gt;that&lt;/em&gt; instead. However, I am sat at my desktop PC for long hours of the day: that&amp;#039;s obviously the computer with which I want to &lt;em&gt;control&lt;/em&gt; Giocoso. So how do I issue commands on my desktop PC and yet control Giocoso running in the console drawer? I wrote a separate article about how I achieve this using SSH and turn it into a button-clickable capability with a little bit of desktop environment manipulation.
&lt;/p&gt;

&lt;p&gt;
This all simply means that I can &lt;em&gt;operate&lt;/em&gt; Giocoso from my desktop PC, but everything I do is actually running on the music PC. I have &lt;em&gt;remote&lt;/em&gt; control of what Giocoso does… but the program display is entirely as if I were running it locally.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Remote Access&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;remote_access&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;167-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/7/777687a678d3faf16d0173536dd439fd.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/win11">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-13T14:01:36+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>win11</title>
        <link>https://www.bbritten.com/softwares/giocoso/win11</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;installing_giocoso_on_windows_11&quot;&gt;Installing Giocoso on Windows 11&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Installing Giocoso on Windows 11&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_giocoso_on_windows_11&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-47&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
By way of introduction to the topic of installing Giocoso on Windows 11, I have to make several disclaimers: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; I&amp;#039;m using real, physical hardware&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; The physical hardware is a Lenovo L460 laptop, with an i5-6200U CPU and 16GB of RAM, manufactured in about November 2016&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; That laptop does &lt;strong&gt;not&lt;/strong&gt; meet Microsoft&amp;#039;s official, supported hardware requirements for Windows 11&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; My Windows 11 installation is thus &lt;em&gt;un&lt;/em&gt;official and unsupported by the operating system manufacturer&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Accordingly, what I go on to describe in this article &lt;em&gt;might&lt;/em&gt; not be representative of what will happen on properly-supported hardware. I should also mention that I&amp;#039;m writing using Windows 11 25H2, which is the latest version of that operating system at the time of writing, in December 2025.
&lt;/p&gt;

&lt;p&gt;
The basic principle of getting Giocoso working on Windows 11 is to install the Windows Subsystem for Linux (WSL) onto your Windows system, then install a Linux distro of your choice, and finally install Giocoso into that distro. It is, in other words, a cheat! Giocoso is, essentially, a Bash script that orchestrates a number of Linux programs and utilities to play music: it doesn&amp;#039;t &lt;em&gt;really&lt;/em&gt; run on Windows at all… but thanks to WSL, Windows can run Linux, and if Linux is running, Giocoso can run within &lt;em&gt;that&lt;/em&gt;.
&lt;/p&gt;

&lt;p&gt;
In what follows, I&amp;#039;ll show you how I installed the Windows Subsystem for Linux on my Windows laptop; how I then installed a distro; and how I then made that distro run Giocoso. I&amp;#039;ll finish up by showing you how I went on to install &lt;em&gt;more&lt;/em&gt; distros on the same laptop and was able to run Giocoso under all of them, mostly with total success.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;48-1722&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;installing_the_windows_subsystem_for_linux_wsl&quot;&gt;2.0 Installing the Windows Subsystem for Linux (WSL)&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Microsoft actually invented two versions of the Windows Subsystem for Linux, so technically the one we&amp;#039;re about to install is properly known as WSL2: it&amp;#039;s the second version and is needed because only it allows direct access to graphical and audio hardware from within the virtualised Linux workspaces it creates. I will generally refer to it as merely “WSL” however, as almost no-one is going to be using the first version of it these days. 
&lt;/p&gt;

&lt;p&gt;
In order to be able to install WSL2, your computer needs to using a 64-bit CPU (which is practically a given these days, I think). You also need to make sure that your computer&amp;#039;s BIOS or UEFI settings are configured to enable the virtualisation features of your CPU: that&amp;#039;s &lt;em&gt;not&lt;/em&gt; a given and you may need to hunt around for the right setting to switch that on.
&lt;/p&gt;

&lt;p&gt;
Assuming those minimal prerequisites are met, however, then installing WSL consists of opening a command prompt with Administrator rights and issuing the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wsl --install&lt;/pre&gt;

&lt;p&gt;
Windows will respond by downloading some software, installing it and then prompting you to reboot:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_3_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_3_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_3_.png?w=650&amp;amp;tok=573cb7&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
When you see this message, do as it says and reboot your PC to make the new feature available and functional. Once your PC has rebooted, nothing will apparently have happened and nothing terribly Linux-y will be available to you to use! That&amp;#039;s because you haven&amp;#039;t installed a distro yet… so that&amp;#039;s the next thing to do.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 Installing the Windows Subsystem for Linux (WSL)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_the_windows_subsystem_for_linux_wsl&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1723-3262&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;installing_a_linux_distro&quot;&gt;3.0 Installing a Linux Distro&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Open another command prompt with Administrator rights and type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wsl --install ubuntu&lt;/pre&gt;

&lt;p&gt;
It doesn&amp;#039;t &lt;em&gt;have&lt;/em&gt; to be &amp;#039;ubuntu&amp;#039; here: you can install &amp;#039;debian&amp;#039; or &amp;#039;fedora&amp;#039; or several other distros if you prefer. But I&amp;#039;m running with Ubuntu for now and we&amp;#039;ll see how to install these other distros later on.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_10_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_10_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_10_.png?w=650&amp;amp;tok=340e3c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
As you can see, Windows pulls down various software packages, installs them and then &amp;#039;provisions&amp;#039; them for you. At the end of that process, you are prompted to supply a new username and password combo: this will be the &lt;em&gt;Linux&lt;/em&gt; user, which is not the same as the Windows user at all. If you &lt;em&gt;choose&lt;/em&gt; to type in, when prompted, the same username as you use to log onto Windows 11 in the first place, that&amp;#039;s perfectly fine… but you don&amp;#039;t have to do that. Similarly, your Linux password does not have to match your Windows one… but they can do so if it makes it easier for you.
&lt;/p&gt;

&lt;p&gt;
As soon as you&amp;#039;ve supplied a new user/password combo, you are unceremoniously dumped at the command prompt of your new Ubuntu environment, as you can see in the above screenshot. A rather important point to note here is that you are dumped at a &lt;em&gt;Linux&lt;/em&gt; command prompt (the slashes slant forward!) but in a Windows folder location. In my case, you&amp;#039;ll note that I&amp;#039;m in &lt;strong&gt;/mnt/c/Users/hawen&lt;/strong&gt;: that “/mnt/c” prefix part of the path is how the Linux environment &amp;#039;sees&amp;#039; my Windows C: drive. If you have music files stored in C:\Users\hawen\Music, for example, then the Linux environment will be able to see them in /mnt/c/Users/hawen/Music, too.
&lt;/p&gt;

&lt;p&gt;
As soon as you have a functioning Ubuntu system, you must update it, by issuing the commands:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&lt;/pre&gt;

&lt;p&gt;
That will trigger a lot of in-terminal activity:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_12_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_12_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_12_.png?w=650&amp;amp;tok=57ffb9&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
As you can see, in my case there were over 100 updates to apply, totalling around 150MB of software download. Let that happen, responding &amp;#039;y&amp;#039; when prompted: Giocoso will not install on a Linux environment that hasn&amp;#039;t been fully updated.
&lt;/p&gt;

&lt;p&gt;
Once your distro has been fully updated, close the terminal window, which is kind of equivalent to rebooting the Linux environment and having the updates applied. You&amp;#039;ve just built yourself a working Linux environment inside a Windows PC (which to this day still impresses me as a significant technical achievement on the part of Microsoft).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Installing a Linux Distro&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_a_linux_distro&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;3263-5740&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;installing_giocoso&quot;&gt;4.0 Installing Giocoso&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
If you click your Windows &amp;#039;Start&amp;#039; button now, you should see an icon in the &amp;#039;Recommended&amp;#039; section of the start menu for launching an Ubuntu environment directly. Click that and Windows&amp;#039; new &amp;#039;Terminal&amp;#039; application will be launched, dumping you straight into an Ubuntu terminal session, in your Linux user&amp;#039;s new $HOME folder. You can check this by typing the commands:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;pwd
uname -a
cat /etc/os-release&lt;/pre&gt;

&lt;p&gt;
…just in case there&amp;#039;s any doubt in your mind that you are actually sitting inside a Linux virtual environment at this point. Another way you can get into your Ubuntu environment is to open the Terminal application from the Windows start menu yourself, then click on the little down-chevron you see along the top bar of the display:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_100_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_100_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_100_.png?w=650&amp;amp;tok=83ed5b&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
As you can see, that displays options as to &lt;em&gt;which&lt;/em&gt; sort of terminal session you want opened, and Ubuntu is listed there, with its familiar roundel icon. Click that and a new terminal tab will open, in Ubuntu&amp;#039;s trademarked purple hue, giving you a strong visual clue that you are indeed using Ubuntu at this point. 
&lt;/p&gt;

&lt;p&gt;
However you launch your Ubuntu session, type the following command into the terminal prompt:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wget software.bbritten.com/gioinst&lt;/pre&gt;

&lt;p&gt;
You&amp;#039;ll see a flurry of screen activity as the Giocoso installer script is downloaded:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_14_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_14_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_14_.png?w=650&amp;amp;tok=dafe54&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The script is tiny, so it takes hardly any time to download. Once it has, type the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;bash gioinst&lt;/pre&gt;

&lt;p&gt;
…and this will happen:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_15_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_15_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_15_.png?w=650&amp;amp;tok=d06da1&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The screen-full of text is there to warn you that installing Giocoso will trigger the installation of a bundle of software that Giocoso relies on. You can tap &amp;#039;n&amp;#039; to back out of the installation without it having altered your system at all… but if you tap &amp;#039;y&amp;#039; to proceed, this immediately happens:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_16_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_16_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_16_.png?w=650&amp;amp;tok=cc5e89&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s just a little bit of preliminary checking and configuring taking place, after which the screen will change to display this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_17_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_17_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_17_.png?w=650&amp;amp;tok=73a29e&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Here, a progress bar will indicate the installer&amp;#039;s gradual installation of all the software packages Giocoso needs to work properly. There aren&amp;#039;t that many of them and so it shouldn&amp;#039;t take more than a couple of minutes for the installer to display this message:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_18_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_18_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_18_.png?w=650&amp;amp;tok=48aca9&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Clicking OK at this point (or just pressing [Enter]) will move the installer onto its second phase, where it begins to pull down the Giocoso software components themselves:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_19_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_19_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_19_.png?w=650&amp;amp;tok=1b9063&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Once that&amp;#039;s been done, you&amp;#039;ll see this confirmation message:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_21_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_21_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_21_.png?w=650&amp;amp;tok=4660d5&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Click OK (or press [Enter]) at this point and the installer will verify that all the Giocoso components came down successfully by computing and comparing the hash values for the files:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_22_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_22_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_22_.png?w=650&amp;amp;tok=dc89dc&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That bunch of gobbledygook is just Giocoso&amp;#039;s way of checking that the local file installed on your PC actually matches the one stored on this website&amp;#039;s servers, precisely and completely. If they don&amp;#039;t, it will be because there was some sort of glitch in the download process -and, accordingly, the installer will attempt to fetch the relevant files one more time.  If everything matches, however, then we know the local installation is a good one and you&amp;#039;ll thus see this message by way of conclusion:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_23_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_23_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_23_.png?w=650&amp;amp;tok=0c4d6a&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s the message that tells you that Giocoso has indeed been successfully installed. You can do what the message suggests and close your terminal… or you can run Giocoso immediately, by typing the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;giocoso&lt;/pre&gt;

&lt;p&gt;
…which will trigger this display:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_25_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_25_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_25_.png?w=650&amp;amp;tok=1c84e1&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
It&amp;#039;s a bit bare-bones and you may have to manually fiddle with the size of the terminal window to get everything to display nicely, but Giocoso is, at least, running. Your next steps are to create a new music database; discover a bunch of music files to play; and start playing some music! Taking those steps one at a time therefore…
&lt;/p&gt;

&lt;p&gt;
If you tap &amp;#039;D&amp;#039; to get to the &lt;strong&gt;Database Management&lt;/strong&gt; menu and then &amp;#039;1&amp;#039; to &lt;strong&gt;Create a music database&lt;/strong&gt;, you&amp;#039;ll first be prompted for a name for the new database:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_101_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_101_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_101_.png?w=650&amp;amp;tok=6f1000&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You can supply any name at this point, but I suggest you keep it to a single, short word, as in the screenshot example. Once you submit a name, you&amp;#039;ll immediately be prompted to specify where music files can be found on disk:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_26_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_26_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_26_.png?w=650&amp;amp;tok=7200f2&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Your job is to navigate your way to wherever your music files are located. Mine happen to be stored in the Windows user&amp;#039;s Music folder:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_102_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_102_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_102_.png?w=650&amp;amp;tok=f6359e&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
…inside a sub-folder called &amp;#039;classical&amp;#039; and within additional sub-folders named after the initial letter of each composer&amp;#039;s first name. You&amp;#039;ll recall from Section 3 above, however, that the Linux environment sees the C: drive at &amp;#039;/mnt/c&amp;#039;, so my Windows path needs to be converted to /mnt/c/Users/hawen/Music/classical. I could just type that into the horizontal panel of the Giocoso folder selection screen or I could use the upper panel to navigate to that location: either method works equally well, so long as Giocoso ends up &amp;#039;inside&amp;#039; the folder, looking at the initial-letter sub-folders, as you see in the above screenshot.
&lt;/p&gt;

&lt;p&gt;
Click [OK] or press [Enter] when the correct path has been supplied and you&amp;#039;ll see Giocoso do this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_27_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_27_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_27_.png?w=650&amp;amp;tok=e3d8ca&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s Giocoso discovering FLAC files within the path supplied and, for each one, reading the internal metadata contents and populating its database with those details. Once that process completes (which can take many hours if your music collection consists of tens of thousands of FLACs), you can at last play music: just press &amp;#039;P&amp;#039; to get to the &amp;#039;Play Music&amp;#039; menu and then tap &amp;#039;1&amp;#039; to select the &amp;#039;Play music with defaults&amp;#039; option: Giocoso will randomly select something to play from the database of music you just created and the result should look like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_28_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_28_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_28_.png?w=650&amp;amp;tok=4413c7&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You&amp;#039;ll note that Ubuntu-in-Windows has zero difficulty displaying the album art for a FLAC …and you&amp;#039;ll have to take my word for it that my laptop&amp;#039;s speakers were full of music, sounding great, as intended! Giocoso on Windows (via Ubuntu) thus works perfectly.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.0 Installing Giocoso&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installing_giocoso&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;5741-12514&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;other_supported_distros&quot;&gt;5.0 Other Supported Distros&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
If you&amp;#039;d prefer not to use Ubuntu, you have various other distros that can run under Windows without difficulty and which are officially supported by Microsoft. You just open a command prompt with administrator privileges and issue commands such as:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wsl --install fedora
wsl --install debian&lt;/pre&gt;

&lt;p&gt;
or
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wsl --install archlinux&lt;/pre&gt;

&lt;p&gt;
As described earlier, each of these commands will trigger the download and installation of the necessary Linux environment files. You&amp;#039;ll be prompted to create a new Linux user/password combo, as described above for the Ubuntu environment. You should then perform a full system update, using your distro&amp;#039;s standard package management features. For Fedora, that would be:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo dnf update&lt;/pre&gt;

&lt;p&gt;
…whereas for Debian, it&amp;#039;s the slightly more convoluted:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&lt;/pre&gt;

&lt;p&gt;
You then just obtain the Giocoso installer script… but this is where things can get a bit interesting!
&lt;/p&gt;

&lt;p&gt;
On Fedora, for example, you&amp;#039;ll issue the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wget software.bbritten.com/gioinst&lt;/pre&gt;

&lt;p&gt;
…without any drama at all, but when you try and run that script with the command &lt;strong&gt;bash gioinst&lt;/strong&gt; this will happen:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_34_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_34_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_34_.png?w=650&amp;amp;tok=04429b&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s the Giocoso installer noticing that &lt;em&gt;ncurses&lt;/em&gt; is not a standard part of the Fedora-on-Windows installation. Without it, the installer cannot proceed. You&amp;#039;ll therefore need to install it manually:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo dnf install ncurses&lt;/pre&gt;

&lt;p&gt;
…and then try the &lt;strong&gt;bash gioinst&lt;/strong&gt; command once more: this time, the installer will function entirely as documented above. You can then launch Giocoso, create a music database, point it to your FLAC files, and start playing music as previously described: music playback and display of album artwork both work perfectly.
&lt;/p&gt;

&lt;p&gt;
Using Debian poses a different set of issues, however:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_53_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_53_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_53_.png?w=650&amp;amp;tok=34b3a9&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Here you&amp;#039;ll see me in my shiny new and updated Debian environment trying to download the Giocoso installer script with a &lt;strong&gt;wget&lt;/strong&gt; command: unfortunately, wget is not a standard part of the Debian installation, so the attempt to download fails. It&amp;#039;s therefore necessary to manually download the utility with the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo apt install wget&lt;/pre&gt;

&lt;p&gt;
Once that&amp;#039;s installed, the &lt;strong&gt;bash gioinst&lt;/strong&gt; command will work perfectly: music &lt;em&gt;sounds&lt;/em&gt; correctly and album art will be &lt;em&gt;displayed&lt;/em&gt; correctly.
&lt;/p&gt;

&lt;p&gt;
The Arch distro is rather different than anything discussed hitherto! It&amp;#039;s extremely minimal, to the point that there isn&amp;#039;t even a prompt to create a non-root user. You probably &lt;em&gt;should&lt;/em&gt; create such a user, but that&amp;#039;s outside of scope for this article. For my purposes, the point is that you install and run Giocoso as root… but even that is not straightforward. For a start, you need to manually update, then install wget and sudo before you can successfully run the Giocoso installer: &lt;strong&gt;pacman -Syu&lt;/strong&gt; updates; &lt;strong&gt;pacman -S wget sudo&lt;/strong&gt; installs the necessary prerequisites. After that, &lt;strong&gt;wget software.bbritten.com/gioinst&lt;/strong&gt; and &lt;strong&gt;bash gioinst&lt;/strong&gt; will work correctly. Unfortunately, after you&amp;#039;ve created a database and discovered FLAC music files, though they will &lt;em&gt;play&lt;/em&gt; correctly, album art will not &lt;em&gt;display&lt;/em&gt; correctly, unless you configure Giocoso to use a pop-out window to do so. I&amp;#039;ll discuss a possible workaround for this below, when I discuss using non-Microsoft-supported distros.
&lt;/p&gt;

&lt;p&gt;
Apart from the need to install either &lt;em&gt;ncurses&lt;/em&gt; or &lt;em&gt;wget&lt;/em&gt; manually before the Giocoso installer can be launched successfully, therefore, there&amp;#039;s little difference between running Giocoso running on Windows via Ubuntu, Debian or Fedora. The choice of distro to host the Giocoso installation is therefore largely immaterial. Arch is &lt;em&gt;suit generis&lt;/em&gt; however… and I can&amp;#039;t honestly recommend trying to run Giocoso on that distro within Windows.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;5.0 Other Supported Distros&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;other_supported_distros&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;12515-16373&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;non-suported_distros&quot;&gt;6.0 Non-Suported Distros&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
I&amp;#039;ll conclude this description of getting Giocoso running under Windows by mentioning that although there aren&amp;#039;t many distros that are &lt;em&gt;officially&lt;/em&gt; supported by Microsoft for running in a WSL2 environment, WSL2 can actually run pretty much &lt;em&gt;any&lt;/em&gt; Linux distro, with varying degrees of awkwardness. Sometimes, distros provide specially-packaged versions of their distro to make life fairly easy (think: &lt;a href=&quot;https://github.com/VPraharsha03/DevuanWSL/releases&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/VPraharsha03/DevuanWSL/releases&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Devuan&lt;/a&gt; or &lt;a href=&quot;https://github.com/sileshn/ManjaroWSL2/releases&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/sileshn/ManjaroWSL2/releases&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Manjaro&lt;/a&gt;). For other distros, you&amp;#039;d have to construct your own converted distro &amp;#039;bundle&amp;#039; and import it to the WSL environment: I won&amp;#039;t document that approach here, but you essentially have to extract the root file system from the standard ISO and turn it into a tarball, which can then be imported into WSL. There are guides on how to do this elsewhere on the Internet.
&lt;/p&gt;

&lt;p&gt;
For now, I&amp;#039;ll document how I got Manjaro to run under Windows, and sort-of got Giocoso running on that!
&lt;/p&gt;

&lt;p&gt;
First, obtain your Manjaro-on-WSL software: I&amp;#039;ve &lt;a href=&quot;https://github.com/sileshn/ManjaroWSL2/releases&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/sileshn/ManjaroWSL2/releases&quot; rel=&quot;ugc nofollow noopener&quot;&gt;already pointed you to the website&lt;/a&gt; I used for that: at the time of writing, the latest release was called “ManjaroWSL2-20251201” and within that section of the site I downloaded the ManjaroWSL2.zip file for that release. Once downloaded, I right-clicked the file and selected the &amp;#039;Extract All…&amp;#039; menu option. That creates a “ManjaroWSL2” folder, within which you&amp;#039;ll find an item called, simply, “Manjaro”. It should be labelled as an &amp;#039;Application&amp;#039; in one of the columns visible in Windows File Manager. Double-click that item and this happens:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_69_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_69_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_69_.png?w=650&amp;amp;tok=7f2ad4&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Windows begins to import the new distro and install it &amp;#039;within&amp;#039; the WSL environment. The process is relatively quick and ends like so:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_70_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_70_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_70_.png?w=650&amp;amp;tok=8ab696&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Press [Enter] at this point and the terminal window will close. If you were to look at your Windows Start menu at this point, you&amp;#039;d probably see something like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_71_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_71_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_71_.png?w=650&amp;amp;tok=c0a880&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The existence of a Manjaro icon in the &amp;#039;Recommended&amp;#039; section of the menu here tells you that Manjaro has indeed been installed. It&amp;#039;s not quite ready for use, though: click that icon to launch it and you&amp;#039;ll see this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_72_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_72_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_72_.png?w=650&amp;amp;tok=4a693c&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s the new Manjaro getting itself provisioned properly. Part of that process is this prompt:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_73_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_73_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_73_.png?w=650&amp;amp;tok=d9a313&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You don&amp;#039;t &lt;em&gt;have&lt;/em&gt; to create a non-root user, but it&amp;#039;s strongly recommended to do so. Follow the prompts and supply a new password for the new user when asked; eventually this will happen:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_75_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_75_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_75_.png?w=650&amp;amp;tok=14258f&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The distro will reboot itself and when it comes back, you&amp;#039;ll be able to log in as the new user. You can now do a standard Giocoso install: start by bringing your Manjaro distro fully up to date with the command:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo pacman -Syu&lt;/pre&gt;

&lt;p&gt;
Once that&amp;#039;s done, obtain the Giocoso installer:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;wget software.bbritten.com/gioinst&lt;/pre&gt;

&lt;p&gt;
…and then launch it by typing:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;bash gioinst
 &lt;/pre&gt;

&lt;p&gt;
The standard Giocoso install process will then run its course without incident. Giocoso itself can then be launched with the simple command. &lt;strong&gt;giocoso&lt;/strong&gt;. You then use Giocoso in an entirely standard fashion: create a music database, discover music files, go to the Play Music menu and start playing:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_94_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_94_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_94_.png?w=650&amp;amp;tok=5225d3&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
It is at this point that you&amp;#039;ll discover that &amp;#039;non-standard&amp;#039; distros have non-standard quirks! In this case, you can tell that music is playing fine: the counter in the top right of the Giocoso screen is saying we&amp;#039;re six seconds into playing a 51 minute recording, for example. But you&amp;#039;ll notice that there&amp;#039;s no album art: that&amp;#039;s because Manjaro-on-WSL&amp;#039;s default terminal is not configured to display &amp;#039;sixel graphics&amp;#039;, Giocoso&amp;#039;s default mechanism for displaying graphics within a terminal.
&lt;/p&gt;

&lt;p&gt;
Various workarounds for this problem are available. First, you could use the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt; to tell Giocoso (on the last page of options) to &amp;#039;Display album art in its own window&amp;#039;:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_99_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_99_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_99_.png?w=650&amp;amp;tok=e1a0b7&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You can also adjust the &amp;#039;Size of album art when displayed&amp;#039; parameter to make that standalone album art window bigger or smaller, as needed. If you insist on seeing album art &lt;em&gt;within&lt;/em&gt; the Giocoso terminal window, however, you&amp;#039;re going to have to jump through some hoops. First, install the &lt;strong&gt;Konsole&lt;/strong&gt; terminal emulator:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo pacman -S konsole&lt;/pre&gt;

&lt;p&gt;
You can then launch konsole from within the main Manjaro terminal:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_103_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_103_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_103_.png?w=650&amp;amp;tok=f714a9&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You&amp;#039;ll note that the window is tiny and really not much use for anything. To fix that, click the &amp;#039;hamburger menu&amp;#039; (three horizontal lines) at the top right of the konsole window. Select &lt;em&gt;settings → Configure Konsole…&lt;/em&gt;. On the General options, &lt;strong&gt;uncheck&lt;/strong&gt; the option to &amp;#039;Remember window size&amp;#039;. Switch to the &amp;#039;Profiles&amp;#039; option. Click &lt;em&gt;New&lt;/em&gt;, then create a new profile that sets the initial terminal size to 103 columns and 28 rows. Click Appearance, and select &amp;#039;Green on Black&amp;#039;. Click on the [Choose] button to alter the font: select Luxi Mono at 14pt. Click OK. On the list of profiles, select the profile you just created and click the &amp;#039;Set as Default&amp;#039; button. Click [OK] once more. Now you can close the existing konsole session and start a new one. The new konsole window should open looking much more usable:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_104_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_104_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_104_.png?w=650&amp;amp;tok=df3ddd&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Launch Giocoso from within that konsole window and you should see Giocoso looking perfectly normal… but it still won&amp;#039;t be able to display album art properly just yet. For that, visit the &lt;strong&gt;Administration&lt;/strong&gt; menu, Option 2 and switch on the option to &amp;#039;Use Kitty Graphics for in-terminal display&amp;#039;. Kitty is an alternative in-terminal graphics protocol …and konsole understands how to use it. When you start playing recordings, the result should be acceptable:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_105_.png&quot; class=&quot;media&quot; title=&quot;software:giocoso:win11:screenshot_105_.png&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/win11/screenshot_105_.png?w=650&amp;amp;tok=975912&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
As you can see, everything is finally behaving normally… though having to use a terminal to launch a terminal to launch a program is not exactly ideal. To fix &lt;em&gt;that&lt;/em&gt; inconvenience, you might consider editing your $HOME/.bashrc to contain the line:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;alias giocoso=&amp;quot;konsole -e giocoso3.sh&amp;quot;&lt;/pre&gt;

&lt;p&gt;
Save that file and then get its modified contents applied by typing:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;. ./.bashrc&lt;/pre&gt;

&lt;p&gt;
(That&amp;#039;s dot-space-dot-slash-dot-bashrc). You can now just type the command “giocoso” and konsole will be launched for you, with Giocoso already running within it. It&amp;#039;s a slight improvement on doing it all manually, I think!
&lt;/p&gt;

&lt;p&gt;
The short version of this section is, therefore, that of course you can run unsupported distros under WSL, which means you can run Giocoso on them, too. However, you are likely to run into visual presentation issues when Giocoso runs that don&amp;#039;t arise in the more &amp;#039;standard&amp;#039; distros. With a little bit of effort, they can be worked around, so that Giocoso still runs well on Windows… but expect to encounter problems that require workarounds! My personal recommendation is that, given you simply want Giocoso to work well on Windows, stick to a mainstream distro as discussed above in Sections 3, 4 and 5.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;6.0 Non-Suported Distros&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;non-suported_distros&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;16374-23846&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;conclusion&quot;&gt;7.0 Conclusion&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Summing this all up, therefore: Giocoso doesn&amp;#039;t really run on Windows at all: it always runs on Linux. However, the Windows Subsystem for Linux allows you to run Linux on Windows in a practically invisible manner… and that means Giocoso can run, effectively, on Windows after all. WSL installation is straightforward, installing one of the supported distros is easy, and Giocoso installation is mostly straightforward in all cases. Non-mainstream distros are also a possibility but I wouldn&amp;#039;t personally recommend them.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; |
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;7.0 Conclusion&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;conclusion&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;23847-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/9/93e0f34e326bd20f1bf56b8c17d87c41.xhtml used --&gt;
</description>
    </item>
</rdf:RDF>
