The humanization Plugins for long note I have developed : your thoughts? (Free download link)

I started using my pluging HumanizerHost in my Dorico project as a test. Here is a demo with the plugin disabled (no midi CC at all) and with the plug in enabled . The benefit for those who do not want to spend hours programming their midi CCs is clear I think in this demo. I hope Dorico will implement similar logic in the future for the humanization of long notes.

THE DEMO

Without the plugin : no midi CC, standard articulation map for Spiifire libraries - Sounds really dumb

With my plugin “HumanizerHost” (beta version) : out of the box with the curves I set for strings, woodwinds and brass for dymaic and vobrato of long notes

WHAT’S NEXT ?

I am not a plugin provider and it was just a proof-of-concept to demonstrate (to myself first) the benefits of the logic. I don’t see myself doing the marketing, the sale and the maintenance and programming the evolution of plugins. I hope pro of the plugins industry will provide similar solution. it is a good in-between of Noteperformer engine (who could provide such logic, the plugin and the instrument library being independant). But you can choose and layer the libraries of your choice.

Franck

Hi my friends, thank you so much for your inputs so far about the humanization of long notes. As suggested, a phrase humanization is a nice to have. So I developed a new version of my HumanizerHost with two example for your feedback regarding the logic. Again I hope Steinberg or plugins developers will implement this logic. I am still questioning my self about distributing this plugin, but it means I have to provide the support to the community for future release and user support, so a huge responsability in particular for those choosing to rely on this plugin for their templates. But why not if many hands are raised for such plugin and considered as ultra helpful for those who needs an alternative for humanization.

PHRASE HUMANIZATION - NEW FEATURE

No phrase humanization

With phrase humanization

Same MIDI, same library, same mix, no dynamic marking in Dorico. The only difference between these two renders is a feature I’ve been building into my free plugin HumanizerHost: phrase-level dynamics.

The problem

When a real player plays a phrase, the dynamics follow the melodic line almost unconsciously: as the line rises, they give it more; as it falls, they ease off; and at the end of the phrase, the sound tapers away instead of just stopping. Notation playback and step-entered MIDI have none of that: every note gets essentially the same CC level, so a musical line comes out as a series of equally-loud events. That’s a big part of why mockups sound “sequenced” even with great libraries.

You can of course draw all of this by hand in the CC lane — for every phrase, of every part, of every cue. Phrase humanization does it automatically, from the notes themselves.

The logic

The plugin listens to the note stream and detects phrases from spacing alone — no analysis magic, just two thresholds:

- notes closer together than a gap (default 100 ms) belong to the same phrase;

- a phrase starts after a real rest (default 1 s of silence).

Then it shapes the dynamics CC (CC1 by default) across each phrase:

1. The first note is the anchor. Its pitch becomes the reference, and the CC passes through unchanged (scale ×1.0).

2. The line’s contour drives the dynamics. Each following note scales the CC in proportion to its interval from the anchor — by default +25% for an octave above (so +12.5% for a tritone), mirrored downward (an octave below → −25%). Rising lines naturally crescendo; falling lines naturally relax.

3. The changes are human, not stepped. The scale doesn’t jump at each note — it glides continuously and reaches each note’s target at the middle of the note, the way a player leans into a note rather than hitting its dynamic instantly.

4. Phrase endings breathe. On the last note of the phrase, the scale fades to zero across the note’s second half, so the phrase dies away like a real breath or bow release.

All of it rides on top of whatever CC data is already there (your drawn dynamics, or the plugin’s own per-note expression curves), so it scales your musical intent instead of replacing it. And because the plugin already delays MIDI by an analysis window to know every note’s duration in advance, it also knows where each phrase ends before it plays it* — that’s what makes the mid-note ramps and the final fade possible in real time.

Everything is adjustable (gap, rest, CC number, scale-per-octave), and it can be switched off per project — the two examples above are literally the same session with the feature toggled.

HumanizerHost is a macOS/VST3 (built for Dorico and Cubase, works anywhere VST3 loads). Happy to share more details on how it works if anyone’s interested — and curious what you think of the difference.

Made with JUCE. VST is a trademark of Steinberg Media Technologies GmbH.

This is an absolutely awesome idea! I don’t work with Dorico (because I never tried), I do all my writing in Cubase, but I have just the same problem. Drawing all CC by hand (or with modwheel) can be a very tedious task. I could imagine your humanization plugin would make a great MIDI Insert, just listening to the incoming MIDI data and manipulating the CC as you described. You wouldn’t even need the “Instruments” tab in this case.

Thank you for your support. yes it could be a midi insert for Cubase. I hope Steinberg will consider this idea in their future update. It is really so simple to code with the support of Fable-5 from Anthropic. I never coded a VST3 and took me only few hours (and tokens) to Jake it. No reason for Steinberg developers not to offer such plug-ins.

Great idea, and sounds good. But it’s a far cry from creating a proof-of-concept with Fable-5 and actually integrating such a feature into Dorico and staking your reputation on the quality and making sure it does exactly what it needs to in the most efficient way and nothing else…

Indeed. I am maybe too enthusiastic and not aware of the actual complexity of Dorico code. But being an amateur software developper since 1980, I am really surprised how Fable-5 simplified my life. What took me a month to develop now takes me a day : I suppose the software providers will be able to leverage this AI technology to deliver new functionalities in less time.

FINAL COMPARISON : disabled vs fully enabled

Hi my friends, so this is the final comparison with the plugin disabled and the plugin enabled (i.e. phrases and long notes humanization) with one example “Largo”, a piece I composed in 2023. The difference is striking. I wrote a PM to @dspreadbury proposing to share the source code of my VST3 plugin : I hope Steinberg will consider implementing this logic in the future.

Plugin disabled (no phrase and long note humanization) :

Plugin enabled (phrases and long notes humanization) :

Hats off to you, Franck. What an excellent exercise. I’ve always found the expression mapper to be one of the weaker parts of Dorico, and hoped for more functionality, particularly creation of an underlying mapping grammar to allow more control of dynamics and other CCs. As you discuss, this is needed if you want to emulate someone using a MIDI keyboard and CC fader to shape sounds in a DAW. Particularly vital for solo strings and string quartets.

But now, inspired by your efforts, I’ve installed a Juce environment and with Claude doing the heavy lifting, created my own CC-shaping VST geared specifically towards strings. Still a work in progress (my C++ is a bit rusty) and simpler than your VST, but I’m confident that I can use it to do what the expression mapper couldn’t. So thanks - I wouldn’t have thought of attempting without your fine example.

This is so great to read ! Claude & Juce now offer us the opportunity to develop our tailor-made plugin matching our specific needs, the plugins we were dreaming of and always expecting from editors. I will be very interested to know which logic for strings you implemented and to listen to some of your demo with and without your plugin.

My future project, but I do not yet know where to start from, is a plugin that control the tempo and adapt it to the musical phrase, as will do a conductor of an orchestra.

PS : Daniel replied to my PM saying a developper is currently working on dynamic humanization, so we can expect to have I hope soon a new incredible humanization engine i future release of Dorico.

This sounds great! I’ll hope, you will release your plugin.

Regards,

Ulhati

Thank you very much. I have prepared the .pkg for Mac (intel and apple silicon). A friend composer is testing the install. Next step is to prepare the windows version installer. Not yet sure how to distribute it and if I will provide support, a lot of responsibility…

Install works fine. I’ll play around a bit tomorrow.

Super news !

Dear friends composers. You can download and test the free plugin version Beta 0.2.0 on my official homepage : https://www.franckdansaert.com/humanizerhost (For MacOs and Windows).

Please note that the Windows installer has never been tested. Both versions (MacOs and Windows) are in Beta stage. But so far, using it for a week on Dorico on MacOs, no issue so far. @derAbgang has installed it successfully on his mac Intel and is going to play with it around a bit tomorrow.

So you can give it a try too and become beta-testers : feedback very welcomed. Especially if you are running Windows Machine : interested to see if it works. FYI the compile report and test on a remote PC were successful.

I do not plan to sell it and will, as much as I can, provide support but with no guarantee. The objective of this topic and development was and still is to test a humanization logic : I am certain Dorico team will provide better logic & functionalities in their future releases.

My contact email is given on my offical website.

I’ll let you know how it goes. Similar to you (and NP), I’m using a lookahead buffer. I’m less ambitious than you though, I think, with less user input and more algorithmic. I’ll see how it goes and post some A/B demos if the plugin is any good.

Your tempo adjustment idea sounds intriguing. There’s only so much one can do to emulate real players and conductors, of course, but I think that there are some real opportunities to improve the notation->rendering process.

That’s great that Dorico may be improved in this area, though I stopped upgrading after V5 so any new functionality would have to be outstanding to justify upgrading again.

I just see that you’ve published you plugin. I look forward to trying it out.

I cannot wait to listen to your A/B ! Regarding adaptive tempo, when I edit manually 8 use to follow more or less the same rule as the dynamic : accelerendo if notes go up, rittardendo if notes go down, everything within +/- 5% max except end of phrase. The real issue is to capture live all the notes from all the orchestra and identify which instrument has the main phrase and should lead the tempo changes. Not trivial live. Might required off line processing of the midi file to generate a tempo track but maybe the plugins can communicate and coordinate themselves. And yes I released the plugin… I use to be quite fast in everything I am doing, not perfect, but at least I am trying things as much as I can. Good evening !

I’d not really heard of adjusting tempo depending on pitch direction, but I suppose it may work with some kinds of music. Yes, I was also contemplating a two-phase approach to “shaping” the music - one in real-time using the VST and another that’s off line for performing a more holistic analysis of the complete MIDI stream, and then adjusting CCs accordingly and outputting an updated MIDI file. In fact, that’s where I started. I created a Python/Flask app that took the MIDI export from Dorico, adjusted it and then I imported that into my DAW. It’s a bit of a rigmarole though. That’s when I came across your VST post, and was encouraged to try the VST approach. Bonne chance!

Sounds very interesting. Indeed a global approach is so far better and cannot imagine the complexity of such global analysis and algorithm. Regarding tempo you are right, can work for some music : would be so interesting to have some rules explained by actual conductor. I searched for books on this tempo management topic with no success. So ears and manual adjustments still is the best approach of musical management of the tempo. Interested to have your feedback if you decide to give a. try to my plugin. I used cursor with Fable-5 if this can help the coding of your own VST.

This is a good start. I’m not sure how much you have programmed and how much is Dorico’s default behavior but I do have comments on realistic phrasing/dynamics (which generally humanization and expression maps fail to reproduce—e.g. NotePerformer gets things right ~80% of the time but has noticeable issues when it doesn’t).

Your excerpt here begins with a piano accompaniment figure that sounds like this (i.e., this is what you would have to write to get a real performer to play that result). (apologies for any inaccuracies I’m not very good at transcribing)

If this phrase is written without accents the lowest note will tend to be slightly louder because it’s played with the thumb and it falls on the beat. However in general the pianist will recognize this as an accompaniment figure and therefore play it as evenly as possible, so having no pitch contour humanization at all is the most realistic. If you want the beats to be noticeable you would write as in bar 1; otherwise you will get what’s in bar 2.

Within an accompaniment figure, the notes that naturally get emphasized are the ones that change, so you would naturally get soft but noticeable accents like this. I’m not sure if there’s a way to program that though.

I realize this is mostly a plugin for long notes on sustaining instruments, so short notes and the piano may be outside your design scope, but there is very little music that only uses long notes (and phrase humanization seems to be intended to cover all use cases; I would consider 100 ms a short note). Anyway on to the strings.

Obviously once you get to the shorter notes in what I presume are bars 5 and 7 (and with the triplet accompaniment later) your VST struggles a bit. It would work better if you have a fixed rate of vibrato for notes lasting ~1/3 to 1 second and turn vibrato off completely for notes under ~1/3 second, as that’s also more realistic in performance.

That said, even with longer notes string instruments don’t naturally obey a pitch contour emphasis; they follow up- and down-bow curves which tend to look like this (extremely exaggerated for visibility obvs)

which is fairly easy to compensate for, so a bow change won’t normally affect dynamics very much, but you still want to use those natural curves sometimes e.g. at the beginning or end of a phrase. Taking the Beethoven concerto as an example: to maintain the same dynamic on a rising line the violinist increases bow pressure to do that, because otherwise the B6 would naturally be quieter than the A6. https://youtu.be/hb0BaqptoLo?t=222 Conversely in the second theme she lets the bow naturally decrease the dynamic. https://youtu.be/hb0BaqptoLo?t=325

In your Largo, when we get to bar 6, if you want the plugin output to be reproduced by a live performer you would have to write something like this:

which the violinist is unlikely to observe as written, but will nonetheless interpret as a swell on each note and a clear separation between them. Otherwise, without bowings/dynamics, the natural phrasing will sound closer to this (on the HALion violin); the player would not swell unless asked to because they would think of this as the end of a 2-bar phrase (or 4-bar if your original is in 2/4 or 6/8, etc.)

Similarly when the string section comes in later you would also need to write something like this

otherwise the notes will similarly be smoothly connected with a small but noticeable diminuendo. For whatever reason the dynamics on your solo instruments sound much more exaggerated than a real player would normally play whereas the dynamics on your string section are much flatter than a real section would normally play, that may be intentional of course.

As for the accompaniment, to replicate the Spitfire Symphony Orchestra’s performance (or whatever this library is) you would need to notate something like this:

because otherwise the emphasis in a triplet accompaniment would follow the beats (via hooked bowing); you rarely get a look at the second violins in a concert video but they get a few seconds of highlight here https://youtu.be/3OWFNULc6X0?t=709 for example.

I have no idea whether you were testing this to see if your plugin could just replicate “natural” phrasing or whether you were intentionally testing out as many different humanization options as possible; it’s just that these are the kinds of notations a notation-based plugin should be able to account for.

All that said I will try to test the plugin later today (assuming it works on an intel i3) for more informed comments.

This may not be necessary for everyone, but as a non-conductor I find what works best for me is to make a single-line reduction of the piece, play it on the piano at or near the speed I think it should go, record it into a voice memo and let Logic obtain the tempo track from that. I imagine Cubase has something similar. All it needs is transients, so I don’t even need note accuracy, just the approximate rhythm. (Although note accuracy helps because you want to be able to shape the lines.)

Admittedly I also grew up with a lot of these as a kid so identifying the main phrase is something I learned early. The single-line reduction is mostly for the sake of minimizing page turns.