Updating remote OSC controls

Hello from Western Australia!

A big thanks to the Zynthian team for your great work. I just received my Zynthian 4 kit yesterday, and it is all assembled and working fine. Looks like I scored one of the new zynadac boards, which is great. Admittedly I have been dabbling with the software for a while on a plain RPi with USB soundcard, but its time to see how much I can do with the official gear.

First application is as a multi-timbral synth for keyboard. I have been a Pianoteq user since Version 3 (2011) and it will be handy to have that boxed up with some other fun sounds. setBFree is great, but the surprising “killer app” for me is actually Aeolus. It is such a joy to play, and I love the little details, like how they have spatialised each individual pipe sound.

Second application is as a sound engine I can embed in various home-made MIDI instruments, and I’m now also thinking about new projects I can make using MIDI/OSC over WiFi with the ESP32. Very interesting possibilities.

But my question today is about OSC. I am making some control surfaces for Zynthian synths using TouchOSC on an iPad. For example, I have some drawbars working for setBFree. Moving the controls on the iPad change the parameters on the Zynthian, and the controls update on the UI screen.

Does the OSC implementation work in the other direction too? If I change the control on the Zynthian, either via the UI or say a preset change, is it possible to get the new state broadcast via OSC so that the remote control surface can be updated? That would be very useful. At the moment I find the two can get out of sync if I change presets.


Hi @stewart !

Good point! I just added the TouchOSC ports to the webconf’s MIDI ports config tab, at the end of MIDI options. You simply check the port for “Feedback”, and save the MIDI options.



Thanks @jofemodo !

Sorry for the noob question, but what’s the easiest way to try out your changes? I guess I have to separately install the github modules. Are there any instructions for that?

This is done via webconf:

  • Connect to your Zynthian via a web browser pointing at zynthian.local
    -Sign in with password, “raspberry”
  • Select “Software” tab
  • Select “Repository”
  • Enable ,“Testing” and save
  • Update

OK, thanks @riban and @jofemodo

I can see the new ports in webconf. I checked the TouchOSC port under “Feedback”, but it seems to have no effect, even after saving and restarting. Under MIDI Ports it says:


If I adjust a knob on the synth I can see the control changes in the router log under “ZynMidiRouter Feedback”, but if I look under “TouchOSC Bridge” there is nothing from the synth. The only events shown here are those received from the OSC device.

I just tested with my android phone and it worked like a charm, both sides. What app/library are you using?

1 Like

OK, that’s good news. So its probably just a problem with my setup.
I am using TouchOSC version 1.9.11 on iPad.

Under “OSC”, I can set the host, and an outgoing and incoming port (defaults are 1370 and 9000), and it finds host “zynthian ZYNTHIAN OSC”

Under “TouchOSC Bridge” it finds host “zynthian”

There is a green indicator that flashes when it sends data, but I’ve never seen the red indicator (receive?) flash.

Which app are you using on Android?

May I suggest an integration of OPEN STAGE CONTROL (I know Open Sound Control is already embedded…) ? This software is highly customisable and allows the creation of a MIDI controller directly on the device… which means the user would’nt need a second device to control the different engines, this would also solve the favourite controls panel implementation or OSC setup, meaning the server AND a client could be running simultaneously on Zynthian…

That does sound like a really interesting layer of abstraction for the controller pages, I found this video wich seems like this could be an interesting option for controlling synths, altough we’re still missing something to interact with the parameters from the engines.

The fact that it allows for menus makes me think that maybe this would be useful for the UI redesign/ backed-front separation tasks that we were talking about @riban

1 Like

Sorry for this is a FB video but here’s an example of a OpenStageControl test jam : Redirecting...
I use LMMS MIDI learn to assign wanted controls to OpenStageControl widgets… I also had confirmation that OpenStageControl widgets could be linked to hardware controls.


Hi @jofemodo,

This is still not working for me. I have configured it as shown here:

If you look in the attached “patchage” diagram, there seems to be no route from ZynMidiRouter to RtMidiIn_Client TouchOSC Bridge.

Is this right? I would expect to see a connection to the TouchOSC Bridge input.

Which port does the feedback output go to?

1 Like

It should work. It works for me :wink:
You should see a connection from “ZynMidiRouter” to “RtMidiIn Client:TouchOSC Bridge”.
Are you saving your MIDI settings after checking the MIDI Ports? Are you loading a snapshot after doing so? MIDI settings are loaded/saved with snapshots, so, for updating the currently saved settings you should follow these steps:

  • Load the snapshot
  • Modify the MIDI settings from the webconf
  • Save the snapshot

I don’t like this behaviour, and i think it should be revised, but it’s what we currently have implemented.

Best Regards,

Here’s what I tried:

  1. Deleted all snapshots and removed all layers
  2. Added setBFree layer
  3. Set and save the MIDI setting in webconf
  4. Saved a new snapshot
  5. Loaded the new snapshot

When I look at the routing in patchage there is no connection from ZynMidiRouter to RtMidiIn Client at any stage in this process.

If I manually add a link in patchage from “ZynMidiRouter:Ctrl_out” to “RtMidiIn Client:TouchOSC Bridge” then everything works, and the Zynthian control updates are sent to the remote OSC controls, just as it does for you. Which means that everything else is working :+1: :slight_smile:

For some reason the route to “RtMidiIn Client:TouchOSC Bridge” is not being automatically created when it should be.