*** Dynamic EQ *** with JUCE

Hello folks,

I want to make a one band (lowband) dynamic EQ
Is this a correct algorithm for this ? Or do you know any other way ?

1-Split audio to 2 seperate buffers
2-LowPassFilter to buffer one (20-250hz)
3-Compressor to buffer one (Compress LPF)
4-HighPassFilter to buffer two (250hz-22khz)
5-Merge them all

Is this ok ?

not sure if this is the technically most correct way but i think i personally would just use a bunch of bandpass filters and each of them has a compressor or whatever else effects you want there, and then they are just added to the dry signal with individual gain controls to make it feel like they were bell filters

When splitting a signal into bands like this you need to be careful of a few things:

  1. If you’re using a cross-over approach (where you apply a low-pass and a high-pass with the same cutoff to the same signal, process them separately, then sum them back together), you should use a filter with an attenuation of -6dB at the cutoff frequency. The Linkwitz-Riley filter is often used for this.

  2. You must ensure that with a flat frequency response, you also end up with a flat phase response.
    For example, let’s say you apply a cross-over filter at 200Hz to split off a low band, then apply another cross-over filter at 2kHz on the higher band, to get mid and high bands. If you were to sum these 3 signals back together without any additional processing, you would end up with a flat frequency response but not a flat phase response.
    This is because you’ve only adjusted the phase of the low band once, but adjusted the phase of the upper bands twice. IIRC, this can be fixed by applying an all-pass filter to the resultant signal.
    Alternatively, as @Mrugalla suggests, you could use band-pass filters instead to isolate each band.

Classic “don’t do A, do B” incoming, but what you’ve described sounds more like a multi-band compressor. Not my area of expertise, but I’d expect a Dynamic EQ to simply be a peaking/parametric filter with its gain controlled by some envelope. You’d calculate the gain reduction in the same way you would for a compressor, then assign that value to the gain parameter of a peaking filter.


I tend to agree that in this particular use case it might be better to do this:

  1. Lowpass incoming signal to a separate buffer
  2. Calculate gain reduction needed from 1.
  3. Apply gain reduction with a Low Shelf EQ to the main buffer

Probably a case of try both and see which has the better results (in terms of phase etc.)

1 Like