Old 05-15-2019, 01:26 AM   #1
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default Transient Slope Converter

Code:
desc:Transient Slope Converter (by zappazapper)

@init
previousL = 2;
previousR = 2; // since spl0 and spl1 go from -1 to 1, a value of 2 will mean it's the first sample

@sample
currentL = spl0;
currentR = spl1;
previousL != 2 ?
	(
		slopeL = abs(previousL-currentL) / srate;
		slopeR = abs(previousR-currentR) / srate;
	);
previousL = currentL;
previousR = currentR;
spl0 = slopeL;
spl1 = slopeR;
I have been using transient processing more and more, and really like the idea of multiband transient processors but none of the ones I've tried offer the capability that multiband dynamics processors do. The one I'm most used to is Waves TransX Multi, which only offers global attack and release times. It occurred to me that a dynamics processor and a transient processor are essentially doing the same thing (adjusting gain), but based on different information (peak or rms LEVEL vs change in level over time, or POWER, i guess?).

So I made this little plugin to convert a signal into a value that roughly represents that change in signal level over time (no calculus going on here, it just divides the difference between the previous and current sample level by the sample rate). The result can be used to key a sidechain multiband dynamics processor like Waves C6, essentially turning it into a more flexible multiband transient processor.

Please note that I am not much of a programmer. This is just a concept and I'm sure there are better ways of doing this and better programmers to do it. The resulting signal is very low so I use a JSFX volume plugin to add 96db of gain to get it up around full scale so it can be useful. Any real implementation of such a concept would have to include that gain.

At first glance, this seems to do the job it was intended for. I put a drum loop, which sounded already quite compressed, into C6, using this plugin to key the external sidechain. In terms of the basic task of pulling out the attack of the kick, snare and hihat, using this plugin in the external sidechain was considerably more effective than using the unaffected (internal) signal as the key.

I would love comments on the basic concept and/or the plugin itself.
zappazapper is offline   Reply With Quote
Old 05-15-2019, 01:39 AM   #2
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

One thing to be aware of is that this is extremely sensitive to high frequencies as it is essentially the absolute of a signal run through a high pass filter. It may help to get a much more reliable estimate by low passing the signal first.

Also, are you sure you want the absolute of the derivative and not the derivative of the absolute?
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]

Last edited by sai'ke; 05-15-2019 at 01:50 AM.
sai'ke is offline   Reply With Quote
Old 05-15-2019, 01:47 AM   #3
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

Quote:
Originally Posted by sai'ke View Post
One thing to be aware of is that this is extremely sensitive to high frequencies as it is essentially the absolute of a signal run through a high pass filter. It may help to get a much more reliable estimate by low passing the signal first.

Also, are you sure you want the absolute of the derivative and not the derivative of the absolute?
I realized that the resulting signal would be all positive values but I figured that a dynamics processor would use an absolute signal level as its detector anyway so just left it.

My knowledge of such things is limited and if there is a better way to achieve the result I'm after, by all means, write a better plugin. I just want a more flexible multiband transient processor.
zappazapper is offline   Reply With Quote
Old 05-15-2019, 01:50 AM   #4
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

What do you mean by "signal strength"? Wouldn't that be the derivative of the signal level?
zappazapper is offline   Reply With Quote
Old 05-15-2019, 01:55 AM   #5
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

Hmmm. I suspect that what you'd really want is an estimate of the signal strength (using a peak level detector), and then compute the derivative off of that, rather than of the signal directly but I may be wrong? A simple peak level detector is a lowpassed version of the absolute of the signal for instance.

I've never written a transient processor before let alone used one, so maybe someone else can chime in who has more experience with this type of plugin.

Edit: An image to show you what I mean. You can see that the peak detector is much more robust to noise (bottom). Top row is the input signal:


Or more extremely, how the derivative can simply miss the transient increase in signal if there's no discontinuity at the start:
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]

Last edited by sai'ke; 05-15-2019 at 02:41 AM. Reason: Added images
sai'ke is offline   Reply With Quote
Old 05-15-2019, 10:34 PM   #6
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

