Colibri 2.1.0 is now available

It has been way too long! The long past overdue update to our little hummingbird is now out – containing two of the most requested features in the past couple of months. Here’s the changelog, if interested.

Minimum required version is raised to macOS 10.13 High Sierra – this is due to the fact that Xcode 14.1 is the currently required minimum version of Xcode that is allowed to send your app to Apple, and it doesn’t allow targeting anything lower than macOS 10.13.

Native AirPlay 2 support – this is the fourth time over the past few years that I’ve tried to add this functionality to Colibri, I’ve even contacted Apple on multiple occasions regarding the possibility, to no avail. As Colibri is a Mac App Store app, it has to be reviewed and analysed every time an update is released – and using reverse-engineered (although publicly available) protocol implementation is very clearly off the table and using any other cross-platform library to interface with AirPlay wasn’t something that I was comfortable in doing. Looking through newer Apple-provided example codes for iOS and iPadOS I’ve stumbled upon one curiosity, that essentially involves manually sending data packets via AirPlay – and it ultimately turned out to be available for macOS as well! Having built a small proof-of-concept app proved that it can be done – all I needed to do was wire things up and we’re good to go…

Colibri AirPlay

…except that AirPlay only knows about the file formats natively supported by macOS. So implementing the above mentioned mechanics also meant that Colibri’s internal mixer handling needed to be re-adapted to be able to switch between ‘regular’ CoreAudio output and AirPlay data sending mode, not to mention that decoding still had to be done by Colibri’s internal decoder. This in turn meant that gapless playback and pre-loading needed a bit of re-thinking, as while having my own mixer gives me freedom to put markers anywhere I please – AirPlay on the other hand only takes a bag of data and off it goes.

Out of the box I have vastly limited control of what happens – imagine a scenario where the user drops in a Cue Sheet that references a single file that is multiple hundreds of megabytes in size – pushing that through to AirPlay at once would cause quite a delay in playback for just one song. The amount of data AirPlay accepts is seemingly infinite – however, the amount of data being read and pushed through the decoder is not and this also needed careful attention to orchestrate.

In the end, I really hope you’ll enjoy the seamless integration of AirPlay – try it out with a capable device such as a (pair of) HomePod(s), Apple TV or just any AirPlay capable smart TV (in such a case even the song info and album art is shown on the screen!). Multi-room is also supported with individual volume control – just tick the boxes and enjoy!

Search & Filtering – an essential feature that should have come sooner, Colibri now has proper search & filtering support for the Playlist. Just press + F to bring up the search bar at the bottom of Playlist and type away. Search criteria can be changed at the top menu and there are also keyboard hotkeys associated with all available options – even clearing the search phrase. The filter state also affects the playback, meaning that filtering the list to a set of songs will cause Colibri to treat those songs as the only ones available for playback. Ideal if you’d like to narrow down your listening to just a couple of songs at a time.

NowPlayable support – since macOS 11.0 Big Sur, the Control Center gained the ability to show audio information from apps that support it along with basic playback controls. Colibri now finally has this integration as well: song information and album art graphics are passed through to Control Center based on Apple’s documentation with the necessary playback state reporting – this means that seeking and pressing play/pause also works and is kept in sync with Colibri’s main window. Fun fact: the order of sending the song info and playback state does matter.

Colibri NowPlayable support for the macOS Control Center

Accessibility – all control elements and feedback labels should now have proper Description and Help fields filled out where relevant and old ones were revised to reflect changes where applicable.

Async file loader/crawler – Colibri should now tackle reading many files at once way better than before. The act of loading files is now split into two phases and processing should not cause Colibri to freeze – state of file processing is now also reported in the bottom status bar, giving visual feedback as to the current progress of reading files. Cue Sheet and M3U processing also got a bit of makeover to deal with the bugs reported by the kind users in the past few months. Thank you so much for the files and useful descriptions and steps-to-reproduce!

Devices: 4 new settings – parallel to the work generated by AirPlay integration, the Devices section also got four new settings that can be enabled on a per-device basis. These were all requested numerous times, mainly the ‘force frequency’ and the ‘restore to frequency on quit’ options – while the other two options, ‘frequency switching silence’ and ‘initial volume’ were something that I’ve noticed while using an older DAC.

Sandbox Manager: to help people organise, remove and diagnose Sandbox bookmark related issues, Colibri now has a built-in Sandbox Manager module that shows all bookmarks known/granted to Colibri, marking invalid ones in red and showing superfluous bookmarks in grey. There’s also a Smart Cleanup button does a bit of housekeeping: removes unnecessary bookmarks. Manual add and removal are also possible here.

Sandbox manager

As for the future: as written here many times, let me reiterate – I do plan on supporting Colibri forever! I’m also a daily user and have quite a few ideas for years to come, not to mention the awesome feedback I receive via emails and App Store reviews.

