Go Back   Cockos Incorporated Forums > REAPER Forums > REAPER Q&A, Tips, Tricks and Howto

Reply
 
Thread Tools Display Modes
Old 09-20-2018, 12:34 AM   #1
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default project-independent FX by (ab)using Monitoring FX

Scenario:

you use multiple project tabs, but have effects that are exactly the same between all of them. Right now you have to duplicate them into tracks in every project. If you make any parameter changes, you have to duplicate those into every project, wasting time & it's easy to make mistakes.

Wouldn't it be nice if you could have 'global' Send/Receive FX that can be shared between project tabs?

My own use case - Live:

for my live set, I use a project per song (works better for me this way for various reasons). However that means my live inputs (vocals, guitar) and their shared effect chains have to be duplicated into every project. A bunch of processing (eg. for vocals = feedback elimination + gate + EQ + compression) is the same for every project. So I'd like a single project-independent FX chain that I can route all my project vocal tracks through = far fewer FX instances (loads faster, helps the DLL pressure on Windows) and only one place to make changes that affects all projects.

That's even more important for feedback elimination, which has to be setup on stage, and there isn't time to copy its settings manually into every project.

Solution:

The Monitoring FX are the only project-independent FX in Reaper. So let's use some of its unused channels to host our 'global' FX there. We then use custom JS effect scripts to route the project tracks through these effects in send/receive style.

How does this work?

JS scrips have access to 'shared' memory, eg. using 'gmem' memory. It turns out this memory is project-independent, so we can use it to stream project tracks to the Monitoring FX, do processing there, and then return the stream back to the original track. Here's an example of the signal flow:



The beauty is that Monitoring FX 1+2 is not affected and works as normal, as does the project track.

Why not just use two Reaper instances & stream between them using Rearoute?

Not tried, it could work. But now you have two instances contending for CPU and possible stability issues. And Rearoute will add latency, something you don't want on live inputs. And it's more complex to set up, and reload if anything goes wrong on stange. Streaming to the Monitoring FX seems to add no latency, and is the cleanest, stable & most performant solution.

Aren't these essentially 'device input FX'?

For my use case yes. But they may be useful in other non-input related scenarios. Even for inputs there's a catch - if Reaper provided true global input FX (which get applied to inputs before they hit a project track), then the processing would be baked into the input signal at that point. So recording the track would record the processing too. That may not be what you want - eg. for live recordings, you may want to remix the vocals offline without the input processing. By using a send/receive scheme, the unprocessed input can still be recorded as normal.

So if Reaper wanted to provide this in a future update, project-independent Send/Receive FX slots would be the best solution.


stay tuned for updates, including real-world testing, the required scripts and a setup guide …

WIP Scripts attached (writeup coming soon):
Attached Files
File Type: zip _dB Global FX Send-Receive 0.8b.zip (2.0 KB, 174 views)
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)

Last edited by DeBased; 10-23-2018 at 04:43 AM.
DeBased is offline   Reply With Quote
Old 09-20-2018, 06:33 AM   #2
mccrabney
Human being with feelings
 
mccrabney's Avatar
 
Join Date: Aug 2015
Posts: 3,668
Default

subscribed, thanks for tackling this.

i tried the rearoute thing a few years ago and it worked for light projects, but i quickly got lots of buffer underruns as things got more complex
__________________
mccrabney scripts: MIDI edits from the Arrange screen ala jjos/MPC sequencer
|sis - - - anacru| isn't what we performed: pls no extra noteons in loop recording
| - - - - - anacru|sis <==this is what we actually performed.
mccrabney is online now   Reply With Quote
Old 09-20-2018, 08:20 AM   #3
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Quote:
Originally Posted by mccrabney View Post
i tried the rearoute thing a few years ago and it worked for light projects, but i quickly got lots of buffer underruns as things got more complex
Yeah that was my worry, thanks for the confirmation. And the extra latency.

I've just upgraded all my live song projects to use this setup for my live vocals, and it works just fine, like any other FX in the chain.

Will post more details soon.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 09-20-2018, 08:28 AM   #4
mccrabney
Human being with feelings
 
mccrabney's Avatar
 
Join Date: Aug 2015
Posts: 3,668
Default

since 2013 i've been making "megaprojects" using complex multi-song tempo maps and backing files. lately i've been using subprojects, rendering to 6+ channel reaproxies that then get broken down in the master project into different busses, etc. from there, they get blended together and mixed to a common(ish) volume.

i don't have as many inputs as you do (mine are all midi, so my default project template + standalone bidule project handles that nicely) but in my latest live project i've incorporated a vocalist/keyboardist whose sounds come on a common input.

right now i have 2x "megaprojects" of about 30 mins each, and they sound awesome, but they're getting very heavy and i think i need to optimize them better...so it's great to see you coming about this from a different way.

i wish ReaStream had a "local send" option.

in the future i might opt to use 2 computers, a gig switch, and ReaStream to break up the load a little bit.
__________________
mccrabney scripts: MIDI edits from the Arrange screen ala jjos/MPC sequencer
|sis - - - anacru| isn't what we performed: pls no extra noteons in loop recording
| - - - - - anacru|sis <==this is what we actually performed.
mccrabney is online now   Reply With Quote
Old 09-20-2018, 08:41 AM   #5
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Quote:
Originally Posted by mccrabney View Post
since 2013 i've been making "megaprojects" using complex multi-song tempo maps and backing files. lately i've been using subprojects, rendering to 6+ channel reaproxies that then get broken down in the master project into different busses, etc. from there, they get blended together and mixed to a common(ish) volume.
Sounds like you've been doing the live thing longer than me, I only started gigging again (after a very long absence) late last year. I'm a one-man band so I do everything. I'm also a programmer so I can get my hands dirty if I have to.

BTW I haven't used ReaStream but read up on it before coming up with this solution. I believe it's IP based, and that you can use 'localhost' (or 127.0.0.1) as the address to stream locally. But I suspect that also adds latency as it has to go through the network stack, which presumably involves some buffering.

I also do a bit of tempo mapping, and all my song-specific vocal and guitar effects and related automation happen in the song projects. That way I can reuse these projects for my actual song releases and vice versa. So for me it just seemed much cleaner to have a project per song, rather than try to cram everything into a single timeline and have to keep changing guitar and vocal effects (and automation) outside them.

I like the idea of multi-channel rendering sub-projects. I'll have to think about how I could use that.

Ideally I would actually like a global 'master project', which would have the input tracks and shared FX. Every song would be on its timeline as as live (ie. not pre-rendered) sub-project, and the master project inputs would be routed into it. As the play cursor passes through a sub-project it would be activated, and suspended when it moves out of it (so only one project at a time takes CPU).

Would that work for you?
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 09-20-2018, 03:23 PM   #6
mccrabney
Human being with feelings
 
mccrabney's Avatar
 
Join Date: Aug 2015
Posts: 3,668
Default

Quote:
Originally Posted by DeBased View Post
...I would actually like a global 'master project', which would have the input tracks and shared FX. Every song would be on its timeline as as live (ie. not pre-rendered) sub-project, and the master project inputs would be routed into it. As the play cursor passes through a sub-project it would be activated, and suspended when it moves out of it (so only one project at a time takes CPU). Would that work for you?
if the bolded worked without significant CPU drain when un-bypassing the fx of the next project, yes -- however, it's my understanding from researching automated track mutes that this would be a problem and that you'd get some nasty buffer underruns at the moment of activation. aside from that, the idea would be perfect.

i don't think reastream works with "localhost" unfortunately, but i haven't tested extensively -- just basing this off of something i think i've read on these forums. btw, reastream's latency is actually really minimal if you're using a gig switch/gig network cards. i even pushed signal through it with moderate success using a 5ghz wifi card on the receiving end (an underpowered win10 laptop). i'd be curious to see the performance of reastream with a raspberry pi, assuming it's 5ghz compatible.
__________________
mccrabney scripts: MIDI edits from the Arrange screen ala jjos/MPC sequencer
|sis - - - anacru| isn't what we performed: pls no extra noteons in loop recording
| - - - - - anacru|sis <==this is what we actually performed.
mccrabney is online now   Reply With Quote
Old 09-21-2018, 01:51 AM   #7
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Quote:
Originally Posted by mccrabney View Post
if the bolded worked without significant CPU drain when un-bypassing the fx of the next project, yes -- however, it's my understanding from researching automated track mutes that this would be a problem and that you'd get some nasty buffer underruns at the moment of activation. aside from that, the idea would be perfect.
Yep they would have to have some special handling for that, but it can probably be done. After all, as each project is on the timeline, its activation is predictable ahead of time, so there should be some code strategies to make that work.

Quote:
i don't think reastream works with "localhost" unfortunately, but i haven't tested extensively -- just basing this off of something i think i've read on these forums.
I've read in a few places now that localhost is supposed to work (apparently it had a bug that got fixed eventually).

Quote:
btw, reastream's latency is actually really minimal if you're using a gig switch/gig network cards. i even pushed signal through it with moderate success using a 5ghz wifi card on the receiving end (an underpowered win10 laptop).
On my setup, I only have borderline acceptable latency for my live guitar and vox inputs. I wouldn't want to add any more to it, even just one ASIO buffer's worth is too much, and I suspect it needs to add at least one if not two + network latency (which might be quite fast). But I've not tried it.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 09-25-2018, 06:43 AM   #8
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

OK, so I ran a 'global FX' path for my vocals live recently, and it worked just fine (I didn't get enough time to try the feedback elimination though, but all the other FX were dandy).

I don't have time for a full writeup yet, but I've attached my current send/receive scripts to the 1st post.

The Send/Receives scripts use a 'wire' for each direction, each one must use a unqiue (whole) no. So Send (track) -> Receive (MonFX) should use the same wire no., and Send (MonFX) -> Receive (track) should use another.

If you set up multiple global FX chains this way, keep using unique wire numbers.

Also note that I've added a Wet/Dry mix to the Receive, you can use that on the sending track's instance to blend the unprocessed signal back in (the Send plugin must be set to pass through the audio).

On the Monitoring FX, you set every effect's routing in the 'global FX' chain to, say, 3+4 (don't set any routing for 1+2 at all, that way it will just bypass completely).

The cleanest way to do this is to just pass the MonFX 3+4 input to the plug's 1+2 input, and its 1+2 output back to 3+4. That way plugins think they're processing normal stereo, and you can also change the (ab)used channels later just by changing the routing. eg. I realised I actually want to output 3+4 on my interface, so now my global VOX FX live on 5+6.

JS: WigWare Multi-channel Peak VU Meter is a good way to debug your routing.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)

Last edited by DeBased; 09-25-2018 at 06:50 AM.
DeBased is offline   Reply With Quote
Old 12-14-2020, 12:43 PM   #9
AZpercussion
Human being with feelings
 
Join Date: Oct 2019
Location: Moscow / Tbilisi
Posts: 909
Default

Quote:
Originally Posted by DeBased View Post
Wouldn't it be nice if you could have 'global' Send/Receive FX that can be shared between project tabs?
Hello DeBased! This is cool idea!
Send/receive in plugin form can be useful also in mixing.
I'm looking for solutions, but so far nothing.

I made request about Fx-chain items, which help to process signals from tracks, routed into it, only in time these items placed.
There are situations, when automation is not best solution.
https://forum.cockos.com/showthread.php?t=245064
So these plugins could be awesome.

I tried your plugins but there is a slight latency equal to the one reported by Reaper. In my case: 144 samples.
And there are distortions.
I tested different situations with same result.
Routing from track to another in same project, routing to item fx, routing through monitorig Fx, as you recomend, and through mon Fx to another project tab.

Could your help?
Here is an example. Left channel - original sound, right - sound from plugin. https://yadi.sk/d/jK-uK7LQjN0dJg
AZpercussion is offline   Reply With Quote
Old 12-15-2020, 08:35 AM   #10
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Quote:
Originally Posted by AZpercussion View Post
Hello DeBased! This is cool idea!
I tried your plugins but there is a slight latency equal to the one reported by Reaper. In my case: 144 samples.
And there are distortions.
I've only tested and used it with Monitoring FX, which I used for about a year on vocals for live gigs. Most of the time it worked, and I never detected any additional latency. It's possible it was small enough to miss, but I think I would have noticed as I was paying attention. Are you sure one of your plugins isn't adding PDC latency?

