ExpressionMap Helper Tool

I have created a small cmd-line tool which is useful for setting up multi-group expression maps. This tool is called Expression Map Zoom (emz) and will automatically generate all the group combination sound slots.

See a short video demo here:

Download latest Release here:

Short Manual here:

Please let me know bugs, comments or requests.


I have a special request:
Would it be possible to remove duplicate elements such as Controller number from Output Mapping in the end result?

Let me explain:
for arco I have for example CC20 = 0 in group 1
for staccato I have CC20 = 5 in group 2

Now your program returns logically for arco + staccato: CC20 = 0 and CC20= 5, though I would like it to be only CC20 = 5.

It’s an interesting idea to keep only the last of a particular cc, though the way things are implemented now it would be a lot of code to do that. So it will have to go on the list for the future. You should also consider that this is a problem for you in the way you’re using cubase expressionmap groups. In that example if you only send the cc for one group then the other group is not being represented at all. For that reason you should not be using the same cc# for two different groups. I’d like to understand more about why you would be doing that.

And actually you will have similar problems with key switches too if you are not careful about mutual exclusivity. What I mean is that each group generally should be a mutually exclusive group of key switches from your instrument. That will depend on each instrument but basically it will preclude the use of two key switches or cc switches where the second one cancels out the first. Those should be in the same group.

Also, emz creates all possible combination sound slots, consider that there is already another sound slot generated that has the reduced set of of midi messages. So just delete the sound slot row with the duplicate cc# since it’s actually not a valid condition. It’s relatively easy to remove a couple unwanted sound slot combinations.

But if you have another use case I’m not thinking of, please tell us how you’re trying to use exorrssionmap groups!

Thank you for your interest.

I am not trying to use groups. I have a very complex setup which works beautifully. But every time I need to add a new articulation I have to cover dozens of additional combinations, each containing multiple CCs. This is where your great tool is very useful for me (if it can exclude already used CC number).

Having same CC# in different group could never happen, simply because I put all CCs manually for every combination. This is not the case for your tools which (rightly) adds all output mapping entries.

Let me give you another example of use case.
Consider the following Expression Map:
arco: CC20 = 0 (Direction Group 1)
legato: CC20 = 10 (Direction Group 1)
Tremolo: CC20 = 15 (Attribute Group 2)
(See GIF)

Let’s say we have one tremolo note within a legato passage.
Let’s play this passage:
1st note legato … 2nd tremolo … 3rd note back to legato.

If another CC# is used for Tremolo in group 2, say CC30 = 15, then using your tool, legato will play AND tremolo will also play at the same time for the second note. Because CC30=15 (tremolo) will just be added to CC20=10 (legato) for that slot.

If I put Tremolo in the group 1 as the other directions, we will have:
1st note legato … 2nd note tremolo … 3rd note (no articulation) arco! (should be legato)

As I said, all combinations are generated. You can remove the sound slots that you don’t want

I need all possible combinations on the contrary, removing sound slots is not the solution.
You kindly asked for more information, hence my - apparently pointlessly detailed - previous post.

I have more than 600 combinations for every instrument so your program would have been a lifesaver.
Unfortunately it won’t work for my use, but it will for most users.

Again, great initiative, and great tool.
Thanks for your time and this offer for the community.

no not pointless. Sorry I was away from my computer all day.

So in the example you have given, what I can say is that the expression map lanes you have shown SHOULD play legato combined with trills. That is actually how you have it notated. I totally understand you that what you want is to be able to use legato direction that goes across the entire phrase, even if legato is turned off while the trill is happening, despite how the lane appears…and the expression mapping feature totally supports what you are doing…so power to you, why not.

Unfortunately this is not going to be in scope any time soon for emz, because it will require quite a lot of work for me to do as you are hoping for one thing, but I also I will have to think a bit about how to incorporate something like that that won’t make emz complicated for everyone else.

I will add some comments to my gitlab issue tracker about this, if I can think of something clever to do in the future that may help this use case then I’ll add it later.

1 Like

The other part of this is that its not just repeated CC’s that might be a problem for a situation like what you are doing, but it could be keyswitches or program changes also. In some ways it will depend on numerous factors, dependent on your specific use case, so I’m not really sure a simple command line tool can just leave out keyswitches automatically in any way that makes universal sense. But I get what you’re trying to accomplish and will put some thought into it.

1 Like

Yes you perfectly understood. Thanks for taking the time to read. And I well know that coding takes precisely a lot of time, which I hope you will find in the future to add options and improve your tool.

Furthermore, I think, the Expression Maps feature in Cubase could have been able to do what your program does, by itself internally. I mean, the user would only enter distinct articulations without any combination in the Expression Map setup, and Cubase would do the job of combining articulations and their CCs, key switches or program changes etc. on the fly, while playing. That would be ideal :wink:

Yea I wish the expression map editor were just better. The biggest problem I see with the editor, though there are many, is that it has a bottom-up approach to entering your expression map. What I mean by that, is that you have to enter all the the possible sound slots as the first primary task. Then you add the combination of keyswitches for each slot…(which is the really laborious part), and you assign each slot to 1 or more groups as articulations; and then in the lower right the slot visuals appear in the bottom right pane… That lower right pane is the “top”. That is what defines what you will see in the piano roll…whatever ends up there.

A much better design would be to provide a top-down editor. I want to define the small set of things that will appear in my piano roll (what is not basically in the lower right pane)…and define the keyswitches for each one there too!.. Then the sound slots can all be generated automatically from that. So yes, basically what you are saying above. We shouldn’t have to re-enter over and over and over again, for various combo sound slots, that A0 is the keyswitch for legato, for example.

There is an upside to the bottom-up approach which is for example the approach you are taking…being able to edit each combo sound slot to exactly the combination of switches you want enables unique possibilities for each of those combinations to be anything you want it to be…whcih can be useful. For example the way you are using it, to have Legato+trills = keyswitch for trills only.

another thing to consider in your case… perhaps make “legato” the default. In other words, I don’t know about you, but I nearly always have legato turned on. That is the default case. What I prefer is for all notes to be legato UNLESS I specifically tell them not to be. And most times legato modes are also facilitated by the way you play the midi notes with the previous note holding slightly past the start of the next note, etc… So you can have legato mode on…and still play some notes in a non legato way. Usually. Also if you have some articulation where legato is not applicable…then fine…the instrument will probably do the right thing.

So what I’m saying is, rather then need to have “legato” for the whole phrase, why not make it normal to just always have most nearly all phrases be legato… and then if you articulate something that for some special reason you need to make sure it will not be in legato mode…then fine, you can have an expression map marking for that case.

In the above…it may not be necessary to have the situation you outlined, you can setup a more simple setup and zoom out all the combinations with emz in that case.

1 Like

Sorry for the late response.
I agree with you on all points about the Expression Maps setup design.
The whole Expression Maps, its setup dialog window as well as its core functioning need a major overhaul.

Regarding logato set as default, in my case I do not prefer. Because my legato articulation is too complicated and need more resources than arco, as I do not create legato just by overlapping notes.

For the moment the best news is that I did another quick test with your tool and I think that it will work for me the way it is now finally. Because the controllers are sent in order! as I suspected.
So for example if I combine arco (CC20=0 in group 1) + staccato (CC20=3 in group 2), the resulting slot from your tool is “arco + staccato” and its output mapping contains CC20= 0 + CC20=3. And what is lucky, and as I expected, is that those two controllers are sent to the instrument, as I said, in order. So the latest wins. This means CC20=3, and this is exactly what i want. So, this is great so far.
Now I am going to test it with my full real expression maps, +60 articulations resulting in thousands combinations! and see where it goes.
Be warned, If my computer explodes, I will claim damages :face_with_raised_eyebrow:

One thing is certain: Expression Maps setup, as it is currently designed, would benefit greatly from the function of your tool, natively.

Glad to hear it still may help. If nothing else I think it’s still easier to remove extra key switches then it is to have to create the combinations. So not perfect but still helpful.

That being said I haven’t forgotten your scenario and will continue to try to think of a good solution. I’m busy on music projects for the rest of this month though.

1 Like

Music is more important :wink:
Take your time.