As for what’s next in store: I do plan on adding remote control support and yes, iOS, iPadOS and tvOS versions of Colibri are in the works. I have no estimate on the release dates, will let you know via posts here as I go.

Happy listening!

Colibri 2.1.0 Changelog

This version raises the minimum required operating system version to macOS 10.13 High Sierra.

New Features:

Native AirPlay 2 support

  • supports multi-room audio
  • simultaneous playback to multiple devices
  • fully native, end-to-end encrypted
  • doesn’t rely on third-party solutions or modules
  • available from macOS 10.15 and up

Search & Filtering for the Playlist:

  • filter using all columns or a combination of artist/title/album
  • keyboard shortcuts

NowPlayable support

  • song info, album art display
  • playback control with seeking
  • available in the macOS Control Center

Accessibility

  • all control and feedback interface elements have descriptions and help texts
  • older descriptions updated / reworded as necessary

Async file loader/crawler:

  • file loading and processing are now done in two phases
  • playlist is updated in realtime as songs are processed
  • number of files being processed is displayed in the bottom status bar

Device settings – 4 new options:

  • Force frequency: disable automatic sample rate switching and use one frequency for all songs
  • Initial volume: set the system output level of the device to the given percentage when the device is used
  • Frequency switching silence: generate the given number of milliseconds silent output during the mode switching of the device
  • Restore to frequency on quit: restore the device to the selected frequency when Colibri quits

Sandbox Manager

  • add, edit or remove existing bookmarks
  • check if you have invalid bookmarks
  • Smart Cleanup: remove all redundant bookmarks with a single click
  • Improved Sandbox Bookmark resolution
  • Strict App Hardening is enabled for added security
  • Interface subtle animation: album art, song info and status bar updates are delivered with smooth transitions

Updates:

  • Help > Debug Log is back with automatic refresh and scrolling to bottom
  • Added ‘Jump to current’ and ‘Jump and Select current’ hotkeys
  • MIDI module updated to the latest version
  • WavPack module updated to the latest version
  • Only try switching device frequency during song change if the frequency is supported by the device, respect the fallback strategy otherwise
  • Removed multiple superfluous device reinitialisation calls
  • Extended system sleep options with screen sleep variants
  • Cue Sheet processing now skips unreachable files
  • Cue Sheet and M3U file formats are autodetected during processing
  • Only the latest notification will be present, older ones should now disappear instead of stacking

Fixes:

  • Crash when opening multiple files at once from Finder
  • Crash when clicking on a color picker in Settings > Themes
  • Device wouldn’t switch to the highest available frequency if the song has already started and the output was changed mid-playback
  • Fallback frequency wouldn’t be considered if a non-DSD song came after a DSD song
  • First row of Playlist would become squashed on startup
  • First track from a colibriPlaylist would disappear
  • Freeze when you have one song in the playlist and choose repeat random loop mode
  • Media Key events could be fire twice from macOS 11.0 Big Sur and up
  • Network streams from M3U files wouldn’t load
  • Notifications would be shown when the Settings panel is opened
  • Preloading wouldn’t always work with random-based loop modes
  • Selecting custom in Settings > Themes would result a in completely black player window

Colibri 2.0.5 is now available

Hi and thanks for checking in! After a long bit of delay, here’s a new version of our little bird that features quite a few under-the-hood enhancements, mainly regarding Sandbox handling: the dreaded and seemingly most reported issue in the past couple of months is that Colibri would just bounce up and down on the Dock, without actually starting – or taking an enormous amount of time to boot up.

To combat this, the Sandbox bookmark handling has been broken down to smaller chunks and is now properly being handled using background threads – even with spotty Wi-Fi and disappearing SMB shares I’ve got very positive initial feedback during testing, so hopefully Colibri will now start quickly for everyone. As always, please do let me know if you experience otherwise!

Another Sandbox issue prevented the default MIDI SoundFont from being loaded – this is also fixed, along with a weird bug that caused the CMD + Up hotkey to not work as intended.

I do plan on extending Colibri to other platforms as well and work has been going on behind the scenes with the full intention of having iOS, iPadOS and tvOS versions of Colibri in the future. Part of this evolution is for me to get more acquainted with CoreAnimation and Transitions and while I’ve promised to keep Colibri’s interface simple and clean, I did sneak in a bit of fun to the Album Art view popover: double click on the album art, then either click on the image in the popover or click the little circle icon in the bottom-right corner.

Album Art animation

As for all the suggestions, feedbacks and issues we’ve discussed over email – they are still on the to-do list and coming eventually!

Happy Listening!

Colibri 2.0.5 Changelog

Bugs fixed in this release:

  • Colibri would bounce indefinitely during startup
  • Invalid Sandbox bookmarks would cause Colibri to hang
  • CMD + Up keyboard shortcut didn’t always work
  • MIDI SoundFont would fail to load

A bit of fun: try double clicking on the album art and then click on the album art image that pops up!