What's new

Reaticulate - articulation management for REAPER - 0.5.13 now available

I have time during this covid lockdown to create more reabank user files for other EastWest Composer Cloud libraries if there's interest. Let me know if that would be useful to other members of the forum and if so which additional sample libraries to do that are not already included in existing factory or user reabanks on the reaticulate website. I was going to prepare one based on my LABS libraries template but have pressed pause on that one a the moment. Feedback welcome.
Thanks for doing these Andy, I have CCX but only just dipping my toe in at the moment. As I start to use more of the suite i know I will appreciate having your reabank files to use. 😊
 
What purpose does the chase attribute bank line serve?
CC chasing is a pretty common thing, so I took it for granted people knew what that was. But it's one of those things DAWs do under-the-hood to provide a better user experience and because of that transparency, you're not the first person to ask this. I've updated the documentation to hopefully explain better the purpose:

CC chasing occurs when switching articulations between patches across different MIDI channels. For example, suppose you have long normale on channel 1 and long con sordino on channel 2 with long normale currently active. Say you've set CC1 to value 92 and played a note, and then activated the long con sordino articulation. If CC1 is included here in the list of CCs to be chased, when long con sordino is activated, CC1 value 92 will be "chased" into the patch on channel 2, ensuring that your next note with that articulation has the same dynamics level.

Another use case is with the sustain pedal. Supposing you're on long normale and you hold the sustain pedal, press a note, and then activate long con sordino and press another note, if CC64 (sustain) is in the chase list, Reaticulate will chase the CC64 "pedal down" value into the next channel so that the second note with that articulation also sustains. Provided the antihangcc flag (mentioned above) is not disabled, when the sustain pedal is released, Reaticulate will send the CC64 value 0 (sustain pedal up) event into both channel 1 (long normale with the first note rining) and channel 2 (long con sordino with the second note ringing), which prevents the first note on the previous (but not currently active) MIDI channel from "hanging."

Let me know if you have any more questions about that, I can try to clarify it better.
 
Thanks for doing these Andy, I have CCX but only just dipping my toe in at the moment. As I start to use more of the suite i know I will appreciate having your reabank files to use. 😊
Glad to hear that my first attempts at reabanks are useful to you. In many ways I'm also dipping my toes into this stuff and I greatly appreciate the responses by @tack to my many questions. Imho reaticulate deserves to be integrated into the main Reaper package once there's a GUI for creating userbanks. One or two of the more expensive DAWs like Cubase already include some kind of articulation management system but reaticulate is rated as more advanced in its response to the constant demands of composers for more realistic sounds in their compositions. They want to produce the most convincing mockups even if, as is normally the case, their creations are ultimately re-recorded in a studio with a live orchestra. Reaticulate seems to answers this requirement very effectively.
 
Here is a keyswitch reabank in txt format for the newly released Spitfire Abbey Road One Orchestral Foundations library. Given that keyswitches are common to all the banks in this one I must study the guidance given by @tack regarding their usage. Sometimes of course we want different articulations to sound together but when that's inconvenient we can employ the different source and output options offered by reaticulate. Essentially we should think of reaticulate as a tool that is always listening out for our instructions. Time to put my study hat on again.
 

Attachments

  • Spitfire_Abbey_Road_One_Orchestral_Foundations.txt
    4.1 KB · Views: 13
If you can't find a good match, the best advice I have is "don't worry about it and pick whatever" :)

As a slightly longer explanation, I've fleshed out the guidance on program numbering in the documentation, and tried to clarify better on the rationale and use case:


Thanks very much for your contributions Andy! I'll put those up on the website later this week.



Right, that's what it means. From the website:






The first image on the website you're referring to doesn't use articulation groups, rather it just has multiple banks loaded into the same track. "V1 Legato Performance" and "V1 Legato Decorative" and "V1 Core" etc. are each individual banks that represent separate patches from Spitfire Chamber Strings. Because these are using UACC, they can all be loaded on the same track at once on the same channel, so you can map in all 4 banks in Reaticulate's track configuration.

Meanwhile articulation groups are within the context of a single bank and are typically used with "modifiers" (e.g. sordino on/off in Cinematic Studio Strings, or the mute style in Sample Modeling Brass).



A limit of 16 articulations in one bank is only if you're using a library that has separate articulations per patch and you're doing a multi with articulations on different MIDI channels. Then you're limited to 16 because we only have 16 source MIDI channels to work with.

But if you're talking about multi-articulation patches, like the ones you created banks for with Phoenix Orchestra, then the limit is 128 articulations per bank.

Hope that helps!
Grateful thanks to you for your very detailed guidance and patience. You're very welcome to include here the questions and answers from our email exchange if that would help other users. I must say that your reaticulate video actually answers a number of my questions. I should have viewed it more thoroughly before bothering you.

