Open Sound Control

Will SOUL support OSC-Messages at sometime in the near future?

I’d love to convert some ChucK-patches I’ve written a while ago to SOUL. (Some concepts seem to be quite similar, e.g. the use of “advance()” reminds me of “1::sample=>now”.)

Unfurtunately all my patches are controlled via Open Sound Control using custom GUIs running TouchOSC on an iPad. I’m using some non-standard tuning and other stuff like that… So I decided to not use MIDI at all. Writing a workaround would of course be possible but very unelegant.


Yes, we should look at supporting OSC, that’s a good FR.

Of course there’s nothing stopping you adding support yourself for whatever bits of it you need - the patch format allows you to send and receive arbitrary event types, so you can roll whatever API you need. But yes, we should at some point add some “official” structs and some helper classes to support the main OSC event types.

Not sure if my programming skills are up to that, but maybe I’ll give it a go. I’m coming from the Webdev/Javascript side of things, knowing just enough C++ to get arduino or teensy boards running. I’ve no experience with, say, the JUCE-Framework for example.

Okay, so first things first. I need a host environment for a SOUL patch which supports UDP-Ports:

  • pretty sure the the soul command line tool does not
  • chrome/node/electron etc. support UDP, the SOUL patch could live as a WASM inside. But if I undestand the docs correctly, the communication from JS to SOUL is limited to “onParameterUpdate”. So my JS needs to know which OSC-Command corresponds to which parameter index, so the JSON describing the patch needs to be parsed. Sounds doable. No extension of SOUL API required. Mildly elegant but limited to this scenario.
  • run SOUL via patch loader inside JUCE and tweak the API as you suggested. The rabbit hole (having not used JUCE before).

Am I missing something? Thanks for pointing me in the right direction.

Yeah, at this point you’d need to write a host in C/C++ that can load the patch to do this. In the longer term when we have more language bindings for the patch API then you could do it in node.js or other frameworks.