[Workaround found] independent voice playback maintained in future flows

[EDIT: skip the initial post to find the workaround, if interested]


I must be doing something wrong when trying to set this up … but for the love of Ravel, I can’t figure out where I’ve gone astray. I apologize for the lengthy, confusing post but I found it very hard to articulate this; please bear with me. I appreciate any help/clarification/ideas from anyone kind enough to read this!


In between other tasks, I’ve been trying out the new independent voice playback feature in divisi contexts.

The Goal: To create a dummy-file I can use as a ready-to-go template, containing all the divisi permutations I use most frequently, already routed/connected in play mode, so that I don’t have to make those connections every time I start a new project or new flow.

The original way I approached this (described below), which I thought would be the quickest/easiest way to achieve the goal, somehow didn’t work for me. I’m not wedded to the approach I tried; I’m happy to employ any method that achieves the goal. Any brilliant ideas are most welcome and greatly appreciated — or even just a clarification of how the “Set for All Flows” feature actually works, since despite RTFM, I’ve apparently misunderstood it.


The approach I thought would work: I have each of the various section division sizes on separate channels in Vienna Ensemble Pro. I entered various divisi permutations into different voices, enabled independent voice playback and the “Set for All Flows” option, and routed all the endpoints appropriately. Having accomplished that, I thought that as long as I ensured all music in future flows was notated in the relevant voice(s), everything would play back as “Set for All Flows.”

First minor wrinkle: when changing the number of divisi staves (as opposed to using multiple voices on one stave), the numbering of voices no longer matches intuitively between write mode and play mode. (Real-world example from my test file: 2nd stave’s up-stem voice #2 in write mode = up-stem voice #3 in play mode. This is just to illustrate the behavior; obviously the specific namings would be different if voices/staves had been created in a different order).

No problem, methought; as long as voices/endpoints in play mode are Set for All Flows, all I need to do is be consistent when entering music into the relevant write-mode-voices for any given divisi permutation, and all will play back without further fuss.

But that’s precisely where I hit a brick wall. When I created a new flow, even though independent voice playback and “Set for All Flows” had all been previously routed in play mode and worked perfectly in OriginalFlow, none of NewFlow’s play mode settings matched those in OriginalFlow.

This is a little confusing to describe, please bear with me, but as one example:

— OriginalFlow, 1st stave, up-stem voice #4 in write mode = play mode up-stem voice #7, and plays back correctly as assigned. However:
— NewFlow*, 1st stave, up-stem voice #4 in write mode = play mode up-stem voice #4.

*(where divisi permutations arose in a different compositional order than OriginalFlow)

In other words they just don’t match flow-to-flow, even though “Set for All Flows” was chosen, and thus the relevant virtual instrument channels aren’t being triggered correctly in any flow except OriginalFlow.

With “Set for All Flows” already enabled, I would have expected all voices (bound to their relevant staves) from OriginalFlow to be available in NewFlow via the note input caret. Nope; only the default up- and down-stem voices were present when cycling through the options. Thus I couldn’t jump directly into entering music in NewFlow into voices already created in OriginalFlow … for example, I couldn’t enter into 1st stave up-stem voice #7 straight away, even though that voice already existed in OriginalFlow.

So I tried repeatedly using “Change Voice —> New Up-Stem Voice” until I reached the desired voice. But, it didn’t play back. Nothing “broke” in OriginalFlow, where all plays back exactly as assigned and “Set for All Flows”, but these settings didn’t carry over into NewFlow.

The options in play mode aren’t even listed the same way in OriginalFlow and NewFlow. For instance (another real world example), in OriginalFlow, 1st stave up-stem voice #4 in write mode = play mode up-stem voice #7, set for all flows … but in NewFlow, even when entering into write mode 1st stave up-stem voice #4, there is no up-stem voice #7 listed in play mode — instead of adhering to what was set for all flows, NewFlow voices in play mode were either unassigned (showing up as “- - - “), or assigned completely differently than in OriginalFlow. (e.g., NewFlow 1st stave up-stem voice #4 in write mode was automatically assigned to up-stem voice #4 in play mode – not up-stem voice #7, as is the case for OriginalFlow, and what I expected from having selected “Set for All Flows” when setting everything up)!

I don’t know about you, but I’m certainly wishing I were better at articulating this more succinctly! My sincere apologies.

Bottom line, I must be misunderstanding something about how to set independent voices up for playback on all flows, such that one doesn’t have to manually assign every voice’s endpoint on a per-flow basis as new flows are created. Please help me see where I went wrong, or help me brainstorm a different way to achieve what I’m after.

Any brilliant ideas … ?

Many, many thanks,
Sam

p.s. Stupid auto-correct keeps changing “up-stem” into “upset.” I’m not upset; I tried to squelch these auto-correct fails, but if I missed any I assure you it wasn’t a Freudian slip! (Freud was full of it; I prefer Jung :smiley:)

I’m not sure it’s possible to do exactly what you’re trying to do here, at least to do so in advance in a way that guarantees you will always get the desired result in every possible configuration of voices without needing to make any further adjustments in Play mode.

The basic gist of the problem is that, as you’ve found, Dorico can’t directly correlate the voices as they appear in Write mode to how they appear in Play mode for instruments with multiple staves: your divisi strings with two staves will each show ‘Up-stem voice 1’ in the various menus that show voices, but because Play mode is staff-agnostic and only thinks about voices, however they may be allocated to the staves, the voice from the second staff that is known as ‘Up-stem voice 1’ in Write mode becomes (e.g.) ‘Up-stem voice 2’ in Play mode – though if there is in fact already another up-stem voice on the first staff, it might be ‘Up-stem voice 3’.

Dorico does try to keep some kind of through-line between the voices across multiple flows, so if you have the option set to apply your changes to all flows, Dorico maintains its own idea of which voice corresponds to each label in each flow, and will make changes to the endpoint routing in each flow when you make a change. But when you are routing each voice for each flow independently, you must make sure that each voice already exists in each flow before you start, and I don’t think it’s practical to do this, unfortunately.

Hi Daniel,

Thanks very much for your reply. If you don’t mind, a few follow-up questions when you have a spare moment:

a) Obviously, both engraving and playback are important to me. You have indicated elsewhere that in a future version, the plan is to allow the divisi and condensing features to be used in tandem on the same section. I’m certainly not asking for a timeline nor for you to reveal all the nifty goodies that the team has in store for us, but is it at all possible to give some basic best practices for making sure anything we do now with divisi will be forwards-compatible when divisi+condensing is implemented?