Quote:
Originally Posted by sai'ke View Post
Hmmm. I suspect that what you'd really want is an estimate of the signal strength (using a peak level detector), and then compute the derivative off of that, rather than of the signal directly but I may be wrong? A simple peak level detector is a lowpassed version of the absolute of the signal for instance.

I've never written a transient processor before let alone used one, so maybe someone else can chime in who has more experience with this type of plugin.

Edit: An image to show you what I mean. You can see that the peak detector is much more robust to noise (bottom). Top row is the input signal:


Or more extremely, how the derivative can simply miss the transient increase in signal if there's no discontinuity at the start:
the wave resulting from the LPF is actually the OPPOSITE of what i'm looking for... it doesn't need to be something that even remotely resembles the input, because it's just a key signal... it's never something you hear...

the bigger the difference in signal level between the initial transient and the rest of the signal the better it is in that role, because a dynamic processor keys off of signal LEVEL, whether it's peak level or RMS... a transient processor keys off of what i think is called signal POWER or ENERGY...

just to explain what i mean, because i'm not sure i'm using the right terminology... POWER/ENERGY...

consider two signals... both sin wavs, both the same amplitude, say -1 to 1... the first is 20 Hz and the second is 20,000 Hz... although both signals have the same amplitude (they both reach the same peak LEVEL), the second signal has more POWER or ENERGY because the diaphragm of the speaker would have to move faster through space to match the same amplitude as the first signal, and thus it pushes more air, or it does more work or however you want to express it... now consider if you halved the amplitude of the second signal... it might still have more POWER than the first signal because it still has to move the diaphragm 10,000 times faster than the first signal...

and so what i'm calling POWER or ENERGY is the CHANGE in peak LEVEL over TIME... essentially the instantaneous SLOPE of the signal... and so if one can convert a signal so that the resulting signal's peak LEVEL is the SLOPE (POWER/ENERGY) of the original signal, any dynamics processor keyed off of that converted signal will then become a transient processor... because it's applying gain based on the POWER/ENERGY/SLOPE of the original signal, not the LEVEL...

you do have a point with the "no discontinuity" case, but i feel like that problem can be easily solved with solid programming...
zappazapper is offline   Reply With Quote
Old 05-16-2019, 03:10 AM   #7
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

Quote:
Originally Posted by zappazapper View Post
the wave resulting from the LPF is actually the OPPOSITE of what i'm looking for... it doesn't need to be something that even remotely resembles the input, because it's just a key signal... it's never something you hear...
I know that it's a control signal. What I'm telling you is that computing the derivative straight up from the signal and rectifying that is likely not doing what you think it does. What I suspect you want is to do a peak detection and compute a derivative off of that.

Quote:
and so what i'm calling POWER or ENERGY is the CHANGE in peak LEVEL over TIME... essentially the instantaneous SLOPE of the signal...
These two things are not the same. Change in peak level is *not* instantaneous slope of the signal.

Peak detect( abs(ds/dt) ) != d(Peak detect(s))/dt since peak detection is typically a non-linear function with a square or an abs in it. You can't change the order of operations and get the same result.

Quote:
and so what i'm calling POWER or ENERGY is the CHANGE in peak LEVEL over TIME...
You're not computing the change in peak level. You're computing the instantaneous change in signal.

Quote:
you do have a point with the "no discontinuity" case, but i feel like that problem can be easily solved with solid programming...
By doing peak detection and then computing the derivative off of the actual peak level?

Anyways, I'm glad you got a result you liked. I just think calling it a "transient" anything is not a good name. Transience is a larger scale property, not an instantaneous property.
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]
sai'ke is offline   Reply With Quote
Old 05-16-2019, 04:19 AM   #8
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

Sorry, like I said, I'm not any kind of programmer and my understanding of such things is quite limited.

