Upcoming update

Hi everyone, thanks for checking in!

As most of you are aware, Colibri is currently undergoing a really heavy rewrite: a new, modern architecture was made to better accommodate the new features and upcoming operating systems while greatly increasing the stability. These are grandiose words, but in reality it all means that since starting Colibri I’ve learned constantly and am putting in my best effort to reflect on these past experiences and knowledge with this update.

At first I constantly updated the FAQ section to let people know that I am still working on it and I haven’t abandoned the project. It is understandable as the latest update happened many months in the past. I’d like to take the time and emphasise it once more: Colibri is a labour of love, a passion project and is done by solely me in my free time – although I’m devoting it way more energy and time than some would consider healthy, I firmly believe that the end result will most certainly justify this. At the end of the day, I also use it on a day to day basis and it also bothers me that the update is taking this long.

Why is it taking this long? Apart from it being nearly as much work as writing a completely new version of Colibri I also did the mistake of biting off more than I can chew in a feasible amount of time. I did identify a handful of bugs related to the architecture and the way I wrote Colibri back in the day and instead of hacking around (and possibly introducing new bugs) I thought to have a clean slate with more future-proofing in mind. This, as a kind fellow pointed out, is also a “siren’s call” as more often than not it happens that one set of bugs are fixed and a new set is introduced instead. What can I do to prevent this? Doing my absolute best from start to finish and use all the tools available to me to ensure such scenario does not come to pass.

But enough with the words as writing this takes time away from developing the update, so without further ado, here are the status updates from oldest to newest, scroll to the bottom for the latest!

TL;DR: I’m still working on the update, see the latest status update below.

01/05/2020: it is a massive rewrite and needs lot of testing, adjustments and making sure that it will remain as compatible with your current settings as possible.

20/05/2020: still heavily working on it, have uncovered some additional sample rate switching issues, mostly affecting pre-load. Fixed a handful of bugs relating to Sandbox and Network Stream support. I still estimate a good few weeks as I would like to release an update that is stable. Currently, I’m at around 9,000 lines of code changes and counting.

04/06/2020: going strong with the rewrite, uncovered a latency issue with external DACs – have an experimental solution to it, just need to stabilize it. Also had to write a wrapper for CoreAudio.

25/06/2020: one major issue Colibri had with audio clicking on some DACs during song switching and pause is now fixed, the CoreAudio wrapper seems to eliminate the hickup frequency switching caused under a lot of circumstances.

05/07/2020: fixing smaller user-reported issues and doing a bit of an overhaul for the Settings view. I aim to release it as fast as possible but at the same time I’d also like to be sure that it was worth the wait, so please bear with me!

31/07/2020: I’m not on vacation and am actively working on the update. I’ve finally found why some of you experienced the inability of your Mac to sleep while Colibri is running, even if music isn’t playing. I’ve ended up writing a tool to help test my theory and it might end up in the AppStore after a bit of polish. So yes, work is being made – your patience is much appreciated!

13/08/2020: Checking the reported crashes so far and making sure they do not come up after the new update – so far so good. Rest assured, I’m working on it as much as I can.

24/08/2020: Volume changes are now properly shown in the title bar – it supersedes the “gray capsule-looking notification bar” that appears at the bottom of Colibri’s window. Right now I’m putting on the finishing touches to some RAM-related new features – a fresh take on a somewhat usual and heavy-requested feature. I really hope you’ll like it!

27/09/2020: Still working on the update, had a somewhat new idea regarding the feature I’m working on. I think I now also know why I haven’t seen this implemented in a lot of players. Stay tuned, I’m not quitting any time soon!

02/11/2020: Now Colibri can properly extract cover images from DSF files and other exotic formats, before resorting to supplied images in the songs’ folder. Fixed permanent pause and output switching bugs as well and the annoying Sandbox window for album art loading is now officially gone. There are still a great amount of work left to be done so bear with me, I’m sinking all my available free time into it to make your wait worthwhile.

