Old 03-20-2020, 02:56 PM   #1
Colox
Human being with feelings
 
Join Date: Feb 2012
Location: The land of meatballs and blondes
Posts: 1,032
Default Using gmem send/recieve causes crackles and dropouts

I'm trying to create sends from a channel to another channel, without using the traditional sends/receives in Reaper.

(Reason is I want to use sends from a parent track to a child track, and other 'feedbackloop dangerous' solutions like that, and Reaper won't allow that).

I'm testing out using the JS gmem send and receive plugins as a solution. It's working like I intended, but as a side-effective I'm now suffering tons of crackles and sound dropouts as well as weird phasing effects. Sounds like my system stutters, as if my system was strained.

But the performance meter shows 0.01% system load with both plugins on, and I am sending from one independent channel to another (not a parent/child stack at the moment), so that's not the problem either. My system is rather strong and well oiled and I'm able to run 100 tracks with plenty of plugins getting practically no dropouts. And I'm not saturating the output bus with overload sample values either, because the problem doesn't disappear when I lower the channel volumes. So it's gotta be the gmem send/receive plugins ..?

I could use help understanding how to make them work as simple sends/receives.

Looking at the code, I'm noticing the samplesblock pos+1 statement in there, making me think the plugins may be shifting the output samples in time? Because I've noticed that the send channel and receive channel don't phase cancel each other out when I try that. That's odd too, making me feel these plugins may not be intended for what I'm trying to use them for (?)

Could use a tip or two
or if there are better methods of achieving the send/receive need

thx
__________________
There are only two kinds of people in the world: those who entertain, and those who are absurd.
- Britney Spears

Last edited by Colox; 03-20-2020 at 08:32 PM.
Colox is offline   Reply With Quote
Old 03-21-2020, 12:56 AM   #2
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 8,648
Default

Quote:
Originally Posted by Colox View Post
I'm trying to create sends from a channel to another channel, without using the traditional sends/receives in Reaper.

(Reason is I want to use sends from a parent track to a child track, and other 'feedbackloop dangerous' solutions like that, and Reaper won't allow that).
I don't suppose this is a good idea at all, as the tracks in Reaper are worked on by different OS threads, and Reaper only guarantees synchronicity between multiple thread in a boundary of the complete in-to-out latency of the project. Hence fetching sample form another track via gmem will give you values from a completely wrong point in the virtual time.

-Michael
mschnell is online now   Reply With Quote
Old 03-21-2020, 10:02 AM   #3
Colox
Human being with feelings
 
Join Date: Feb 2012
Location: The land of meatballs and blondes
Posts: 1,032
Default

Quote:
Originally Posted by mschnell View Post
I don't suppose this is a good idea at all, as the tracks in Reaper are worked on by different OS threads, and Reaper only guarantees synchronicity between multiple thread in a boundary of the complete in-to-out latency of the project. Hence fetching sample form another track via gmem will give you values from a completely wrong point in the virtual time.

-Michael
Thanks.

I guess gmem is not the proper method of sending the sound from one track to another (bypassing the traditional send/receive method).

I have not found any other send/receive method that works for me, in this sense. (I do have Reapack with lots of repositories added).

Could such sends be made using EEL or LUA or VST? Do you know of any existing such send/receive plugins?

I realize this is generally against Reaper's design philosophy, of not having anything ongoing 'under the surface'. But I really need to be able to send from parent to child (without using the traditional send/receive, and having 'send to master' disabled). Reason is it needs to be a part of my rather large work templates. The more you work such templates out, the more you gradually paint yourself into cornered solutions has 'has to' work, or else you'll have to rip up most solutions you've previously worked out and gotten to work, and start over. This is one such waypoint for me now.
__________________
There are only two kinds of people in the world: those who entertain, and those who are absurd.
- Britney Spears

Last edited by Colox; 03-21-2020 at 10:25 AM.
Colox is offline   Reply With Quote
Old 03-21-2020, 10:22 AM   #4
cfillion
Human being with feelings
 
cfillion's Avatar
 
Join Date: May 2015
Location: Québec, Canada
Posts: 3,060
Default

Quote:
Originally Posted by Colox View Post
(Reason is I want to use sends from a parent track to a child track, and other 'feedbackloop dangerous' solutions like that, and Reaper won't allow that).
Project Settings > Advanced > Allow feedback in routing?
cfillion is online now   Reply With Quote
Old 03-21-2020, 10:30 AM   #5
Colox
Human being with feelings
 
Join Date: Feb 2012
Location: The land of meatballs and blondes
Posts: 1,032
Default

Quote:
Originally Posted by cfillion View Post
Project Settings > Advanced > Allow feedback in routing?
I know, but that will mess up Reaper's PDC and latency.
__________________
There are only two kinds of people in the world: those who entertain, and those who are absurd.
- Britney Spears
Colox is offline   Reply With Quote
Old 03-21-2020, 01:53 PM   #6
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 8,648
Default

Feedback routing technically simply is not possible without that.

I suppose you intention just can't be done.

-Michael
mschnell is online now   Reply With Quote
Old 03-21-2020, 02:26 PM   #7
Colox
Human being with feelings
 
Join Date: Feb 2012
Location: The land of meatballs and blondes
Posts: 1,032
Default

Quote:
Originally Posted by mschnell View Post
Feedback routing technically simply is not possible without that.

I suppose you intention just can't be done.
Well, sending/receiving from parent to child does work with feedback routing disallowed. It worked using gmem send/receive, the signal was transferred; although with unwanted side-effects, but it was transferred.

I would agree as far as it isn't really supposed to work, not in Reaper. Still doesn't mean that it can't (seen from my perhaps lesser informed point of view, atm)
I just really need this to work, otherwise I'm back on square 3 again.
__________________
There are only two kinds of people in the world: those who entertain, and those who are absurd.
- Britney Spears

Last edited by Colox; 03-21-2020 at 02:51 PM.
Colox is offline   Reply With Quote
Old 03-21-2020, 04:13 PM   #8
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 8,648
Default

"works with unwanted side-effects" means "does not work"

-Michael

Last edited by mschnell; 03-22-2020 at 08:46 AM.
mschnell is online now   Reply With Quote
Old 03-22-2020, 08:28 AM   #9
Colox
Human being with feelings
 
Join Date: Feb 2012
Location: The land of meatballs and blondes
Posts: 1,032
Default

Quote:
Originally Posted by mschnell View Post
"works with unwanted side-effects" means does nit work

-Michael
Done loads of tests and theoretical workarounds yesterday. I'm beginning to think you are as right as I feared you might be from the start. I don't mind being wrong, I just need to rip up my carefully worked out songwriting template now, lots of work, and start over.

Thanks though.

__________________
There are only two kinds of people in the world: those who entertain, and those who are absurd.
- Britney Spears

Last edited by Colox; 03-22-2020 at 10:28 AM.
Colox is offline   Reply With Quote
Old 03-22-2020, 08:47 AM   #10
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 8,648
Default

What exactly are you trying to accomplish ?

-Michael
mschnell is online now   Reply With Quote
Old 03-22-2020, 08:57 AM   #11
ashcat_lt
Human being with feelings
 
Join Date: Dec 2012
Posts: 4,664
Default

I’ve never had dropouts and crackles and thing unless I did something actually stupid. I can tell you those plugs do add one block of latency which can’t be compensated. I think it’s possible to code ones with only one sample of latency. Somebody not too long ago said they were doing it. I thought I had tried it and couldn’t make it go a while back, but I often drink when I code, so idk.
ashcat_lt is online now   Reply With Quote
Old 03-22-2020, 10:08 AM   #12
Colox
Human being with feelings
 
Join Date: Feb 2012
Location: The land of meatballs and blondes
Posts: 1,032
Default

Quote:
Originally Posted by mschnell View Post
What exactly are you trying to accomplish ?
It's my most serious attempt at advanced working templates, for time and efficiency saving. I work for money, so its needed.

The initial design idea was ... imagine a track containing audio, or a MIDI instrument, just like usual. I need to send off the signal from that track both to the master and also send the audio from several different points in the insert effects chain, to several different output channels for separation. I need that to work in one rendering, and not having to do several renderings and turning on/off parameters between renders.

But in order to avoid my arrange window and TCP list to turn into a visual mess and maze of channels and settings etc, I want to see only main track. Not the different output tracks, even though they are there. In order to get that, I need to hide away those different output tracks, but I still need them very directly accessible.

So, making those output tracks into child tracks of the main track (which then turns parent) allows me to have the output channels attached to the sending channel, and if I fold them up real tight then I won't see them (visual ergonomy), while they are still just a mouse click away, and they even follow the main track if I re-organize the tracklist.

Therefore I needed to send from a parent to several children. Basically I want to use folder tracks for visual organization mostly, but without having to adhere to the signalflow limitations that occurs from doing so. Maybe one day Reaper will have folder tracks just for visual organization, which is independent from the signalflow - like Cubase has, and several other DAWs.

This was the design idea I had, on the single track level of the template. And everything else, higher up in the hierachy of functions ans signalroutes, was made dependent on this parent/child idea to work down on low level. But since this doesn't seem to work, then that problem recoils back over all the higher hierarchies of structures too. I was just .. too optimistic I guess.

I thought that if I turned off "Send to master" on both the parent and child, and used direct sends/receives instead, then I can control exactly where the signal goes, and there would no longer be no feedback loop in there. If I did it like that, then sending audio from the parent to a child ought to work, since there is no longer possibility of feedback.
But Reaper STILL doesn't allow that signalflow, even though the 'send to master' on the child is disabled. Apparently, Reaper is trying to protect the user from his own potential mistake - like unintentionally enabling 'send to master' on the child track while receiving from the parent at the same time. That f*cked me up. Even though there is no direct risk of feedback loop between child and parent tracks, I still can't send from parent to child.

So that's .. part of the story ...
__________________
There are only two kinds of people in the world: those who entertain, and those who are absurd.
- Britney Spears

Last edited by Colox; 03-22-2020 at 10:23 AM.
Colox is offline   Reply With Quote
Old 03-22-2020, 10:41 AM   #13
Colox
Human being with feelings
 
Join Date: Feb 2012
Location: The land of meatballs and blondes
Posts: 1,032
Default

Quote:
Originally Posted by ashcat_lt View Post
I’ve never had dropouts and crackles and thing unless I did something actually stupid. I can tell you those plugs do add one block of latency which can’t be compensated. I think it’s possible to code ones with only one sample of latency. Somebody not too long ago said they were doing it. I thought I had tried it and couldn’t make it go a while back,
I have to say, those gmem plugins often gave me an unpredictable result. Sometimes it changes from me closing and re-opening reaper again. Yesterday I tried a similar send/recieve VST plugin called DDMF sendIt, and it too gave me incoherent results, even from different render to render.

So gmem does 1 sample displacement? So my code analysis was correct. Ok, but why can't it be compensated for? As I see it, it would not be a problem to deal with afterwards. Actually, I doubt it would be a problem in practice at all, since all tracks sent through this process would be equally displaced. Unless all audio is sent through either of mentioned processes and the process delivers incoherent results.

And if you need to move it 1 sample again, you might just add one more rendering stage, copying the audio back 1 sample again. You can even add a plugin which does this before sending audio through a process which relocated the audio 1 sample, right?

Definitely interested in the subject though. My EEL coding abilities struggle to reach 'moderate' level IMO.

Quote:
Originally Posted by ashcat_lt View Post
.. I often drink when I code
wtf? haha
__________________
There are only two kinds of people in the world: those who entertain, and those who are absurd.
- Britney Spears
Colox is offline   Reply With Quote
Old 03-22-2020, 10:47 AM   #14
ashcat_lt
Human being with feelings
 
Join Date: Dec 2012
Posts: 4,664
Default

I personally want to have “FX rack tracks” to allow inserting a bunch of plugins without cluttering the track’s own FX list. I often have three to five places yin’s just doing console emulation type things and then whatever other FX, and I’d like it to look and work more like a real desk. I understand how and why it can’t work without latency, but i still want it.
ashcat_lt is online now   Reply With Quote
Old 03-22-2020, 02:30 PM   #15
J Reverb
Human being with feelings
 
Join Date: Jul 2009
Posts: 698
Default

Have you tried switching off Allow live FX multiprocessing on 4 CPUs in Audio buffering settings ? This gets rid of all the crackles and pops/timing issues etc. Basically the send and recieve cancel eachother out with a flipped phase.

Hope this helps.
Also what gmem code are you using ?
J.

Edit.. put your media buffer size at zero instead of 1200ms same page..

Last edited by J Reverb; 03-22-2020 at 02:43 PM.
J Reverb is offline   Reply With Quote
Old 03-23-2020, 02:14 AM   #16
Colox
Human being with feelings
 
Join Date: Feb 2012
Location: The land of meatballs and blondes
Posts: 1,032
Default

Quote:
Originally Posted by J Reverb View Post
Have you tried switching off Allow live FX multiprocessing on 4 CPUs in Audio buffering settings ? This gets rid of all the crackles and pops/timing issues etc. Basically the send and recieve cancel eachother out with a flipped phase.

Also what gmem code are you using ?

put your media buffer size at zero instead of 1200ms same page..
Thanks! Interesting results.

The "gmem code" I am using, are the "Loser" JS:gmem send and JS:gmem recieve EEL plugins that comes with Reaper. I haven't changed the code in them (other than for temporary testing). You will find these plugins in the JS type plugins list in Reaper.

Why did you set the number or CPUs to 4, in the audio buffering settings? Why not 2, or 6, but 4? Does your CPU have 4 cores? I got 12 set there, because my CPU got 12 threads.

This is how my settings are set:


thx
__________________
There are only two kinds of people in the world: those who entertain, and those who are absurd.
- Britney Spears

Last edited by Colox; 03-23-2020 at 02:38 AM.
Colox is offline   Reply With Quote
Old 03-23-2020, 08:29 AM   #17
J Reverb
Human being with feelings
 
Join Date: Jul 2009
Posts: 698
Default

You can set all your Disk I/O settings to default (top image)

In Audio buffer settings (lower image)

You have Media buffer size set to 3000 (default 1200ms)
Set this to zero.

Media buffer size when per-take FX UI open
Set this to zero.

Render-ahead (default 200ms)
You can experiment with this depending on what you are doing
I have this set to zero.

You have Allow live FX multiprocessing on 12 CPUs ticked
Untick this (important) ! and apply.
--------------------------------------------------------
Offline cpu intensive plugins when not in use is always good practice.
You may be interested in these variations that I had invaluable help with from IXix
I needed to be able to control level and pan and also merge the audio stream from several sources.
Has 32 slots at the moment but you can have as many as you want if you tweak the code.
I hope this helps out gmem is great if you want to send signals from items too. Just have to have the right settings. Good luck ! J.
https://stash.reaper.fm/v/26394/JRgmemSendv1.zip

Last edited by J Reverb; 03-23-2020 at 10:07 AM.
J Reverb 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 01:11 PM.


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