jtackaberry / reaticulate

An articulation management system for REAPER
Other
101 stars 47 forks source link

Support changing programs by name instead of index #122

Closed Bindernews closed 2 years ago

Bindernews commented 3 years ago

I'm making chiptune music, so I have a lot of different drum / sound effect presets. I don't want to have my song be based on preset indexes, rather on preset names, so that if I have to re-create my setup I can use my exported presets and not worry about if they're in the right order or anything.

It would be really nice to be able to say use preset name "Drum noise 1" and not worry about which index it is. This would also enable more than 127 presets, which is an issue for me. Currently I'm using rearticulate to send MIDI CC values, but it's annoying to program all of those in manually.

Reaper has the bool TrackFX_SetPreset(MediaTrack track, int fx, "presetname") function which could probably be used to achieve this relatively easily.

jtackaberry commented 2 years ago

Sorry for letting this hang so long.

If I understand correctly, you're looking for Reaticulate to act as an abstraction layer between MIDI and FX presets, to be able to discover all FX presets on the track and present a similar GUI as today to display those FX presets and select between them dynamically, inserting changes in the MIDI item.

Fundamentally Reaticulate uses Program Change events to change articulations, so some sort of numeric index is unavoidable by design. I do have it in the back of my mind to look at REAPER's notation/text event system, but currently there are too many issues with that for it to be fit for purpose.

But even when that hurdle is cleared, the next problem is that JSFX plugins can't change their own presets. The API you mentioned isn't available to JSFX. And Reaticulate's Lua-based main script is just a GUI and overall management/configuration tool. It's a design goal that project playback work without the Lua script running in the background.

So I'm afraid I'm not seeing a path forward with this one, not with out a complete architectural overhaul of Reaticulate, only made possible when some of REAPER's own limitations are lifted. I'm going to close this consequently. If I've misunderstood something, please let me know and we can explore it further.