OSC control of sooperLooper in Processing

After lots of experimenting I’ve got two way OSC messages going to & from SooperLooper. I’m using Processing language https://processing.org/

Sending OSC:

oscP5.send(“/sl/-1/hit”, new Object {“pause”}, zynthLooper);

where zynthLooper is net address of the pi:

zynthLooper = new NetAddress(“192.168.1.xxx”, 9951);

Getting messages back from SooperLooper is a bit trickier - this sends the request:

oscP5.send(“/get”, new Object {“tempo”, “osc.udp://192.168.1.xxx:4560”, “/tempo_reply”}, zynthLooper);

and the reply is picked up by an OSC listener at that address:

void oscEvent(OscMessage theOscMessage) {
println(" Second Value : “+theOscMessage.get(1).stringValue());
println(” Third Value : "+theOscMessage.get(2).floatValue());

Loads more possible commands here: SooperLooper - Documentation :: OSC Interface

Full processing code here:
After a few evenings whittling at this, I hope this helps someone.


If you are running on the Zynthian you can replace the IP address with (which is the local host).

Zynthian’s native sooperlooper engine provides most control and monitoring. It would be interesting to understand what is missing that prompts an alternative interface. Maybe that functionality can be added to the native control.

I’m running Zynthian headless. I have some buttons attached to a teensy, which generate serial output over USB. A Processing sketch reads this & can generate different OSC messages depending on which button is pressed. It’s a complicated setup, but gives button control of multiple SL functions and avoids using a mouse, plus I can use same system for OSC control of Ardour / Sonic Pi etc.

Thanks @riban for your help with OSC syntax.

1 Like

Does the Zynthian show the correct status in its UI when controlled directly via OSC? There are the controls (rotary indication in pages of 4) and the widget (graphical represenentation between the controls).

Yes, record & pause OSC seem very quick to respond, other controls (eg sync) do update the screen but can take a few seconds. (I’m using VNC to see the GUI).

I believe Ardour can send OSC, so could control sooperLooper, ie start recording at a particular timepoint. Not got this working yet.

SooperLooper seems to have its own tempo independent of main zynthian tempo which I’ve not found exposed in the GUI. I’ve not yet worked out what it does.

@fuzzySi interesting project. Where do you run Processing for serial to OSC “transform”, on the teensy?
Lately I saw a pd implementation of a granular-FX…I am interested to implented it on zynthian via pd with the 4 encoders and an MIDI-controller.

I have Processing running on my main DAW (Ardour running on Ubuntu Studio). Teensy connected to that computer via USB sends a Serial message to say which button has been pressed. Processing sketch receives the Serial message, looks up the OSC message for that button & sends it over the network. I’ve been using it for Sonic Pi for a while, so it’s nice to get it working for zynthian too.

Teensy can send OSC itself, but mine isn’t networked and it’s far quicker to tweak the code in Processing. I’m also using MIDI and audio from the teensy but despite the complex chain, this is an easy way get OSC messages from buttons.

Happy to share the arduino code for the teensy but as I’m using Adafruit Neotrellis illuminated 4x4 pads of buttons, it may not be very transferable.

1 Like

ok, I understand. I did a similar approach with an arduino with analog peripherie over serial to MaxMSP.
But my dream is to run the pd (Granular-patch) on the Zynthian with controls over MIDI-Note and cc and Zynthian-Encoders

1 Like