Control Ardour from a software control surface (via socket or dummy MIDI)

I am building a large hardware control surface with lots of faders.
I will have my custom standalone program handling the data from my surface.

From there, how can I control all buttons/features of Ardour?

  • Can I write to a socket that Ardour would read?
  • Can I control everything with the control/mcu/seq midi ports without having Ardour interpreting the data as a particular surface?

For example, if I want to move fader of track 33 to 1024 MIDI from my program, how can I do it?

My main concern if I use MCU e.g. is that Ardour will interpret the banks of my faders so I cannot directly access fader 23 and 1.

Also, how can I get all feedback from Ardour the same way? (when a fader moved e.g.)


send OSC via a socket. send MIDI via a JACK MIDI port (or an ALSA MIDI port if you insist).

see the documentation in the manual.

Thanks Paul for the answer.
OSC via socket? I’m only aware about the OSC via UDP, can you tell me where I can read about socket OSC?
Also, how can I read the informations? (e.g. position a fader 37 …)

I don’t provide answers like this on a web forum. The manual contains a lot of information, and googling for “ardour osc” will reveal even more. Or get on IRC and ask questions there. You may (or may not) find people there who can provide the level of detail you want.

Paul, I’m glad you seem to be doing great.
If I ask, it’s because there is nothing about sockets. Try googling for “ardour osc socket” to reveal nothing.

Of course there is nothing. Sockets are such a basic aspect of any IP-based communication mechanism the word barely exists in discussions about it. If you use the word “port” (as in “IP Port Numbers”) you might get further …

ok thank you.
So I think there was a misunderstanding. By socket I meant socket file, not net socket.
And I now realize your meant UDP socket., right? :slight_smile:

But how to get back the status of an element, e.g. if I want to know the position of fader 23.

on POSIX operating systems, sockets are all the same, just with a different family type. Ardour does not create sockets in AF_LOCAL because of some (possibly) old performance problems. There is almost zero overhead associated with using a UDP socket between two applications on the same machine.

And that’s fine, I like it because we can also control remotely :slight_smile:
As far as I can see, there is no way w/ OSC to read values, but only to set. Am I correct?

i don’t have time get into this. look up the source code for ardroid or ask on IRC. there are various options available to be able to get current values. writing an OSC controller is not a 30 minute task, and you will have to get familiar with various aspects of OSC and specifically Ardour’s support. i’m sorry i don’t have to get into this, especially not on a web forum.

Thank you. I am ready to spend the time it takes, no problem.
Best Paul.