I sometimes also got the distortion you mention, but usually it cleared up, and I never had it during an actual gig (though I may have taken care of it beforehand if it did happen). I've actually forgotten how I fixed it, I assume it was just releasing and re-acquiring the ASIO driver to reset the playback pipe.

I haven't done any gigs for most of this year so I'm slightly hazy on the details now, but it did work for me pretty reliably. But yeah this is a hack, and maybe different Reaper versions behave differently too (I'm still on the last v5). What version are you on?
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)

Last edited by DeBased; 01-04-2021 at 06:00 AM.
DeBased is offline   Reply With Quote
Old 12-15-2020, 10:45 AM   #11
AZpercussion
Human being with feelings
 
Join Date: Oct 2019
Location: Moscow / Tbilisi
Posts: 909
Default

Quote:
Originally Posted by DeBased View Post
Are you sure one of your plugins isn't adding PCD latency?
I'm shure, because had no plugins in test project exсept this pair.
Yes, if you needn't parallel fx processing, this latency is enough small.

Quote:
Originally Posted by DeBased View Post
What version are you on?
Of course, would be better to test in different versions for more precise feedback. I still use 5.979 on windows. Before find your plugins i tryed Reastream and Gmem send, there is a huge latency. Therefore I didnt relevant test. But I'll try, may be it will help.
AZpercussion is offline   Reply With Quote
Old 01-04-2021, 05:56 AM   #12
AZpercussion
Human being with feelings
 
Join Date: Oct 2019
Location: Moscow / Tbilisi
Posts: 909
Default

So, i tested these plugins in different 5th and 6th Reaper versions. Also i tried with asio and wasapi, with different bufers.
But i have the same result: latency about 150 spl. With longest buffers clicks and distortion go to zero, but sometimes no.
Unfortunately, there is no possibility to use these plugins in mixing.
AZpercussion is offline   Reply With Quote
Old 01-04-2021, 06:02 AM   #13
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

That's strange, I used to run them live for a vocal chain in Reaper 5 with (IIRC) 128 ASIO buffer sample latency @ 48k (RME Babyface Pro), and they worked for me most of the time. I'm really busy lately, but when I get a chance I'll revisit my last live setup and see what's happening.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 01-09-2021, 08:44 AM   #14
AZpercussion
Human being with feelings
 
Join Date: Oct 2019
Location: Moscow / Tbilisi
Posts: 909
Default

Great news! I found a solution here:
https://forum.cockos.com/showthread.php?t=171846
The key was in the track performance options.
I made my own version for 8 channels with some improvements: https://forum.cockos.com/showpost.ph...8&postcount=13
Later i'll make a thread to describe.
AZpercussion is offline   Reply With Quote
Old 01-09-2021, 03:54 PM   #15
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

ah sweet. I must have had the settings the right way, or it's probably because live (ie. record-armed and monitored) tracks work differently than recorded tracks. I only used it with live audio.

glad you made it work for you. I've been away from audio work from a while, but am about to get back into it.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 01-28-2021, 09:05 PM   #16
lexaproductions
Human being with feelings
 
Join Date: Jan 2013
Posts: 1,126
Default

I'm wondering how your way is better and/or easier than the hidden loopback function which allows to send audio between tabs.

In my setup, I use one dedicated Audio Routing Tab to which all the other tabs sends their audio to.

I use two functions to manage background processing:

Code:
Project tabs: Run Background Projects - [ON]
Project tabs: Run stopped background projects - [OFF]
And using a simple defer loop with the API function:
Code:
 reaper.GetAllProjectPlayStates
I play enable the Audio Routing tab whenever a tab is playing. It works great with no clear delay. It allows me to run 128 projects without any problems on my old 2012 Macbook pro.
See my sig for more details.

Last edited by lexaproductions; 01-28-2021 at 09:11 PM.
lexaproductions is offline   Reply With Quote
Old 01-29-2021, 09:54 PM   #17
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Interesting, I'll have to look into your method when I get back to my live setup (may be some time : ). I see you've developed a comprehensive live system for Reaper, will definitely check that out when the time comes.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased 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 05:27 AM.


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