Splitting into Flows to Improve Dorico speed

Hiya — i"m working on a very large opera score (large orchestra, 90 mins). I’m looking for ways to improve Dorico speed. I’m using filters, Galley view, etc, and that seems to help. At the moment the project is all one single flow (it’s all in one Act) — but in order to improve Doricos’ speed, I have been considering splitting it into flows at logical points, and then faking any joins (e.g. tied over notes) that need to happen.

But since that’s irreversible, I’m wondering if it is actually going to improve performance of Dorico much? e.g. I might split the piece into around 8 different flows.

I’m on Dorico 5 Pro, M2 MacBook Air.

I’m not convinced that the effect will be noticeable. The biggest factor is how many staves, how many bars, how many notes, and stuff like cues, “regions”, divisi. E.g. how much work does Dorico have to do. If the amount of work isn’t changing…

I’ve created opera scores with a flow for each aria and recit: ending up with hundreds of flows, and didn’t have any bother – but this was for a small ensemble, so the amount of calculation wasn’t enormous.

Yes, I feared as much, and there’s a post on here from 2020 of someone having the same experience. But my logic was that I assume, as one works, Dorico only recalculates the current flow — so if the number of bars is drastically reduced, then it isn’t recalculating all the time over 2000 bars of the whole thing… But maybe it actually does recalculate consequences in later flows when you’re editing…

@benwiggy out of curiosity, what do you mean by “region”?

You’ll yield less recalculation if Flows are set to always start on a new page, I suppose (in all layouts).

1 Like

These

Screenshot

And the other one that’s not in the same group in the menu for some reason.

oh i see, yes.

For what it’s worth, when inputting and editing music, Dorico does its best to reprocess the smallest amount of music possible. Even repitching a single note will require Dorico to reprocess at least two bars of music in that instrument (across all its staves, if it has multiple staves) in order to ensure that the accidental state is updated correctly, but the knock-on effects can be much larger, especially if changing the pitch causes accidentals or ledger lines to appear or disappear, or causes multiple voices to be laid out differently. As soon as the rhythmic spacing changes, the impact can become much larger, and will require Dorico to at least respace the music for the whole system – and if the spacing changes, it may then have to lay out the music for the remainder of the flow.

Dorico also updates the playback information after each edit, and this always requires recalculating the entire flow for the affected instrument(s). In general updating for playback is much quicker than all of the processing required to re-lay out the music, but for longer flows you might perhaps start to see the difference. Dorico still does some, though much less, processing for playback if you use the Silence playback template, so that might be worth a try. (We have also recently been working on improving the performance of a few key parts of the playback processing for expression maps with a very large number of switches, and that should also have a marginal improvement for processing when using expression maps with a normal number of switches.)

Using galley view will help a bit. Ensuring you only have a single window with a single view (i.e. don’t show the tab bar) will help a bit. If you have had multiple windows or tabs open during the current editing session, save, close, and reopen the project to allow Dorico to completely clean up those other views, one or more of which it might be keeping around behind the scenes.

If you have a large number of empty bars at the end of the flow because you anticipate filling them all in later on, I’d recommend removing them until you need them, as even processing empty bars can add to the editing time (not only for laying out the music, but also for things like determining where rests in secondary voices should appear).

We know that in an ideal world you shouldn’t have to consider any of these factors, and we are always thinking about ways to speed up Dorico’s operation in large projects. Improving the performance of the application in large projects requires a lot of engineering time and effort, and we have to balance the need for improved performance against the other functional requirements of our user base at large, so it’s difficult for us to justify dropping everything else to work on this.

11 Likes

HI Daniel — thanks for those tips, that’s really helpful. Would you estimate that splitting a large project in one flow into multiple smaller flows would significantly give a speed improvement? (Assuming one selects each flow to start on a new page?)

It would certainly help in the realm of playback processing, since that always has to process the whole flow at once for whichever instrument(s) you’re editing, but typically the playback processing is quicker than the music layout processing anyway. Probably switching to Silence would be the better approach, rather than having to employ a load of manual edits to cover up for the unwanted flow breaks.

2 Likes