Hello!
This question is more about development in general and less about a specific problem that needs troubleshooting.
I have a Novation Launchpad MK3 that I would like to integrate with Ardour.
The Launchpad is just sending MIDI messages in response to button presses. Functions like “Shift”, the volume faders, track muting, etc. are all implement by the DAW.
I read some of the existing comments on this forum and it seems the general recommendation is to copy an existing implementation for a control surface and just adapt it.
This is fine and I suppose it works for all the existing control surfaces, it will work for the Launchpad Pro as well.
What I’m trying to figure out right now is a way to maximize the return on my invested time if I decide to work on this. (In this context, a better return means that the work I did could be reused to support other applications)
If implement support for the Launchpad Pro within Ardour, then it will only work within Ardour of course.
Supporting other applications would need additional work.
Ardour is not the only software that I use and I would like to be able to use the controller with others. Or with hardware synthesiser, or who knows what in the future…
I have a few initial (naive) assumptions that make me think that I could build a middleware application that sits between the Launchpad Pro and other applications:
- The middleware application could be a state machine which would process all the input from the controller and then would send out MIDI messages according to a set of rules.
- The output of the middleware then could be integrated with Ardour via a Generic MIDI control surface mapping
- Adding support for additional grid-style controllers could be done via configuration files
The theoretical benefit would be that certain functions like translating the grid buttons into volume faders, and then just outputting a single CC message when the user slides their finger on the grid could be handled by the middleware and then it could be used by other applications via MIDI mapping.
The theoretical risk is that what I’m trying to do is not practical and I would invest my time just to get something that is inferior compared to adding support directly in Ardour.
An alternative solution could be to create a library that implements a state machine and can be configured via files but I don’t know how that would fit with the intentions of the developers.
I read that a lot of code is duplicated between control surface implementations. Maybe a solution similar to this could support grid style controllers that fit under the same umbrella.
What I need help with is feedback from people who have a better understanding of the internals of Ardour and the possibilities of the Generic MIDI control surface.
And as I said earlier, many things above are naive assumptions from my part, so if I made a mistake or if I oversimplified something then of course I’m willing to acknowledge that.