Fast switching from song to song

At the moment I am using Zynthian in Stage Mode (daily release from 2022-04-12) and configured 5 Layers with different synth plugins, so that I can quickly switch between drum sounds, bass sounds and pad sounds within a song. These sounds are used in addition to my Stage Piano (Korg SV1) and my Loop Station (Boss RC 300) for playing live. I think I don’t need more than this 5 layers in total for all the songs I like to play. But I need to change the parameters of all these 5 layers and the audio mixer in a fast way when switching to the next song. Right now I am using snapshots for each song. Loading a complete snapshots takes a while, something between 20 and 30 seconds.
The plugins per layer will remain the same for all or most of the songs, but with different settings and programs. And there are different audio and FX levels per song. I also tried to use ZS3 sub snapshots. However ZS3 seems to be a way for fast changing a single layer.

Is there a simple and fast way to change all the layer and audio mixer parameters in one slip?

I wonder whether you can clone MIDI Program Change so that a single PC message can trigger selection of all five layer’s ZS3? If not, maybe an extra layer with a MIDI plugin that performs this action?

I think we should extend the zs3 concept. Let’s remove the 1-layer limitation and make it wider. Something like:

A subsnapshot (zs3) is a set of bank/presets & parameter values for all the layers in a snapshot.

So when you load a zs3, you are “potentially” repositioning all the layers in the snapshot. Of course, we should be wise enough to optimize the loading process as much as possible because we also want to be blazing fast. Yes!

Comments are welcome before start coding it … :grin:

For instance:

  • should we ignore MIDI channel when learning programs (128 zs3s)? Or do we want 16x128 subsnapshots?
  • should we have names for the subsnapshots? it seems useful …
  • should we keep the current 1-layer behaviour as an option? Could you envision a use-case for it?
  • etc.


1 Like

I think it may be advantageous to retain the per-layer zs3 option. I can imagine a user wanting to load a new sound into an engine whilst still playing another instrument, e.g. holding a pad on zynaddsubfx and selecting the next killer organ sound on setBfree ready for their organ solo.


To throw in some experiences from heavy stage use… I think it would be a huge addition to flexibly select what parameters are actually stored/changed by a zs3. That would solve a lot of use cases (at least for me) at once. Examples:

  • I sometimes like to use a zs3 on the same engine, maybe even same preset as a basis, but slightly different settings. Say, change certain filter settings, 2 knobs at once to a certain setting I carefully tried out earlier. So, I tend to use them for certain settings where I don’t exactly need a preset itself. But as of now, it gets intransparent which is changing what now because technically I store all the values (unless I am massively missing something?) although I don’t need most of them in there. Especially as soon as it is more than 2 of those zs3 per preset/engine, it tends to get messy. So: Configuring which few values are affected by this one zs3 would be great. Or maybe the other way round, storing everything but being able to opt-out most of them.
  • On the other side, I’d like to switch more than one engine at once. One could argue this is the spot for snapshots (the big ones) - fair point, as far as they load quickly enough. For me so far, they don’t if I have to change things in the middle of songs, and of course not while playing. So for me a “big” snapshot rather represent at least a song, more like, ideally the whole evening, fight me :joy:

For my experience: YES, please channel-agnostic. I really really don’t want to care about the channel I am sending this from, e.g. on which keyboard I press the button. We are talking about quick switches on the fly. Split-seconds sometimes do count for me on these things.
(In case for some reason someone else finds the other option useful: could we have this as a globally switchable option then?)

It might render the messy part lesser scary, yes. Depends, where we actually get to see/use them then, though.

Dunno if I get this right, but until now I wasn’t aware that a zs3 affects more than one layer? So I use them for per-sound settings mainly, therefore probably all the time as one-layer-only-thingy. Could you elaborate on the options we have so I can understand what that would mean for my workflow?

Another thing I’d find particularly useful but maybe this goes beyond the zs3 concept or makes some heads explode…
I’d like to change an engine’s input midi channel via zs3. My setup and use case is: I have two keyboard with two different midi channels that won’t change (bc it’s taking too long to do that on the fly). What does change all the time is the sounds I play on them. Which is why the concept of every engine has one midi channel that hasn’t been used yet is challenging for me sometimes. (Again, tell me if I am missing something here.) I’d rather like to have two set-in-stone midi channels, like, one for the piano keyboard and another one for the synth keyboard (think of it a bit like virtual soundcard for routing purposes) and then say, now I want to feed this sound from here, but next moment it’s somehow different - and ideally make that changeable by zs3 or something similar that works on the fly without interrupting something.

Hope I didn’t make anyone angry now. I use the thing all the time on stage and am very impressed and satisfied for what it does in a very reliable way, it’s just that I needed to work around quite a few things over time to get where I wanted to go, so that’s my 2ct so far.

