Author: Gábor Hargitai
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:
- you try and initialize the audio output with the maximum available frequency by trial and error (ouch!)
- 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.
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:
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.9 Changelog
ENHANCEMENTS
- Added missing DSD file type associations for Finder
- Added an on/off switch for the Equalizer as for some reason I totally forgot to include it.
- Added a new default DSD Data Sending method that should play even nicer with your DACs: ‘Native with fallback to Auto’
- Unplayable / gone missing songs are now marked in red and are not removed from the playlist
- Such unplayable files will be cleared from being red if the path to them becomes available/reachable
- Enhanced the Sandbox handling to better differentiate between ‘unreachable’ and ‘reachable, but non-existent’ file paths
- Reworked DSD data signal chain handling to make Colibri more crash-proof in terms of selecting DSD sending methods not supported by the DAC
- Colibri can now figure out what to do with Cue Sheets that have alarmingly disorganized content
BUGS FIXED IN THIS UPDATE
- Sandbox permission dialog would constantly pop-up if a song went missing before playback
- Moving multiple songs around in the playlist would confuse Colibri
- Pressing the stop button wouldn’t always instantly stop the playback
- Colibri would sometimes highlight the wrong song as currently playing in the playlist
- Colibri would mix up remembered songs in the playlist if some of them disappeared before launch
- Colibri would crash when some songs are reordered during playback
- Fatal crash would occur if multiple songs went missing during playback
- Playlist songs would not accept the reordering properly during playback
- Playlist would become disorganized if a particular song type is moved during playback
- Colibri wouldn’t be able to come up with a random song order and would just grind to a halt
- Colibri would crash upon loading seriously non-conforming Cue Sheets
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.
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.
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!
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.
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.
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.8 Changelog
BS2B
- Colibri now has BS2B support (SourceForge) with per song and per audio device automatic profile switching
- Added options in Menu -> Colibri for resetting BS2B device and profile data
EQUALIZER
- Added 10-band Peaking Equalizer support with per song automatic profiles switching
REPLAYGAIN
- Added support for ReplayGain either from audio file metadata or Cue Sheet
ENHANCEMENTS
- Album Art in Colibri’s main window is now clickable, double click on it to see the cover image in a popover window!
- Album Art loading has been extended: the first readable jpg / jpeg / png is loaded if no suitable files is found
- Reorganized the Playlist, Display and Behavior sections in Settings
- Added option to load all files of a folder when opening one of them in Finder
- Added option of selecting the default behavior for adding songs from Finder: play at once or enqueue silently
- Added option of clearing the playlist on exit
- Status bar now has a ‘Stat’ section which shows the total number and total time of the tracks in the playlist
- Moved the time elapsed/remaining from the Status bar to the main window title as a selectable option
- Added option of setting the main window title: switch between time combinations and branding
- Added option of setting Pre-cache kickoff time (5/10/15 seconds before current song ends)
- Added option of setting the amount of RAM used for audio cache/buffering
- Added option of setting the DSD data sending method (Auto/DoP/RAW)
- Playlist now closes ‘upwards’ instead of moving the player window downwards
- The folder crawling algorithm has been given an extensive makeover
- Cue Sheet processing has been rewritten to have better error correction
- Added menu entries for seeking forward and backward within Menu -> Controls
- Added hotkeys for increasing and decresing volume by 10%: Control + Up/Down
- Added menu entries for increasing and decreasing volume by 10%
- Improved memory management of Adaptive Read-ahead
- Colibri 1.8.8 has gone through a core rewrite for better multi-thread support
- Added ‘Play song now’ option to Right-click/Control-click menu of Playlist
- Improved metadata support for APE and ALAC files when loaded from Cue Sheets
BUGS FIXED IN COLIBRI 1.8.8
- ‘Play currently selected’ would remain unclickable in Menu -> Controls
- Malformed file name within a Cue Sheet could cause Colibri to crash on song change
- Malformed Cue Sheets would cause Colibri to miscalculate the song lengths
- Cue Sheets with additional comments would confuse Colibri
- Looping WAVE files forever with a certain header type could cause a memory leak
- Unreadable files ended up in playlist by loading them via the ‘Plus sign’ icon or File -> Open
- Numerous Sandbox handling errors
- .log files would end up in the playlist
- Pressing ‘Stop’ wouldn’t always show the correct placeholder album art image
- Clear playlist on loading from Finder would only work once per session
- Adding multiple songs from Finder wouldn’t always start the playback from the first new song
- Playlist loading would sometimes fail to load files properly
- Playlist would have a dark background in Light mode if started with an empty playlist
Colibri 1.8.6 Changelog
Version 1.8.6 is an urgent hotfix that addresses an issue with Colibri crashing while loading Folders containing multiple subfolders, below you can read what’s new since 1.8.5:
MOD MUSIC SUPPORT
- Colibri can now play all formats of MOD music that the BASS engine supports:
- Media Foundation (MF)
- Impulse Tracker
- ProTracker
- FastTracker 2
- MO3
- MultiTracker
- ScreamTracker 3
- Two sample mixing options are available for MOD music: sinc interpolated and non-interpolated playback
- The default sample mixing can be adjusted within Settings -> MOD
- It is also possible to set the sample mixing on a per song basis via Right/Alt-clicking on the song in the playlist
- Switching between the two interpolation methods is done on-the-fly while playback is running making it easier to choose
- Infinite MOD looping instructions are supported and can be turned on within Settings -> MOD
MIDI MUSIC SUPPORT
- Colibri can now chirp all the MIDI formats that are supported by the BASS engine
- A free SoundFont is included with Colibri and is set as the default playback SoundFont
- Import your SoundFonts at Settings -> MIDI and set the best sounding one to be the default
- SoundFonts can also be applied on a per song basis: Right/Alt-click on a MIDI song in the playlist and assign one of the available SoundFonts to it – switching is instant and done realtime (preserving the playhead position) making it easy to figure out which SoundFont sounds better.
ENHANCEMENTS
- Seeking forwards/backwards 5 seconds within the current song is now possible with the keyboard arrow keys
- The Right/Alt-click menu of The Dock icon has just leveled up! It now displays a bit of song info (title/artist/album name) and also enables basic control of Colibri.
- Purge playlist when opening songs from Finder: Colibri will start with a completely empty playlist when songs are added from an external source (like Finder) if this new switchable option is turned on within Settings -> Behavior – it is off by default as it removes all previously added songs from the playlist.
- When a song is added from Finder (or any external source) then it becomes selected in the playlist – when adding multiple songs, the first one will be highlighted
BUGS FIXED IN THIS UPDATE
- Pressing return twice would cause Colibri to crash
- Random loop mode would not always work after startup
- Random mode would fail to work properly if the preloaded song is removed just before playback
- Selecting and moving multiple songs in the playlist would cause them to become reversly ordered
- Playlist cursor would lose focus after starting playback/pressing next or previous
- Playlist columns would not properly restore their previous state
- Pressing media keys rapidly would cause Colibri to eat up a huge amount RAM, only to release it after a song change
- Removing multiple highlighted songs via the context menu would not remove the song it was invoked (“clicked on”) from
- Missing file type associations for supported types have been added
- Tooltip labels would remain visible “floating” even after hiding Colibri’s window
- macOS Notification Center wouldn’t always show the corresponding album art
- Fixed a critical bug within Sandbox permission handling that affected multiple parts of Colibri from starting up to album art loading
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.
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:
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.
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!
Colibri 1.8.1 Changelog
Album art support has been extended
- all supported audio files with proper ID3 tags and/or iTunes metadata will have their album artwork shown
- including, but not limited to: ALAC, AAC, M4A and MP3 files
Colibri has a brand-new CUE sheet reading engine
- all file encoding types readable by macOS are now supported (UTF8/UTF16/Unicode/Shift-JIS and more)
- further enhanced data separation detection
Enhanced multithreading for Colibri’s internals
- playback has been rewritten to use asynchronous read-ahead
- reduced lag/stuttering during network storage/high-latency playback
- reduced playback lag/stuttering when your computer is under stress (high CPU load)
Sound Output settings
- Selected output is properly saved and loaded
- If the saved device is absent when Colibri is started the the default output will be used
- The frequency allowed by CoreAudio is now visible under the Output select box
Exclusive/Hog mode
- Enable Exclusive/Hog mode in Settings – Output to cancel any other sound sources on your Mac for a truly undisturbed listening experience
Further Enhancements
- Added macOS Notification Center support, try it at the slightly revamped Settings panel
- Added missing Retina display app icons
- Pressing the return/enter key immediately starts the playback from the selected song in the playlist
- Sandbox permission windows are now shown directly above Colibri’s main window
- Due to popular request, an on/off switch for the volume, seeking and pause pop-up notifications has been added in the Settings menu
PLUGIN UPDATES
- BASS FLAC updated to version 2.4.4
- BASS MIXER updated to version 2.4.9
BUGS FIXED IN THIS UPDATE
- The playlist would have floating and duplicating album titles upon column switching
- The title and artist name would not properly center horizontally on switching to 2-column mode
- Colibri would not load songs from Folders dragged and dropped on the Dock icon
- Colibri Playlist files would not always load properly via drag and drop
- Open Playlist would not always clear the whole playlist
- The selection cursor would disappear on song change or when the playlist is reordered/modified
- Switching loop modes directly before a song would end could cause the song details to not update properly
- Right-clicking/Option-clicking on empty space the Playlist and selecting ‘Reveal in Finder’ could cause Colibri to crash
- CUE sheet PERFORMER data was not being read correctly
- Initial playlist style was not properly initialized after a fresh install
- Sandbox permission granting could not always load the file the permission was asked for
- Mass-deleting and quickly re-adding multiple files at the same time could cause Colibri to crash
- In some cases corrupt/missing files would cause a bit of a chaos: titles and their respective songs would get mixed up
- Songs originating from CUE sheets that were not in UTF-8 BOM format would have ‘Unknown Artist’ shown as their Performer after exiting and relaunching Colibri – even though they had been correctly read the first time they were added