I am felling chatty and perhaps my long winded response here my in fact help other developers from falling down a rabbit hole (which I fell down head first) by making assumptions of what one can actually utilize OSC for in the real world.
This is of course my opinion, fell free to disregard anything am saying here.
Specific to Ableton:
There is the Ableton Connection Kit.
Look at the OSC Devices and OSC send. I believe that not of this will help you though
Sad to say, but not many DAW’s actually support OSC natively.
The only 2 DAWS I am aware of that support OSC natively are Reaper And Ardour.
DAW developers have never taken OSC seriously. This is due to the ‘nature of the beast’. OSC runs on top of IP (Internet Protocol) and UDP (User datagram protocol, Which runs on top of IP). This is analogous to standard internet protocols such as a simple web browser talking to a web server:
– Browser->Web Server is HTTP/TCP/IP, Hyper Text Transfer Protocol over Transmission Control Protocol over Internet Protocol).
– OSC Client → OSC Server is OSC/UDP/IP, Open Sound Control over User Datagram Protocol over Internet Protocol.
In order for a DAW to support OSC it must act as two separate things:
1.) An OSC ‘Server’ (the code stack that sends OSC commands)
2.) An OSC ‘Client’ (the code stack that receives OSC commands).
On the other side the ‘application’ (your plugin or application in this instance) must also support the same ‘Server’ and ‘Client’ stacks in order to send (from its client) and receive (from its server)
commands from the DAW.
In the end ‘internet protocols’ are not real time, and never will be. It is assumed that the reader understands the basics of an HTTP:// request and response in the browser world. This is not real time. It is asynchronous…
To make matters worse for OSC, it does not specify a request /.response strategy, but rather is simply blindly sending commands. As an example I have a plugin that is able to operate the transport controls in Reaper via OSC. To tell reaper to stop playing my OSC client (juce::OSCSender) sends /stop 0 to Reaper. How does my plugin know that Reaper actually received the /stop 0 and has in fact stopped? My OSC client code does not really know as the OSC specifications does not specify a response to this command (Like. OK,Done!). So in the OSC world the only way to know the transport has stopped is by waiting to see a notification from Reaper on my plugins OSC server (juce::OSCReceiver) that it has stopped playing (I.e., a /stop 0).
I will also note that since OSC never became viable there is not such thing as a specification for DAWS as to how to support it, Case in point to stop the transport in a DAW:
– Reaper: /stop 0
– Ardour: /ardour/transport_stop
In the end since OSC is not real time it is not suitable for use when the DAW is playing (rendering). On the other hand it did look like it may be promising if one needed / wanted to control the DAW from within a plugin.
In the end the OSC specification originated in 2002. This was the era when a lot of developers where sitting around saying to themselves ‘Hey, the internet is here, what can I do with it?’.
In closing, all one really needs to do is look at the OSC organization server
in order to understand that it is probably a non-starter in the DAW world.
I am aware of things like TouchOSC, DawOSC which look like fun ‘toys’ to myself. Perhaps they have real world applications is a DJ or someone like that is utilizing a DAW.