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…
…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.
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.
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!