Maybe you can explain to me what exactly a transient processor like Waves TransX Multi is doing. It's my understanding that a dynamics processor like a compressor/expander and a transient processor are essentially the same thing in that they are both applying gain to the signal, triggered by some event in the signal. In the case of the dynamics processor it's signal level exceeding a threshold. What event is the transient processor using to decide to apply gain?
zappazapper is offline   Reply With Quote
Old 05-16-2019, 04:59 AM   #9
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

No harm done. I can't be sure, since it's not open source, but I would guess either one of these.

1. Either they indeed base a gain off of a derivative but a derivative of a peak or envelope follower estimate rather than the signal itself. So in that case you were halfway there

https://en.wikipedia.org/wiki/Envelope_detector

Or 2. They base the gain off of a difference between an envelope follower and a (slower) peak detector that has a longer attack. If you compute the difference between the actual (fast) envelope and the slower one, you'd get an envelope that has peaks at the attacks.

I can see if I have some time on the weekend, if I can make a small prototype. Then you can tell me if it does what you intended.

As for trans-x multi-band-ness, I suspect that it cuts the signal up into frequency bands using Linkwitz-Riley (LR) filters and then manipulates the transients of each band independently (with the same time constant). LR filters are basically filters that preserve the phase relation between the different bands without amplifying any specific frequency. If you sum their result together, you would get the frequency spectrum of the input audio back.
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]
sai'ke is offline   Reply With Quote
Old 05-16-2019, 05:59 AM   #10
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

Quote:
Originally Posted by sai'ke View Post
. As for trans-x multi-band-ness, I suspect that it cuts the signal up into frequency bands using Linkwitz-Riley (LR) filters and then manipulates the transients of each band independently (with the same time constant). LR filters are basically filters that preserve the phase relation between the different bands without amplifying any specific frequency. If you sum their result together, you would get the frequency spectrum of the input audio back.
Hmm... Then it seems to me that for this concept to truly work, our plugin would have to split the signal into bands, process each band separately, then send a multi-channel signal to a dynamics processor with a multi-channel sidechain... C6 doesn't have that and I can't think of one that does...

Also, the crossover frequencies of our plugin would have to match the crossover frequencies of the dynamics processor, which unless there is a way to link the parameters between the two plugins, would be quite cumbersome...

BUT...

what if instead of feeding the sidechain of a dynamics processor, we used ReaEQ with parameter manipulation? Instead of splitting the signal into bands using crossovers, our plugin could target just one band using a bandpass linked to the frequency and Q parameters of a single ReaEQ band, convert the signal and output it to a separate channel which triggers the gain parameter of that band using parameter manipulation... We would use multiple instances of our plugin to control multiple bands within a single ReaEQ instance...
zappazapper is offline   Reply With Quote
Old 05-16-2019, 08:00 AM   #11
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

Quote:
Originally Posted by zappazapper View Post
Hmm... Then it seems to me that for this concept to truly work, our plugin would have to split the signal into bands, process each band separately, then send a multi-channel signal to a dynamics processor with a multi-channel sidechain... C6 doesn't have that and I can't think of one that does...
Yeah, by that point, it'd probably be easier to write the processing too.

Quote:
what if instead of feeding the sidechain of a dynamics processor, we used ReaEQ with parameter manipulation? Instead of splitting the signal into bands using crossovers, our plugin could target just one band using a bandpass linked to the frequency and Q parameters of a single ReaEQ band, convert the signal and output it to a separate channel which triggers the gain parameter of that band using parameter manipulation... We would use multiple instances of our plugin to control multiple bands within a single ReaEQ instance...
I don't really think that would do what you want. You'd get tons of phase cancellation on where the bands meet. This is exactly what the LR setups were designed to avoid. All IIR filters induce frequency dependent phase shifts. So you have to make sure that when you're cutting things up into bands, you give every signal the same phase shift. You can do this, by running every signal, through every cutting filter, except for some you use a lowpass, highpass or allpass (when you don't want to cut). This way you make sure that they all get the same phase distortion.

For four bands you'd get something like this for instance (you also need two inverters on band 1 and 3 on top of this).
Code:
         /HP => Band 1
      /HP\LP => Band 2
   /HP
