Cantabile Code Freeze

Hey All,

Just a quick development update…

As you probably know I’ve been working on the macOS port of Cantabile in parallel to the Windows branch for quite some time now.

Unfortunately (or perhaps fortunately depending on your point of view) it’s now reached the point where the two branches have diverged sufficiently that the version control system is starting to get confused and not handling merging between the two.

So I’ve decided on a self-imposed code freeze on the Windows branch until it’s ported to the new Windows/macOS user interface library (aka GuiKit2). Once that’s done the two branches will be back in-sync and parallel development can resume.

This means that besides a couple of minor fixes already in the pipeline, I’m only going to be releasing critical bug fixes on the Windows version for the next couple of weeks. I’m hoping a couple of weeks should cover it, however it will need to be heavily tested and will probably stay in expermental state for some time.



Well, it sounds like your close to the entry into Apple Mac World with Cantabile! I am perfectly happy to see a break to launch this important product step. All the best on on this push :+1: Brad …


1 Like


As a software developer myself (both hobbyist for my Java synth librarians and engineering lead for some large safety critical systems on work) I fully support the need to focus on one branch.

Whilst I use WIN hardware for gigging and my DAW, my main PC is a MAC (much more pleasant to use), so if you need some cross platform testing of my configurations, I am sure I can put the MAC into use.

Hey brad,

from my side: cantabile is in really good shape, stable, no urgent wishes here. So let mac user finally become part of the great c3 community.:sunglasses:

Good luck and kind regards, humphrey👍

Thanks guys.

Just to be clear this push is to get the Windows version ported to the cross platform UI library - it doesn’t necessarily cover getting the mac version finished but I do hope to at least get the whole front end basically running on macOS.

1 Like

Like when C3 was a young Padawan? :wink:

It’s all good! I’m at least 3 or 4 revisions behind anyway. I’m very much an “if it ain’t broke” kinda guy :wink:


Well…I AM broke…can I get that fixed? :heavy_dollar_sign::heavy_dollar_sign::cry:

I’ve been looking into selling a kidney.

1 Like

A quick update…

Here’s Cantabile running the new UI library with OpenGL rendering enabled. Looks basically right, there’s some things not quite right if you look closely.

And here’s it is with redraw highlighting turned on (aka “military edition”). Green areas show off-screen cached areas that didn’t need to be redrawn, red is areas that were just redrawn. This is all about tuning performance vs memory usage.

Good news is it seems stable so far, but there’s a lot of rough edges and testing still to go. Also pleased that I’ve not really touched anything below the UI layer so there shouldn’t be any stability/functionality impact there.


I think your programming/communication skills are beyond the normal Brad !


Another quick update, lest anyone thinks I’m slacking it.

Porting to the new GuiKit is taking much longer than expected. Mostly because I’m trying to get things as clean as I can but also since this is going to be a biggish update (albeit light on new features) I’ve decided to tackle a bunch of other significant changes all at once:

  • Properly fixing a couple of issues UI interaction issues that have been patched over in the past.
  • A week or so on getting all the touch interactions working correctly.
  • Added support for custom themes inheriting from a base theme - so you can inherit from Dark theme and just patch/override the bits you want to change. And you won’t need to update your theme if I add new resources to the default themes.
  • Project configuration - moved everything to Visual Studio 2017 and switched to their new “SDK” style project files which are awesome for multi-targeted projects (although a little slow to build). This means all the Cantabile project files now also work macOS - I don’t need separate project files for each platform.
  • New build scripts (the old .bat files were becoming tedious)
  • Updated the builds for dependencies (like mp3, flac, rubberband) to VS2017
  • Reconfigured Cantabile’s project structure a little bit. The bulk of Cantabile’s code is now in an “Any CPU” CantabileApp.dll which is shared between x86 and x64 editions with a small stub program for each platform that launches it (to help prevent download bloat).
  • Updated setup programs to install new Cantabile components, new .NET requirements, SkiaSharp etc…

The download has grown a little - up from 7.5Mb to about 10Mb (compressed). Pretty happy with that considering there’s an additional 10Mb+ of Skia binaries. (Skia is the new drawing library I’ve switched to - it’s bigger than I would have hoped for, but worth it cause it solves the whole cross platform drawing problem).

This next build will require Windows 7 (or later) and .NET 4.6.1 (or later). I’ve dropped support for WinXP/Vista but will continue to make older version of Cantabile available for those platforms although they won’t be getting new features.

There’s one more biggish change I’m considering: Windows 10 now supports different DPI scaling for different windows in the same process. This means I can make Cantabile’s main UI run at high-dpi and the plugin editors at standard resolution (ie: crisp Cantabile and no more tiny plugin editors). I had a quick crack at it this morning and the concept works, but it means everything needs to handle dynamically changing scaling. eg: dragging a window from a high-res monitor to a low res one.

And, I’ve still got more testing to do because there’s been a ton of changes.

Bear with me - it’s getting there.


A big change but it sounds like it will be worth the wait. :slight_smile:

I also need to look into monitor scaling for my x.factory Java librarians as I’ve had the first report of them being teeny on hi DPI monitors. Must be an excuse for a high DPI monitor :wink:

1 Like

Yes!!! :smiley:

Sounds like you’re resolving lots of technical debt both in the code and your environment, which should make everything smoother for you in the future! Onwards!! :slight_smile:


So maybe this per-monitor dpi support might be a bit bleeding edge…

Spent a half a day trying to figure out how to get it working with OpenGL only to discover the issues all came down to display driver issues.

Spent another day writing a test program, testing different graphics devices/drivers (6 in total), posting to stackoverflow, seeking documentation/best practices from Microsoft and reporting bugs to Intel and NVidia. AMD/Radeon drivers seem work fine.

Not sure which driver(s) are broken (because Microsoft have no docs on how it’s supposed to work) but it’s a bit like the Dire Straights song… “two men say they’re Jesus one of them must be wrong” :slight_smile:

This is what I’m dealing with.


Great song! (sorry to temporarily hijack the thread, but wanted to thank you for inspiring me to listen to this song again.)

1 Like

Wow, so this window scaling support has been extremely tedious to get right, but it’s starting to come together…


I can totally relate to your, “Not going to let it beat me,” approach Brad! I’m like that with electronics and sound engineering.
Recognizing that in you is one of the things that drew me to Cantabile in the first place.

1 Like

Love Over Gold. Great album. Love “Private Investigations”.

Oh, and regarding Industrial Disease and Jesus, they’re BOTH wrong!! :wink:

1 Like

Probably their best album. I love the intro to Telegraph Road.

1 Like