Hi @freeKey , the way you are using your instruments, giving them fixed midi channels is the same way I build up my setup. My stage piano (Korg SV-1) has a fixed channel setup to 1. And my Midi Controller (Korg NanoKontrol) is set to channel 14. And I left channel 15 “free” if there will be another midi controller in future times. So there are the channels 2 until 13 available for Zynthians engines. But if you like to use multiple engines/instruments in parallel, you need Zynthian switched to multitimbral mode. And for now I simplified my setup and switched Zynthian to stage mode, so Zynthian will react on all incoming midi channels and makes no difference. (I hope this is described in the right way because I am not a long-term experienced Zynthian user)

Just as an idea: To get more flexible with midi routing inside Zynthian you can add a midi FX plugin, i.e. “Midi Channel Map” on the relevant layer and do a midi learn on one of the parameters inside this plugin. If you have a flexible midi controller or midi keyboard that you can use to feed the right information to the channel map plugin you should be able to change the channel mapping on the fly, during playing. But you need Zynthian to be in multitimbral mode if you like to achieve this.

1 Like

What about adding an optimization into loading full snapshots like this: If the snapshot that you would like to load has the same engines places in it’s layers as already now, there is no need to reload the whole engine if the engine is already present on the same layer. Would this be a quick win to reduce loading time?

Interested to see how this one plays out. While the level of conversation is above my current understanding of everything, I think this might solve one thing I’ve come across. However since I’m using this with a stringed instrument and not a keyboard or MIDI interface I’m not sure if it will do what I’m hoping.

I’ve started building up multi layer snapshots as effects chains and I would love to have the ability to quickly switch between those snapshots. I’m not using the MOD-UI for this, as I feel like the native audio layer effect workflow is faster on the device. For example my default setting is Three Band EQ>Compressor, but when I solo I might switch to a setting that adds a few stacked delays, a flanger, and a little reverb or sometimes add an octave/envelope filter. Current state, I have to physically load the new snapshot and wait 15 seconds or so for it to load. I would love to be able to quickly switch settings like I can with the single layers.

So I think I’m hoping to gain the same abilities? However I don’t think I can easily do it with a MIDI program change since I don’t have a MIDI device connected at the time… but I have a few Teensy 2.0’s laying around that I could probably throw some code on that would do that like a foot controller if I needed to.

I have an idea that in my mind, I don’t know if it is realistic to implement or good solution for this use case.
My Idea is to have a third mode. We have stage and multitimbral mode. The third mode could be patch mode.
This mode could be like qjackctl or patchage with layers as output ports and engines as input ports.
So, lets imagine that you can load several engines zynaddsubfx, setbfree, fluidsynth, raffosynth (as an example). Then you can set multiple patches, like patch 1 where layer 1 is set to zynaddsubfx and layer 2 is set to setbfree, path2 layer 1 is set to fluidsynth and layer 2 is set to raffosynth, and so on. So you can send a CC signal to change from path1 to path2.
Another, in the current design of zynthian the layer is set to a midi channel. I will suggest an option to let the user change the layers to be set to hardware midi controllers. The idea is that if you have multiple controllers connected to USB ports, every controller could be connected to a diferent layer independent of the channel in the controller.

I know that this idea works on my mind but I don’t know if it could work in the real world, I also know that this idea could be counterintuitive.

I think the effect you like to have with your setup is the same as with my setup and within Zynthian it makes no difference if you have audio effects loaded into your layers or synthesizer engines. When you are working based on snapshots there are loading times necessary to jump to the next snapshot.

1 Like

Another idea: What about having something like a setlist that contains multiple snapshots and the ability to preload all the engines that are necessary for this setlist and it’s snapshots?
This is a feature that I know from this product:
I worked with this software product for some years.

From my experience, multi-channel program changes in a ZS3 snapshot will work efficiently with plug-ins having established program bank structures (like Dexed, Ob-Xd, ZynAddSubfx).

I don’t know how sFizz streams samples, but Linuxsampler gives buffer overruns in Multi Channel mode when calling a new SFZ with a program change on a single midi channel. If I try to program change 1.5 gig of SFZ ( pianos, eps, brass and organs), eventually the Zynthian stops making sound and I have to start over.

To prevent this we would have to pre-buffer every SFZ file called in the program changes of the ZS3 snapshot.

However If I use stage mode andload the 1.5 gig of SFZ across several midi channels, the samples are pre-loaded and I can program change all day without buffer overrun. The downside is that I can only use only 16 program changes. But it just works!

Don’t break something that just works…

The long term goal should be to

create a hybrid ZS3 in multi mode
to receive a program change from a controller then
transmit 16 sets of program changes in a snapshot
to up to 16 different synth engines
all on 1 midi channel or across 16 midi channels
with midi maps(octave low key high key low velocity high velocity)
and streams sfz samples.

