Reaticulate | a free articulation management system for REAPER

Reaticulate 0.5.13 Released

February 19, 2024

Bug Fixes

(Note: 0.5.12 was discarded due to an improper build process.)

Reaticulate 0.5.11 Released

September 27, 2023

Minor Enhancements

Bug Fixes

Reaticulate 0.5.10 Released

December 3, 2022

Bug Fixes

Reaticulate 0.5.9 Released

October 3, 2022

Bug Fixes

Reaticulate 0.5.8 Released

September 13, 2022

Bug Fixes

Reaticulate 0.5.7 Released

September 12, 2022

New Features

Minor Enhancements

Bug Fixes

Reaticulate 0.5.6 Released

March 8, 2022

Bug Fixes

Reaticulate 0.5.5 Released

February 27, 2022

Minor Enhancements

Bug Fixes

Reaticulate 0.5.4 Released

February 17, 2022

0.5.4 is a minor release bringing a couple small functional improvements.

New Features

Bug Fixes

Reaticulate 0.5.3 Released

February 17, 2022

0.5.3 fixes a critical bug on MacOS with Retina displays.

Minor Enhancements

Bug Fixes

Reaticulate 0.5.2 Released

February 10, 2022

0.5.2 is a minor release to address another pair of small issues.

Bug Fixes

Reaticulate 0.5.1 Released

February 8, 2022

0.5.1 is a minor release to pick up a couple bug fixes.

Bug Fixes

Reaticulate 0.5.0 Released

January 23, 2022

The next major release of Reaticulate is now available. Users of both the pre-release and stable ReaPacks will receive this version when updating.

Reaticulate 0.5.0 is backward compatible with previous projects saved with all past versions of Reaticulate, but old versions are not forward compatible with this new version. This means projects saved with Reaticulate 0.5.0 will not function properly with older versions. It's a good idea to have backups of your projects until you're confident that downgrading won't be necessary.

Note: REAPER 5.975 (released on April 30, 2019) or later is now required. However REAPER 6.46 or later is recommended for the best experience.

Let's explore the highlights of this release ...

Easy Importing of Banks

Third party (user contributed) banks can now easily be imported into Reaticulate, either via clipboard, or by dragging-and-dropping one or more bank files onto Reaticulate's window.

inline

No need to open a text editor anymore for this basic operation.

You can find a collection user contributed banks over on GitHub. Scroll down to the bottom of that page for installation instructions, which have been adapted for Reaticulate 0.5.0.

Managed Bank MSB/LSB Assignments

In previous versions of Reaticulate, you, as the user, needed to assign and juggle the MSB/LSB numbers assigned to all banks (i.e. articulation maps) in your Reaticulate.reabank file. For example:

//! g="Reaticulate Examples" n="Bohemian Violin Exp1" off=0
Bank 42 4 Bohemian Violin Exp1
//! c=long-dark i=note-whole g=2 f=toggle o=note:35
35 chords
...

Above, the MSB/LSB is 42 and 4. The onus was on you to keep track of all these numbers and make sure nothing in your Reaticulate.reabank file had any duplicates. This was increasingly complicated by pulling in user-contributed banks, where their choice of MSB/LSB may well have clashed with yours, requiring you to reassign them to avoid conflicts.

Even worse, sharing REAPER projects with other users was problematic: what if your project used an MSB/LSB that was assigned to a different bank in the other user's system? Some form of manual intervention would be needed.

It's all very tedious and error-prone, and as of Reaticulate 0.5 it's a thing of the past!

Instead of using MSB/LSB numbers as the way to know what banks are assigned to which tracks, Reaticulate now uses a custom globally unique identifier (GUID). It automatically generates new GUIDs when you add new banks for the first time. And, more importantly, Reaticulate automatically assigns MSB/LSB on a project-by-project basis.

Consequently, users no longer need to give MSB/LSB another thought. Reaticulate handles all of it behind the scenes. Projects can be shared with other users, and once those users import the banks used by the project, it all Just Works.

In Reaticulate 0.5.0, the bank definition can now look like this:

//! g="Reaticulate Examples" n="Bohemian Violin Exp1" off=0
Bank * * Bohemian Violin Exp1
//! c=long-dark i=note-whole g=2 f=toggle o=note:35
35 chords
...

Using * for the MSB and LSB values leaves it up to Reaticulate to assign them. In fact, even if you put numbers in those fields, Reaticulate just considers it a mere suggestion: it will use those values if it can, but if there are any conflicts, it will assign new values.

With a bank definition like above, once you click the Reload button in Reaticulate's UI, Reaticulate will automatically assign this bank a new randomly generated GUID and rewrite the Reaticulate.rebank file with the update:

//! g="Reaticulate Examples" n="Bohemian Violin Exp1" off=0
//! id=5b6799b1-eb75-4043-8180-4b1283b84e31
Bank * * Bohemian Violin Exp1
//! c=long-dark i=note-whole g=2 f=toggle o=note:35
35 chords
...

This new id attribute is how Reaticulate identifies this bank, and it ensures uniqueness across any REAPER installation.

While this isn't a particularly glamorous change, this is the biggest feature of Reaticulate 0.5.0, and this architectural change paves the way for many new enhancements, including the bank importing feature mentioned earlier.

Workflow Improvements

This release contains a number of small changes that will hopefully improve your workflow and general user experience:

  1. If multiple Reaticulate-enabled tracks are selected, when an articulation is inserted (e.g. by right-clicking or double-clicking the articulation button, or using one of the REAPER actions to insert articulations) then the new articulation will be inserted on all selected tracks at once.

    This works best when all tracks use banks from the same family of libraries, but it's not strictly required as long as the program numbers across all the selected tracks' banks align. This is one scenario where bank creators having followed the documented guidance for program numbering will pay off.

  2. Inserting an articulation on selected tracks will create a new MIDI item under the edit cursor if there isn't already one there.

    The capture below demonstrates the above two features. What's noteworthy here is that the selected articulation (sul g) comes from the 1st Violins patch but because of the program number consistency with the other tracks, it translates appropriately to either sul g or sul c, depending on the instrument. Contrabasses meanwhile are skipped altogether because, at least in the library used for this demonstration (Spitfire Chamber Strings), there is no equivalent articulation.

    inline

  3. When Reaticulate's "Insert articulations based on selected notes when MIDI editor is open" option is enabled (and it is by default), then if you have notes selected in the MIDI editor (which includes the inline editor), articulations will be inserted at the note position. You can override this behavior and force Reaticulate to insert at the edit cursor instead by holding down the alt key while performing any interaction that inserts an articulation (such as right-clicking or double-clicking).

  4. A new experimental feature has been introduced to maintain a single floating instrument FX window. That is, as you change tracks, the first instrument plugin on the selected track (Kontakt, for example) will be shown in the single window. This feature will see some refinement in future releases, but even in its current form may be useful to some users.

User Interface Enhancements

Quite a lot of polish has gone into the GUI this release, particularly around improving the experience on touch-screen and high resolution displays.

Multi-Column Articulations

If Reaticulate's window is wide enough, articulations will automatically now flow into multiple columns, making better use of available space and reducing the need for scrolling.

inline

Retina/Hi-DPI Displays

Reaticulate now fully supports Retina/Hi-DPI displays, where its GUI respects the system-wide DPI setting and automatically adjusts its scale accordingly.

All of Reaticulate's icons now have high-resolution variants ensuring a crisp look even at 2x scale for Retina displays. In the process, articulation icons have been redone from scratch, so you may notice some subtle (hopefully positive) changes over previous versions of Reaticulate.

inline

This can of course be further adjusted or overridden in Reaticulate's settings.

Touch Screen Support

Touch screens are much better supported in Reaticulate 0.5.0, including kinetic scrolling. For users who have a separate touch display, or are using a tablet with an app such as Spacedesk, Reaticulate will now behave more seamlessly when running on these displays.

inline

Articulations can now also be inserted by long-pressing on articulation buttons in the GUI, which may be more convenient for some types of displays. Double-tapping articulation buttons to insert also continues to work, which was a capability introduced in an earlier release.

Full Change Log

New Features

Minor Enhancements

Bug Fixes

Reaticulate 0.4.7 Released

March 27, 2021

Full Change Log

Bug Fixes

Reaticulate 0.4.6 Released

November 7, 2020

Full Change Log

Bug Fixes

Reaticulate 0.4.5 Released

March 21, 2020

Full Change Log

Bug Fixes

Reaticulate 0.4.4 Released

December 14, 2019

Full Change Log

Bug Fixes

Reaticulate 0.4.3 Released

November 17, 2019

Full Change Log

Bug Fixes

Reaticulate 0.4.2 Released

November 8, 2019

Full Change Log

Bug Fixes

Reaticulate 0.4.1 Released

November 4, 2019

0.4.1 tidies up a few loose threads that slipped through in 0.4.0.

Full Change Log

Bug Fixes

Reaticulate 0.4.0 Released

November 2, 2019

The next major release of Reaticulate is now available. Users of both the pre-release and stable ReaPacks will automatically receive this update.

Although this release includes many new features and workflow improvements, the bulk of the work has been on a significant internal overhaul of how the main UI script interacts with the per-track Reaticulate JSFX instances. This isn't something directly visible to users, but it opens the door to many new features and improvements that weren't previously possible, some of which are now available in this release.

Reaticulate 0.4.0 is backward compatible with previous projects, but old versions are not forward compatible with this new version. This means projects saved with Reaticulate 0.4.0 will not function properly with older versions. It's a good idea to have backups of your projects until you're confident downgrading won't be necessary.

Note: Reaper 5.97 (released on February 21, 2019) or later is now required.

Release Highlights

Articulation Insertion on Selected Notes

When notes are selected in the MIDI editor and an articulation is inserted (e.g. by right- or double-clicking an articulation in the UI), program change events can now be added at the first note of any contiguous subset of selected notes.

The channel of the program changes will also match the notes they are being inserted under, rather than the default channel picked from the channel rows in the UI.

When no notes are selected, or when the MIDI editor is closed, articulations will continue to be inserted at the edit cursor.

This new behavior is currently optional while we get a better sense of how it should mature over time, and can be enabled or disabled from Reaticulate's Settings page. It's enabled by default.

inline

Multiple MIDI Buses

Output events, bank assignments on tracks, and generally anywhere destination channels could be specified can now optionally include a MIDI bus number as well.

This capability allows more easily targeting different VSTi plugins on the same track, by assigning the instances to different buses for MIDI input in Reaper. This also enables better integration with Vienna Ensemble Pro.

Output events can target different buses by adding .<bus> to the channel descriptor. As with channel numbers themselves, if the bus isn't included, then the bus chosen for the destination channel when the bank is assigned to the track will be used.

Here are some examples:

// This sends note 20 on channel 3 to the bus chosen in the track configuration
// because the bus is not specified in the output event.
//
//! o=note@3:20
1 example 1

// This sends note 20 on channel 7 on bus 5, regardless of the destination channel
// in track configuration.
//
//! o=note@7.5:20
2 example 2

// This sends note 20 on bus 2 to the channel chosen in the track configuration
// because channel isn't specified in the output event.  This is similar to
// example 1 except the bus is explicitly set instead of channel.
//
//! o=note@.2:20
3 example 3

User Experience Enhancements

floating Reaticulate now handles light Reaper themes much better, ensuring text and icons are higher contrast. Theme background color detection has been fixed on Mac, and there is also now a setting to configure a custom background color.

Undocked windows can now be borderless, provided a sufficiently recent version of the js_ReaScriptAPI extension is installed. This option can be enabled in Reaticulate's Settings page. (The option will not be visible if js_ReaScriptAPI is too old or not installed.)

In addition to right-clicking, articulations in the UI can now be double-clicked to insert articulation changes into MIDI items.

Finally, previous versions did not respect Undo with articulation insertions. This has been fixed with 0.4.0, so articulations inserted into MIDI items can be reverted with Reaper's normal undo facility.

New Articulation Capabilities

All the new features described below are fully documented on the Bank Files page.

Note Transformations

Four new articulation attributes have been added to perform basic transforms to incoming notes after the articulation is activated:

Here are some examples:

// Shift played notes down an octave
//
//! transpose=-12 o=@1
1 8vb longs

// Increase note velocity by 2.5x to simulate an accent.
//
// velocity=2.5 o=@2
2 staccato accent

// Limit notes to playable range for this restricted artculation
//
// pitchrange=55-74 o=@3
3 sul g

Pitch Bend

A new pitch output event has been added to send pitch bend MIDI messages when articulations are triggered. Values are between -8192 and 8192.

// Send a pitch bend to channel 3 bus 2.
//
//! o=pitch@3.2:-1250
1 example

