What's new

Reaticulate - articulation management for REAPER - 0.5.13 now available

Hey tack. Is it possible to assign keys for articulation switching? I always got my C-1 for my longs, C#-1 for Legato etc. But these should trigger CC32 for Spitfire Products for example without having the actual notes printed in the sequence.
Not really handled very well right now, no. There's an open issue here and this post on the Reaper forum explains a bit of context.

Reaper does not make this easy for us at all. Apart from creating the 128 separate actions (or, worse, 2176 if you want to target specific channels rather than the default channel) and have you bind your notes individually to those actions as shortcuts, the only other idea I have is this:

When you play a note, if that note is assigned to an articulation on the actively armed track, then the JSFX on the track reports back to the main script "hey, I just intercepted a note that's mapped to articulation 42." Then the main script checks to see if we're either recording or step-recording in the MIDI editor, and edits the MIDI item in-place to replace the note with the program change message. (There may be unintended side effects there: it's not a stretch to imagine Reaper could complain about MIDI events getting dynamically modified in an item being actively recorded to. And even if it works, there will be an unavoidable flicker as the note vanishes and the program change event is added.)

That idea has the benefit that if the note being played happens to be mapped to an articulation on the armed track then it gets replaced for a program event, and if not, then it's passed through as a standard note as part of the performance (i.e. Reaticulate can ignore it). That behaviour isn't very cleanly accomplished the other idea of having 128+ separate actions.

So basically it's just a series of trade-offs here. Suffice it to say, some sort of solution is on the roadmap. In the meantime, you'd have to use something like Bome MIDI Translator to translate notes to a CC that you can assign to one of the "Activate articulation by CC" actions.
 
Another small prerelease update in 0.2.93.
Incidentally, assuming there aren't any bugs, this will be the last prerelease before 0.3.0 so I'm grateful to hear about any experiences, positive or negative (if you found bugs).
 
Not really handled very well right now, no. There's an open issue here and this post on the Reaper forum explains a bit of context.

Reaper does not make this easy for us at all. Apart from creating the 128 separate actions (or, worse, 2176 if you want to target specific channels rather than the default channel) and have you bind your notes individually to those actions as shortcuts, the only other idea I have is this:

When you play a note, if that note is assigned to an articulation on the actively armed track, then the JSFX on the track reports back to the main script "hey, I just intercepted a note that's mapped to articulation 42." Then the main script checks to see if we're either recording or step-recording in the MIDI editor, and edits the MIDI item in-place to replace the note with the program change message. (There may be unintended side effects there: it's not a stretch to imagine Reaper could complain about MIDI events getting dynamically modified in an item being actively recorded to. And even if it works, there will be an unavoidable flicker as the note vanishes and the program change event is added.)

That idea has the benefit that if the note being played happens to be mapped to an articulation on the armed track then it gets replaced for a program event, and if not, then it's passed through as a standard note as part of the performance (i.e. Reaticulate can ignore it). That behaviour isn't very cleanly accomplished the other idea of having 128+ separate actions.

So basically it's just a series of trade-offs here. Suffice it to say, some sort of solution is on the roadmap. In the meantime, you'd have to use something like Bome MIDI Translator to translate notes to a CC that you can assign to one of the "Activate articulation by CC" actions.
Thanks for this informative reply. I will check your suggestions and give it a try...
 
Hi Tack,
Please, make the additional icon "empty" (or "background"), that appears as nothing (for groups separate purposes). Also it will be good if it will be possible to see a message (m=) above articulation list as performance guidelines, like "Use CC47 for frullato, CC48 for bla-bla" (maybe as an option)
 

Attachments

  • Empty.jpg
    Empty.jpg
    34.6 KB · Views: 14
Last edited:
Please, make the additional icon "empty" (or "background"), that appears as nothing (for groups separate purposes). Also it will be good if it will be possible to see a message (m=) above articulation list as performance guidelines, like "Use CC47 for frullato, CC48 for bla-bla" (maybe as an option)
Both good ideas and pretty easy to implement. I'll add them to version 0.4.0 which will be out in the next month or two (but will land in prereleases first).

I'm tracking those features here and here.

Edit: actually I realized I misinterpreted your comment about the messages. From your screenshot I thought you meant per-articulation messages (which I think isn't a bad idea), but you meant the bank-level message. Now tracking that one here.)
 
I've just promoted the last prerelease (plus a couple small tweaks) to version 0.3.0.

This release of Reaticulate focuses on general usability improvements and knocking down those little workflow irritations. Apart from that, there are quite a number of internal structural changes that you don't see, but will help pave the way for future releases.


Eh?
Reaticulate is an articulation management system for REAPER. Check the website for the skinny.

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

Upgrading

For those of you on the release track, you should eventually receive the update, but you can force it by following these instructions. Those using the prerelease track will receive this update as well, plus of course all the prereleases leading up to 0.4.0.

Here are the changes since 0.2.0:

New Features
  • Articulations are now fed back to control surface (#48)
    • CC0/32 bank select indicates bank for articulation
    • Articulations can be expressed either as native program change events or custom CC events
  • When the js_ReaScriptAPI extension is installed (strongly recommended but not required):
    • You can now pin the Reaticulate window when floating
    • Some new actions and features become available
    • Much improved focusing behavior
  • New action "Focus articulation filter" (which works best when the js_ReaScriptAPI extension is installed)
  • New action "Activate articulation slot number by CC on default channel" which can be used to activate articulations based on their position in the bank list (#58)
  • New action "Insert last activated articulation into MIDI item on default channel" to insert the last activated articulation into MIDI item at edit cursor (same behavior as right clicking the articulation)
  • New option "Track section follows focused FX window" (with associated toggle action) (requires js_ReaScriptAPI extension)
  • New option "Track selection follows MIDI editor target item" (with associated toggle action)
    • This is most conveniently paired with the "Options: MIDI track list/media item lane selection is linked to editability"
  • New action "Select last selected track"
  • Various new actions to select but not activate articulations, plus an action to activate currently selected articulation (#59)
    • Running the action to activate currently selected articulation twice in rapid succession will cause it to insert into MIDI item
  • On pages that scroll, scrollbars will appear when the mouse hovers toward the right edge


Minor Enhancements
  • Added a new "Behaviors" section on Settings page
  • Activating an articulation now scrolls it into view in the GUI (#50)
  • Improved First Run experience (especially for portable Reaper installations) (#46)
  • Minor cosmetic improvements with drag-and-drop to reorder banks on the track configuration page

Bug Fixes

  • Fixed regression in control surface feedback when reopening a project
  • Force control surface update on track selection (workaround for https://forum.cockos.com/showthread.php?p=2077098)
  • Ensure articulations on same MIDI tick as notes are processed before the notes (#53)
  • Other minor fixes
 
It's great that you are continuously updating Reaticulate. I recently integrated Reaticulate into my template and created custom banks for my most important orchestral libraries (Jaeger and Hollywood Orchestra). The new focusing behavior options sound really good and will certainly work better with my workflow!

How has everyone set up divisi in Reaticulate? I'd like to avoid loading duplicate patches and set up divisi buttons that balance the volume correctly for various divisi set ups. However, I haven't been able to figure out how to enable writing individual mod wheel dynamics for all the divisi parts and with monophonic legato patches. It would also have to work both with keyswitch based and midi channel based articulation changes. Any ideas on how to tackle this challenge?
 
How has everyone set up divisi in Reaticulate? I'd like to avoid loading duplicate patches and set up divisi buttons that balance the volume correctly for various divisi set ups. However, I haven't been able to figure out how to enable writing individual mod wheel dynamics for all the divisi parts and with monophonic legato patches. It would also have to work both with keyswitch based and midi channel based articulation changes. Any ideas on how to tackle this challenge?
If you want individual modwheel control for each divisi section, I don't know of a way to avoid pulling in multiple patches in your VSTi on different channels (whether Reaticulate is used or not).

That's what I do when I want independent CC control, and use different MIDI channels for the different divisi sections. In Reaticulate, as long as you assign the bank to the track with source channel of omni and destination channel of source (these are the defaults), you can use the same bank for control via multiple source MIDI channels. Reaticulate understands that each source channel can be assigned its own articulation.

It's certainly possible to set up automatic configuration of CC7/CC11 based on number of divisi sections. I haven't bothered with that myself, instead doing it manually for the most control, although I might feel differently if I did it more. You can read this post for some ideas on how to set this up with Reaticulate.

But the suggestion in that post only works for keyswitch based patches. For the articulation-per-channel multi setup this is rather more complicated because, again, if you want divisi sections playing the same articulation with independent CC control, you just need to pull in another instance of that patch on some other channel, and then it's hard to avoid the need to make the banks explicitly aware of those channel choices.

In Kontakt, I think I would solve this problem by using FlexRouter to abstract away the multi layout, making the instrument appear like a keyswitchable patch. I'd have source channel 1 map to port A channels 1-16 in Kontakt, source channel 2 map to port B 1-16, ..., source channel 4 map to port D 1-16. Then Reaticulate's bank just sends output events to activate the keyswitches, and I can use source channels for divisi exactly as described in the earlier referenced post. If I have legato on channel 2 and I need a divisi line, I can pull in another instances of the legato patch on [ B]2 on demand.

I think that's an elegant enough solution, but it only works for Kontakt. I'm not sure how to approach it with your PLAY instruments.

If you have any ideas on how you think it should work, I can see if Reaticulate can be made to work that way.
 
Last edited:
Hi @tack ,

Trying to use the Fluffy Audio Solo woodwinds.

The trills there are instant articulations and are only played for as long as the keyswitch is pressed, else the instrument goes back to a sustained note.

I thought this was the command to get Reaper to hold a Key(switch) until the next one but it doesn't seem to be working:
//! c=fx i=trill-min2 o=note-hold:40
40 Minor Trill

Please help!
 
Great work! I love the filter function to reduce the number of visible articulations on the fly.
Very usefull with the old VSL libraries with tons of articulations.

Right now the the filter uses the articulation names. I'd suggest additionally to filter by (invisible) "tags" that would be manually added to the articulation file/map. With this you could filter for example for "basic articulations" or "dynamics" - whatever you could imagine by adding such tags to the articulation.

Of course one could add such information to the articulation name but this makes the articulation name complex and long.
 
I thought this was the command to get Reaper to hold a Key(switch) until the next one but it doesn't seem to be working:
//! c=fx i=trill-min2 o=note-hold:40
40 Minor Trill
That looks good to me. Selecting that articulation will send a note-on, and defer the note-off until another articulation is activated. Just tested it and it does work for me.

So I guess we'll need to dig more into what you mean by "doesn't seem to be working."

If you add a ReaControlMIDI instance after Reaticulate and enable the MIDI activity log, you can see exactly what Reaticulate is sending. If it's not sending a note-on when you select that articulation (but not yet the note-off) then it would be helpful if you took a screen capture of what the issue is.
 
Right now the the filter uses the articulation names. I'd suggest additionally to filter by (invisible) "tags" that would be manually added to the articulation file/map. With this you could filter for example for "basic articulations" or "dynamics" - whatever you could imagine by adding such tags to the articulation.
That's an interesting idea!

Would anyone else find that valuable? It doesn't seem like it should be too hard to implement, but I also don't want to add features nobody cares about. :)
 
An option to dock Reaticulate in the Midi editor would be great.
Unfortunately Reaper doesn't allow that. What I do is size my midi editor such that the docked Reaticulate window remains visible.

reaper-screenshot-20190612.png
 
Unfortunately Reaper doesn't allow that. What I do is size my midi editor such that the docked Reaticulate window remains visible.

reaper-screenshot-20190612.png
Thats what I do aswell. Unfortunately the screensets are buggy if it comes to the midi editor. I set one up to maintain this view but sometimes it doesnt open the midi editor.
 
Hi Tack,

It seems more as a Reaper bug - Reaticulate (last version) doesn't transmit PrCh messages to VePro on osx (from Cubase all is ok, it is not VePro or anything else)

//! c=legato o=program:1
1 Legato

//! c=long o=program:2
2 Sustain


Also question - a Flexrouter doesn't receive CC0 messages - is it normal?
 
It seems more as a Reaper bug - Reaticulate (last version) doesn't transmit PrCh messages to VePro on osx (from Cubase all is ok, it is not VePro or anything else)
If you put a ReaControlMIDI instance right after Reaticulate and turn on the MIDI Activity log, when you activate one of those articulations, do you see Reaticulate sending the program change message?

Also question - a Flexrouter doesn't receive CC0 messages - is it normal?
Indeed, that does seem to be broken. I attempted a hasty fix -- can you try this version?
 
Nice! It's working! Thanks!
So, how to move rules from old version of the script to new one? (copy/paste or save/load rules functions?)

If you put a ReaControlMIDI instance right after Reaticulate and turn on the MIDI Activity log, when you activate one of those articulations, do you see Reaticulate sending the program change message?
Yes, I made a video. Also, PrCh from another source (Bidule) isn't working
Question: is there a quick algorithm to add an alternating articulation to very much ostinato notes (as on att. pic.)? Is it possible to make a script "add selected articulation to selected notes? (A user selects notes with pressed shift and applied the 1st articulation. After it selects remaining notes and applied 2nd articulation - is it possible?)
 

Attachments

  • Screen Shot 2019-06-29 at 00.14.11.JPEG
    Screen Shot 2019-06-29 at 00.14.11.JPEG
    118.6 KB · Views: 5
Last edited:
So, how to move rules from old version of the script to new one? (copy/paste or save/load rules functions?)
The easiest way to upgrade FlexRouter (maybe even the only way) is to copy/paste the source code into an existing KSP instance. This will preserve your rules. Admittedly it's a pain in the ass, but I've not discovered a better method with KSPs.

Yes, I made a video. Also, PrCh from another source (Bidule) isn't working
I see what you mean (video was very clear, thanks). I guess this isn't a Reaticulate bug, so selfishly I'm happy about that, but OTOH I've not used VEP with Reaper (or at all, for that matter) so I'm not sure how to advise you.

Coming from that place of ignorance, a few things I might try are:
  • If there is a master MIDI input logger in VEP for all things coming in, check there.
  • If you're able to shim a virtual MIDI device in between Reaper's output and VEP's input, you could attach a logger there to see if the program changes are even being sent by Reaper (which would make it a problem entirely in VEP's domain). For example, something like Bome MIDI Translator or LoopBe.
  • I understand that VEP has a VST plugin that can be dropped on the FX chain to communicate to the VEP instance as opposed to using MIDI outputs? This might be something to try as an alternative.
Question: is there a quick algorithm to add an alternating articulation to very much ostinato notes (as on att. pic.)? Is it possible to make a script "add selected articulation to selected notes? (A user selects notes with pressed shift and applied the 1st articulation. After it selects remaining notes and applied 2nd articulation - is it possible?)
But "add selected articulation to selected notes" is really just another way of saying "insert articulation at first selected note" isn't it? The workflow for that is different but feels roughly equal: instead of selecting notes and activating your proposed action, you move the edit cursor to the first note and right-click the articulation to insert it.

Ok, that's maybe just slightly less convenient if you don't want to fiddle with the edit cursor. I guess I can see a use for an action "insert articulation at first selected note" with some sort of keyboard modifier shortcut in the UI. Maybe right-click articulation inserts at edit cursor as today, and ctrl-right-click inserts at first selected note. Or something.

Meanwhile, assuming you were inputting things manually before, maybe the ostinato case can be improved by copying the program change messages along with notes and duplicating the selected events?

reaticulate-ostinato-usecase.gif
 
Top Bottom