What's new

Reaticulate - articulation management for REAPER - 0.4.7 now available

Oliver.T

New Member
Hi all,
Is there a way to set the midi feedback of the articulation changes to the midi control suffice to match the corresponding slots instead of the values reaticulate sends to the instruments? Eg: first articulation slot sends midi CC-x, value-1, second art. slot sends CC-x, value-2, and so on. If it is combine with the slot selection by CC action, this way one would get two way communication and reflect the behavior of reaticulate to the surface.
I imagine how this would work by creating custom reabanks and assigning values to the articulations according to their consecutive slot position and than midi learn all the articulation controls in the corresponding instrument. But aside from it being a very laborious process, what if I would like to preserve the numeration of the articulations, say for the sake of UACC?
I know it is a bit nitpicky but hey, this thing already does things I would only imagine before I discovered it. So, why not aim even higher? 🙂
By the way I have found a way to implement the Zig's iteration of Mihkel Zilmer's Open Sound Control template to work with Reaticulate. It's so cool, it still makes me grin 😁 I will share the files with some explanation, hopefully tomorrow, if someone would need it.
Thanks to all for your time, effort, camaraderie and ingenious Ness you put in the community. It really makes the world a better place!
Cheers
 
OP
tack

tack

Damned Dirty Ape
Thread starter
  • Thread Starter
  • Thread Starter
  • #662
Is there a way to set the midi feedback of the articulation changes to the midi control suffice to match the corresponding slots instead of the values reaticulate sends to the instruments?
I'm afraid to say it's not, but I definitely understand the use case here and the ability to offer symmetry with the "Activate articulation by slot number" action makes perfect sense. I'm tracking it here and will look to add it to the next release.

I will share the files with some explanation, hopefully tomorrow, if someone would need it.
I'd definitely be interested in taking a peek at it!
 

Oliver.T

New Member
Hi all,

here is my tweaked version of @Mihkel Zilmer 's Open Stage Control template for implementation with Reaticulate. I am not by a long shot a programmer, but I put some time and effort to understand the ins and outs of what is happening under the hood and arrived to this by brute force approach. So, this is by no means the most elegant coding on my side (I think), but rather a minor adjustment of others's work in order for OSC and Reaticulate to talk the same language. Standing on the shoulders of giants, so to say. Also I haven't tested it extensively, but so far it works great.

So, Reaticulate sends MSB (CC0) and LSB(CC32) messages on the default channel each time you select a track, or trigger an articulation on a track. The values of these messages are the "address" of the reabanks, and each reabank has its unique address. OSC then takes these values and it makes a simple arythmetic operation: (MSB value * 128) + LSB value = patch number. For example: CC0 value: 64, CC32 value: 10 (the address of the Reaticulate factory bank: SCC - V2 Legato Decorative) would be (64 * 128) + 10 = patch 8202 in the OSC template. In other words, CC0 values work as banks, and CC32 as patches. So, CC0 bank holds patches 0 - 127, CC1 patches 128 - 255, CC3 patches 256 - 383.....CC127 patches 16 256 - 16 383... that's a lot of patches!

As soon as a patch number is calculated, OSC calls out that patch and it updates the labels of the buttons in the OSC UI, provided that the patch with the appropriate number exists in the custom module.
You can customize/make your own patches by editing the custom module (Reaticulate+OSC.js) in an appropriate editor. I used Free JavaScript Editor. You could tweak and save the file while using OSC at the same time - it will auto update and reload the custom module automatically.

If you open the .js file and scroll a bit it's pretty self explanatory, and you would pretty much understand what you should do by the example patches that are already filled in. However, here is a detailed explanation:

There is a list with many rows of this:
// 2-5 Instrument name
261:{ 'trackname':'XXX', 'trackarticulations':[]},

So, the text after // doesn't matter, as far as OSC is conserned. It is only info for the user. Even the numbers 2-5 in the example are irrelevant for OSC. They should however inform that this patch has an address od CC0 value:2, CC32 value:5. "Instrument name" should be replaced with the... well, name of the instrument on the selected track.

The number 261 in the example however is the most important here - that's the patch number. It should appear red in the script editor. You should enter every patch number according to the reabank file you use. Here comes the math part: (2*128)+5=261 - as per the example.
(IMPORTANT: When OSC recieves the two CC values and looks for the appropriate patch in the .js file, there must be at least the patch number in order for OSC to acknowledge that this patch exists. Otherwise you would get and error message in the OSC console. So, be aware of this when troubleshooting.)

Track name should be filled in place of the XXX. However, the apostrophe (') sign before and after the text is needed. Example: 'SCC Violins 1'.
Track names appear in the OSC UI and update themselves accordingly (courtesy of @zig ).

Track articulation names are filled between the [] brackets and should be formatted in this fashion:
['first articulation name', 'second articulation name', ...'last articulation name']
So, every articulation name should sit between two apostrophes (') and (except the last one) precede a comma (,) and a space.
These will auto populate the buttons in the UI in accordance to the selected patch. Also, the number of buttons showed in the UI will change in relation to how many articulation names for the currently sellected patch are filled in the .js file.

The UI (Reaticulate+OSC.json file):
The 54 buttons are assigned to CC127, however this is by personal preference. You can choose to assign them to another CC. However you must assign this same CC to the "Activate articulation by slot number" action. You can do that easily, by adding shortcut in the Reaper action list. You don't have to assign every single button, just one, as they send on the same CC.
First button sends value of 1, second value of 2 ..... last (54th) sends value of 54. They are in tap mode, so there is no off value being sent.

The Enable and Disable buttons are assigned to CC126 and 125 respectvely (again, personal preference) and send values of 127-null. These too need to be assigned to the appropriate actions. (I use OTR, where there is Custom actions "Track enable" and "Track disable", I suppose Reaper has those natively too?) I imagine more elegant way to do this is possible, by using only one CC, but I didn't get to delve into that.

Lastly, you should change the target of the buttons to correspond to your midi port. Mine is midi:send, so in stead of send, fill in the name of your midi port.

For testing purposes there are two patches: 8195 'SCC - V1 Core' and 8202 - 'SCC - V2 Legato Decorative'. These are Reaticulate factory banks, so when you first test the template, you can put them on two tracks and switch between them, in order to see if OSC reacts accordingly. VSTi is not neaded for the test, just see if Reaticulate changes state as expected when you control it from OSC.

I think that's about it. I appologize for my wordiness, I am not a native english speaker. I hope it is intelligibly written. Also, to the more versed in programming stuff: sorry for the unnecessary details, but I wanted to make easier to the others like me, that are not so. I spent many many hours searching, collecting info, tweaking, reading, watching JavaScript tutorials, trying and failing, just to be able to tweak some few lines of code. Nonetheless, it was worth it!

I would like to extend my gratitude to @tack , @Mihkel Zilmer , @Manaberry and all the others for their hard work and selfless contribution to the community. Hats off!

Stay safe all and write some marvelous music,
Cheers
 

Attachments

  • Reaticulate+OSC.rar
    4.1 KB · Views: 13
Last edited:

axb312

Senior Member
@tack I occasionally have this issue where the key switch doesn't land up where I want it to (cursor position). Any ideas how to fix this?
 

Oliver.T

New Member
Hi @tack ,
I noticed that when I use "Activate articulation slot number by CC" the hidden programs don't count as slots (understandable, why would they when they do not exist in the GUI). But using OSC, it would be great to make patches to be as consistent across instruments as possible, meaning each particular articulation to map to a designated button in the OSC button grid, yet still not cluttering the Reaticulate GUI in the process, by having bunch of non-hidden empty slots that do nothing.
So, long story short, is it possible for a hidden program to have its designated slot? Thanks!
O.T.
 

Markrs

Complete Beginner
Hi @tack I have had a thought regarding a feature. It might not be a good idea but I thought I would sound it out.

One of the issues with articulation maps is that you can't use track pre-delay to compensate for the different sample delays, as it is fixed for the entire track. Thankfully Reaper has Midi nudge (you can also use JS Time Selection as a pre-delay but you also need all the FX on an item for that to work) which can be done on an item basis. What would be great is that I could set the sample delay in Reaticulate in miliseconds, then when I use a articulation it slices the midi at that point and apply the midi nudge to the given value.

The benefits is that you can have all your articulations on one track and compensate for individual sample delay.

I have looked into how to do this via using custom actions when an articulation is selected in Reaticulate but haven't come up with a solution.
 
OP
tack

tack

Damned Dirty Ape
Thread starter
  • Thread Starter
  • Thread Starter
  • #670
What would be great is that I could set the sample delay in Reaticulate in miliseconds, then when I use a articulation it slices the midi at that point and apply the midi nudge to the given value.
On the radar :)

 

h.s.j.e

Hans Shenk
I'm having a strange problem with Reaticulate, which I assume is somehow down to my inexperience/ignorance, but might also just be an issue with Session Strings Pro 2:

I built multis in K6 for each Session Strings Pro section, grouping the articulations by type. So Midi Channel 2 is routed to the first instance of Kontakt in the multi, with legato, portamento, glissando and sustain on keyswitches C-1 to D#-1, and so on.

Within Reaticulate, it looks like this:

//! c=legato i=legato [email protected]/note:12
1 legato
//! c=legato i=legato-portamento [email protected]/note:13
2 portamento
//! c=legato i=legato-glissando [email protected]/note:14
3 glissando
//! c=legato i=sustain [email protected]/note:15
4 sustain

This set up successfully triggers all the other articulations, but not these. Even if I move them to a different instance of Kontakt within the multi and adjust the channel number and note trigger to match, they still won't trigger. Instead, whatever articulation was last selected manually or by keyswitch within the instance plays.

The keyswitches themselves work to trigger articulations. So does selecting the articulation in the UI. Is there something special about how these articulations work that I'm missing? Is there some reason that the keyswitch info from Reaticulate isn't getting through? Like I said at the top, I'm tempted to suspect I'm just being dense, but I can't figure it out, and I'd love any answers folks might have.
 

h.s.j.e

Hans Shenk
Just hastily reading this on the couch but at first blush, assuming you want to send note 12 to channel 2 and then route future events to channel 2, this (and the other articulations) should be in the form [email protected]:12
Thanks for taking the time to answer so quickly! This is helpful to know, and a sign of the kind of ignorance I may be suffering from, but it didn't solve the problem.

I keep wondering if it's some kind of a glitch (or feature) in SSP2, but I can't figure out why it would only impact keyswitch information sent via Reaticulate, not manual keyswitches. Is there a difference between how Kontakt receives manual keyswitch entry and the Reaticulate info?
 
OP
tack

tack

Damned Dirty Ape
Thread starter
  • Thread Starter
  • Thread Starter
  • #674
Is there a difference between how Kontakt receives manual keyswitch entry and the Reaticulate info?
Nope, at the end of the day it's just a MIDI event, all the same to Kontakt whether it's something you manually play or whether it's generated.

Would you be able to email me a sample project that shows a slimmed down view of what you're going after, and include in the email your current reabank? It's always faster figure out the intended workflow and whatever might be going wrong that way.

Thanks!
 

h.s.j.e

Hans Shenk
Nope, at the end of the day it's just a MIDI event, all the same to Kontakt whether it's something you manually play or whether it's generated.

Would you be able to email me a sample project that shows a slimmed down view of what you're going after, and include in the email your current reabank? It's always faster figure out the intended workflow and whatever might be going wrong that way.
Thanks so much, I've just done so. It's one of those things that isn't a huge deal - after all, I'm not switching between portamento and glissando constantly - but it's been nagging at me steadily since I first set up the system.
 

h.s.j.e

Hans Shenk
Thanks so much, I've just done so. It's one of those things that isn't a huge deal - after all, I'm not switching between portamento and glissando constantly - but it's been nagging at me steadily since I first set up the system.
Long story short: I had not actually done so, and when @tack pointed that out, I corrected it and it solved the problem. Many thanks.
 

Oliver.T

New Member
Hi all,
Does anyone use UACC KS with Spitfire Libs with Reaticulate? Does it work reliably over all and for layering in particular? Is it wort the hussle remapping everything from UACC to UACC KS? It would be great if one could layer articulations on the fly, compared to preconfigured layered programs, which is not too bad either. Maybe there is a way already, I just didn't figure it out yet?... Thanks
 
OP
tack

tack

Damned Dirty Ape
Thread starter
  • Thread Starter
  • Thread Starter
  • #678
Does it work reliably over all and for layering in particular? Is it wort the hussle remapping everything from UACC to UACC KS? It would be great if one could layer articulations on the fly, compared to preconfigured layered programs, which is not too bad either. Maybe there is a way already, I just didn't figure it out yet?
UACC KS would work fine in principle, it's just a different type of output event as far as Reaticulate is concerned. Unfortunately the idea of layering doesn't fit with Reaticulate's design of using program changes to trigger articulations, because program changes are discrete point-in-time events. So you would have to create custom articulations for the specific layerings you want.

At some point in the future I hope to switch to notation events from program changes, but right now there are too many Reaper limitations to make this feasible.
 
OP
tack

tack

Damned Dirty Ape
Thread starter
  • Thread Starter
  • Thread Starter
  • #679
0.4.7 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.6:

Bug Fixes
  • Fixed bug where window pinned state was not preserved between restarts
 
Top Bottom