Pitch bends aren't automatically reset to 0 when another articulation is activated. You would need to specify that explicitly in the other articulations' output events.

Use Previous Routing for Output Events

A special channel value of - (dash) will send the output event to the destination channel(s) set up by the previous articulation. Future incoming MIDI events for performance will continue to be routed to those channels.

//! o=cc@1:32,1
1 long ch 1

//! o=cc@2:32,42
42 spiccato ch 2

//! o=cc@-:32,7
7 con sord on existing channel

Visual Spacing Between Articulations

A new spacer articulation attribute allows visually separating groups of articulations. Articulations with this attribute will be shown in Reaticulate's UI with spacing above. The value indicates the degree of spacing, but 1 is generally a good default.

floating

//! c=legato i=legato g=2 o=cc:58,76
20 legato on
//! c=legato i=note-whole g=2 o=cc:58,81
19 legato off

//! spacer=1
//! c=long-light i=con-sord g=3 o=cc:58,86
7 con sordino
//! c=long-light i=note-whole g=3 o=cc:58,91
2 senza sordino

//! spacer=1
//! c=long i=note-whole o=cc:58,1
1 sustain
//! c=short i=spiccato o=cc:58,11
42 spiccato

Full Change Log

New Features

Minor Enhancements

Bug Fixes

Reaticulate 0.3.2 bugfix release

August 4, 2019

This is release fixes a regression introduced in 0.3.0.

Bug Fixes

Reaticulate 0.3.1 bugfix release

June 19, 2019

This is a small bug fix release, mostly to fix a nontrivial regression introduced in 0.3.0.

Bug Fixes

Reaticulate 0.3.0 Released

June 17, 2019

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.

For those who installed Reaticulate via ReaPack, the updates should come automatically in time, but you can force the update by accessing Extensions | ReaPack | Synchronize packages from Reaper's menu.

After the update, you should restart Reaper to ensure the latest version of all Reaticulate scripts are running.

Full Change Log

These are the changes since 0.2.0.

New Features

Minor Enhancements

Bug Fixes

Reaticulate 0.2.0 Released

July 2, 2018

After a longer-than-expected development cycle, I'm happy to release the next alpha version of Reaticulate.

I'm hoping the next major release will be beta worthy. The main release criteria for beta is a GUI editor for creating and modifying banks.

Upgrade Instructions

Important note: this version requires reinstallation with a new ReaPack URL.

Unfortunately due to significant backward-incompatible changes in the ReaPack structure, upgrading requires uninstalling the old version and installing the new one.

I did warn you this was alpha software, right? :)

Follow these steps to uninstall the old version:

  1. Close current project (if one is open)
  2. Menu: Extensions | ReaPack | Manage Repositories
  3. Right click Reaticulate and click Uninstall
  4. Click ok and say yes to the prompt
  5. Restart Reaper (necessary to stop existing Reaticulate instance)

And now follow the installation instructions.

Reaticulate itself is fully backward compatible with the previous version, so all your existing projects will work with the new version. However, the old version is not forward compatible with this new version, so projects saved with Reaticulate 0.2.0 will not function properly in Reaticulate 0.1.0.

It's a good idea to save backups of your projects before resaving with Reaticulate 0.2.0 just in case you find yourself needing to downgrade to Reaticulate 0.1.0.

This will be generally true of all releases (i.e. backward compatible but not forward compatible).

Release Highlights

MIDI CC Feedback to Control Surface

If you do realtime performance of your MIDI CCs using a control surface that supports incoming feedback, such as a MIDI Fighter Twister or iCON Platform-M, it's possible to have Reaticulate-managed tracks sync their current CCs back to the control surface, either on track select or during playback.

There are some new actions to control this behaviour, including to enable or disable it, or to do a one-time dump of current CCs to the control surface.

See the Usage page for more details.

floating

Usability Enhancements

One of the most requested features was the ability to insert program change events in MIDI items without the need to open the MIDI editor and enable step input. This is now possible by right clicking an articulation in the list.

Banks in the track configuration page can now be reordered via drag and drop (depicted right) rather than the cumbersome up/down buttons in the previous release.

The Settings Page now has an option to autostart Reaticulate when Reaper starts. This works by modifying Reaper's special __startup.lua script to invoke the Reaticulate_Start action.

