Go Back   Cockos Incorporated Forums > REAPER Forums > REAPER Bug Reports

Reply
 
Thread Tools Display Modes
Old 07-14-2016, 10:02 AM   #1
ashcat_lt
Human being with feelings
 
Join Date: Dec 2012
Posts: 7,271
Default ReaComp doesn't actually limit!

Set all time constants and knee to 0. Ratio to infinity. Go ahead and tick the "Limit Output" box even. Leave Oversampling off. This should be a hard clipper at the threshold, and no matter how loud the input gets, the output should never get louder than the threshold. It works up to a (admittedly kind of absurdly high) point, but then suddenly seems to break loose and the output escalates quickly. I have not yet identified the exact point at which it looses it's grip, but I have seen it happen a number of times.

My test procedure: Please mute your speakers one way or another before you try this!

JS White Noise set to -12db > ReaDelay set to default but with a positive feedback value > ReaComp set as described above.

If it matters, it's Reaper 5.2 32bit on XPSP3 AMD dual core 3.11GHz and 3G RAM.

To be fair, there aren't many things labeled "compressor" or even "limiter" that can actually handle this. Most break down in one way or another. Several of the included JS "limiters" seem to overshoot and end up heading toward silence.(!!!) I suspect that might have something to do with the way they approximate the fp to db calculation. It's "close enough" at realistic levels, but when crazy kids like me try to do stupid things with them...

The knee parameter doesn't really change this behavior, except that the maximum output before it freaks out will be a bit higher than threshold because of the way that curve works.

I use ReaComp for darn near everything that involves manipulating dynamics, and I don't have many complaints, but this is kind of a big one.
ashcat_lt is offline   Reply With Quote
Old 07-14-2016, 02:59 PM   #2
Justin
Administrator
 
Justin's Avatar
 
Join Date: Jan 2005
Location: NYC
Posts: 15,721
Default

Reacomp is a compressor, not a limiter. The limit output option only hard clips to +0dB, not the threshold.
Justin is offline   Reply With Quote
Old 07-14-2016, 03:14 PM   #3
Airal
Banned
 
Join Date: Nov 2015
Posts: 406
Default

A compressor, in the limit, is a limiter.

If a compressor as 0 attack time, 0 db Knee, and infinite ratio then it is a hard limiter and should ask as so, else something is wrong.

It's ok to special case this:

If (AT == 0 && Knee == 0 && Ratio == Real.Infinity) Sample = Min(Threshold, Sample)
else
....

Type of thing. I imagine ReaComp doesn't actually an infinite ratio though? That might be the problem?

Assume that the compression curve looks something like

*
______/
/
/
/

