cTune v1.3 released

Es
cTune C99 Project Releases

It's been a while since the last update so there are a couple of goodies in that one to make up for it along with some bug squashing...

1. UI

Mouse click resolution option
Fig.1 Mouse click delay

There is now the ability to change the click delay resolution (max time between clicks for it to be registered). It's been added mostly as a workaround for those with less twitchy fingers that didn't see their double clicks registered at all by ncurse.

The setting can be found in the Options menu.

2. Plugins

Plugin options
Fig.2 Plugin options
Recording path
Fig.3 Recording path

2.1 Recording to a file

A special plugin type was added for doing stream recording to file. A pcm (wave) as well as a mp3 plugin now feature in ctune but it's still experimental. The output folder is configurable in the options menu and the config file (see below).

IO::Recording::Path="/home/USER/Music/ctune/"

2.2 Pipewire

It's been in the pipeline since v1.2.0 but it's finally there! Audio output to native pipewire is now supported.

3. Bugs/Code improvements

3.1 Bug: crash with unresponsive RadioBrowser server

In the network module, a call is first made to the RadioBrowser DNS to get a list of available servers. When the currently randomly selected one is not responsive it crashed the app. The code is now a bit more robust and retries the query on the next server in the list until it is exhausted and then fails gracefully with an error message in the UI. The network code was also change to use the libcurl library and now takes the return HTTP code into account.

3.2 Bug: crash on listing categories from RadioBrowser

When an a call from the RadioBrowser API returns a category with an unexpected empty name it created an issue. The internal JSON parser code which packs the json data returned from the the API call into DTOs has been amended to deal with empty or NULL strings.

3.3 Bug: crash on resize

This issue was caused by a couple of backend calls to callback functions that updated the UI as a side-effect. These could operate on a select number of UI variables in undefined state during a resize. A thread-safe event queue specifically for communicating events between the backend threads and the UI is now in place guaranteeing cleaner asynchronous communication of events between the two.

3.4 Bug: PulseAudio issues with newer versions of the library API

The PulseAudio plugin basically stopped working properly after an update as it was using a 'push' paradigm for the audio buffer. With some refactoring and the inclusion of a CircularBuffer, a 'pull' paradigm is now used instead bringing the plugin inline with the recommended pulseaudio client implementation. The pipewire-pulse plugin also works again now.

3.5 QoL improvements/Minor bugs

  • Added timeout option to the VLC plugin which now obeys the value set in the configuration,
  • Added a missing volume function to sndio output plugin API,
  • Much needed CMakeList.txt overhaul breaking down plugins and the logger into their own sub-projects,
  • And the usual refactoring, minor bug squashing and code cleaning...

4. Final words

As always, the update is available in Arch's AUR. Otherwise, it's a manual build/install.

Rock on!

Github Repository