Expression Maps Condition Ranges

I’m not quite understanding how to set up ranges of note lengths in an expression map. I have a library with 4 note lengths: staccatisimo, staccato, portato, and sustain. I’d like to set it up to play back the proper length for each of those. I can’t get it to work and I’m wondering about the current functionality.

If I set a condition of Note Length == short, does that interpret that as only notes that are precisely 0.375 seconds? Or does “== short” actually mean the range from very short to short, or the range from short to medium? I can see how you could get 3 ranges by using <= for the shortest, no condition for the middle, then >= for the longest, but I’m not seeing how to get 4 ranges.

And then of course it’s crazy that there are 5 length values hard-coded in. It would be significantly more functional and clear to be able to just set a range in seconds for each condition. Wondering if there’s anything more that can be done in the current version of Dorico and then also hoping for some improvements to this feature soon.

I believe “== short” should be the range from just above very short to short. So it should be the same as matching “> very short AND <=short”.

I was working on it today for Orchestral Tools library. After fiddling with it somehow I had some satisfactory results. I am not an expert, and just started learning expression maps.

This is how I did. I used staccato for anything shorter than short. Because you have staccatisimo (I don’t have it), staccatisimo should be less than very short. Portato probably less than long (or medium). My library has two portato long and short. I did long to less than long, short to less than medium, that worked perfect for me. sustain should be the rest of the natural, so probably does not need to be defined after you do all the shorter articulations.

I tried both velocity and CC1 as dynamics. Did not have good luck with velocity yet. So, I was only using CC1.

I’m also working on the orchestral tools woodwinds. Thanks for your advice, I’ll try those ideas.

I think you are better off using <= and >= rather than ==, so there is no confusion!

Debatable, but personally I don’t think this warrants “crazy” and certainly not “of course”, especially as you admit up front you are “not quite understanding…”.

I don’t think many users can readily translate a semiquaver at q=56 to 0.268 seconds, or would even want to.

And then there is the stylistic question. There may be many situations where you do not want to trigger staccato, simply because the note duration is short.

The thing is wasn’t understanding is the behavior of ==. I entirely understand that in general this feature is currently half-baked, as quite a few previous forum posts can attest.

The people building expression maps are not average users. Doing the math to figure out the break point between 2 articulations is significantly preferable to being forced into a break point that doesn’t sound right on the sample library you’re using.

The fact that sometimes I’m going to have the expression map not use the length because some other expression marking takes precedence doesn’t have anything to do with this. If the break point between when expression A and expression B sounds good isn’t one of the 4 arbitrary lengths hard coded in, it’s a failure of the software to not provide the flexibility that power users need to construct good expression maps.

I suspect there might be performance reasons why these arbitrary categories of length were created. It may be computationally less expensive for the system to classify each note in the score as falling into one of five length categories, and then it could simply determine which rules applied to the note with a category match, an integer comparison. Otherwise, it would have to go the route of comparing the actual length of the note with the timespan in the rule, as a floating point number. Floating point operations are generally more computationally expensive than integer operations. The system does have to be able to process all of these rules incredibly quickly so that it can calculate the correct CC values/keyswitches/etc for the score after making a change. You can already see some of this lag in big scores when making certain changes to the expression map.

I expect that matching “< very short” would probably match nothing, so if that was a condition for the staccatissimo, it would probably never trigger. The very short category is anything 0.1875 seconds or less I believe, so anything between 0 and 0.1875 seconds should be classified “very short”. I would expect “< very short” to mean “any category of note length shorter than very short”, and there is no category of length shorter than very short.

1 Like

May I ask where you are getting these numbers?

EDIT: was too fast with the documentation

This was a chart someone posted either here or on the VI forum that I copied into a google sheet. It might be helpful but at the least it illustrates the relativity of the current note length system.

Screenshot 2023-12-11 at 9.42.28 AM

1 Like

I mostly find that where these note length conditions start to get a bit limiting is with portato, as portato notes are generally fixed length unless they can be timestretched, and so the range of note lengths and tempi that they can accommodate may be quite variable and library dependent. This is where the system of five note length categories can feel very limiting.

Personally, I try not to overuse these note length conditions for unmarked sustained notes, or slurred notes, because otherwise it is easy to get into a situation where in one tempo and context they work but in others they do not. If you do use them, you have to spend a long time testing them with different tempi in different situations to make sure they do not trigger in any places they are not welcome. This is unfortunately frequently the case even with some of Steinberg’s official expression maps, where it’s not too hard to find spots where they musically do not work (ex. their map for Berlin Berklee often triggers staccato playback for very short legato notes, which is a very different effect and doesn’t really work in many cases).

I have no qualms about using note length conditions for staccato and staccatissimo because those notes will need a mark over them like a staccato dot, and so probably the risk of using these playback articulations where they really don’t work is very minimal.

I will also use these conditions to switch between regular legato and agile legato for libraries that have this distinction, as it is helpful when note values get faster.

Portato is a particularly tricky situation because it’s very hard for Dorico to really accurately predict with the current ruleset whether a portato articulation would be called for in the case of a regular note with no markings at all on it and no slur. If I was implementing portato playback in a library, I would probably link it to the technique associated with the “staccato-tenuto” articulation in Dorico. Because you won’t always want the staccato and tenuto markings to appear in the score, you probably would also create a playing technique that you could use to manually trigger the same combination and result in a portato playback, and hide the playing technique so it didn’t change the printed score. Or, simply make your own technique, if portato is not in the playback technique list. I feel one of these methods would be safer because then the composer is in control of when portato is wanted, rather than having to fight the program because its ruleset is making it try to use portato where it doesn’t work musically.

Ideally, I feel that a default expression map should be making choices that, while may not always be the absolute best articulation/sample choice for the particular musical situation, are unobjectionable in musical terms. The composer can then add hidden markings if they want to take more direct control over a particular situation.


I’m indeed having the most trouble with portato. Certainly I could use hidden playing techniques to manually set things when needed, but my hope is that the conditions will become more usable in future versions of Dorico so that hidden playing techniques are needed less often. Adding a bunch of hidden instructions for playback is so Sibelius.

Hm, it’s not clear in the documentation. My assumption would be that “< very short” would just mean less than 0.1875 seconds, so basically the same as “== very short”. But I haven’t done testing quite yet to figure out how Dorico interprets the various logical operators.

Although I don’t know the Dorico internals any better than you do, I have some programming experience, and I suspect the way that it handles things internally is that it it assigns integer values to the categories - perhaps 0 for “very short”, 1 for “short”, 2 for “medium”, 3 for “long” and 4 for “very long”.

I think the logical operators (equal to, less than, greater than) are in relation to these integer values assigned to the categories rather than the actual length. So “note length < very short” would mean “note length category integer value < 0” and would match nothing, since there is no category of note length that has an integer value less than zero. “Note length > medium” would mean “note length category integer value > 2” and would match notes that are in the “long” and “very long” categories, as those categories have integer values of 3 and 4 respectively, which are greater than 2.

I believe this is accurate - although I have tested this before, it’s been a long time, and so I’m not 100% confident. The documentation is a little unclear on this, as you say, which doesn’t help. It would be great if someone from Steinberg could jump in to clarify.

1 Like

That makes sense. I think some minor edits to the documentation could make this much more clear: Expression Maps dialog

Third column: Controls the note length used by the condition. The following note length ranges are available:

  • Very short: 0 to 0.1875 seconds
  • Short: 0.1875 to 0.375 seconds
  • Medium: 0.375 to 0.75 seconds
  • Long: 0.75 to 1.5 seconds
  • Very long: Any longer duration
1 Like

I actually agree here by and large and have argued a number of times for a much more flexible range. Relative note lengths obviously vary with tempi and different works or indeed even movements will require different approaches. I’m sure it will come in due course.

And as for Janus point that you may not want to trigger staccato just because a duration is short is to me no more than stating the obvious – that’s why you will have a manual override in your map for when even the best set note lengths fail.


Me, I associate staccato with notes specifically marked as such, and use conditions where there are options for detache and/or portato.

For me the unusual one is staccato+tenuto, which to some people indicates duration only, whereas to others it indicates, in addition, a sharper (staccato-like) attack. Dorico seems to favour the latter.