Dorico's LUA integration

Fundamental question regarding Dorico’s LUA integration:
Does it enable customers to only create plugins that operate as eg. finale plugins do, i.e only when called,
OR
is it possible to have a script run in the background, for eg. a custom playback engine? (without the need to constantly apply this plugin after writing new music.)

Thanks in advance!

Well firstly, it isn’t available yet - see the other ‘Scripting’ threads for more detail on that.

Initially it will work in the first way you mention - scripts that have to be run from a menu. However, we hope to be able to add hooks into various other places in the application to allow a plugin to run at specific times. For instance you could register a ‘pre-flight check’ that ran prior to saving to ensure that the score conformed to certain standards, or custom actions to be run when adding an instrument.

Playback engines are incredibly complex though and it wouldn’t be simple to expose that kind of functionality. It would be a matter of asking what the problem is that you’re trying to solve and then we can investigate possible solutions from there. eg the requirement could actually be that you want to route MIDI data to some external destination, so the solution would be to provide a virtual MIDI interface API.

One item of concern is the automatic optimisation of playback to fit various instrument libraries.
For eg.- sampled legato/attack timing compensation
Different libraries (and even different patches/same patch with different articulations) react differently to legato/gliss/port, and one needs to compensate this latancy by starting the note earlier (or later) according to which library your using.
This is why a plugin is a perfect device for such optimisations. Libraries are abundant and ever-changing. The end user needs some kind of customisation tool (with or without library-specific presets included) to make them shine.

This relates to a meeting I had with Daniel Spreadbury in August, in which we came to a conclusion that a lot of these optimisations should be done using third party software, and shouldn’t be Dorico’s responsibility. However, what kind of software is still unclear. In my opinion, NotePerformer is an excellent example of a somewhat tight integration by a 3rd party that does a multitude of important things. I don’t know how did they acheive this level of integration.

I have a ton of these ideas for little bits of software that would make every sample library shine and play to it’s strengths, and produce a markedly supherb result. I would be happy to discuss them with the team, at least to make sure there are suitable hooks in the program which I can use to make those ideas come true.
I sent you my email in a PM.

P.S- can you elaborate on what you mean by virtual MIDI interface API?

This is certainly the sort of area where scripting API hooks would be useful, though the complexity comes with how much of Dorico’s internal models we expose (and the more we expose, the harder it is for us to change). The devil is in the details.

As far as timing compensation goes, I’ve added per-switch delay to the expression map format, though this isn’t yet respected during playback.

Re: virtual MIDI interface, I mean an API that would act as if it was an external MIDI device, which could be routed to external applications.

So a Virtual MIDI Interface would be comparable to what Plogue’s Bidule does?

I don’t know, I haven’t used Bidule. Please don’t get carried away with the idea of a virtual MIDI interface - it was just an example!