Hi everyone,
Thank you all so much for your extensive insights, it’s clear that you all care deeply about custom control of Liberation and I really appreciate this and want to give you the flexibility you desire and deserve 
I think we’re all on the same page; you know I’m a musician so I want all the same things as you, on screen adjustments, import settings files, OSC, everything! It will take a while though so I want to make sure I can at least provide options from the start.
First, let’s address some confusion :
That’s because they are entirely separate systems. Honestly I kind of regret the Send/Receive system because it wasn’t designed for this and I worry that I’ve led you all down a dead end street!
The APC40 system is different but it is built on a base MidiController object, so I plan to adapt this system to offer custom control. But right now it’s hard coded to auto-connect to an interface containing “APC40 MkII” so will be hard to hijack.
But, I can make a new class based on the same MidiController object that loads a custom json file for its mappings.
Differences between Send/Receive and MidiController systems
Currently the MidiController can only do things the APC40 can do - which is a lot, but all based on app state / scroll position, so it can only access on-screen clips, and adjust parameters for the currently selected clip.
But it has been well architected so its mapping should be flexible.
This is in contrast to the Send/Receive system which can only operate on static values, and is completely oblivious to the app state, scroll position etc. Everything in this is hard coded (ugh!)
Although the MidiController system was designed with a different paradigm in mind, there’s no reason I can’t add some static options to it. And I plan to do this next.
Updates to parameter system
I have made some minor updates to 0.8.0. There used to be just one “parameter” on each effect, now you can control up to 3 via midi CC messages, and add up to 16.
And you can also add parameters to clips! Again up to 16, but these are not yet mapped to MIDI, but it’s a first step. (You can adjust them through the right click menu)
I plan to add pages to the group of eight rotaries on the APC to allow you to choose between the current setup, and the parameters for the currently playing clips, and then some custom pages too.
JSON file format
I’ve been experimenting with serialising the MIDIController mapping to JSON and I’m pretty happy I’m on the right track. Here’s some selected excerpts :
{
"action": "ClipButtonPress",
"actionX": 0,
"actionY": 0,
"channel": 1,
"midiType": "NoteOn",
"pitch": 32
},
{
"action": "ClipButtonRelease",
"actionX": 0,
"actionY": 0,
"channel": 1,
"midiType": "NoteOff",
"pitch": 32
},
{
"action": "ClipButtonPress",
"actionX": 0,
"actionY": 1,
"channel": 1,
"midiType": "NoteOn",
"pitch": 24
},
{
"action": "ClipButtonRelease",
"actionX": 0,
"actionY": 1,
"channel": 1,
"midiType": "NoteOff",
"pitch": 24
},
{
"action": "ClipButtonPress",
"actionX": 0,
"actionY": 2,
"channel": 1,
"midiType": "NoteOn",
"pitch": 16
},
{
"action": "ClipButtonRelease",
"actionX": 0,
"actionY": 2,
"channel": 1,
"midiType": "NoteOff",
"pitch": 16
},
{
"action": "ClipButtonPress",
"actionX": 0,
"actionY": 3,
"channel": 1,
"midiType": "NoteOn",
"pitch": 8
},
{
"action": "ClipOffsetXRelative",
"midiType": "NoteOn",
"pitch": 58,
"relativePosition": -8
},
{
"action": "TempoMultiplierToggle",
"midiType": "NoteOn",
"pitch": 103
},
{
"action": "TempoMultiplier",
"control": 15,
"midiType": "ControlChange"
},
{
"action": "TempoNudgeBack",
"midiType": "NoteOnOrOff",
"pitch": 100
},
{
"action": "TempoNudgeForward",
"midiType": "NoteOnOrOff",
"pitch": 101
},
{
"action": "DisarmAll",
"channel": 1,
"midiType": "NoteOn",
"pitch": 102,
"requiresShift": true,
"shiftState": false
},
{
"action": "ArmAll",
"channel": 1,
"midiType": "NoteOn",
"pitch": 102,
"requiresShift": true,
"shiftState": true
}
]
Every action in Liberation has a name, and can be mapped onto a midi action.
This is actually a reflection of how the system works under the hood, and this has been stuff I’ve set up in code up until now, but hopefully we’ll get to do it in json.
For APC40 implementation,I have a lot of custom code that then updates the button colours and states, and rotary modes / values. I’m not quite sure how to abstract that out yet, but at least for input it should be relatively straightforward to get this running.
Summary
So in summary, there’s a long way to go but I hope to give you the hooks that you need to get started. And moving slowly towards the final goal of full integration.
It’s probably worth setting up a zoom call just for the MIDI controller contingent all but I have a show soon so it will have to wait until next month.
Thanks again for your enthusiasm and insights!
Seb