You can actually balance your template and create specific articulations for divisi directly in Reabanks.
I imagine most people balance different articulations in Kontakt (or whatever sampler) directly. For example, even with Spitfire's combination palettes, you can have separate mixes per articulation (although the implementation of this is a bit clunky). So balancing e.g. shorts against longs is probably a fairly well solved problem already.
But divisi writing is a great use-case and indeed I've been adjusting CC11 directly myself.
So while you might normally have:
Code:
//! c=long i=note-whole o=cc:32,1
1 long
You could instead have:
Code:
//! c=long i=note-whole o=cc:32,1/cc:11,127
1 long
//! c=long i=note-whole o=cc:32,1/cch11,104
121 long div 2
//! c=long i=note-whole o=cc:32,1/cc:11,86
122 long div 3
//! c=long i=note-whole o=cc:32,1/cc:11,64
123 long div 4
(Just making up the volume levels there.)
I think this is what you had in mind. Let's develop it a bit more ...
Things can get a bit out of hand if you do this for every long articulation you have. It might be nice to abstract out the different divisi levels out into separate programs and all into a separate group. So something like:
Code:
//! c=long i=note-whole o=cc:32,1
1 long
//! c=long i=note-whole g=4 o=cc:11,127
120 unison
//! c=long i=note-whole g=4 o=cc:11,104
121 div 2
//! c=long i=note-whole g=4 o=cc:11,86
122 div 3
//! c=long i=note-whole g=4 o=cc:11,64
123 div 4
The drawback of this approach stems from a known issue with groups (and either extremely difficult or impossible for me to workaround) in which Reaper (obviously) only chases the last program change on a given channel. So if you have 3 program changes on channel 1 for 3 different groups, only the last one is chased.
A workaround is actually to move the divisi programs into a separate bank, and configure that bank on a dedicated source MIDI channel (say 16):
Code:
//! g="Utilities" n="Divisi" f=!chase
Bank 1 1 Divisi
//! c=long i=note-whole g=4 o=cc:11,127
120 unison
//! c=long i=note-whole g=4 o=cc:11,104
121 div 2
//! c=long i=note-whole g=4 o=cc:11,86
122 div 3
//! c=long i=note-whole g=4 o=cc:11,64
123 div 4
Your track configuration would look something like:
Resulting in a main UI that looks like:
Then because all divisi related programs are on channel 16, as long as you avoid this channel for other things, chasing will work as expected. Technically in dedicating this channel to this purpose you wouldn't need to use articulation groups anymore.
This works if you're mocking up divisi with polyphonic patches all on the same channel, but I prefer to split this out to a separate MIDI channel per divisi part. The main benefit is that you can use different CC curves for each part. Another advantage is you can still mockup the divisi parts with monophonic patches such as legato.
So that now looks like:
Code:
//! g="Utilities" n="Divisi" f=!chase
Bank 1 1 Divisi
//! c=long i=note-whole o=cc@1:11,127
120 unison
//! c=long i=note-whole o=cc@1:11,104/cc@2:11,104
121 div 2
//! c=long i=note-whole o=cc@1:11,86/cc@2:11,86/cc@3:11,86
122 div 3
//! c=long i=note-whole o=cc@1:11,64/cc@2:11,64/cc@3:11,64/cc@4:11,64
123 div 4
A third benefit is that you can use different patches for different parts if you want.
Consider an example which uses Spitfire Chamber Strings (as shown above) where you have a 3-way divisi but want the third divisi part playing con sordino. Here I'd pull in another longs patch on channel 2, and con sord on channel 3. I'd set them both to UACC so that I can reuse those channels for other patches later, and continue to switch articulations across all channels using Reaticulate. So now that looks like:
And this would be pretty cool if it actually worked.
It works fine ad hoc but there's some issue during transport playback where the divisi programs aren't registering with the Reaticulate JSFX.
There were bound to be bugs as we start poking around the edges of these use-cases. Hopefully it won't be too hard to fix.
Edit: Nevermind, it actually does work. Silly me, I had a MIDI routing matrix JSFX at the top of my FX chain explicitly filtering out channels 15 and 16 as I use those for other reasons.