Dorico's Dynamic Curve (mapping to sample library)

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

best

e

that sounds like an expression map issue

e

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?

Thanks

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):
image

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:
image

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:
image

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

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:
image

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:

image

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

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!

2 Likes

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.

2 Likes

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.

Sorry if you already noticed this, but here is also my proposition of how exactly the dynamic curve could be set. In short, if it was a series of numbers (instead of one number), that would allow very much control in a very compact form.

I think this kind of simple numerical representation could have it’s benefits, since each expression map (or in the optimal case each articulation) could have a dedicated curve - that is a lot of curves!

2 Likes

At the least a simple table like Notion.

    <dynamic-map id="dvel">
      <dynamic dynamic="ppppp" value="19"/>
      <dynamic dynamic="pppp" value="19"/>
      <dynamic dynamic="ppp" value="31"/>
      <dynamic dynamic="pp" value="43"/>
      <dynamic dynamic="p" value="55"/>
      <dynamic dynamic="mp" value="67"/>
      <dynamic dynamic="mf" value="79"/>
      <dynamic dynamic="f" value="91"/>
      <dynamic dynamic="ff" value="103"/>
      <dynamic dynamic="fff" value="115"/>
      <dynamic dynamic="ffff" value="127"/>
      <dynamic dynamic="fffff" value="127"/>
    </dynamic-map>
1 Like

The Notion method could be a nice way to easily set the mid-points for dynamics, so the humanization option in the expression map can be re-enabled. How are these values plotted from one to another, a ramp or jump?

From my own experience, the curve editor used by Audio Modeling is quite neat - it allows to set the precise boundaries of the range for input and output, select the curve type preset and then manipulate the shape and slope:

It’s very smooth, but it doesn’t allow a lot of granularity. A very old one by TransMIDIfier (freeware) offers much more precision. Each CC value can be mapped individually:

image

It also includes curve shape presets and drawing tools.

Something like this per articulation in an expression map would allow an incredible amount of precision.

1 Like

What I have suggested is just under the CC choices of each BASE selection in the expression maps, there is another entry box with 8 columns . Here you assign a number (for the two CC,s selected above) for ppp,pp,p,mp,mf,ff,fff

2 Likes

Just a short note to close this thread with thanks to the team for implementing the custom range possibility in Dorico 5.

What exactly are you referring to here? You cannot specify a velocity range for say mp or mf. I still have to experiment with the minimum and maximum dynamic level settings in Playback Options to see exactly what effect they have on my setup, but the specific calibration of velocity and dynamics is not possible, I don’t think.

No, you can’t - but the new feature allows one to replicate and mimic a lot more accurately how the given instrument divides the 1-127 MIDI range between the recorded samples of various dynamics.

For example, I have the strings library with ppp-fff and a French Horn with pp-ff. With the new feature I’ve set the boundaries of the ranges accordingly in the expression maps - and found (to my surprise!!!) that I’ve only needed a manual correction once so far. And I’ve had several dozen custom remappings made!

Okay, that’s great, but still a little hit or miss. I still think it would just be much easier to define a velocity range for each dynamic marking for each expression map. It would save a lot of messing around and experimentation.

2 Likes