hedgehog/software/ AnythingCanControlAnything
To see what I mean by AnythingCanControlAnything, consider a slider in an application, say the brush width in Gimp or the font size in LibreofficeWriter. If I have an endless rotary controller on a control surface somewhere, call it Dave-the-knob, then Dave-the-knob generates events of the form 'Dave-the-knob turned clockwise by 3 clicks' or similar. And it makes sense to say 'move the brush width slider in Gimp right by 3 clicks', whatever 'clicks' means. Essentially, any slider or knob can be potentially controlled by any controller on any control surface. The challenge is getting everything to talk to each other. For it to be Universal, it has to be ubiquitous, and sufficiently expressive to capture all the the kinds of events you want to send.
As for a protocol, for many things, OSC suffices. So a first aim is OscEverywhere. Then look at the use-cases where OSC isn't appropriate. For example:
- In the processing loop of a music plugin, OSC requires text processing – in this case we want a binary protocol, based on 32bit words, that is efficient to process.
- For RemoteProcedureCall like things, we want, at the least, a convention for sending OSC messages as Rpc requests, and receiving an OSC packet as a reply. That requires some kind of synchronous protocol, for which maybe ZeroMQ is ideal.