Dorico's Dynamic Curve (mapping to sample library)

I’m struggling to properly align the dynamic ranges that Dorico generates with those provided by sample libraries. Dorico splits the expression range 0-127 into a fixed amount of dynamic ranges (6xpiano!!) and it doesn’t allow to remap the dynamic range to fit with the libraries that have only 3 or 5 layers.


For libraries that do not allow to remap incoming controller values, I tried playing around with this curve power number and limiting the expression range in the expression map. However, it takes a very long time and it’s mostly a guessing game. More often than not, my result is still a rather jarring misalignment: Dorico decides that a p is CC11 at value 48 but for the sample library that value is triggering a mf because there’s fewer layers.

What do people do if the library doesn’t allow for remapping?

Grateful for any help, especially with library like EWQL Play. I must be going about it the wrong way, so would appreciate some guidance… Thank you!

this is an area that does need fixing but you can get pretty close.

  1. First disable this function on the expression map so it’s linear .

  2. Assign both CC1 and CC11 to the articulation.

  3. Set the lowest value for both at 0 and the highest at 127

4.Write some music for this articulation across a few bars. this music and Shift D for the dynamics and write PPP < FFF > PPP over the entire phrase

  1. Make sure you can see the midi notes area of the screen and select the CC1 controller view.

  2. look and learn as to where the articulation gets louder and quieter.

  3. at this stage you can just add more notes ( preferably minims ) and make each one a dynamic greater than the one before. ppp,pp,p,mp,mf,f,ff,fff…

  4. Again reference this to the samples. Is it getting close. The problem area is mp to mf. There is always an unrealistic jump there.

  5. Now fine tune it. I’d start with CC11. Again this is really dependent on Instrument. Oboe’s will not go to zero but strings will.

  6. Only now would I use the Dynamic curve as a correction. My goal is ppp is the lowest and fff is the loudest and the both trigger the quietest and loudest samples respectively.

  7. Worse case you might have to go pppp and ffff but you probably won’t. This is a massive pain but essential .



1 Like

Cheers! Could I ask how exactly you adjust the CC values based on written dynamics, for example in #10? It seems as though there’s very specific user action that’s supposed to be taking place in your #7, #9, #10 but I’m not very clear on what to do apart from entering notes and writing the dynamics. Many thanks!

All this is done on the Expresion map page. Have you made an expression map ot are you using a stock one ?


So you are making expression map entries for dynamics specifically?

well yes. You are setting the parameters but it’s for the whole expression map. But have you made one…are you using one ?


I haven’t gotten yet to serious playback (just writing presently) but will get there in a few years … with BBCSO I’ve noticed this, the French Horns can really blatt.

I’m using the stock Steinberg map - anybody know if this was done for that map?

What I’ve done is write out the exact value Dorico assigns to each dynamic (ppp to fff) with the curve set to 1, humanization disabled and the full range of controller available (1-127). I’ve also done this for various combinations, such as reduced controller range (say 5-115) and various curve power settings (1.45 and so on).

Writing them out like this allows me to see the closest combination between the curve/range that Dorico generates and the library. Based on this, I usually follow two options: either I modify the expression maps with these values or instead I remapped the curves in the library itself.

Since I’m not mathematically gifted, it takes me literally hours to do this. The obvious issue is of course the mp-mf range. But the real problem is that Dorico doesn’t allow me to modify the curve by mapping the exact Input to exact Output, which would make adjusting the dynamics a breeze:

My issue right now is PLAY - no matter what I do in Dorico, I get crazy jumps between p (which sounds like ppppp) and mf (that sounds like FFF) and Dorico’s curve simply won’t get into the shape I need to match these layers properly.

I should add. I have disabled velocity. That isn’t being used at all



that sounds like an expression map issue


May I ask which Play version, which library and which instrument you are trying this on? I have a bit of experience with East West Play and Opus. Perhaps I can help.

@derAbgang thank you very much for this. I’m on Play 6 and my issue is with Hollywood Strings. I am not able to distribute Dorico dynamic levels properly - the ff is already triggered at mf or f dynamic levels and pp is still playing at mp.

Sorry, should have asked before, could you send or screen capture your expression map?


If @dspreadbury or Paul are reading this, perhaps an example can illustrate the issue more clearly:

Here is the number of dynamic layers available in Berlin Percussion snare (seen in Kontakt version):

Since this is a lot of layers, it’s relatively easier to get them to match to Dorico’s dynamic curve. Very helpfully, Berlin libraries also provide additional tools - a way to compress the range (Vol. Range at bottom left) and an option to remap incoming controller velocities with either freehand drawing or applying common presets:

