Integration with Bandhelper app -> MIDI remote control for Zynthian UI


I use the Bandhelper app (iPad) to send midi presets to my different keyboard/synthesizers and I would like to send midi presets to my Zynthian as well to select specific “snapshots”. Which midi presets / program changes should I use to do this job?

Regards, Leo

Call for discussion: Encoders via GPIO and/or via USB(Microcontroller)
Suggestion about engine's preset choice

Hi @leo!

Currently there is no “remote” way of loading snapshots in Zynthian, but you can use Bank and Program change commands to load presets in some standalone engines and plugins that natively support it, like ZynAddSubFX, FluidSynth, etc.

I would like to implement a mechanism for loading snapshots in Zynthian remotely. With OSC is easy to achieve, but with MIDI is more difficult because o don’t want to intercept bank and program change messages that are used by some engines, as i told you, so …

I would like to hear some ideas from you, people wanting this feature implemented. We have some options here …

  • Use Bank and Program change messages for snapshot loading, but allowing to enable/disable the feature, allowing “normal” operation when desired.

  • Use a “special” MIDI escape command/sequence, or special command. The problem here is getting the external MIDI hardware to work with it.




The “special MIDI sequence” could be sysex messages. They’re defined in the MIDI standard and should works with external MIDI hardware without problems…


I’m not so sure. How could you get that an external controller/keyboard sents this special sequence of sysex commands? It should be an advanced MIDI controller …



True, there are controllers that can be programmed to send custom sysex. Many others sends and receive just a subset of sysex commands (tipically sysex dumps)
But a sysex dump containing the full snapshot could work. I remember doing that with old synths on those '80s hardware floppy disk based MIDI sequencers, it should works with modern machines and softwares :slight_smile:


At Bandhelper website/app you can program midi presets as follows:

Is the “Raw MIDI (Hex Code)” field suitable for the syses messages?

Regards, Leo


I would like to see standard midi program change.
Have a user defined midi device/midi channel for the ui to except program changes.
so you could set the ui to Midi channel 16 ( most people will never use all the midi channels) and all others pass through to the engines.
So if a program change 1 comes over Midi channel 16 the snapshot would Increment down the list or program change 128 go up the list up.
a all midi data on channel 1 would go to what ever engine assigned to Midi Channel 1.
Also would like to see master volume for the Zynthian also changed by channel volume (control message 7)
and an enable / disable flag for this feature would be nice plus.



yes, i like the idea of treating the zynthian as a kind of master with its own midi channel better.
I would program my master keyboard to use channel A for zynthian and other channels for the other layers. You need to disable the master channel in the layer list.
Or when you are in the layer list, one of the bold clicks is setting the master channel.
And then volume and program change is directed to the zynthian itself. Program change means changing the snapshot.
And now we have the issue, that in one of the snapshots, the master channel is used as non-master.
So actually it’s better to reserve channel 14 or the like as master channel?


The way I see it is :

I think that if the Ui could use a user defined device/midi channel then you could define midi message to do pre define tasks for example:
on your web config you show all midi devices attached to the Zynthian. like Zynthian Midi in, Roland 800pro on USB etc… You select what device will send the UI midi data and on what midi channel. then a list of parameters and corresponding midi command. For example.

devices attached to receive UI midi commands "USB Midi 1"
Midi channel: 16

go to the next snapshot: Program change value 1
go to the previous snapshot: Program change value 128
Master Volume: Control Change value 7

I see the the need for use in live performances not necessarily in the studio.
So at the studio I have created all my Snapshots such as horns using a sampler the next is strings and so on. I just need to on my midi guitar or foot controller send a program change 1 and go from horns to strings and then send program change 128 to go from strings back to horns. no need to touch the Zynthian,

on the Idea of snapshots would be nice to be able to make groups of snapshots. say set 1 and set 2 and inside your group is your snapshots. so from the snapshot menu you could choose a group and then see all the snapshots and pick the one you want.


OK! I like the idea of reserving a MIDI channel for controlling the Zynthian UI.

@mheidt, why do you prefer the channel 14? Channel 16 seems the logic choice …

In the other hand, I think that the better way of avoiding problems with snaphosts using the “zynthian master channel” in some layer, is not allowing to use this channel, removing it from the list (asumming the master channel is fixed and not easily configurable).

Also, i like the idea of configuring the master control messages from the web tool. It’s an easy task :wink:

Regarding the “master volume”, i’ve seen that GM2 defines Universal SysEx commands for this (also for scale trasposing and tunning).

What do you think? Should we implement GM2 or go our way?



I would prefer that the midi channel was configurable in the web ui also maybe a flag to enable or disable passing the midi data to the engine.

The problem with Universal sysex not all controllers can send it for example the foot controllers on the Berhringer foot controller but midi control change 7 any thing can send. but again make it user definable.

For scale, transposing and tunning, Roland is good at sending the right messages other company are not. I can capture the Roland messages and can send them to you.



Maybe we should make it completely configurable.
One tab in the webui for the volume, where you can either select a Midi channel for the normal volume messages or the gm2 sysex.
Next panel snapshot selection.
A list of all snapshots and for each you can record a Midi message…damn…Midi In :slight_smile:
Ok, in the first version you have to enter the midi command manually.
And yes, Fernando, I would gladly help :slight_smile:


Not very practical if you have over 50 snapshots for a show.
look at how Rolland or EMU do performance modes and create something simple.


But now we are talking about another feature I have in mind also.
Naming the snapshots.
For example the song name. In this case you don’t have the number as foldername anymore either and hence no potential program change number.
Furthermore I think it is quite a restriction to allow subsequent program numbers only.
I liked to use empty program slots of my D50 in any of the two banks to trigger a snapshot change.
I think, it is quite practical to use the following:
zynthian-ui: having a snapshot selected (marked, not loaded), bold-press upper left layer knob and wait for next midi event. If it is a normal play-note-event…why not…
Or alternatively: webconf: list of snapshots offers a rename and the programming of the midi event…recording incl. manual edition.


I like the last approach, @mheidt. The webconf snapshot tool have to allow:

  • Rename snapshots
  • Assign MIDI events for loading every snapshot, capture and manual edition.



I like the renaming snapshots but would like also to group snapshots. Thinking the sub directory where snapshots live and show all items being snapshot or sub directory. if it is a sub directory change to it and show its contents.

I think the best way is open design on the assigning the midi event or events to make the load if it is a program change or sysex command or anything else.


OK! It’s in the list … 2 questions:

  • Do you think it’s interesting a multilevel tree structure or 2 levels is enough?
  • Should we implement “bank messages” for selecting the snapshot group?



I could see 3 levels but 2 is good for a start.

does make sense and then program change for the individual snapshots
also a way to copy and move snapshots from the UI or could be done longing in to the Zynthian.


If we can do 2, we can do n.

This is my first draft:


Yes … and not :wink:

My 2 questions were related … General MIDI defines a “1 level depth” bank structure and i wanted to know if we should follow the standard when defining our “Snapshot” system. If we follow the GM recommendation, then we shouldn’t have snapshots in the first level, only “directories” (aka banks). In the second level we should have snapshots only (programs). Of course, we can ignore the GM definition, but then Zynthian will be less compatible with some “non-configurable but standard compliant” hardware devices … like the MIDI keyboard i have on my table: Evolution MK-249C2

What do you think? Stick the GM or go our way?

BTW … i really love your draft!!! :heart_eyes: