Old 05-24-2020, 03:37 AM   #1
mpl
Human being with feelings
 
mpl's Avatar
 
Join Date: Oct 2013
Location: Moscow, Russia
Posts: 3,956
Default MPL Pooled FX Chains (shared custom FX container)

UPD 08.04.2023: this script is no longer supported.


Coming from this request I`ve build a concept for sharing channel strips through active project tracks.

It provides following actions:
  • mpl_Set selected track as pooled fx master (group 1).lua
    Set track name as 'POOL FX1 master',
    load FX chain from \REAPER\FXChains\POOL FX1 master.RfxChain if any,
    this chain is used as source for sharing FX.
  • mpl_Add pooled fx slave JSFX to selected tracks at chain start/end.lua
    I`ve build dummy JSFX which is an "anchor point" in the chain where source FX should be shared to.
  • mpl_Propagate pooled FX to project (group 1).lua
    It looks at project to find master source,
    then lookup track for dummy JSFX header ("POOL FX slave.jsfx"),
    add shared FX under JSFX if they are not exist.
    reorder if they exist,
    mark them as 'POOL FX <FX_name>',
    share TCP controls and other FX parameter related data


Requirements:
REAPER 5.95+
SWS Extension 2.9.7+
ReaPack 1.2+
Download: ReaPack.com (MPL`s repository is embedded into default ReaPack configuration)

Install:
  • run ActionList > ReaPack: Browse packages...
  • navigate and install (rightclick) Pooled FX tools (reascripts), POOL FX slave (jsfx) and Various_functions packages, then click 'Apply'
  • run ActionList > ReaPack: Synchronize packages

Last edited by mpl; 04-08-2023 at 02:58 AM.
mpl is offline   Reply With Quote
Old 05-24-2020, 06:23 PM   #2
AtmanActive
Human being with feelings
 
AtmanActive's Avatar
 
Join Date: Dec 2009
Location: United Kingdom
Posts: 668
Default

Hi mpl,

This is a great start!
Congrats on your speed and dedication.

So far, I have two observations:

1.)

Script: mpl_Propagate last touched parameter to all pooled FX parameters.lua

- works great, but it's usefulness is somewhat limited as it can only reach the LAST touched parameter. Thus, we can't possibly require users to trigger that script each and every time they change some value of some parameter. Usually engineers tend to touch several parameters without even thinking about it. I did try using your Script: mpl_Copy Focused FX data.lua, but I couldn't make it work. Hence, we are still missing a script that would do copy-selected-FX-data-to-all-pooled-copies.

2.)

Script: mpl_Propagate pooled FX (group 1).lua

- when I tried using this one for the first time, it worked great. But then, when I tried using it to sync all pooled copies, it failed to set data simply because it is doing if-exists-then-skip logic, but it should be doing destroy-and-rebuild-every-time logic.

The worst thing that can happen to PooledFX flow is a desynced state, and right now it is very easy to get into that state.

I can see that your approach doesn't require FX instance renaming, which is fine, I don't mind, but, then, how else are we going to do FX parameter (data) syncing? This last-touched approach is not very usable, and total destroy-and-rebuild will become slow and annoying after a while. The total-destroy-and-rebuild approach can be used when Master-Chain changes significantly, that's OK, but for parameter tweaking and propagating, we need something faster. Yes, it is true, this last-touched approach is very fast, great, but, it forces an engineer to tweak-click-tweak-click-tweak-click and if they forget to click but they do tweak-tweak, their edits are lost.
So, I feel that the major part of the whole flow is here, just a minor part is still missing.

Thanks.
AtmanActive is offline   Reply With Quote
Old 05-25-2020, 11:31 PM   #3
mpl
Human being with feelings
 
mpl's Avatar
 
Join Date: Oct 2013
Location: Moscow, Russia
Posts: 3,956
Default

Quote:
Originally Posted by AtmanActive View Post
Script: mpl_Propagate last touched parameter to all pooled FX parameters.lua - works great, but it's usefulness is somewhat limited as it can only reach the LAST touched parameter.
Added Propagate pooled FX master parameters to all slaves (group 1) and Propagate pooled FX master bypass states to all slaves (group 1), you can combine into custom action if you need.

Quote:
Originally Posted by AtmanActive View Post
because it is doing if-exists-then-skip logic, but it should be doing destroy-and-rebuild-every-time logic
I can built a <full state> propagate version, rather than <parameters only>, but it will be pretty slow and dangerous especially for FX with fragile state like bridged plugins and plugins with bug chunk of data. But it is not really destroy-and-rebuild. This is more like "get full FX state and pass that raw data to other instances". Destroy-and-rebuild can be also implemented, it will be more safety and faster but it`ll give you lost FX envelopes, learn and parameter modulation (though it will be possible to preserve at least envelopes in native API way). Note again - this is only relevant if the plugin has controls which are not presented in FX controls (like ReaEQ bands, anything allowed to be editable only from plugin GUI, not by UI view sliders).

Last edited by mpl; 05-25-2020 at 11:41 PM.
mpl is offline   Reply With Quote
Old 05-27-2020, 05:07 PM   #4
AtmanActive
Human being with feelings
 
AtmanActive's Avatar
 
Join Date: Dec 2009
Location: United Kingdom
Posts: 668
Default

This is great. This works really good now. I will start using it straight away and will post my findings here in this thread.

Thinking about what else could be useful, in this workflow, I came to the conclusion that it would be great to have two more scripts similar in function to these last two you added, but with the distinction that they could take the currently selected track as the master.

Why this? Well, I can imagine a workflow where PooledFX are present on each and every track, and there are plenty of these tracks in the project. As it is now, each and every time when I want to change a parameter or two, I need to scroll to the top/bottom, to find the Master Track, change there and then use the action to propagate to slaves. But, for the sake of workflow speed, it would be great if I could change those parameters on ANY of the tracks (without having to scroll up/down to locate the master track) and then, while it is still selected, propagate those changes everywhere (including the master track). So, the script would still follow all of the FXs in the Master track chain, but would use the selected track as the source of parameters state and propagate that information everywhere else.

About the destroy-and-rebuild idea: the main use of that would be if something goes wrong. If there is a desync state detected for whichever reason, it would be good to have a "red button" to re-nuke the whole thing to make sure it is absolutely in sync. Now, envelopes, learning and parameter modulation is really of no concern here (at least in my view), as this is supposed to be the BASE sound for the whole mixer. Something you set once and leave it there. Certainly not something that I would ever want to modulate/envelope/learn or similar. There are plenty of other FX chains for that.

mpl, I must say, you are really a wizzard of Reaper scripting. The stuff you are doing here is just awesome!

Thanks!
AtmanActive is offline   Reply With Quote
Old 05-27-2020, 07:12 PM   #5
AtmanActive
Human being with feelings
 
AtmanActive's Avatar
 
Join Date: Dec 2009
Location: United Kingdom
Posts: 668
Default

My new toolbar :-)

Attached Images
File Type: png reaper_PoolFX_toolbar_v1.png (7.0 KB, 1744 views)
AtmanActive is offline   Reply With Quote
Old 05-29-2020, 12:17 AM   #6
mpl
Human being with feelings
 
mpl's Avatar
 
Join Date: Oct 2013
Location: Moscow, Russia
Posts: 3,956
Default

I`ve added Propagate last touched pooled FX parameters to all pooled FX in group (group 1). It has tricky logic, so I try to explain in short.

You touch the parameter somewhere in the pooled FX, the script:
1) collect data from master for to get how correct order of defined FX group should looks like for current project;
2) validate the FX you just touched has correct FX order (if you touched slave);
3) collect all-FX-all-parameters data from track you just touched (whatever master or slave; if it is slave, it collect data from jsfx+1 FX position);
4) share collected data to master and other slaves in group.
mpl is offline   Reply With Quote
Old 05-29-2020, 04:37 AM   #7
AtmanActive
Human being with feelings
 
AtmanActive's Avatar
 
Join Date: Dec 2009
Location: United Kingdom
Posts: 668
Default

There is a bug if I try to use a bus track (folder) to hold all single tracks in it. It seems that the script is trying to propagate the parameters to that one even though that track doesn't have slave.jsfx.

The error message shown is this:

Code:
...ed FX parameters to all pooled FX in group (group 1).lua:57: bad argument #4 to 'TrackFX_SetParam' (number expected, got nil)
and the result is that bus track gets it's FX's parameters all mangled up while individual tracks under it do not get parameters propagated at all.

Before I started using a bus track, everything looked like it is working correctly. So in a simple situation, one master - many slaves, it worked fine. As soon as I put those many slaves into one folder track, this error started showing up.
AtmanActive is offline   Reply With Quote
Old 06-14-2020, 03:38 PM   #8
mpl
Human being with feelings
 
mpl's Avatar
 
Join Date: Oct 2013
Location: Moscow, Russia
Posts: 3,956
Default

Quote:
Originally Posted by AtmanActive View Post
The error message shown is this:

Code:
...ed FX parameters to all pooled FX in group (group 1).lua:57: bad argument #4 to 'TrackFX_SetParam' (number expected, got nil)

No need an additional donation(s), I refund yours back. I didn`t know it was you who requested Pooled FX (it took me time to figure out you donated me, since you didn`t put a comment). I fixed that error. I`m pretty busy by main work, so reascript stuff now is not under big attention.

Last edited by mpl; 06-14-2020 at 03:46 PM.
mpl is offline   Reply With Quote
Old 06-14-2020, 03:43 PM   #9
AtmanActive
Human being with feelings
 
AtmanActive's Avatar
 
Join Date: Dec 2009
Location: United Kingdom
Posts: 668
Default

No problem.
I just wanted to fund your work as we agreed in the first place.
Going forward, I'll try to upgrade and fix errors myself and will just send the code to you (pull requests via Github), unless you tell me otherwise.

Thanks.
AtmanActive is offline   Reply With Quote
Old 06-14-2020, 03:47 PM   #10
mpl
Human being with feelings
 
mpl's Avatar
 
Join Date: Oct 2013
Location: Moscow, Russia
Posts: 3,956
Default

Quote:
Originally Posted by AtmanActive View Post
No problem.
I just wanted to fund your work as we agreed in the first place.
Going forward, I'll try to upgrade and fix errors myself and will just send the code to you (pull requests via Github), unless you tell me otherwise.

Thanks.
Github PRs is always welcome! Thanks.
mpl is offline   Reply With Quote
Old 10-04-2022, 10:37 AM   #11
mpl
Human being with feelings
 
mpl's Avatar
 
Join Date: Oct 2013
Location: Moscow, Russia
Posts: 3,956
Default

Repository clean up:
Moved this to https://github.com/MichaelPilyavskiy...ipt_Additional as outdated/unsupported, hopefully someday devs will implement pooled fx instances natively.
mpl is offline   Reply With Quote
Old 10-04-2022, 11:50 AM   #12
Jae.Thomas
Human being with feelings
 
Join Date: Jun 2006
Posts: 22,560
Default

ahhh shoot I just found this. Seemed cool.
Jae.Thomas is offline   Reply With Quote
Old 04-08-2023, 12:42 AM   #13
willpadgett
Human being with feelings
 
Join Date: Dec 2020
Posts: 35
Default

yeah Pooled FX is a great idea. Seems like it shouldn't actually be resource-intensive, it's basically a glorified parameter link.
willpadgett is offline   Reply With Quote
Old 04-08-2023, 02:57 AM   #14
mpl
Human being with feelings
 
mpl's Avatar
 
Join Date: Oct 2013
Location: Moscow, Russia
Posts: 3,956
Default

Quote:
Originally Posted by willpadgett View Post
yeah Pooled FX is a great idea. Seems like it shouldn't actually be resource-intensive, it's basically a glorified parameter link.
For sure it will be very resource-intensive, since you have to syncronize huge chunk of data every time you are trying to syncronise. At the same time if you only want to only syncronize available(!) plugins parameters, then it is probably task for lightweight script.

Even if Cockos will implement pool container, REAPER still should be unload/load updated pooled containers, which is very heavy for CPU (imagine updating some instances of heavy NI Reakor patches).
mpl is offline   Reply With Quote
Old 05-04-2023, 01:09 AM   #15
MAGiX
Human being with feelings
 
MAGiX's Avatar
 
Join Date: Nov 2022
Posts: 11
Default mpl_add fx chain to select track

Good afternoon Michael!
Do you no longer support the mpl_add fx chain to select track script? I recently lost it. After updating/Synchronize packages

It was a great script, and many REAPER users need it.

Last edited by MAGiX; 05-04-2023 at 01:14 AM.
MAGiX is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 04:16 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.