Re-engineering Cantabile's Bindings Framework

Well that was an unwanted distraction but the issue with control curves is now resolved by building a native implementation of the expression evaluation.

Tomorrow I’ll be back to working on bindings proper…


Update: spent the last couple of days working on the actual binding framework including things like the binding object that manages the three sub-objects (source, mapping, target), serialization. Also I’ve started on the new UI: setting up the new table view and starting on the new form view at the bottom of the bindings panel.

Slow, but steady progress.


I’m really struggling with this work. Probably a few things going on:

  • The scope of the work is a bit daunting and there’s lots of moving parts
  • Lots of support enquiries lately which is taking more time than usual
  • It’s been really, really cold here the last few weeks which I always find demotivating - not sure why, but I’m really looking forward to Spring.
  • Physically tired because I’m also doing work around the house (painting and yardwork)
  • Mentally tired (I think just after effects from personal stuff from a few weeks ago)

I think I’m just not in the right frame of mind at the moment and my usual anti-procrastination tricks aren’t cutting it. But, I’m making sure to at least get a little done each day and it is progressing - just slowly. This happens every now and then and I expect in the next week or two I’ll get over it and things will take off again.

Anyway, better get back to it… …or, maybe I need more coffee first.


It means you actually have a life. Nothing wrong with that.


Hey, make sure you take care of yourself mentally! Not worth it to burn yourself out on complexity - maybe time to tackle a simpler area of Cantabile to move forward.

I can so completely relate - some things are just so complex that you need to let them simmer for a while, study some aspects of them now and then, before suddenly things fall into place and you can slay the dragon with a burst of high-energy coding…

I’m in such a place with getting LivePrompter networked with Cantabile - I have bits and pieces that I am sure about, but a lot of moving parts, things to work around, and uncharted territory (for me) that I need to come to grips with before getting to some serious progress. Given that coding is just a hobby for me, and there are a couple of other issues demanding attention, this is sloooow going. But I’m confident that it will happen eventually…

So careful with the coffee - maybe some nice and calming tea :wink:


Hi Brad,

I’m curious how many of the support inquiries could probably have been fielded by us users here on the forum?



That’s tempting but I’ve found if I set aside a big chunk of work like this I tend not to return to it. I just need to take it slowly and keep chipping away at it I think.

Hit me up with any questions - happy to help with that.

If you’ve ever seen Ted Lasso, I’m with him when it comes to tea :slight_smile:

Fairly regularly I’ll suggest people post questions here because I know they’ll get a better answer from you guys. Other times it’s account issues, lost my key etc… things that I need to do and it’s not enough to be worth outsourcing. Also there’s crash reports that need to be reviewed. Usually it’s all very manageable, but sometimes there’ll be an influx.

Since yesterday I’ve decided to just give myself the rest of the week off (a long weekend) and get back into it next week.


It is so important to be able to manage your own well being, I learnt it the hard way being hit by stress a couple of times.

So if you can benefit from delegating some tasks, please do.

Agree with all of the support above. Take your time and look after yourself. My work life is nuts right now, so work on my librarians proceeds as and when. I have only been working on montage.factory for five years now!

Hey Guys,

Thanks everyone for the supportive messages. Four days of painting retaining walls, gardening and reading (fiction) I’m feeling a bit refreshed.

Also, a small opportunity arose over the weekend which is going to require a week or so of work on Cantabile… so I’m setting aside the bindings work for a bit (despite saying I’m reluctant to do that above) and will hopefully get back to it soon.



Absolutely agree with the above sentiments - health is more important than anything.

When you do pick this up again, is there any chance that the State Index variable could be made available to Sys-Ex please (plus any other similar integers). Notice it’s available in the API, but can’t seem to find it internally (forgive me if it’s there).

I’ve got a couple of use cases using a conditional operator in a sys-ex to change a statement based on the current state.

You’re right, there’s no song state index variable - I’ve logged it here.

1 Like

Just a quick update: it’s been a couple of weeks and time to get back into this. Spent today reminding myself where I was up to and did some work on the mapper part of the UI.

This scope of this work is still a bit daunting, but determined to see it through.

1 Like

Actually, there is one, it’s just called “SongPart”.

Maybe time to clean up and call it StateIndex? But that would be a breaking change, so people who use “SongPart” need to rework their bindings…


Ah you’re right… I’d forgotten I’d used that naming. I suppose I could rename it, or add two variables, or just leave as is :slight_smile:

Pretty happy with the way this is starting to come together, but progress is still slow. Also, started a Trello card to track everything.





Now that binding points can have their own properties, things like “instant” vs “delay” load bindings can both be handled by the one binding point.

ie: This binding point is now just “Next Song” and not “Next Song (Delayed)” or “Next Song (Instant)”. Also note new extra property to control wrap/stop at end behaviour: