1. Didja accidentally blow through the whole, "We're using our real names" thing on registration? No problem, just send me (Mike) a Conversation message and I'll get you sorted, by which I mean hammered-into-obedient-line because I'm SO about having a lot of individuality-destroying, oppressive shit all over my forum.
    Dismiss Notice
  2. You're only as good as the harshest criticism you're willing to hear.
    Dismiss Notice

Reaticulate!

Discussion in 'Tips, Tricks & Talk' started by Christopher Ramey, Mar 24, 2018.

  1. Any Reaper users out there? This totally free extension has unlocked hidden potential in Reaper when working with articulations. Personally, I find it better than the available options (BRSO Articulate, and the "Inspector With Articulation Management").

    It took a few hours to get everything set up, but it has been totally worth it in the end. It has a really clever, elegant way of handling articulation switching, whether it's through key switches, separate MIDI channels, velocity-based switching, latching/non-latching switches, or any combination thereof. Now I can write without having to open any Kontakt windows, or having to memorize all the different key switches between libraries, or remember which articulation is on which channel, etc.

    I've even read some people posting that it's even better than Cubase's expression maps, though I wouldn't know. What I do know is that it is extremely powerful (more so than it might seem upon first glance) and really helps the technology "get out of the way" when writing. Granted, it did take the better part of an evening to get it set up; you have to fire up a text editor and get your hands just a bit dirty (nothing too complicated, but still manually entered via notepad).

    Delving deeper, I'm discovering more uses for it than just switching between stock articulations; I'm currently trying to make a sort of "ensemble builder" with it where I can, for instance, click one button and it enables violins with violas an octave lower, and that sort of thing, making use of both key switches and multichannel routing at the same time. But this is a bit of an extreme use case, and I'm not quite there with it yet.

    Hopefully some Reaper users will find this useful; I don't know how it flew under my radar for so long. And if you aren't a Reaper user, well... maybe someday you'll come to your senses ;)
     
    Matthias Calis likes this.
  2. The developer of that extension is here on the forum! @Jason Tackaberry
    Glad you enjoy it, when I'm not on Cubase, I rely on that for Reaper. You can see some of my expression maps at his source page, I'll include the link on a future edit.

    As promised, here's a link for more info, expression maps, & issue reporting.
     
  3. Delighted to hear it's working well for you so far, Christopher. Happy to provide support here or on any of the other forums.

    Several tweaks and fixes coming in the next release (aaaannnyy day now, honest). If you do run into any issues, you might first check to see if it's already been fixed in the development branch (in which case it'll be sorted in the next release).

    (And thanks for the ping, Bradley.)
     
  4. #4 Matthias Calis, Mar 25, 2018
    Last edited: Mar 25, 2018
    I immediately went out to give this a try, really rather like it so far! Thanks very much for all the hard work @Jason Tackaberry.

    I was wondering if you could help me with one particular problem though. I was thinking of setting up a "Half desk con sord long" articulation with Hollywood Strings. I loaded two programs into play:

    1. Violins 1 Sus 13 RR 4th Position Divisi A (@ midi channel 1)
    2. Violins 1 Sus 13 RR 4th Position (@ midi channel 2)

    Now, in order to enable Con Sordino in Hollywood strings a CC15 with a value of 65 or higher needs to be sent. To disable Con Sordino a CC15 with a value of 64 or lower needs to be sent. The trouble is in directing the CC15 to a specific midi channel. What I want is to make an articulation that does the following:

    1. Route all incoming midi notes to both channel 1 and 2.
    2. Set CC15 on channel 1 to be >=65 (con sord on).
    3. Set CC15 on channel 2 to be <=64 (con sord off).

    The end result should be that I hear the divisi section playing con sord longs whilst also hearing the full section playing senza sords when I'm pressing down a key. Hope that makes sense!

    My bank file so far is:
    Code:
    //! g="HWS/Violins 1" n="Violins 1 Test"
    Bank 6 2 HWSVL1
    //! c=long i=con-sord-blend g=1 o=cc:15,66/@1/@2
    121 Half desk con sord
    
    Now this works...kinda... but only because I have the Divisis (which is the patch I want to have the sords ON is on midi channel 1). From what I can tell, the CC15 message seems to only be sent to midi channel 1. Even if I write something like this:

    Code:
    //! c=long o=cc:15,66
    123 Something
    
    I'm sorry if I am making a really dumb mistake here, I probably am, I am just not quite sure how to fix this on my own. If you'd have any pointers, that'd be great! Thanks very much! (And sorry for hijacking the thread a bit, but this seemed the approriate place to ask).

    EDIT I think I've already figured it out. "A" way to do it at least... I need to make a "con sord on" and "con sord off" articulation that will sent the corresponding CC15 values. Then I need to use the midi channel buttons at the top of the Reaticulate GUI to enable/disable con sord on the desired midi channels. This seems like a decent way of doing what I want, but if I could it to work in one articulation somehow, that would be even nicer.
     
  5. I think I follow you.

    You were pretty close:

    Code:
    //! c=long i=con-sord-blend g=1 o=cc:15,66/@1/@2
    121 Half desk con sord
    
    But what you have here is 3 separate output events that do this:
    1. Send CC15 value 66 on the default channel (the one selected in the GUI)
    2. Setup routing to channel 1
    3. Setup routing to channel 2 (additionally)
    What I think you want is this:

    Code:
    //! c=long i=con-sord-blend g=1 o=cc:15,66@1/cc:15,1@2
    121 Half desk con sord
    
    Which does:
    1. Send CC15 value 66 on channel 1 and direct subsequent incoming MIDI to channel 1
    2. Send CC15 value 1 on channel 2 and direct subsequent incoming MIDI to channel 2 (in addition to channel 1 setup in output event #1)
    Eventually the bank builder GUI should eliminate this kind of syntactic confusion (because the user will not have to understand the weird syntax I've constructed here :)). For now, I hope you'll bear with it!

    Good luck!
     
    Matthias Calis likes this.
  6. That was fast! I don't think your syntax is that weird to be honest. Frankly I can't believe I missed that I could just tack on the "@" behind a CC command to direct it to that specific channel, that's exactly what I needed!
     
  7. It's admittedly getting a bit weirder as I add new capabilities. :)

    Glad to hear my suggestion worked out for you.
     
    Matthias Calis likes this.
  8. Hi tack! First of all thanks so much for coding this, it has been incredibly useful so far! Please be sure to let us know if there's any way to contribute. I haven't been able to find any info about that in the website, github or other forums.

    I come to you with a question. I am right now in the process of upgrading my workflow to include both reaticulate and ReaperWRB (I just got a touch screen and it really speeds up the workflow). What I am aiming to do is to have buttons on my touchscreen (implemented through ReaperWRB) that activate specific articulations. I have real estate for up to 24 buttons per page, so it should be plenty for the basic set of articulations. I have created the appropriate banks for the libraries I am using at the moment, which was not difficult to do. I also used UACC as a basis for my own system to have proper consistency between different patches and sections.

    I am now struggling with the actions. Now, this is not my first brush with the ReaScript stuff and LUA. I wrote some very simple scripts in order to expand on the capabilities of ReaperWRB (since at the moment it cannot access the MIDI Editor functions). I had to create scripts that perform the actions that I wanted in my screen order to be able to operate in the realm of the MIDI editor, which is where I spend most of the time fine-tuning stuff. But my knowledge is limited and I am not sure I am interpreting things right. I have been looking at some of the actions and trying to figure out how to go about creating these actions that I need. If I do this:

    val=1
    reaper.SetExtState("reaticulate", "command", "activate_articulation=1," .. tostring(val), false)
    Am I correct to interpret that I will be activating the articulation assigned as 1 to channel 1? In the case of the UACC, would it be the generic longs? Is there anything about the syntax or usage of the "activate_articulation" command that I am interpreting incorrectly?
     
  9. Hi Mauro,

    Is it possible for ReaperWRB to trigger actions by MIDI events? If so then you would want to use the action "Activate articulation by CC on channel 01". Supposing you bound CC119 to that action, your tablet could send CC119 value 1 to activate program 1. This is the intended way of working with tablets.

    If ReaperWRB can't trigger MIDI, and it's unable to set the action context when invoking the action (i.e. it can only trigger discrete actions without context) then this is going to get pretty ridiculous, because indeed it will require individual actions for every program number on every channel you want to work in.

    This is the path you've started down, but I'd really hope ReaperWRB offers an alternative. (I'm afraid I don't have it, and I can't find any documentation about it, or perhaps the documentation is behind a pay wall.)

    If ReaperWRB truly does have those limitations, then you definitely had the right idea. One can communicate to the main Reaticulate plugin by setting the 'command' key with a space-delimited list of actions. The command to activate an articulation takes the form:

    Code:
    activate_articulation=<channel>,<program>
    
    So activate_articulation=1,1 would trigger program 1 on channel 1 to activate longs if the bank you're using did follow the recommended approach of using the UACC program numbers. Or activate_articulation=1,42 would activate spiccato on channel 1. So the simplest script to activate spiccato on channel 1 looks like:

    Code:
    reaper.SetExtState("reaticulate", "command", "activate_articulation=1,42", false)
    
    Hope that makes sense.
     
    Mauro Pantin likes this.
  10. #10 Mauro Pantin, Aug 15, 2018
    Last edited: Aug 15, 2018
    Tack, thank you so much for the quick reply!

    Unfortunately, ReaperWRB still does not offer context for actions, only discrete commands, so yeah, there is some scripting to be done. The same thing happened with MIDI Editor actions, currently not supported by the Reaper API, so I had to do 60+ scripts with my most searched for commands and sequences of actions for the MIDI Editor. It was a bit of an indirect workaround, as there is a feature request to support the MIDI Editor in the API (but no timetable on that). The scripts weren't difficult to write, but they took some time.

    In this case I expect less work, since the banks I made are pretty consistent across libraries and I'm not going to be doing a script for every single articulation, just the most commonly used ones and start from there; mainly because I anticipate the workflow will change after I set everything up anyway, this is version 1.0 of the ecosystem and I'm sure I'll find things that I discover as and when I try stuff out. I am hoping for something around 12-15 scripts, which is not such a big deal all things considered, and fortunately, the syntax is super clear after your post, so all the scripts will be the same save for the CC number that I send.

    Again, thank you so much for creating Reaticulate and for your help with this!

    EDIT: I'm done scripting. Ended up with the 13 most used articulations, so not that much writing. This worked like a charm!
     

Share This Page