Thanks for the feedback!
I did make sure the plug-in follows the steps in the proper order (equalize, RMS normalize, soft limit), as shown in the last handful of lines in the plug-in:
Code: Select all
(let* ((equalized (equalize sig))
(normalized (norm equalized))
(limited (softlimit normalized thresh hold)))
(Those are done in exactly the order as listed, top to bottom.)
The mention of "brick wall" is from limiter.ny (Steve Daulton's Limiter plug-in). The "hardlimit" function is used by the "softlimit" function. To be honest, I don't know exactly
how it works, but the limiting step in my plug-in should
be identical to the soft limiter in the Limiter plug-in because I'm using the exact same code. If you zoom in on the waveform that looks
clipped on the bottom, you'll probably see that it's not actually clipped (the peaks just all line up).
I suspect all of these differences are from using a fourth-order Butterworth high-pass filter (the "highpass4" function) instead of an equalizer in the "equalize" step. I've noticed that it often changes the waveform differently (visually) than the equalizer. It sometimes pushes the wave form up or down more than the equalizer does, which then causes the top or bottom to look clipped after the soft limiting step runs. From what I've read just now, a Butterworth filter has nonlinear phase response, which likely explains the differences we see. I'll look into changing the equalization/high-pass filtering step with something better (low or zero phase response). Hopefully that will fix both the waveform symmetry issue and the low-frequency trash issue.