b) If I’m understanding correctly, the main use case of “Set for all Flows” is that, if deciding to reassign an endpoint, “Set for all Flows” will propagate that change automatically across the board, rather than having to do so for each flow. Are there any other use cases for “Set for all Flows” of which I should be aware?

(In the above use case, “Set for all Flows” isn’t frequently of much advantage to me personally, as the routing for me stays consistent. If I were to make such a change, I would do so on the other end in Vienna Ensemble Pro, and the only changes I might need to make in Dorico would be the expression map assigned; the routing would all stay the same.)

c) Thanks to your reply, I thought of a workaround to accomplish what I’m after, which seems obvious in hindsight: Rather than creating a new flow, I can duplicate the existing flow, and all voices/play mode assignments will be present in the duplicated flow.* Do you foresee any major disadvantages to this divisi-template approach vis-à-vis forwards-compatibility when the divisi+condensing feature is implemented?


*Important note for anyone interested in using this method: Playback will not work immediately, and play mode will initially show all your voices as assigned to “- - -” … However! if you save the file, quit Dorico and then reopen the file, everything will play back as desired, and play mode will show your voices assigned to whatever you’ve named your endpoint(s).


Now that I’ve discovered that “duplicate flow” accomplishes what I’m after (not having to manually assign playback endpoints for every new flow), I’m going to create a new divisi template. As inelegant as this workaround must seem to the designers of Dorico, for me this is far preferable to the alternative. (Personally, I hate changing between modes, and try to do so as little as possible. I prefer to work exclusively in a particular mode for as long as practical. I have many reasons for this preference, but it is reinforced by technical limitations; on my setup (possibly because connected to VEP?), changing modes always results in waiting ~30+ seconds for the spinning beach ball to subside, despite an admittedly-ridiculous 6-core (12 virtual) Intel Xeon machine. This is also frequently the case for every single operation in play mode, so you can see the desire for a “set it and forget it” workaround which minimizes the frequency of bouncing back and forth between modes.)

In case there are any others who share my particular brand of insanity (the desire to stay in one mode as long as possible coupled with an unhealthy divisi playback fetish), I will share my template here in case it saves anyone some time.

I’m not sure I can shed any light on what the “best practices” (shudder) for working with divisi and condensing will be. In general I would say that the main requirement is that you can use different voices as you need to in order to allocate them to different endpoints in Play mode, just don’t allow them to overlap in the music, as that will prevent condensation.

You’re correct about the intention behind “set for all flows”: Dorico builds up its own internal map of voices per flow and then updates the routing for all of the voices it thinks are “the same” across multiple flows, but I wouldn’t be able to give you precise chapter and verse about precisely how it determines that voices between flows are “the same”.

I can’t predict the future and thus can’t say for sure whether having used Duplicate Flow is likely to cause any problems with condensing in the future, but I would hope not.

Thanks again, Daniel! Apologies for being dense (and very low priority, no rush to respond) but after re-reading the manual, I’m not certain I understand 100% what you mean about making sure the voices don’t overlap in the music. Are you referring to pitch crossing, or only to cases where the divisi might converge into a brief unison for a beat or two?

On a lighter note, I honestly don’t know why “best practices” made you shudder. Apologies for that, I thought it was an appropriate phrase when asking if there was a particular approach known to produce superior results. But I guess there must be connotations to the phrase that I’m unaware of. Mea culpa.

“Auditors,” “Compliance Officers” and “Management Consultants” spring to mind :wink:

The latter: if two voices are active at any point in the music, then that will prevent that staff from condensing for the whole system. One voice ending in bar 1, say, and the next starting in bar 4 with a few bars’ rest in the middle will be fine, but if you have notes in one voice and then simultaneous notes (or indeed even explicit rests) in another voice at the same rhythmic position, that staff won’t participate in condensing for that system.