MIDI Clone Wars

Hi Zynthianeers!

When discussing recent changes, @jofemodo proposed dropping the “Clone MIDI” option but decided against it because there was widespread use and affection for the feature. (FYI Clone is a feature that allows the notes and a user-selectable set of CC from one chain, to be sent to other chains and was introduced to solve issues with the core Zynthian design.)

We are working on significant changes to the core architecture which we believe will render cloning redundant, i.e. it will no longer be required to implement all the functionality of Zynthian. To avoid inadvertently breaking your workflows we would like to hear of the various ways you are using cloning.

Will you please describe how you currently use cloning and what workflows it is supporting or what issues it is solving? If it helps demonstrate your workflow, attach snapshots. It will be beneficial if you describe what you want to achieve as well as how you are doing it - there may even be a discrepancy between your aspiration and your achievement, i.e. the current tools may not fully support what you want to do.

The purpose of this exercise is to ensure that we haven’t missed some interesting use of the feature. (We may be too focused on how we use it or the workflows it was designed for.)

No matter how much or little you use cloning, please contribute - your help now may reduce the impact future changes have on your workflows. :heart:

5 Likes

Hi @riban!

My use-case for clone is layering sounds. I mean, making several chains to play unison.I can’t remember using it for something different.

Regards,

4 Likes

Hi @riban :slightly_smiling_face:

My use case of the cloning option is pretty much the same as @jofemodo.

I employ it when I want to drive the Zynthian Daw-less with layered sounds, and therefore need a way to redundate the same midi data to different instruments on the same channel.

I add that introducing ranges/keyboard zones in the channel cloning would allow for embricated patches, with partial layering, and therefore open the door to articulated acoustic sounds, built with different synthesizer timbres.

2 Likes

Hello @riban

As mentioned by @jofemodo, the MIDI clonning feature is important for assembling layers, being able to mix sound engines, such as assembling an LA-Piano, mixing a Fulltines from Dexed with an AC-Piano from Pianoteq or FluidSynth.

But in addition to layers, another important use of MIDI cloning is the use of GIGA libraries composed of multiple files. Like this example in my print:

Here we have the famous White Grand from Sampletekk, it was made up of 4 GIGA files, one containing 4 sets of samples for very strong triggers (HV - High velocity), another with 4 sets of samples for medium force triggers (MV), another with 4 sets of samples for low force actuations (LV) and the last with only samples of key release sounds, creating a set of 12 force levels for this huge piano library. All of them need to be cloned from channel 1 for the piano to work fully. The idea is that when I play strong only the GIG of channel 1 is played, with medium strength only channel 2 and so on.
Of my libraries in this format, I have the Sampletekk White Grand, the Sampletekk Black Grand, the PMI Emperor, the Vintaudio Yamaha C7 and the Vintaudio Upright collection.

3 Likes

Hi All!

Yes, Clone is important when layering, key ranging, splitting and transposing. Clone also involves the Midi filter rules.

I use multi mode and a snapshot with pre-loaded LS instruments. This gives me the best streaming performance and a consistent sound. Of course one could use Dexed or OBXd in a mixer slot:

My LS sfzs are pre-coded to respond to continuous controllers 1, 64, and 71-79.

Program Change 0 is a layer of Piano, DX, and Brass:

Program Change 3 selects a LH Piano split at E4 F4 with a RH Brass. This uses the same Clone as Program Change 0:

Program Change 7 selects A Piano DX Brass Layer with Bells at G5 and above:

MIDI filter rules could be used. This is a split at Eb3-E3 with a Clone to MIDI 4:

IGNORE CH#0 NON#64:127
IGNORE CH#0 NOFF#64:127
IGNORE CH#3 NON#0:63
IGNORE CH#3 NOFF#0:63
MAP CH#0 NON#64:127 => CH#3 NON#64:127
MAP CH#0 NOFF#64:127 => CH#3 NOFF#64:127
IGNORE CH#0 CC#0
IGNORE CH#0 CC#32
MAP CH#0 CC => CH#3 CC

It sounds like we might be considering a Korg- Yamaha- Roland- style performance or combination:

Use a Global channel (MIDI 1) at the mixer level
Assign each mixer channel to Omni, Global (MIDI 1) other (MIDI 2-15) or Off
Transpose, semi, key range, Note On/Off, AT and Clone list

At the end of the day,
It is about coding, layering, splitting and mapping with the least amount of work……

Hope this helps! Thank you again!

Happy Holidays!

Sam in NJ USA

4 Likes

I am cloning channel one to other channels to layer synthesizers.
Would prefer each channel could receive on a different channel and the unit would recieve on all channels at once.

I do use MIDI Thru a lot and rarely MIDI Clone but when I do, it’s for layering.

Hi. I have to left this forum for a while, but I’m back now.

Maybe I’m using zynthian in a wrong way but I use MIDI clone in trhee ways:
1.- Layering
2.- Splitting
3.- Change engines with PC

The 1 and 2 are self explanatory. The 3 is more complicated, I have comented that in other threads but I think that is worth repeat it here.

