Why expression map is ignored and how to debug this kind of things?

Hi, I am building an expression map for Cinematic Studios Strings 1.7 (CSS).

I am not very experienced with expression maps, but as far as I understood we can specify up to 4 articulations and they will be chosen as long as there is a slot that represents possible combinations (which is slightly laborous, imho, as each articulation should just set its command, and defining the slots is a completely redundant thing).

However, I tried to build a very simple map for CSS, and it does not work at all. As if Kontakt 7 or Cubase, or CSS simply ignores messages from the expression map.

Precisely, I set several basic combinations: sustain, sustain con sordino, legato, legato con sordino, using key switches. In CSS keyswitch C0 sets sustian mode, keyswitch G#0 sets legato mode off with velocity < 65 and on with velocity >= 65, and with similar logic for sordino with keyswitch B0.

When I specify this four combinations in key editor, slots on the left in the inspector panel are chosen correctly. However, there is no variation of sound or visual changes of parameters. If I set manually keyswtich to, say, tremolo, and then play again, it just plays tremolo as if the expression map does not exist.

I put the MIDI monitor as a MIDI insert plugin, and the chosen articulations are logged as “Score”, without showing actual MIDI events sent, which is extremely useless and does not help me understand what is going wrong (by the way, it is also wonderful, that the MIDI events in the monitor are shown in the random order and cannot be sorted, really helps!).

Does anyone know what can be wrong here? I’ve spent already two evenings trying to understand what is wrong here without any success. Moreover, it is not clear who is to blame here: Cubase itself, Kontakt 7 or CSS.

I attach screenshots for key editor,

expression map setup, and the MIDI monitor.

I appreciate any help with this issue!

Do a search on this forum looking for a thread about Expression Map Builder where you’ll find a link to an online tool that vastly simplifies creating Expression Maps.

Well, I first want to learn how to make my own expression maps by hand before using any mediator tools.

P. S. I am actually solving the above problem of ignored changes in articulations by using multiple Kontakt instruments that accept MIDI events on different MIDI channels, so that each slot sends articulation messages on these channels, but it seems like redundancy to me as it supposed to work like that, with omni mode?

I believe Expression Maps aren’t smart enough to distinguish between MIDI channels. Is this the root problem you have experienced?

No, I use distinct MIDI channels in different slots to send MIDI commands to different instruments in Kontakt (I think it is called a multi instrument). Then each of these instruments is static, that is does not switch articulations because they do not work, and this is what I am trying to fix.

It seems that the problem is with zero velocities in the sent keyswitches!

From CSS manual, setting sustain notes with legato off can be done via keyswitch C0 with velocities 0-64 and keyswitch G#0 with velocities 0-64, respectively. However, using velocity 0 does not work in expression maps (it is ignored by CSS somehow).

I have changed sent keyswitches velocities from zero to one and it seems to work now. At least turning legato off with G#0 velocity 1 and on with G#0 velocity 65 works!

I am not sure where the problem is (who ignores a keyswitch note with velocity 0), but the problem seems to be not a showstopper :grin:

With CSS you can use CC58 for your joints
As an example, the Spitfire Audio version with the CC32 midi

and for my part I have never succeeded in using the articulation groups
I prefer to separate and use different midi channels but Kontakt must not be on omni for this to work

example of the different midi channels:


and the CC58 midi keyswitch


@Feudon, well several articulation groups allow to decrease the number of rows in the articulations lane, so it is useful to use here. The CSS are constructed in such way that there are about 15 mutually exclusive articulations, and most of them can be additionally in legato on/off mode and con sordino/senza sordino mode. If you program everything in one group, it will be much larger number of rows.

Yes, I was able to use this trick with different MIDI channels and having a static instrument in Kontakt on each channel. But it seems to be slightly an overkill to me as it should be possible to avoid using different MIDI channels. I have actually achieved this, as I wrote in my previous message, by avoiding sending key switches with velocity zero, as it somehow gets ignored by Cubase or Kontakt Player.

I hesitated to use CC 58 here, as most of the articulations require to send multiple messages on this CC, and I am not sure that Cubase expression maps are smart enough to send these messages separately. For example, to set low latency legato con sordino, one needs to send three CC 58 values with ranges 0-5 (to set low latency sustain mode), 76-80 (to set legato on), and 86-90 (con sordino). How Cubase handle three events on the same CC, I do not know. That’s why I went with keyswitches; they are also somewhat easier to remember.