in    \LP-AP => Band 3
   \LP-AP-AP => Band 4
I have written LR filters before in another project, this isn't too difficult, but requires some careful book-keeping.
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]
sai'ke is offline   Reply With Quote
Old 05-16-2019, 08:03 AM   #12
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

Ok... I suppose it doesn't have to be ReaEQ... What if it was a linear phase equalizer?
zappazapper is offline   Reply With Quote
Old 05-16-2019, 08:06 AM   #13
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

That might work, if the group delay is the same for all bands and they don't try to be clever by using shorter kernels for different frequencies.
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]
sai'ke is offline   Reply With Quote
Old 05-16-2019, 08:07 AM   #14
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

Quote:
Originally Posted by sai'ke View Post
That might work, if the group delay is the same for all bands and they don't try to be clever by using shorter kernels for different frequencies.
How would one go about testing that?
zappazapper is offline   Reply With Quote
Old 05-16-2019, 08:11 AM   #15
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

Quote:
Originally Posted by zappazapper View Post
How would one go about testing that?
Cut up the signal in bands and sum it again. You should get exactly the same spectrum as the input. Can use white noise as a test source and then use the spectral analyzer with a long integration time. If you see any notches in the spectrum, it's bad news.
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]
sai'ke is offline   Reply With Quote
Old 05-16-2019, 08:21 AM   #16
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

Quote:
Originally Posted by sai'ke View Post
Cut up the signal in bands and sum it again. You should get exactly the same spectrum as the input. Can use white noise as a test source and then use the spectral analyzer with a long integration time. If you see any notches in the spectrum, it's bad news.
Are you familiar with any linear phase EQs that you know work in such a way? The one I'm most familiar with is the Waves Linear MB...
zappazapper is offline   Reply With Quote
Old 05-16-2019, 10:59 AM   #17
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

Not really no. It isn't really a thing I normally look for in an EQ :P

I don't recall ever using a linear phase EQ, because I usually don't like the pre-ringing noise they make.

Minimum phase crossovers are I think really the best suited to this problem.
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]
sai'ke is offline   Reply With Quote
Old 05-16-2019, 03:35 PM   #18
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

Quote:
Originally Posted by sai'ke View Post
Not really no. It isn't really a thing I normally look for in an EQ :P

I don't recall ever using a linear phase EQ, because I usually don't like the pre-ringing noise they make.

Minimum phase crossovers are I think really the best suited to this problem.
I see... Ok well, I guess if you think you know how to program such a plugin and you're willing, I'd love to try it out... In the meantime I'm gonna keep playing with my little spattering of code 😁
zappazapper is offline   Reply With Quote
Old 05-20-2019, 02:24 PM   #19
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

A question...

Your LPF, does it have a frequency and a Q value?
zappazapper is offline   Reply With Quote
Old 05-20-2019, 08:56 PM   #20
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

Code:
desc:Transient Converter with Lopass Filter (by zappazapper)

slider1: 20000 <0, 20000, 1>Frequency[Hz]
slider2: 2 <0.01, 40, 0.01>Q

@init

@slider
w0 = 2 * $pi * slider1 / srate;
cosw0 = cos(w0);
sinw0 = sin(w0);

alpha = sinw0 / (2 * slider2);

b0 = (1 - cosw0) / 2;
b1 = 1 - cosw0;
b2 = (1 - cosw0) / 2;
a0 = 1 + alpha;
a1 = -2 * cosw0;
a2 = 1 - alpha;

@sample
xl0 = spl0;
xr0 = spl1;

yl0 = (b0 / a0) * xl0 + (b1 / a0) * xl1 + (b2 / a0) * xl2 - (a1 / a0) * yl1 - (a2 / a0) * yl2;
yr0 = (b0 / a0) * xr0 + (b1 / a0) * xr1 + (b2 / a0) * xr2 - (a1 / a0) * yr1 - (a2 / a0) * yr2;

sl = abs(yl1-yl0) / srate;
sr = abs(yr1-yr0) / srate;

spl0 = sl;
spl1 = sr;

xl2 = xl1;
xr2 = xr1;
xl1 = xl0;
xr1 = xr0;
yl2 = yl1;
yr2 = yr1;
yl1 = yl0;
yr1 = yr0;
is this what you had in mind?
zappazapper is offline   Reply With Quote
Old 05-21-2019, 02:29 AM   #21
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

Any LPF should make it better at least (including the one you used). But it would also limit the response time.

But given the task, it would make sense to use one with a switching attack and decay. The attack being very short, and decay being longer.

I would really recommend graphing the result.

Btw, I did a first attempt to make a transient shaper, but I will probably revisit it at some point in the future: https://raw.githubusercontent.com/Jo...ransience.jsfx

It uses the difference between the envelope followers. One is a fast one (very rapid attack, slow decay) and the other is a user controlled one. The difference between the envelopes is then used as control voltage. I wasn't happy with it though. It's a bit finicky without having a clear way of calculating a makeup gain. Making a multi-band version of this would not be that hard; but given the finickyness, I'm not sure if it'd be worth it :P
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]

Last edited by sai'ke; 05-21-2019 at 02:40 AM.
sai'ke is offline   Reply With Quote
Old 05-21-2019, 05:30 AM   #22
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

Quote:
Originally Posted by sai'ke View Post
I would really recommend graphing the result.
�� That would require a level of coding skill that I do not possess, obviously...
zappazapper is offline   Reply With Quote
Old 05-21-2019, 07:10 AM   #23
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

Quote:
Originally Posted by zappazapper View Post
�� That would require a level of coding skill that I do not possess, obviously...
I just had another quick peek at your code actually, and I would do the absolute before and after the LPF.

You can run the control signal that you get through an oscilloscope. That'd be graphing it. Just to give you a bit more feel about what adjustments to your code do to your control signal. Without that, you're basically flying blind, no?

As for a two time constant attack/decay system, it could work as follows. Basically you check if the signal is higher than your currently estimated envelope, then you use a fast time constant (or high cutoff), and when it is lower than your currently estimated envelope, you use a lower time constant.
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]
sai'ke is offline   Reply With Quote
Old 05-21-2019, 11:06 AM   #24
JamesPeters
Human being with feelings
 
Join Date: Aug 2011
Location: Near a big lake
Posts: 3,943
Default

Quote:
Originally Posted by sai'ke View Post
Btw, I did a first attempt to make a transient shaper,
I downloaded it (via ReaPack) and once the plugin started there was a message saying it couldn't find saike_upsamplers.jsfx-inc. So I downloaded that separately and put it in the "basics" folder along with the transient plugin.

Of all the transient shapers I've tried, there are a couple I like. One is Transpire (at the Sonic Anomaly site site) and another is MDA_transient (in Witti's JSFX plugin pack. Both are available as JSFX so you can peek at the code if you want.

The MDA_transient can work realtime, no latency. Transpire requires a small buffer though (and can sound less abrupt as a result).
JamesPeters is offline   Reply With Quote
Old 05-21-2019, 11:29 AM   #25
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

Ah yeah, whoops, the thing about the upsamplers is a bit annoying. Thing is, most of my 'basics' plugs use that one. When I tried to let reapack know about the dependency, it complained that other files in the repo already provided that file; so I removed the explicit provides notification. I meant to ask about a better way to do that, but forgot

Anyways, not to derail the convo, I did check out Transpire before, but it didn't do gain compensation either and I was really missing a graph to see what I/it was doing (how much gain reduction/amplification was being applied). I'll check out Witti's plug next weekend

But anyways, the goal was multi-band. I could rip out the multi-band splitter from Squashman if you like. Then you can attach it to N transpires. Then just sum the signals back at the end and profit!
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]
sai'ke is offline   Reply With Quote
Old 05-21-2019, 11:56 AM   #26
JamesPeters
Human being with feelings
 
Join Date: Aug 2011
Location: Near a big lake
Posts: 3,943
Default

If your multiband splitter (and joiner, I assume) is better in some way compared to the existing JS ones, it would be nice to have another option. It could be useful for that reason or others.
JamesPeters is offline   Reply With Quote
Old 05-22-2019, 01:58 AM   #27
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

Quote:
Originally Posted by JamesPeters View Post
If your multiband splitter (and joiner, I assume) is better in some way compared to the existing JS ones, it would be nice to have another option. It could be useful for that reason or others.
Well, the filters are a lot steeper than the default splitter that ships with reaper, but I don't know if others exist in a repo or the stash already.

I rarely use stuff from the stash since analyzing whether their algo does things the way I want them to usually takes as long as just writing one myself.

If I find some time, I can make it a separate release I suppose.
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]
sai'ke is offline   Reply With Quote
Old 05-22-2019, 02:52 AM   #28
Sju
Human being with feelings
 
Join Date: Jun 2015
Posts: 685
Default

Sry for offtopic, but I too would love to be able to use just the splitting from Squashman, especially with the UI.
Sju is offline   Reply With Quote
Old 05-24-2019, 11:43 AM   #29
zappazapper
Human being with feelings
 
zappazapper's Avatar
 
Join Date: Feb 2015
Posts: 256
Default

what are the frequency and q settings of a low pass filter that will turn white noise into pink noise?

i've been experimenting with second derivatives (derivative of the derivative)... because it's not the instantaneous change in level i'm after, it's the instantaneous change in POWER, or whatever it's called...
slew rate?... like you said, very sensitive to high frequencies, obviously, so i need a filter that will give equal power across frequencies, ie. pink noise... it seems to me that it needs to be low passed before calculating the first derivative AND again before the second derivative...
zappazapper is offline   Reply With Quote
Old 05-25-2019, 01:10 AM   #30
sai'ke
Human being with feelings
 
sai'ke's Avatar
 
Join Date: Aug 2009
Location: NL
Posts: 1,457
Default

Quote:
Originally Posted by zappazapper View Post
what are the frequency and q settings of a low pass filter that will turn white noise into pink noise?

i've been experimenting with second derivatives (derivative of the derivative)... because it's not the instantaneous change in level i'm after, it's the instantaneous change in POWER, or whatever it's called...
slew rate?... like you said, very sensitive to high frequencies, obviously, so i need a filter that will give equal power across frequencies, ie. pink noise... it seems to me that it needs to be low passed before calculating the first derivative AND again before the second derivative...
Slew rate is normally first derivative even though it is a misnomer since slew is also used for the first derivative. Usually people use this term when speaking about how quickly components are able to respond to changes in input.

If you'd want the second derivative you could just filter once. Filtering and derivation are linear operations. Their order can be swapped. Abs and squaring are not though, so be careful if you are planning on using those between computing the first and second derivative again.

Pink noise has a 3 dB/oct rolloff. That means the power decreases by 3 dB every octave that you go up. A single pole filter already has 6 dB. Making a 3 dB/oct digital filter is not so trivial. I doubt however that a pinking filter will be enough to give you a reliable envelope estimate.

What I think you want is an estimate of the gain. That means that you don't want to include the variations at audible frequencies at all. So a cutoff lower than 20 Hz I suppose. Usually cutoffs that low are just specified in time. Milliseconds or so.

Filters with cutoffs that low take a long time to respond. This somehow makes sense if you think about it. Even a person looking at the signal would need at least to periods to see if it is a transient or just a sinusoid contiuing on its merry way.

It is always a tradeoff between responsive time and attenuation. I'd look into the topic of envelope estimation. Quite often people use filters with alternating cutoff for attack and release here.
__________________
[Tracker Plugin: Thread|Github|Reapack] | [Routing Plugin: Thread|Reapack] | [More JSFX: Thread|Descriptions|Reapack]

Last edited by sai'ke; 05-25-2019 at 01:23 AM. Reason: clarifications
sai'ke 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 02:30 PM.


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