For velocity based instruments like that snare, the remapped curve might end up looking something like this, with very specific cut-off points that move from one dynamic to the next:

But another library from Orchestral Tools (Berlin Woodwinds) has a totally different range of dynamic layers recorded. Here is the flute:

Given the physical construction of a flute, it makes sense to have exactly these layers as the most characteristic representation. But in order for this flute to respond properly to Dorico’s written dynamics, the expression curve might have to look something like this:

Of course this is not possible to achieve in Dorico - it seems to have a fixed center point and a single curve type.

Other libraries, such as Sample Modeling, suggest that the mapped range should not extend beyond CC11 value 95 for common (nat.) articulations and values above should be used for special purpose/articulations:


Perhaps a curve like this might be more appropriate here, limiting output at 95 for specific articulations:

This is obviously also not possible in Dorico. The most I believe it can do is apply a high curve power value (perhaps 4?) but from my experiments it appears to simply stop bending above a certain point even while accepting higher and higher curve number.

Even more frustratingly, Dorico is obviously making and applying calculations for the basic curve it uses, but they are not visible to the user. The only way I’ve found to match these is by manually trying various combinations of curve power index and the restriction/reduction of the controller range.

The problem with this mismatch is the volume balance in the mockup. The wrong dynamics are triggered too often, forcing the user to adjust via volume gain and drawing automation to balance volume instead of building expression.

But many instruments have specific and characteristic sound color at the given dynamic levels (especially woodwinds, brass and a lot of percussion) and they end up sounding out of place regardless of the volume gain applied.

If I’m having a major misconception about this topic, I would really appreciate a clarification and correction. If not, perhaps it’s possible to consider user adjustable dynamic curves for Dorico 5? Many thanks!


Thanks very much for the detailed discussion, it’s very helpful. We would certainly like to improve this area, but I can’t make any predictions about when we would be able to do so.

1 Like

So I set this all up and tested and the perfect incantation for SUS 13 RR KSFP NI (both Violin 1 and 2) is:

  • Dynamic curve=1 (Playback Options)
  • Humanize Dynamics: 0 (important) ( EM overrides)
  • Volume Dynamic: CC1 1-127
  • Secondary Dynamic: CC11 1-127 (this can be compressed to taste)

Was as smooth as silk. But I see above you have larger issues with other libraries, but maybe my testing may help with Hollywood Strings.

As much as I appreciate the myriad options using Play+Hollywood, you will be pleasantly surprised that Opus consolidates these into much more manageable instruments.

1 Like

I have requested more granular editing for the velocity curve going back almost three years. See this post after the release of v.3.5:

Suffice to say that it will be a most welcome addition when it arrives.

1 Like

Thank you for this. I am trying the ranges you mentioned, and while the curve power of 1 gives a completely flat response I realized in the middle of this that if I reduce the range in the opposite direction than I had been doing before (in other words, 7-127 for CC 11 instead of say 1-124), then I find the response I am getting to be more convincing: a p sounds more distinct vs a pp and the ff doesn’t hit quite as early as before. That’s such a relief!

The only question I have remaining is why you use CC1 as the main controller - according to the manual in that particular patch it drives the vibrato, while the main expression runs on CC 11. Curious!

I never thought about it this way before, but Dorico is the place where all the orchestral libraries get together - in this sense, Dorico is an integrator and a facilitator. This raises the value and utility of various matching tools, curves, ranger expanders, CC re-mappers significantly. At the moment, it’s other way around - Dorico provides almost zero support it, so making mockups and well-matched templates is a huge pain, as evidenced by reliance on Note Performer and a bit of MuseScore envy.

Still, I’m hopeful the day will come sooner rather than later!

The other thing that would be very useful is to be able to load saved endpoint configurations into a project without them having to be specifically part of a template. Everyone who does mockups has multiple string libraries, for example. Not to mention the hundreds of piano libraries we all have! Ideally you would be able to mix and match libraries into various endpoint configurations that had unique names for their instruments like Opus Violins 1, VSL Synchron Violins 1, CSS Violins 1 etc. I understand the reasoning behind the way templates work - if you have Halion installed and you create a violin staff, you will get a violin sound. But with multiple libraries, we need much more flexibility in loading them. Again, this is something we’ve been talking about for several years. I’m certainly not bemoaning the huge advances in the program over that time, and I’ve learnt to adapt to the way Dorico presently does things, but these additions would really make a difference in the way a lot of us work with multiple libraries.


The only question I have remaining is why you use CC1 as the main controller - according to the manual in that particular patch it drives the vibrato, while the main expression runs on CC 11.

Nothing more than bad habit. It should be CC11 but for this small test, it didn’t matter as the secondary controller was correct. Sorry for the confusion.