01/12/2020: Still working on the update! I’ve got a two bug reports which are now also fixed. Also to the best I can test, the popping sound during pause/unpause of DSD streams is now fixed along with other clicks that could be heard while using an external DAC. I’ve also added extra methods to better accomodate AirPods and AirPods Pro compatibility – sadly, the automatic mic switching can still cause an initial quality drop when starting playback (as a result of the Bluetooth standard).

05/12/2020: The OS X 10.10.5 display bug has been fixed and will be part of this update, hang tight!

Upcoming update – DSD / DAC / Sample Rate Switching fix

Hi there and thank you for reading! Here is a short update on what’s coming: small fixes, additions, enhancements and a very critical bugfix are what this new version will bring to the table.

Automatic Sample Rate Switching

It has been brought to my attention that Colibri does not do sample rate / frequency switching automatically as expected – mainly with external DAC devices. The Mac AppStore reviews were somewhat descriptive of the issue, but with no means to effectively reproduce the behavior there was little hope to pinpoint the actual cause of the issue. Recently I’ve received a highly detailed and descriptive scenario (thanks Katherine!) which helped me understand the nature of the problem – to which the solution is now complete.

CoreAudio is the layer provided by Apple to handle the audio hardware under macOS and it works flawlessly – for the most part, if you are using the audio framework provided by the system. As you could have guessed, this isn’t the case with Colibri – we are using BASS as the audio engine, which in turn interfaces with CoreAudio to produce audio output. The issue here is that BASS under macOS has no way to determine what is the maximum accepted frequency of the currently selected audio output device – and this imposes a problem.

Having a mixed playlist of songs with different sample rates means that either:

  1. you try and initialize the audio output with the maximum available frequency by trial and error (ouch!)
  2. re-negotiate sample rates every time before the playback starts, if the sample rate of the upcoming song differs

Colibri does the second option as of the current build, which was the result of a complete rewrite of the playback/preload logic: frequency negotiation happens only when it needs to and all newly loaded songs are quickly analyzed for accurate sample rate information. The tests have been promising so far: opening Audio MIDI Setup clearly shows that Colibri is doing the sample rate switching automatically.

 Automatic Sample Rate switching bug is finally fixed

Currently what needs to be fixed are the way Colibri deals with Bluetooth headphones – some of what I’ve tried do not support anything greater than 44.1 kHz and this poses a problem: every time a higher resolution song is sent to them they simply revert back to 8 kHz and stay that way – which, again, isn’t what I’d call ideal. There already are a few ways to deal with this – we’ll see which one of them ends up being the most reliable.

[Ninja edit: since publishing this I’ve managed to extract accurate sample rate data from CoreAudio regarding wireless headphones as well, which now eliminates the “stuck at 8 kHz problem”]

Menu Bar Song Display

Due to popular request and again, some very detailed suggestion (thanks Jan!) Colibri will have its’ Menu Bar icon beefed up a little: customizable song information display will be available in the next version, here’s a sneak peek:

Song Info in the Menu Bar

ZXTune

Another recently requested feature (thanks Vasyl!) was the addition of the BASSZXTUNE library, in order for Colibri to support a huge amount of chiptune tracker formats. Sadly, the library is as big as Colibri itself and while it is active, some delay can happen when the playback of a non-chiptune music is started – for this reason, ZXTune is present as a switchable option within Settings as the freedom of choice should be given to the user. This way, people who otherwise don’t intend to listen to chiptune tracks can disable ZXTune to save resources.

Release Date

Fixes and improvements are coming along at a steady pace, which means that the update is likely to be out during September.

Upcoming update

Hello and thanks for reading this!

There has been quite some time since the last update of Colibri and I’ve felt that I should put out a quick note on how things are progressing chugging along.

Currently I’ve got my hands full with the exam period over at the university I’m attending (Computer Science for those wondering) because of which little progress has been made since the previous release – most notably a few bugs have been fixed and as I’m using the preview build on a daily basis for extended periods of time it hopefully means that the next update will be more bulletproof.

The fixes, feature requests you have all sent me and the additions I’ve promised are all still part of the roadmap and in fact, the list has been growing longer ever since as I stumble upon things that need improvement or just realize that some other functionality would be beneficial for Colibri to have. Keeping it bloat free is still top-priority and one of the main reasons why new things are added at a slow pace.

It has been asked before – and lately even by folks from the music biz – whether I’m planning to extend Colibri’s compatibility downwards so that people using earlier versions of macOS / OS X would be able to use Colibri. Then answer is yes, I’m game and am going to investigate what parts of Colibri need to be rewritten to achieve this.

I’ve since gotten hold of an AirPlay test device, so all those who are waiting for that to happen: it’s still on the roadmap.

It comes up quite often lately so I’ll say this again here: Colibri will remain DRM-free and I’m never adding limitations / in-app purchases or the likes to it, ever. The very same applies to the new trend of selling apps via subscription models – that is one feature that’s kept off of the roadmap.

The “Buy it once – free updates for a lifetime” tagline is here to stay, ladies and djentlemen.

Happy Listening!

Colibri 1.8.8 – BS2B and Equalizer

A few minutes ago Apple has approved the latest version of Colibri, so it should be updating itself automatically through Mac AppStore if you have autoupdates enabled – if not, consider doing it via System Preferences – App Store. In many aspects, this update has been long time coming as the most frequently requested features in past few months have been BS2B support (read more about it here if interested) and a multi-band Equalizer, among other things.

Colibri has a modular infrastructure while BASS has its’ own plugin ecosystem which translates to a pretty flexible set of options regarding the addition of extensions to the signal chain – so I thought integrating the BS2B library will be a breeze. It turned out there were quite a couple of things under the hood that needed to be reworked in order for the BS2B module to start doing its’ thing – not to mention shaping it in such a way that it would play nicely with Colibri’s memory conserving policies.

Having read through many forum posts it was clear to me that people who use BS2B on a daily basis are not quite satisfied with the solutions that are provided by other players, the main complaint being that there simply isn’t a one size fits all setting – different songs need different values, not to mention the inability to store different default values to different output devices. That’s the main reason why I pushed the release from the end of February to today: Colibri as of now is able to handle BS2B profiles on a per song basis and it is also able to set different default BS2B profiles to audio output devices.

BS2B Settings for Colibri
BS2B Options – per song, per device!

The same thing happened with the Equalizer – having taken extra steps in BS2B support meant that I couldn’t just leave the Equalizer with one global option, thus the per song profile switching was born for this feature as well. It would have been extra awesome to use sliders in the Right/Control-click menu of the song, but sadly macOS currently does not support stuffing sliders into the menu – no matter how many tricks I’ve pulled to make it happen.

Regarding Finder / External Sources loading, I’ve implemented the missing features that were requested not so long ago in AppStore reviews, namely the option of loading all files from a selected directory when opening only one song (as some audio players did so in the past) – plays nicely with the other two options of providing a fresh start: clearing the playlist on exit or on song load. It is now also possible to switch between instant playback or silent enqueue on song load.

Playlist Settings for Colibri
Colibri plays better with Finder

Album art loading has been extended, more file types are analyzed and should that bring no visible results, then Colibri tries to display the first readable image in the songs’ directory. Also, try double clicking on the album art in the main window!

Album Cover Art popover image display for Colibri
Album Art popover on double-click

Status bar modifications include the removal of time elapsed – as it is now positioned at the title bar of the main window, with multiple display options to choose from. Taking its’ space is the Number of songs and total time statistical info, which is a new option available from Settings – Display.

The Behavior section got a bit of a rehash too in the form of ReplayGain support, configurable Pre-cache trigger placement and RAM Audio Cache settings with information popover help where necessary.

Colibri Mac Audio Player Settings Behavior
Added RAM cache, ReplayGain and Pre-cache trigger time

Last but not least, the Output section now has an option for changing the DSD Data Sending method – it is highly advisable to leave it on ‘Auto’ if you do not have issues with how Colibri talks to your DAC.

