Colibri 2.1.4 is now available

This update brings Genre metadata support and fixes a reported crash, namely when right-click context menu ‘Reveal in Finder’ was invoked on an empty part of the Playlist.

It turns out our little hummingbird gets quite grumpy if we ask it to play the song at index number -1 (as that is what gets reported as your choice when you click on an empty spot).

Happy listening!

Colibri 2.1.4 Changelog

Updates:

  • File extension won’t be shown as Artist if the Artist metadata is missing
  • Cue Sheet “REM GENRE” section is read during Cue Sheet processing
  • Genre metadata property will be read during song processing
  • Genre now has column options within Preferences > Columns
  • Searching using “Everything” will also take the Genre part of the songs data into account

Fixes:

  • Colibri would crash when right-click context menu ‘Reveal in Finder’ was invoked on an empty part of the Playlist

Colibri 2.1.3 is now available!

This update contains FaceTime call fixes – unsurprisingly, the NowPlayable protocol also handles the commands sent from macOS to Colibri when a FaceTime call is inbound.

The logic behind Colibri’s implementation needed a bit of fixing as the commands for pause and resume clashed. Colibri now pauses when FaceTime rings and properly unpauses when the FaceTime call ends.

Colibri 2.1.2 Changelog

Updates:

  • AirPlay: Colibri will stall AirPlay playback and wait 60 seconds for the data to arrive when playing from a slow storage device / network share, then assembles it and pushes forward to AirPlay. This eliminates the song partially playing due to data not arriving in time for playback to start.
  • Enhanced song end signaling precision: song changes should now stay smooth even under high CPU load

Fixes:

  • Colibri wouldn’t transition properly to the next song even if frequency change wasn’t necessary
  • Colibri would instantly skip a song if the file header isn’t complete / misaligned, particularly if it belongs to an older scene release
  • Colibri would show a different song as opposed to the one being played if a loop mode is selected
  • Colibri would suddenly leave a gap during song change even if the songs should be heard in a gapless manner
  • Resolved a possible memory leak regarding song end signalling
  • A small gap at the very end of a song could be heard just before advancing to such a song, that would require frequency switching

Colibri 2.1.1 is now available

Just a small update with the following fixes and adjustments:

Enhancements:

  • Added missing thousand separator space to ‘Processing Song X of Y’ status bar message

Fixes:

  • Preloaded songs wouldn’t play in a gapless manner if not being part of a Cue Sheet
  • ‘Clear Search phrase’ would not remove the ‘X’ clear button in Search view
  • Playlist header would disappear when no Songs were present in Playlist

If you have automatic updates enabled then macOS should update Colibri soon – if not, visit the Mac App Store page to trigger the update.

Colibri 2.1.1 Changelog

Enhancements:

  • Added missing thousand separator space to ‘Processing Song X of Y’ status bar message

Fixes:

  • Preloaded songs wouldn’t play in a gapless manner if not being part of a Cue Sheet
  • ‘Clear Search phrase’ would not remove the ‘X’ clear button in Search view
  • Playlist header would disappear when no Songs were present in Playlist

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