I know that engines could be quickly changed in stage mode, but I need to use multitimbral mode in certain songs.

So, my solution is to set a engine in the first layer and clone it to the second layer. I use Midi filters to silence the first layer and save in a ZS3 stete, then I silence the second layer and save in another ZS3 state. Now I can change engines using PC.

I don’t know if there could be a consensus on what is the best solution to this. But I would like a way to use PC to change what channel is set to what engine.

Happy Hollidays to everyone. And thanks to zynthian developers for this amazing work.

2 Likes

Hi Brian,

I am using cloning only for layering sounds. It is a little bit problematic since every layer needs to have its own MIDI channel… It would be more realistic when I can put several engine on one MIDI channel (like it works outside of Zynthian).

Thanks for your effort!

Regards, Holger

1 Like

In the transition to the ‘new’ approach to MIDI allocation how might the cloning requirement be addressed?

It would seem to boil down to selection of the MIDI channel on Engine instantiation.
If we allow MIDI channel to be set to any channel including existingly used ones rather than exclude already allocated channels from the list it would perform as required fro the clone mode and that separate option could b removed?

If It does provide an alternative then it would be sensible to
1/ provide a mechanism to transport Cloned structures to the ‘New’ Approach
2/ Remove the clone option

IF the clone menu item , however, could make a specified number of chains of a chosen engine, initially, all on the same MIDI channel, then it offers a rather more useful function. that also removes a lot of the zynthian MIDI reliance that is something we’ve spoken of moving away from.


@wyleu Your post seems to me to be focused only on the transition between existing snapshots and new ones.

For me, the removal of MIDI cloning raises more questions, such as:

  1. How to use GIGA libraries divided into multiple files (as shown above)?
  2. How to assemble layers using multiple engines?

But your specific post made me even more curious (and worried). What do you mean “Reduce Zynthian dependence on MIDI”?

The chains in the mixer are logically locked to the specific MIDI channels and this has imposed limitations and also there are situations where choice of a MIDI channel doesn’t really make much sense. Using the Audio player for instance, which selects any MIDI functionality required ( Pitched playback) from within it’s own GUI pages.

This has proved to be a limitation and as I understand it the chain_manager rewrite is attempting to increase the overall flexibility of the MIDI control infrastructure.

Don’t worry too much about my suggestions, they are simply that, and I’m about to get told off…

1 Like

@wyleu had pretty much described what we are developing. Ability to assign any MIDI channel to any chain without the limit of each channel being used only once. This would allow the layering and splitting (keyboard / level) currently performed by cloned channels. @Jeremias I think this supports your workflows.

One reduction in functionality that such a scheme would introduce is that you could not select the base chain to play all cloned chains then select a child chain to play just that chain. I haven’t heard anyone yet say that they use that workflow.

The idea of changing the use of the word, “clone” to mean creating a new chain based on an existing one is something we discussed last night at Zynth Club as well as the idea of importing and merging partial snapshots, e.g. just one chain.

2 Likes

I don’t understand what you proposed here @riban, how would the “new format” work?

However, speaking to the topic of layers, an advantage of the current format is that we can add a sound engine to each track and add effects to that track only. Something very similar to what is possible with the Korg Trinity and Kort Triton Combinations.

Each chain would have MIDI processors / synth / audio processors. Each chain would have a MIDI channel (if it has MIDI processors / synth). Different chains can have the same MIDI channel. So instead of cloning from one channel you could use the same MIDI channel on all the chains you want to layer.

More details on “chain manager” branch:

  • It’s also possible to receive ALL MIDI channels in a single chain. This is specially cool for pure MIDI chains.

  • Active channel is exactly that, what makes a big difference when compared with current “active channel” behaviour. I mean, you could have several chains configured to listen the same MIDI channel, but only the active chain will receive MIDI from devices using ACTI mode, no matter the MIDI channel, so you wouldn’t get all chains in the same MIDI channel to play unison when using ACTI mode.

    • Should we have a kind of “ACTI_CHAN” mode to allow easy layering?
    • Or should we re-implement the clone feature as “clone to chain”?
    • Perhaps a “clone from active chain” flag in chain options?
    • Other options?

    I’m thinking about it. Ideas and comments are very welcome!

Regards,

3 Likes

can’t remember if it was mentioned but I’d love to have the MIDI capture screen and possibly the MIDI selection screens show incoming MIDI against their relevant items so it’s easy to see what is coming in from where…

I tried to do this but it was rather challenging due to the message flow. There have been a couple of changes which might help but it may still prove challenging.

That occured to me as I was typing my previous reply. We will lose the ability to layer in ACTIVE (STAGE) mode which is of course rather desirable. We do want to retain that functionality.

Hi @samriccijr :slightly_smiling_face:

The detailed survey of your Midi Cloning use-case is fairly interesting.

Could you maybe - possibly with some further assistance from @riban - expand a bit on how you set Midi rules in Webconf, so as to define ranges and splits of different instruments/chains, receiving on a cloned Midi channel?

There seem not to be much info available in the wiki, about this subject.

Hello

I recorded this short video to demonstrate the use of a library made up of several GIGA files in Linuxsampler: