in the course of developing an equalizer I wondered how well some of the built-in EQs in common audio players perform.
So I decided to do some measurements.
In fact, I now have a measurement setup that allows me to capture any sound that goes through Windows' audio subsystem right before it's passed to the soundcard. Therefore, I can also measure, e.g., how well an audio player, or even DirectSound itself, handles situations where resampling or quantization (24-bit file played in a 16-bit format) is needed, or look at digital volume controls, or any DSP that can be used in a player, or ...
I'll mostly be using RMAA to analyze the results, even if it's just the frequency response I'm looking at.
TODO: short RMAA description
As a reference, here are the untouched test files in the formats 44.1/16, 44.1/24 and 96/24:
= Flat frequency response, low noise levels, distortion and crosstalk (as far as each format allows).
So let's take a look at some EQs. Test file is in the format 44.1/16. The target is a simple peaking filter, with -5 dB at 500 Hz.
Versions used: foobar2000 v1.1.1, Winamp v5.6, iTunes v10.1.0.56
As can be seen in the table above, other than frequency response neither EQ really degrades audio quality. Winamp's seems to be the worst however, but see for yourself:
The first (white) one shows how it should look like. It's a smooth curve and at 500 Hz we're down exactly 5 dB.
The second (green) EQ is the one that comes with fb2k. While each band can be controlled with a 1 dB precision, which is nice, the result looks like the Stiegl beer logo - stepped, the opposite of smooth and not musical.
Here's the configuration of the EQ for reference:
So if you can use alternatives my suggestion is to use them instead of the built-in EQ.
The third (cyan) one shows winamp's default built-in EQ. The number of bands is very limited and I never liked the interface and the result is very inaccurate. Just look at the configuration and compare it to the measurement above:
The result looks nothing like the curve in the user interface. At 600 Hz we're down over 8 dB, but I configured -4.8 dB (the closest possible to -5 dB it seems, which is also weird).
Maybe with some (a lot of) tweaking you can get this EQ to do what you want, but I'd look for an alternative instead.
The fourth (purple) EQ is the one built into itunes. In the frequency response you can see why I don't like built-in graphic EQs. It's hard to predict what happens between the bands and how wide each band really is.
Besides, I couldn't find any indicator of how many dB I'm down at the sliders in the user interface:
At least there are gridlines in 3 dB steps. Nevertheless, this EQ also needs some tweaking to really get what you want, if that is even possible considering the limited number of bands.
Here's the second batch of EQ measurements.
Versions used: Winamp sane as above, Electri-Q - posihfopit edition v1.0
This time the target curve is at the end, so that it's on top in the graphs. Let's take a look at the frequency responses:
For the first (white) curve I used the same band-EQ configuration as described above ('built-in default EQ / winamp') but I set the EQ-type from 'Winamp-4Front-Equalizer' to 'Constant-Q-Equalizer' in the options. While the curve itself is ugly and looks a bit like the one from itunes above, it's an improvement compared to winamp's default EQ
The second (green) EQ is from AiXcoustic's and is called Electri-Q - posihfopit edition (freeware). I used it as winamp DSP plugin here, but there's also a VST version.
Electri-Q offers a lot of options and also different modes. We're looking at the mode 'analog' here.
In the frequency response graph the analog curve is hidden by the next curve (mode 'digital'). Since it's a parametric EQ, and not a band-EQ, the results look promising for the first time. In fact, the curve's very close to the target. Here's a screenshot of the configuration for reference:
If you've taken a closer look at the RMAA comparison/results table above, you can see that something weird seems to be going on with distortion levels. Here's the explanation from the Electri-Q manual: "The algorithm ‘Analog’ is based on a real analog circuit and thus it delivers a subtle warmth. Its counterpart is the algorithm ‘Digital’ which delivers a more transparent sound."
So how does this 'warmth' / distortion look like? See for yourself:
Here we can see a 1 kHz sine wave and the noise floor - and the distortion (green spikes) the 'analog' mode creates. But the strange thing here is that there are no even order harmonics (2 kHz, 4 kHz etc.). All I see is odd order harmonics. I'm not sure which 'warm' sounding analogue circuit would produce something like that.
Another thing that can be seen here is that Constant-Q EQ from winamp adds small amounts of noise. Similar amounts of noise can be observed if the 'eco' option in Electri-Q is enabled ('eco' like economic, reduces CPU usage).
The third (cyan) curve shows Electri-Q again, but this time in 'digital' mode. This mode doesn't produce harmonic distortion (purposely). As can be seen above, the results are the closest to the target so far.
Back with an update, resampler measurements!
As starting point, I generated a dithered 24-bit, 44.1 kHz file with sine waves at frequencies 60, 600 and 6000 Hz:
Then I converted this with foobar2000's built-in resampler (PPHS) in ultra mode to 24-bit, 96 kHz with this ok result:
I repeated this (resampling from 44.1 to 96 kHz), but this time with the SoX resampler plugin (quality: very high) for foobar2000 which improved results further:
I couldn't measure the DirectSound resampler properly, but if you use quality resamplers like above to convert your audio to the format that is configured for your playback device, DirectSound/KMixer or the sound driver doesn't need to do any format conversions.
Any comments, wishes or suggestions? All welcome.
(Please note that this post is a work in progress. I'll add further measurements over time.)
Edited by xnor - 10/9/12 at 10:49am