Thank you! Sam

1 Like

I don’t know if there is a way to make my Idea more clear to see if makes sense for more people than me.

So, as I said my basic Idea is to have a third mode beside Stage Mode and Multitimbral mode. This third mode can be called Patch mode or Route mode, or anyway, the name is irrelevant.

This third mode could make appear a new menu entry with a list of midi inputs and a list of layers. So you can connect midi inputs with layers. Also, I think, there could be two sub-modes: Midi Input mode and Channel Mode. Midi Input mode if you have several controllers connected to zynthian and Channel Mode if you have one controller that send MIDI messages in several channels (like an organ with multiple keyboards).

This is an Idea of how this Menu Entry could looks like.

I don’t know if it’s understandable. The upper left encoder could select between Midi inputs, the upper right encoder could select layers, pressing the upper right encoder could make a connection. The numbers down the screen are the stored patches and you can use the down right encoder to move between patches. Evey time you move from one patch to another a signal all notes off should be send to all layers.

I think that, also, you could be able to change from one patch to another using Program Change or CC signals.

This is only an idea, I know it’s not very intuitive, even for me is difficult to explain it. I have try to learn Python and C++ in the past, but I’m not very good at coding. I feel like I’m demanding so much and giving no help. But I will try to help, it would be very useful for me to be able to connect several keyboards to one zynthian and change the engine on every keyboard at the same time.

Can’t you just use multitimbral mode, load in all the layers ahead of time and switch the output midi channel on the boards to achieve the same effect?

¿you say to change the midi channel on the midi controller? yes, I can.
But my problem is a little bit more complex. In my particular case I have two keyboards, one of them has a way to change the midi channel but is very obscure and impractical. I have try spliting both keyboards, it works most of the time, but is not always suficient.

I understand that this is a very personal problem and no one else really need something like this, I like a lot '70s music and those guys used several keyboards with a lot of sounds. I’m like a poor and less skilled version of a '70s keyboard player :rofl:

But I want to make clear that is a very specific problem to very specific songs that requires to quicly change the sound in both keyboards at the same time, is not a priority.

That’s fair enough. I have a board which is also fiddly to change the midi out channel on. :smiley:

1 Like

I have one Piano-Zynthian which is running a snapshot that loads PT and FS.
My second Zynthian is running synthesizer engines like OBXd, FS, ZynSub and SetBFree.

I am not loading any other snapshots the whole night but working with zs3 only.
Having an Arturia Keylab and an Kawai MP7 makes switching midi channels easy.

I have only two concerns. keeping loaded FS files in storage. I don’t know if it is possible to force FS to keep more than or file in storage.

And it would be nice, if we can save zs3 settings as preset and other way around to make it possible to load presets as zs3 into a layer. Maybe in webconf. It has never been a priority to migrate snapshots between versions so that it is always a pain to get the snapshots working after a major upgrade.
Maybe we should add versioning to the snapshot files and define migration paths via webconf.

We are spending some time trying to ensure this works for next stable release and will be asking for help from the community soon to test.

This is done in the sequencer to allow file format changes to be made and backward compatibility maintained. If necessary it could be used in snapshot but it is an overhead that builds with time so we try to avoid breaking changes. (Not too successfully in the past.)

1 Like

In my former band my setup was a combination of 2 real keyboards and a VST host software running on a PC. The PC was my third “instrument” and setlist management. The PC was sending program changes to my first Stage Piano and the first Stage Piano then was also sending a program change to the second keyboard by itself. All these three instruments have been sequentially connected via midi and the two real keyboards had their own midi channel. Switching all the stuff to the next song was very fast and easy.

I’m a big free software enthusiast. When I was younger I used Archlinux, with mostly the same synths of zynthian.

This is a video of my old band. I was using three keyboards. The first has piano sound, the second was connected with Pure Data for synth sound and the third was connected to setBfree (for organ sound) and zynaddsubfx for pad sound.

But three keyboards was too much, most of bars have no room for a drum and three keyboards. In order to play with two keyboards and quickly change the sound I used a Python Script. The script used D-bus messages to connect an disconnect Jack ports and send Program changes to the synths if needed. When I pressed a key in the querty keyboard the settings in jack connections and synths preset changed.

But at that time I was younger and I had plenty of time to make the Python Scripts for every session. Now I have a full time job, I don’t have enough time for scripting. I also have to say that I’m a sociologist, I learned python to make statistical analysis, but I have no programing skills at all :pensive:

Now I successfully replace the PC with Zynthian. But there is some times when I need to change channels in both keyboards, that’s very annoying but I can live with that. But I was thinking in a way to do this in a less annoying way. The other solution could be buy another keyboard where change channels is easier.