The following comments are not intended as criticisms as I'm impressed with reaticulate but maybe making it slightly more accessible to beginners like myself is worth considering.

Maybe a simple introduction paragraph to the reaticulate website would be a worthwhile addition. At the moment it dives straight into usage and coding but I think the big question is left unanswered i.e. why reaticulate is needed in the first place. And the simple answer is provided in that Reaperblog video which talks about the quest for that illusive, realistic sound in our compositions. Even though composers know that most of what they write for film and TV will end up being re-recorded with a live orchestra, the quality of the mockup, that final sketch, is what ultimately wins commissions. It would be interesting to compare reaticulate to say Cubase and any other DAW that ostensible includes some form of articulation management system and also highlight how Reaper operates in the absence of reaticulate. i.e. what does it add to the control of the ultimate sound. Those are my thoughts anyway.

I hope my humble additions to the user reabanks will attract other users. Featuring the very latest libraries is a big selling point imo as is the inclusion of those classics in your Factory list which is what initially attracted my attention.
 
Last edited:
Revised reabank in txt format for Orchestral Tools Phoenix Orchestra. Added harmonics articulation to Gaohu.

And I've taken the liberty here of copying the additional advise received from @tack which expands on the instructions given on the reaticulate website.

@tack said:

I do my best to describe the source/destination channel configuration in Reaticulate https://reaticulate.com/usage.html#track-setup , but it can be tricky to wrap your head around it.

The starting place is in VI player, like Kontakt. As you pointed out, the example with Spitfire's patches allows one to put multiple patches on the same channel using Spitfire's UACC feature, and provided there are no conflicting program numbers between the banks loaded in on the track, this will work fine. In this case, if we're just dealing with one single MIDI channel, you can set the patch in Kontakt to either channel 1 (or any other specific channel you like) or omni, it doesn't matter. And then on the Reaticulate side in its track configuration, you can set the destination channel to the specific channel the Kontakt patch is loaded in on, omni/source in Reaticulate if the Kontakt patch is set to omni. (The documentation link above explains more about what I mean by omni/source in Reaticulate.)

All that is to say, when you have more than one multi-articulation patch loaded into Kontakt, they can be omni or all on the same MIDI channel in Kontakt as long as each articulation can be switched inside Kontakt using its own dedicated MIDI event (e.g. CC32 value 42) such that the other patches without that articulation will switch to a "none" articulation so they're silent until you activate an articulation they happen to provide. This is how Spitfire and some other library makers work.

Now let's stay with the Spitfire example, and suppose we're not using UACC, and instead we're just using the patches directly as they come out-of-the-box, which uses the more conventional note-based keyswitches. This is how most other libraries out there behave. Usually these patches start their keyswitches at the same note, something like C0, and then you go up through the semitones to activate different articulations.

If you have two of these patches loaded in on the same MIDI channel and you pressed C0 on that MIDI channel, you have a conflict: both patches have articulations assigned to C0, so both would activate at the same time. If you play a note, now you hear both articulations. (Sometimes this is what you want for layering purposes, but for this example here let's say we don't want that.)

The way to deal with this conflict is to put the two patches on different MIDI channels in Kontakt, say channels 1 and 2. Then when you assign the banks for those patches to the track over in Reaticulate, you need to tell Reaticulate how to address those patches which listen on different channels, so you'd configure the destination channel in Reaticulate to channels 1 and 2 respectively for the two banks. Now Reaticulate knows when you activate an articulation for one or the other patch, it needs to send it to channel 1 or 2 (depending on the bank).

Here's the trick: as long as there are no conflicting program numbers in those two banks, Reaticulate is happy to let them coexist on the same source MIDI channel. Here "source MIDI channel" refers to the channel the events (and program changes) are assigned in the MIDI editor in Reaper. If there are conflicting program numbers between banks that use the same source MIDI channel, Reaticulate will warn you about that, because just like with the conflicting C0 keyswitch case I described above in Kontakt, if two banks have the same program number on the same source channel, Reaticulate doesn't know which one you actually mean.

And in that case, just like in Kontakt where the solution to the conflicting keyswitch problem was to put the patches on different channels, in Reaticulate, the solution to conflicting program numbers is to use multiple source MIDI channels in the MIDI item for the different banks, and in Reaticulate's track configuration, instead of omni, you'd set them to channels 1 and 2. (This doesn't actually have to be the same channels as those patches are assigned in Kontakt. The destination MIDI channel in Reaticulate has to match those, but the source channel can be anything. Reaticulate takes care of routing to the right MIDI channel.)

Using multiple source channels like this in Reaper is a bit clunkier, because now you're juggling different channels in your MIDI item. It's better to ensure there are no program number conflicts between banks on the same track.

Everything I said above was concerning the case where you have more than one multi-articulation patch loaded in Kontakt (or whatever VI player). Now if you're just talking about an instrument consisting of many single-articulation patches loaded in on different channels, this is a conventional "multi" configuration and you can describe that layout in a single bank. The documentation gives a short example:

https://reaticulate.com/reabank.html#simple-channel-routing

Hopefully that was more helpful than it was confusing. You'll probably need to read it several times while playing with Kontakt and Reaticulate before it clicks. :)

[one more piece of guidance]

If you set the source channel to channel 1, then all activations on that bank would map to channel 1. One of the use cases for this behavior is divisi writing. Say you have a Spitfire Chamber Strings V1 patch loaded in Kontakt on channel 1, and you add that bank in Reaticulate with a channel mapping of omni/source.

If you only ever work from channel 1 in the MIDI editor, Reaticulate routes to Kontakt on channel 1. Say you're writing a line on channel 1 using the legato articulation, but now you need to break out into two part divisi. You can load another copy of the V1 patch in Kontakt on channel 2, and, using just the one bank in Reaticulate set to omni/source, in the MIDI item in Reaper, activate the legato articulation on channel 2, and you can layer the two divisi parts on channels 1 and 2 in the MIDI item. Reaticulate will route the parts to Kontakt on channels 1 and 2 so they can be performed at once.


END OF QUOTES

This layman's explanation of how reaticulate operates in practice has certainly helped me a lot and I've made adjustments to the design of my own reabanks as a result. It's not nearly as complicated as it looks.
 

Attachments

  • Orchestral_Tools_Phoenix_Orchestra_SINE.txt
    21.4 KB · Views: 2
Last edited:
CC chasing is a pretty common thing, so I took it for granted people knew what that was. But it's one of those things DAWs do under-the-hood to provide a better user experience and because of that transparency, you're not the first person to ask this. I've updated the documentation to hopefully explain better the purpose:



Let me know if you have any more questions about that, I can try to clarify it better.
If you wouldn't mind could you walk me through your divisi example again very slowly, one step at a time, what goes where in Kontakt and in reaticulate, what box(boxes) I need to tick at each stage of setting up and adding inputting the articulations etc. I tried it but it doesn't seem to behave the way I expected it to so I've probably misunderstood your description.
 
0.4.6 is out with some bug fixes.

Installing
If you're a new user (not upgrading), just follow these installation instructions.


Upgrading
If you've installed using ReaPack, you should eventually receive the update, but you can force it by following the updating instructions.


Here are the changes since 0.4.5:

Bug Fixes
  • Fixed regression where articulations with multiple note output events would fail to send all note-ons together before sending note-off events.
  • Reaticulate JSFX no longer popup when being added to tracks (#120)
  • Improved robustness when loading malformed banks
  • Added hidden feature for shift-click on the reload toolbar icon to scrub all MIDI items for misconfiguration that might prevent showing articulation names.
  • Fixed problem where autostart setting would not work reliably (#107)
  • Improved reliability of window pinning when Reaticulate is undocked
  • Added note number to articulation tooltip (#96)
  • Now respects Reaper's MIDI octave name display offset configuration when displaying articulation tooltips
 
I thought I would do a quick video:


Even better thank you. Having watched the video I'm a lot clearer now. Unfortunately my lack of knowledge with Reaper has prevented me from duplicating the video example. It's a probably a setting or settngs in your Reaper that I haven't set in mine. I can't seem to view both tracks on the same piano roll or play the two patches together at the same time. Up to now I've tended to have a dedicated track for each articulation so this is exploring features of Reaper with which I'm less familiar. Even how to view the piano roll at the start by inserting a midi track was a new one on me. Can you provide me with a screenshot of your midi editor preference settings. I need to see how I can display both midi channels on the same piano roll.
 
Last edited:
Can you provide me with a screenshot of your midi editor preference settings.
Here is a screencap of the various settings in my MIDI editor (at least when the editor is docked -- when undocked I have a script that disables "sync to arrange view").

reaper-midi-editor-options.gif


1604847807494.png

But I think the relevant aspects to your question probably aren't the settings, rather these MIDI editor actions:

1604846590645.png

So I've configured shift 1 through 0 to show specific MIDI channels, while shift-` (i.e. ~) shows all MIDI channels. I also have "show all channels" and show channels 1-4 as custom buttons on my MIDI editor toolbar, although I almost always just use the keyboard shortcuts.

1604846886049.png

These were the actions I was using through the video.
 
Last edited:
Sorry to put you to so much trouble @tack. Having adjusted my midi editor setting in line with your screencap I then downloaded a Reaper 6 Kontakt template from Reaperblog which seems to have corrected my earlier difficulties. I think I've cracked it now. Thanks for you help.
 
Last edited:
EDIT: Solved. Upon further consideration, this isn't a glitch -- I've been overlooking the fact that Reaticulate reads incoming keyswitches and sets its display accordingly. I originally encountered this CC behavior in a much more complicated real world situation and it didn't occur to me that this was what was causing it until I'd stripped it down to this much simpler version and posted it here.


ORIGINAL POST:
I'm running into something I think is a glitch. Using the following example instrument definition:
Code:
//! g="Test" n="Test instrument"
//! m="Test instrument"
Bank 0 0 Test Instrument

//! c=long i=note-whole o=note:32
1 Art 1
//! c=long i=note-whole o=cc:1,64
2 Art 2

Art 2 sends CC1 64 as its output, but if CC1 is sent as user input to the instrument by live monitoring or piano roll playback, Art 2 will become visually selected (but won't actually trigger) when the CC1 input equals a value of 64.

Here's a gif that demonstrates:
reaticulate bug.gif
 
Last edited:
OMG - you are GENIUS :) This N00b has been working all day on reverse-engineering the Abbey Road ONE file. Thank you SO much. And THANK YOU to the creator of Reaticulate - it is truly truly appreciated :)

Here is a keyswitch reabank in txt format for the newly released Spitfire Abbey Road One Orchestral Foundations library. Given that keyswitches are common to all the banks in this one I must study the guidance given by @tack regarding their usage. Sometimes of course we want different articulations to sound together but when that's inconvenient we can employ the different source and output options offered by reaticulate. Essentially we should think of reaticulate as a tool that is always listening out for our instructions. Time to put my study hat on again.
 
Last edited:
@andyhy - there are some mistakes in the MIDI note numbers in your original file (they don't start at Zero, but rather at ONE). I have re-edited and tweaked the file - my version is attached :)

OMG - you are GENIUS :) This N00b has been working all day on reverse-engineering this file. Thank you SO much. And THANK YOU to the creator of Reaticulate - it is truly truly appreciated :)
 

Attachments

  • Spitfire_Abbey_Road_One_Orchestral_Foundations.txt
    4.1 KB · Views: 11
@andyhy - there are some mistakes in the MIDI note numbers in your original file (they don't start at Zero, but rather at ONE). I have re-edited and tweaked the file - my version is attached :)
Thank you for correcting those mistakes. I'm still learning how to use reaticulate.
 
I've modded Reaticulate so it will look in the active project folder for the user bank definitions before it looks in the Reaper data resource folder (the normal location). This means I can save banks along with a project (to ensure future changes I make to the banks won't break that project) and the saved banks will automatically load with that project while still allowing new projects to automatically access the default user banks.

If anyone's interested in this, I can give instructions for performing the mod, but be aware that I haven't really tested it beyond confirming that it appears to work properly. I'm pretty hyped that it seems to be possible to do this, though, since it's a feature I've wished Reaticulate had.

@tack -- is there any chance we'll see a the optional ability to save/load banks on a per-project basis officially implemented in Reaticulate at some point?
 
@tack -- is there any chance we'll see a the optional ability to save/load banks on a per-project basis officially implemented in Reaticulate at some point?
Yep, either in the next release (0.5) or, more likely, the one after that (0.6).

I have a pretty big change in flight for the next release to move away from MSB/LSB as the bank's unique identifier, instead using a randomly generated UUID, and Reaticulate will automatically assign a MSB/LSB for the bank on a per-project basis.

The same internal mechanism for this per-project MSB/LSB assignment also enables what you're asking about. Except my plan is to embed the bank definition in the RPP, so that the RPP can be passed around to others without needing to also include ancillary bank files. You would have the same notion of system banks and project banks you eluded to.

With banks embedded within the RPP, there won't be a text file you can edit for the project-level banks, so this depends on a proper GUI editor, which I have planned for 0.6.

The UX I have in mind is that when the system bank is newer than the one in the project, Reaticulate will ask if you want to update the one in the project or leave them as diverged (with an option never to ask again).

The biggest problem with all these ideas is insufficient free time. :)
 
Yep, either in the next release (0.5) or, more likely, the one after that (0.6).

I have a pretty big change in flight for the next release to move away from MSB/LSB as the bank's unique identifier, instead using a randomly generated UUID, and Reaticulate will automatically assign a MSB/LSB for the bank on a per-project basis.

The same internal mechanism for this per-project MSB/LSB assignment also enables what you're asking about. Except my plan is to embed the bank definition in the RPP, so that the RPP can be passed around to others without needing to also include ancillary bank files. You would have the same notion of system banks and project banks you eluded to.

With banks embedded within the RPP, there won't be a text file you can edit for the project-level banks, so this depends on a proper GUI editor, which I have planned for 0.6.

The UX I have in mind is that when the system bank is newer than the one in the project, Reaticulate will ask if you want to update the one in the project or leave them as diverged (with an option never to ask again).

The biggest problem with all these ideas is insufficient free time. :)
Thanks for the glimpse into the future -- these all sound like fantastic ideas!
 
Top Bottom