There are a few other little odds and ends improving usability. For example, if the Reaticulate UI panel has focus and the spacebar is hit, it will toggle transport play/pause and move focus back to the arrange view (or MIDI editor if it's open). Unfortunately there's no way to solve this problem in a general sense (passthrough keystrokes to the arrange window) but play/pause was the single biggest workflow killer for me, so hopefully you find it helpful too.

New Articulation Capabilities

All these new features described below are fully documented on the Bank Files page.

Articulation Chaining

There's a new output event type art which allows articulations to be chained. Consider the following bank:

//! c=long i=note-whole o=art:3/art:19/art:2
1 all-in-one long

//! c=long i=note-whole o=note:12
3 sustain
//! c=legato i=legato g=2 o=note:22,65
20 legato on
//! c=legato i=note-whole g=2 o=note:22,1
19 legato off
//! c=long-light i=con-sord g=3 o=note:23,65
7 con sordino
//! c=long-light i=note-whole g=3 o=note:23,1
2 senza sordino

This bank models a patch that has separate keyswitches for legato on/off and con sord on/off, which are placed in different groups. You can activate them independently, but the all-in-one long on program 1 references the other articulations to provide a convenient, er, all-in-one articulation.

When you activate it, the GUI will automatically update to reflect the legato and sordino states.

CC Chasing Improvements

Previously, if Reaticulate observed any CC then it would chase it. This ended up doing frustrating things, such as zeroing out CC 7 (volume) at unexpected times.

Now banks can specify which CCs should be chased. The factory banks have been updated accordingly. And now by default, unless a bank specifies a CC list, only CCs 1,2,11,64-69 will be chased.

Output Events Without Affecting Routing

Sometimes you just want an articulation to fire a MIDI event to a specific channel but not have future non-articulation events get routed to that channel.

This is now possible by prefixing the output event type with a -. For example:

//! o=-note@13:42/note@10:20

The special - prefix in the first note output event tells Reaticlate not to setup routing of future events to channel 13. Meanwhile, because the second note output event isn't so prefixed, subsequent events will get sent to channel 10.

Conditional Output Events

It's now possible to have output events emit only if another articulation is active. We call this a filter program and it requires that the filter program be activated in another group on the same channel, otherwise the output event will be filtered (i.e. not emitted).

This allows articulations to be contextual based on articulations in other groups.

Filter programs are optional, and are specified by appending %program to the output event spec.

For example, consider a library such as Berlin Brass with its expansion packs, where trumpet articulations can be performed unmuted, or with straight mutes, or with harmon mutes. You could have separate programs for each articulation with each type of mute -- and this is a perfectly cromulent approach to be sure -- but it's now also possible to have a single program for each articulation and the type of mute be defined in another group.

//! c=long i=note-whole g=2
120 unmuted
//! c=long-light i=stopped g=2
121 straight mute
//! c=long-light i=stopped g=2
122 harmon mute

//! c=long i=note-whole o=note:24@1%120/note:24@2%121/note:24@3%122
1 long
//! c=short i=staccato o=note:27@1%120/note:27@2%121/note:27@3%122
40 staccato
//! c=short i=marcato-quarter o=note:28@1%120/note:28@2%121/note:28@3%122
52 marcato

So here we have the mute types in group 2, and the articulations in group 1. This example describes a multi, where the unmuted patch (the one that comes with the base Berlin Brass library) is on channel 1, the straight mute variant is on channel 2, and the harmon mute variant on channel 3.

Here when activating the long articulation, only one of the output events will be emitted, depending on the state of group 2.

If one of the mute types in group 2 is changed later, Reaticulate understands that it must retrigger program 1 and emit the new note output event on the other channel, and redirect future MIDI events to that channel.

The standard caveat of using multiple groups with Reaticulate applies: Reaper will only chase the last program on each channel, so if you have a MIDI item with e.g. program 120 followed by program 1, and you manually activate program 121, when you begin playback again, depending on the playhead position, program 120 may not be refired.

In spite of that limitation, this new ability to filter output events based the state of other groups provides a lot of interesting capabilities.

Additional Documentation

There is now the beginnings of a user manual on the Usage page. It's a bit information-dense right now but I intend to polish it up over time.

Full Change Log

New Features

Minor Enhancements

Bug fixes