I’m having problems with multi-layered timbres. As I’ve mentioned here in the past, there are huge GIG libraries that are divided into several .gig files.
In the previous version of Zynthian, I was able to work with them using midi clone.
In this version, we can point several chains to the same MIDI channel.
However, I discovered that the sustain command doesn’t work for all tracks.
As shown in the following screenshot, I have four tracks using channel 1. However, when I press the sustain pedal, only the first track obeys the sustain. The other tracks are as if the pedal hadn’t been pressed.
I also discovered that when I leave track 2 selected (as shown in the screenshot), then track 1 and track 2 obey the sustain pedal, the others don’t, and this happens again if I select another track instead of track 2, and so on.
This is extremely problematic in large piano libraries like the Black-grand, because each GIG file has samples of different dynamic variations.
It is worth mentioning that I tried both formats of layering, both “Easy Way” and “Cool Way”. I must say that in the “Easy Way” at least I managed to make the four layers respond to MIDI commands from the keys, not just responding to Sustain. In the “Cool Way” things got really strange, only track 1 was responding to messages coming from the MIDI routing channel. I tried using both “Add MIDI Chain” and “Add MIDI+Audio Chain”.
I just tried this and you are right that the simple way does not pass the sustain pedal to all chains, but that is kinda expected. MIDI binding of CC64 to an instrument’s sustain parameter is enabled by default as chain binding. This means that the chain must be selected for the CC to pass to it. (Or must be on the same MIDI channel for multitimbral MIDI inputs.) Enabling “Active MIDI Channel” only affects the note on/off and not the CC binding that takes a different path. (This is a peculiarity of zynthian that can confuse users but is a design decision that provides much of its power.) This may be resolved by changing the binding of CC64 to each sustain parameter using the “channel binding” method. (Sorry, I can’t test this just now.)
However, the cool way does work for me. If I disable “Active MIDI Channel” and add two instrument chains, both on MIDI channel 1. Then add an Audio+MIDI chain, also on MIDI channel 1. Then route the MIDI from the Audio+MIDI chain to both of the instrument chains. If I select the Audio_MIDI chain as the active chain and play, then notes and sustain work on both the instrument chains.
BUT, this does fail when using LinuxSampler (and probably other engines that reuse the same engine, like Fluidsynth, ZynAddSubFx, etc.). This may be because the MIDI channel presented to users (channel 1 in this example) is not what is actually driving the engine. We use different MIDI channels within the engine to route the commands to the relevant voice.
May I request you raise a support ticket by using the “Report Issue” button in webconf? This will allow us to track the issue and is more likely to result in a fix.
Cheers!
[Edit] I observe that with Active MIDI Channel enabled, the sustain parameter for all chains is being asserted when CC 64 is sent on any chain but this is not actually engaging sustain for that voice which suggests a flaw with the mapping of sustain parameter to voice in Linux Sampler. The behaviour is different for Fluidsynth where sustain only changes for the selected chain, no matter whether Active MIDI Channel is enabled or not. This definitely requires investigation and hence requires at least on issue report.
I found a solution to my problem using the “easy way”, in this case, on each of the tracks I go to my “MIDI CC” and select cc 64.
Now my complex pianos have a sustain pedal again!!!