I'm trying to configure AutoEq for SuperEQ. The latter was originally a Winamp DSP, but now it's used in foobar2000 and DeaDBeeF.
AutoEq requires a list of central frequencies and Q-factors for equaliser bands. SuperEQ's cut-off frequencies can be found in the source:
#define NBANDS 17
static REAL bands[NBANDS] = {
65.406392,92.498606,130.81278,184.99721,261.62557,369.99442,523.25113,
739.9884 ,1046.5023,1479.9768,2093.0045,2959.9536,4186.0091,5919.9072,
8372.0181,11839.814,16744.036
};
For the middle bands, central frequencies computed as geometric means sqrt(bands[i + 1] * bands[i]) do match the values displayed in GUI:
"55 Hz",
"77 Hz",
"110 Hz",
"156 Hz",
"220 Hz",
"311 Hz",
"440 Hz",
"622 Hz",
"880 Hz",
"1.2 kHz",
"1.8 kHz",
"2.5 kHz",
"3.5 kHz",
"5 kHz",
"7 kHz",
"10 kHz",
"14 kHz",
"20 kHz"
Q-factor for the middle bands sqrt(bands[i + 1] * bands[i]) / (bands[i + 1] - bands[i]) is 2.871.
The lowest and the highest bands, however, are problematic. Cut-off for the lowest band is 0, for the highest band it is the sampling rate (source):
(*pp)->lower = i == 0 ? 0 : bands[i-1];
(*pp)->upper = i == NBANDS ? fs : bands[i ];
Geometric mean of 0 is zero, yet the central frequency of the lowest band is claimed to be 55 Hz in GUI. For the highest band, for a typical sampling rate of 44100, sqrt(16744.036 * 44100) = 27173.73709, which matches neither 20 kHz in DeaDBeeF's GUI, nor 19912 in Shibatch's original DSP.
Are there some different formulas for computing the central frequencies that would've reproduced 55 Hz and 20 kHz?
UPDATE: According to AviSynth docs, SuperEQ uses 16383th order FIR filters using FFT.
Also, it seems that only frequencies up to half of the sampling rate are actually used (makes sense considering the Nyquist–Shannon theorem):
for(e=param2.elm->next;e->next != NULL && e->upper < fs/2;e = e->next)


(**pp)->loweris initialised frombands[i - 1], i.e.bands[-1]fori = 0. Such an out-of-bounds access is prevented by a ternaryi == 0 ? 0 : bands[i - 1].bands[0]is set as a lower bound fori = 1, which is the second element of an array, not the first one.
– Nil Admirari Jul 07 '23 at 12:09#define NBANDS 17, not 16, andbands[NBANDS]is an out-of-bounds access, which is prevented by another ternaryi == NBANDS ? fs : bands[i]7 4 0 -2 -3 -2 -2 -0 -3 1 5 -4 4 4 -2 -1 7 -13– Juha P Jul 11 '23 at 21:08ShelfFilter, in addition to already existingHighShelfandLowShelf. Do you know howbiquad_coefficientsfor such a filter should look like? – Nil Admirari Aug 04 '23 at 21:33