Where the /* part is actually a sort of line with nearly infinite slope and infinitesimally small width(something that might not show up when viewing the curve). This could produce the effect he is talking about and is not desirable and probably due to some type of glitch(division by 0 at 0db when attack is 0 and ratio is "infinite)).

If os, it is truly a bug. It could potentially happen in the real world producing invalid results. E.g., creating large amplifications for certain samples groups that are at 0dB or near 0dB(e.g., 0.0001dB), creating distortion.

It may just occur at a certain point or epsilon region in parameter space for reaComp, but it still should be investigated.A basic compressor should have pretty basic characteristics. Doing funky complex compression's might be expected to behave weird but a common compressor isn't.
Airal is offline   Reply With Quote
Old 07-14-2016, 04:08 PM   #4
ashcat_lt
Human being with feelings
 
Join Date: Dec 2012
Posts: 7,271
Default

Quote:
Originally Posted by Justin View Post
Reacomp is a compressor, not a limiter. The limit output option only hard clips to +0dB, not the threshold.
But it doesn't do that either. At a certain point, it breaks loose and goes over 0dbfs by A LOT!

Also, as mentioned above, if the time constants are at 0, it should be a sample for sample transfer curve - a waveshaper. If the slider says inf:1, then the output should never exceed the threshold no matter what.

Adding any RMS, attack, or release pretty much has to throw things off, and that's fine. Oversampling will also make the limit hard to predict, and that's okay. The knee parameter "rounds the corners" and because of the way it's implemented actually raises the threshold at which the full ratio is reached (that's another nitpick of mine) but works well enough as long as it will actually work.

I understand that this is an extreme case, but I do extreme things. ReaComp is so powerful, and so flexible that I really want to use it for all kinds of horrible things. The fact that it limits fine for even very large inputs, but seems to have a threshold where it can't keep up any longer makes me think this is a real bug rather than a deliberate feature.

( If you happen to look into the code for this, I'd like to mention also that a number of us would really like to be able to dial in pre-comp times greater than 250ms. The longer the better. If it would actually get to half as big as the biggest RMS time, that would be great.

Also, since we're here: I'd imagine fixing the knee thing is more work than it's worth, but is there an easy way to at least display the actual threshold after the knee is applied? )
ashcat_lt is offline   Reply With Quote
Old 07-14-2016, 04:24 PM   #5
SmajjL
Human being with feelings
 
Join Date: Nov 2013
Location: IKEA
Posts: 2,774
Default

̶Y̶o̶u̶ ̶c̶a̶n̶ ̶t̶y̶p̶e̶ ̶i̶n̶ ̶m̶o̶r̶e̶ ̶t̶h̶a̶n̶ ̶t̶h̶e̶ ̶f̶a̶d̶e̶r̶ ̶a̶l̶l̶o̶w̶s̶ ̶t̶h̶o̶u̶g̶h̶.
__________________
_Ohh.))::_Linux_::((.Xoxo_


Last edited by SmajjL; 07-14-2016 at 07:26 PM.
SmajjL is online now   Reply With Quote
Old 07-14-2016, 05:21 PM   #6
ashcat_lt
Human being with feelings
 
Join Date: Dec 2012
Posts: 7,271
Default

Quote:
Originally Posted by SmajjL View Post
You can type in more than the fader allows though.
Does that actually work with pre-comp?
ashcat_lt is offline   Reply With Quote
Old 07-14-2016, 05:40 PM   #7
SmajjL
Human being with feelings
 
Join Date: Nov 2013
Location: IKEA
Posts: 2,774
Default

Ever since I 'ah-ha!ed' & tryed it on JS: Audio To MIDI Drum Trigger, I assume so with most Cockos stuff, can't wait until you try it, since you need it and expect a certain result.
I just tried it and something happens, to my ears, think I need your expert opinion on this one.
__________________
_Ohh.))::_Linux_::((.Xoxo_

SmajjL is online now   Reply With Quote
Old 07-14-2016, 05:53 PM   #8
ashcat_lt
Human being with feelings
 
Join Date: Dec 2012
Posts: 7,271
Default

Quote:
Originally Posted by SmajjL View Post
Ever since I 'ah-ha!ed' & tryed it on JS: Audio To MIDI Drum Trigger, I assume so with most Cockos stuff, can't wait until you try it, since you need it and expect a certain result.
I just tried it and something happens, to my ears, think I need your expert opinion on this one.
I thought there was something weird about those numbers that you type in outside the range not sticking on save or somethingsomethingsomething... It's also quite possible that the parameter is internal limited for some reason, but it's definitely worth a try.

TBH - for what I use it for most times it's not super critical, and usually 250 is plenty, but longer is better, no? I'll give 'er a shot sometime. Thanks for the hint.
ashcat_lt is offline   Reply With Quote
Old 07-14-2016, 06:13 PM   #9
SmajjL
Human being with feelings
 
Join Date: Nov 2013
Location: IKEA
Posts: 2,774
Default

JS: Exciter (Treble Enhancer) is limited to 2000 Hz, no it's not.
Edit: You-Are-Principle-Welcome.
__________________
_Ohh.))::_Linux_::((.Xoxo_


Last edited by SmajjL; 07-14-2016 at 07:27 PM.
SmajjL is online now   Reply With Quote
Old 07-14-2016, 06:35 PM   #10
SmajjL
Human being with feelings
 
Join Date: Nov 2013
Location: IKEA
Posts: 2,774
Default

Nope, when closing reacomp and reopen, it's 250 again.. nice try.. + somethingsomething
JS: Exciter (Treble Enhancer) will stay at 50 Hz though, good.
Resume normal activity, and improve stuff.
__________________
_Ohh.))::_Linux_::((.Xoxo_


Last edited by SmajjL; 07-14-2016 at 07:14 PM. Reason: *blub* :)
SmajjL is online now   Reply With Quote
Old 07-14-2016, 08:23 PM   #11
Justin
Administrator
 
Justin's Avatar
 
Join Date: Jan 2005
Location: NYC
Posts: 15,721
Default

Quote:
Originally Posted by ashcat_lt View Post
Set all time constants and knee to 0. Ratio to infinity. Go ahead and tick the "Limit Output" box even. Leave Oversampling off. This should be a hard clipper at the threshold, and no matter how loud the input gets, the output should never get louder than the threshold. It works up to a (admittedly kind of absurdly high) point, but then suddenly seems to break loose and the output escalates quickly. I have not yet identified the exact point at which it looses it's grip, but I have seen it happen a number of times.

My test procedure: Please mute your speakers one way or another before you try this!

JS White Noise set to -12db > ReaDelay set to default but with a positive feedback value > ReaComp set as described above.

If it matters, it's Reaper 5.2 32bit on XPSP3 AMD dual core 3.11GHz and 3G RAM.

To be fair, there aren't many things labeled "compressor" or even "limiter" that can actually handle this. Most break down in one way or another. Several of the included JS "limiters" seem to overshoot and end up heading toward silence.(!!!) I suspect that might have something to do with the way they approximate the fp to db calculation. It's "close enough" at realistic levels, but when crazy kids like me try to do stupid things with them...

The knee parameter doesn't really change this behavior, except that the maximum output before it freaks out will be a bit higher than threshold because of the way that curve works.

I use ReaComp for darn near everything that involves manipulating dynamics, and I don't have many complaints, but this is kind of a big one.
If you set attack/release to 0ms, RMS to 0ms (perhaps this one was missed?), knee to 0dB, and ratio to inf, ReaComp will limit the signal to the threshold for values up to about 150dB over the threshold, after which it does fail to limit to the threshold. I can fix this.

I was unable to get output over +0dB, however, if the "limit output" was checked (assuming AA is off, if AA is on, then the limiting happens at the higher rate so you might still get some smallish overs)...

Last edited by Justin; 07-14-2016 at 08:32 PM.
Justin is offline   Reply With Quote
Old 07-14-2016, 10:54 PM   #12
ivansc
Human being with feelings
 
Join Date: Aug 2007
Location: Near Cambridge UK and Near Questembert, France
Posts: 22,754
Default

falling about laughing at the idea that anyone would push something 150 over in the real world. You tech-heads.....

Edit: Should have said I am not laughing AT you - just the idea of something that extreme, although I suppose there IS a case for protecting the system in case of a catastrophic "over".... but I was under the impression Reaper already did that.
__________________
Ici on parles Franglais
ivansc is offline   Reply With Quote
Old 07-14-2016, 11:33 PM   #13
ashcat_lt
Human being with feelings
 
Join Date: Dec 2012
Posts: 7,271
Default

Quote:
Originally Posted by ivansc View Post
falling about laughing at the idea that anyone would push something 150 over in the real world. You tech-heads.....
I've mentioned that this is an extreme case.

But yeah, sometimes I want to be able to ruin everything. I want it to get way too loud without getting way too loud. It is a bit disappointing that my go-to plugin can't handle it. I probably wouldn't use anything else if I could trust it to handle every damn thing I might throw at it.

There's that thing on Epic's blog about feedback routing to do funny things in with ReaDelay and other effects. That can get way out of hand really fast unless you can really set a hard limit somewhere along the line, and if that limit can only be trusted to a certain point, like a levee built on a bayou...
ashcat_lt is offline   Reply With Quote
Old 07-15-2016, 07:58 AM   #14
AudioWonderland
Human being with feelings
 
AudioWonderland's Avatar
 
Join Date: Jun 2009
Posts: 729
Default

Quote:
Originally Posted by ashcat_lt View Post
I've mentioned that this is an extreme case.

But yeah, sometimes I want to be able to ruin everything. I want it to get way too loud without getting way too loud. It is a bit disappointing that my go-to plugin can't handle it. I probably wouldn't use anything else if I could trust it to handle every damn thing I might throw at it.

There's that thing on Epic's blog about feedback routing to do funny things in with ReaDelay and other effects. That can get way out of hand really fast unless you can really set a hard limit somewhere along the line, and if that limit can only be trusted to a certain point, like a levee built on a bayou...
I don't think "extreme" really covers it. You are several levels of magnitude past "extreme"
AudioWonderland is offline   Reply With Quote
Old 07-15-2016, 08:11 AM   #15
SmajjL
Human being with feelings
 
Join Date: Nov 2013
Location: IKEA
Posts: 2,774
Default

Might as well use audio to get to Mars faster.
*meep meep*
__________________
_Ohh.))::_Linux_::((.Xoxo_

SmajjL is online now   Reply With Quote
Old 07-15-2016, 08:41 AM   #16
ashcat_lt
Human being with feelings
 
Join Date: Dec 2012
Posts: 7,271
Default

Quote:
Originally Posted by Justin View Post
If you set attack/release to 0ms, RMS to 0ms (perhaps this one was missed?), knee to 0dB, and ratio to inf, ReaComp will limit the signal to the threshold for values up to about 150dB over the threshold, after which it does fail to limit to the threshold. I can fix this.
Didn't see this last night, but this is why you're awesome! Less than twelve hours later I get the actual head honcho developer dude saying "I can fix that". I love Reaper for a lot of reasons, but this is a very important one.

Quote:
was unable to get output over +0dB, however, if the "limit output" was checked (assuming AA is off, if AA is on, then the limiting happens at the higher rate so you might still get some smallish overs)...
That's a little concerning. I guess I'd have to look again, but I could swear I saw it blowing through 0 even with that box checked. I never use that anyway, but...
ashcat_lt is offline   Reply With Quote
Old 08-17-2016, 12:36 PM   #17
Fabian
Human being with feelings
 
Fabian's Avatar
 
Join Date: Sep 2008
Location: Sweden
Posts: 7,416
Default

A follow-up here...

If I set ReaComp to limit output, then I get different limits depending on the selected oversampling (AA). Is that as should be expected?

Justin said:
Quote:
"if the "limit output" was checked [...] if AA is on, then the limiting happens at the higher rate so you might still get some smallish overs"
But what I see is the opposite:
Code:
AA          Output
--------------------
None         0.0 dB
2x           0.0 dB
4x          -1.1 dB
8x          -1.4 dB
16x         -1.5 dB
32x         -1.5 dB
64x         -1.5 dB
This is for a +1.0 dB sine wave from JS:Tone Generator, straight into ReaComp with ratio == 1.0, lowpass == 20000, and all other settings 0. And the output signal reads the same on ReaComp's output meter and on the Master.
__________________
// MVHMF
I never always did the right thing, but all I did wasn't wrong...
Fabian is offline   Reply With Quote
Old 08-17-2016, 04:48 PM   #18
ashcat_lt
Human being with feelings
 
Join Date: Dec 2012
Posts: 7,271
Default

It's pretty much impossible to predict what the actual limit is going to be after the OS filters do their thing. I'm pretty surprised that none of them ended up over 0, but I think if you tried with a different input, you'd get different results. Even changing the frequency of your tone generator will probably affect the output.
ashcat_lt is offline   Reply With Quote
Old 08-18-2016, 12:31 PM   #19
Fabian
Human being with feelings
 
Fabian's Avatar
 
Join Date: Sep 2008
Location: Sweden
Posts: 7,416
Default

Quote:
Originally Posted by ashcat_lt View Post
It's pretty much impossible to predict what the actual limit is going to be after the OS filters do their thing. I'm pretty surprised that none of them ended up over 0, but I think if you tried with a different input, you'd get different results. Even changing the frequency of your tone generator will probably affect the output.
Thanks. Good point.
So I tried it with white noise, and the numbers are indeed different, but the trend is sort of the same.

Code:
AA        Output
------------------
None        0.0 dB
2x         +0.8 dB
4x         -0.4 dB
8x etc     -0.8 dB
And there it is overshooting at 2x. But I guess this is really nothing to delve into, it is as it is. At least now I know
__________________
// MVHMF
I never always did the right thing, but all I did wasn't wrong...
Fabian 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:59 AM.


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