Colibri Mac Lossless Audio Player Settings Output
DSD signal output options (Auto/DoP/RAW)

The changelog has more details on the bugfixes and the Frequently Asked Questions section has been updated to reflect the changes as well!

I did look into crafting a smarter playlist than the current one we have as I’ve promised in the previous blog post – but all of the approaches I’ve took were pretty much unusable as dynamic column sizing is something the does not play well with exotic song titles. I’ve still got a few ideas I will be trying  out, so a smarter playlist is still under development and – just as in the case of AirPlay – it is coming at a later point in time.

That’s it for now, take care and happy listening!

Colibri 1.8.6 is now live!

UPDATE: 1.8.6 contains an urgent bugfix, below you can read what is new in 1.8.5

As of a few moments ago Colibri has been updated to version 1.8.5 with the update prompts appearing shortly for everyone through the Mac App Store application if automatic updates are disabled on your system as part of the somewhat steadier (and albeit slower) release cycle that I’ve adopted recently – this concludes the Winter Update.

This patch has been long coming in a sense that a few critical (and nasty) bugs were finally fixed and the frequently requested MOD/MIDI support has been implemented  – you can read the full changelog here.

At the end of the previous post I’ve mentioned a customization option that I haven’t seen in any other player so far on macOS and that turned out to be the per song adjustment of sample mixing in the case of MOD music files, whereas in the case of MIDI files it is the per song SoundFont attachment – all with realtime bank switching and quasi uninterrupted playback as the playhead maintains the current position within the song.

MOD sample mixing and MIDI SoundFont assignment in Colibri – per song!

Another small yet useful addition is the ability to control Colibri from the Dock – right/alt-click on its’ icon and you will be treated to a slightly improved menu that allows basic control of the playback function, along with showing the currently playing song’s title, artist and album:

Right/Alt-click on the Dock to bring up an improved menu (vaporwave/future funk music is not included)

Just after submitting the finalized update to Apple for review I’ve got an email regarding a crash that happened just as Colibri would start up: it turned out to be one of those bugs that I had been chasing around for a while now but never managed to find the correct environment to reproduce it. I’ve instantly pulled back the update to address the issue which in the end translates to less Sandbox Permission asking dialog boxes popping up when you add new songs.

For those of you trusting Colibri by allowing top level access to your music collection, this issue shouldn’t really have come up as it affected the negotiation part of handling different permission bookmarks for folders and songs simultaneously.

Once again, thank you for your continued support, it truly means a lot! The great majority of feature requests via emails/reviews/comments I’ve received so far have been added to the roadmap and will be implemented in the future.

What’s high on the TO-DO list? Currently, the equalizer and a better playlist so please look forward to those in the near future.

That’s it for now, take care and happy listening!

Winter update is just around the corner

Hello and welcome to the first of hopefully many posts about my misadventures in developing (and bug fixing) Colibri – hope you enjoy your stay!

Some time ago I’ve made the decision to switch to a slower release cycle in order to have a bit more time to polish new features and enhancements before they are released in the form of an update and also to not annoy my users with constant updates as I’ve heard that most people find frequent updates inconvenient.

Doing a quick search in the Mac AppStore lead me to believe that the current selection of MIDI players is scarce at best – which brings us to the main element of the upcoming update: as the BASS engine has native support for both MOD and MIDI music (via plugin) it was a no-brainer to teach our bird how to chirp glorious video game music and Nokia ringtones aka MOD/MIDI music.

MIDI SoundFont selection

Having entangled myself in a series of doubts regarding the legality of bundling MIDI SoundFonts with Colibri I’ve come to the conclusion that the best way to avoid angering the reviewers at Apple (and copyright holders of said soundfonts in general) is to ship the next update with a free, publicly  available soundfont as I’m sure most of you would like to try your MIDI files right away – user supplied SoundFonts are supported and are strongly encouraged!

There’s also a neat new feature currently entering the finalization phase that introduces a new customization convenience option for playing back MIDI files that I personally haven’t seen before in any other player.

That’s about it for now, happy listening!