DDF
Addicted to Fun and Learning
- Joined
- Dec 31, 2018
- Messages
- 617
- Likes
- 1,373
A debate has been long raging in the audio community that Windows isn't fit for use in a high resolution audio system. Sceptics counterargued that bits are bits and Windows audio degradations are a figment of an over-active audiophile imagination.
I decided to investigate this as I kept hearing issues with Windows, even after following common practice to (controversially) supposedly make it clean. I found some surprises along the way.
Sorry for the long post but my motivation is to share how to get effectively perfect audio from Windows, to save folks money and headaches, and to help end the endless debates. I'm including supporting objective test evidence in keeping with the spirit of ASR.
Over time, pieces of the "Windows audio sucks" puzzle emerged, but never a complete picture:
I was unhappy with this answer. I want better than bit perfect: a high performance digital filter engine to correct my room modes below Schroeder or to equalize (i.e. correct) my headphones regardless of what I was listening to, with Window's ease of use for all my audio sources. The common recommendation was yet another sledgehammer: buy expensive external hardware filtering boxes (e.g. RME or miniDSP SHD).
This just seemed wrong to me, it felt like giving up. External hardware adds cost and ironically ties you to hardware with frequency resolution lower than Windows can deliver with a more convenient integrated free software solution like Equalizer APO. But how about the performance of EAPO, is it "good enough"? Again, an online search turned up no answers. So I decided to answer that too.
The first step was to find test signals that could be viewed as faultless, with self distortion well below 24 bits. After performing a large study of the free REW and Audacity's tone generators (including trade off with bit rate and the performance of the various types of dither), I found their performance far outstripped even professional external hardware generators costing in the thousands (full disclosure, I used to work in an audio lab). As an example, this REW multi tone test stimulus (24 bit 44.1kHz with dither) was used in my measurements. Distortion components are >170 dB down. Ignore the noise floor, it has FFT gain, but it's "way down there".
All the measurements that follow are purely digital using REW through the Windows audio stack with no A/D or D/A conversions, and so any faults are Windows' alone.
Hidden APOs
Playing the multitone file through the Windows audio stack on my family Dell tower XPS8300, with no volume loss, no filters, all system sounds off, all effects disabled etc:
Windows uses audio processing objects (APOs) to provide software based digital signal processing for it's audio streams. First Surprise: Some hidden non defeatable APO made a mess of it, even with "all effects off' in Windows. Naughty Windows! My music system and work PCs didn't show this issue, so it may be caused by an APO for the Dell Realtek soundcard. To verify the measurement, I retested with RMAA's spectrum analyzer and the tones at a lower level (to make sure it wasn't intermediate clipping or the CAudioLimiter). Same outcome.
To try and fix this, I then installed (free) Equalizer APO (EAPO). This brilliant software supports a trouble shooting mode that turns off all "original" (stock) system APOs:
Result? Effective bit perfection through the Windows audio stack: first distortion component @ -170dB, per the source file:
The lesson here is that if your music system is Windows based, to guarantee no funny business from Windows audio, install EAPO even if you don't use filtering, and shut off "original APOs".
CAudioLimiter
Now, lets tackle CAudioLimiter. This is a level limiter built into the Windows audio stack that reduces the digital signal level if it approaches full scale. Benchmark and other sources have illustrated that such high signal level signals are not so uncommon in digital music files.
To test the CAudioLimiter, REW was used to generate a single test tone @ 0 dBFS, 24 bit. The first distortion component of the REW source tone is ~ -160 dB (again ignore noise floor due to FFT gain):
Here's CAudioLimiter's nasty fingerprint when this is played back without any loss. See how the limiter knocks the output down to -0.12 dBFS but adds a spray of distortion:
Using EAPO to set a pre-amp loss of 0.2 dB (loss with an input APO) completely avoids the CAudioLimiter. I think 150 dB dynamic range to the first distortion component should be good enough for even the fussiest audio junkie:
Filter Induced Digital Peaking
Perhaps less well known is that high pass filtering can also cause digital clipping, even if the filter only adds loss. How can this happen? The filter changes phase response which can then change how the different frequencies constructively add in the audio envelope. A good illustration of this is here.
This is a digital problem, not a Windows problem. Thankfully, the same solution used to avoid intersample overs, 4 dB digital preamp loss, should provide enough margin for this in practice as well.
Is EAPO "good enough"?
OK, so adding some loss in an input APO solves our clipping and limiter issues. Next question: what about EAPO, is it's performance really "good enough"? To answer this, I tested EAPO with this complex filter set (highest frequency notch is @ 100Hz)
Here's EAPOs digital output with the prior 4 tone REW test stimulus. Faultless, as expected from 32bit float processing used by EAPO:
EAPO also gets a knock for using "textbook" filters. These are known to cause "cramping" in high frequencies. In short, cramping is when the PEQ filter "bell" shape gets increasingly asymmetrical as it approaches half the sample rate. So I looked into this as well. In a nice outcome, it turns out that the filters generated by REW using "generic filter" setting are the same filters implemented by EAPO. What you see is what you get when using filters designed by REW, implemented by EAPO.
Upsampling Performance
Another question is whether automatic sample rate switching is needed in Windows, or if a fixed high sample rate can be set, relying on Windows upsampling. Archimago showed that Windows upsampling performed poorly in 2015, but I think the jury is still out. My testing in Dec '20 shows that the Windows upsampler is probably more than good enough. It appears like Windows made improvements since 2015. Playing a 44.1kHz file with upsampling to 96kHz, 24 bits, and EAPO set to -0.2 dB to avoid CAudioLimiter, the highest distortion component was at -134 dB:
If you're fussy (like I am), you can change the sample rate when playing back high resolution material, but I think leaving it set at 96kHz should be more than good enough.
Windows "Remote Desktop"
To sweeten the deal, Windows also provides the convenience of free remote desktop from your Android phone. You can sit in front of your speakers and tweak settings, and adjust EQ's etc in real time. This provides the same convenience as "Spotify Connect" but for all music sources whether Tidal or local file playback etc.
What About Analog?
I also want to address how to make this all work for you analog junkies. I own a pile of vinyl and a nice table so had to solve this for myself. I use a low cost external USB A/D tested in loopback showing >100 dB SNR, which blows away the performance of any RIAA preamplifier in front of it. I plumb that into the PC and through EAPO get all the same benefits of room and headphone equalization from vinyl. Getting this right ensures not clipping the A/D. I've created a separate spreadsheet to achieve this, but its beyond the scope here.
Summary Recommendations:
I'm hoping you found this helpful.
I decided to investigate this as I kept hearing issues with Windows, even after following common practice to (controversially) supposedly make it clean. I found some surprises along the way.
Sorry for the long post but my motivation is to share how to get effectively perfect audio from Windows, to save folks money and headaches, and to help end the endless debates. I'm including supporting objective test evidence in keeping with the spirit of ASR.
Over time, pieces of the "Windows audio sucks" puzzle emerged, but never a complete picture:
- Benchmark popularized that upsampling causes intersample-overs and clipping distortion within DAC chips. This is fixed by adding some Windows' volume loss
- Archimago showed that the Windows 10 upsampler (as of 2015) had significant performance issues. Avoiding the upsampler was the solution
- Mathew Van Eerde showed that Windows has an embedded limiter (CAudioLimiter) that can cause distortion if the signal is near full scale. But I've seen no study on what to do about it. Was the limiter at the input of Windows audio engine, the output, or both? Do all sources needed to have volume reduced or would Windows' global volume work? I decided to find out.
I was unhappy with this answer. I want better than bit perfect: a high performance digital filter engine to correct my room modes below Schroeder or to equalize (i.e. correct) my headphones regardless of what I was listening to, with Window's ease of use for all my audio sources. The common recommendation was yet another sledgehammer: buy expensive external hardware filtering boxes (e.g. RME or miniDSP SHD).
This just seemed wrong to me, it felt like giving up. External hardware adds cost and ironically ties you to hardware with frequency resolution lower than Windows can deliver with a more convenient integrated free software solution like Equalizer APO. But how about the performance of EAPO, is it "good enough"? Again, an online search turned up no answers. So I decided to answer that too.
The first step was to find test signals that could be viewed as faultless, with self distortion well below 24 bits. After performing a large study of the free REW and Audacity's tone generators (including trade off with bit rate and the performance of the various types of dither), I found their performance far outstripped even professional external hardware generators costing in the thousands (full disclosure, I used to work in an audio lab). As an example, this REW multi tone test stimulus (24 bit 44.1kHz with dither) was used in my measurements. Distortion components are >170 dB down. Ignore the noise floor, it has FFT gain, but it's "way down there".
All the measurements that follow are purely digital using REW through the Windows audio stack with no A/D or D/A conversions, and so any faults are Windows' alone.
Hidden APOs
Playing the multitone file through the Windows audio stack on my family Dell tower XPS8300, with no volume loss, no filters, all system sounds off, all effects disabled etc:
Windows uses audio processing objects (APOs) to provide software based digital signal processing for it's audio streams. First Surprise: Some hidden non defeatable APO made a mess of it, even with "all effects off' in Windows. Naughty Windows! My music system and work PCs didn't show this issue, so it may be caused by an APO for the Dell Realtek soundcard. To verify the measurement, I retested with RMAA's spectrum analyzer and the tones at a lower level (to make sure it wasn't intermediate clipping or the CAudioLimiter). Same outcome.
To try and fix this, I then installed (free) Equalizer APO (EAPO). This brilliant software supports a trouble shooting mode that turns off all "original" (stock) system APOs:
Result? Effective bit perfection through the Windows audio stack: first distortion component @ -170dB, per the source file:
The lesson here is that if your music system is Windows based, to guarantee no funny business from Windows audio, install EAPO even if you don't use filtering, and shut off "original APOs".
CAudioLimiter
Now, lets tackle CAudioLimiter. This is a level limiter built into the Windows audio stack that reduces the digital signal level if it approaches full scale. Benchmark and other sources have illustrated that such high signal level signals are not so uncommon in digital music files.
To test the CAudioLimiter, REW was used to generate a single test tone @ 0 dBFS, 24 bit. The first distortion component of the REW source tone is ~ -160 dB (again ignore noise floor due to FFT gain):
Here's CAudioLimiter's nasty fingerprint when this is played back without any loss. See how the limiter knocks the output down to -0.12 dBFS but adds a spray of distortion:
Using EAPO to set a pre-amp loss of 0.2 dB (loss with an input APO) completely avoids the CAudioLimiter. I think 150 dB dynamic range to the first distortion component should be good enough for even the fussiest audio junkie:
Filter Induced Digital Peaking
Perhaps less well known is that high pass filtering can also cause digital clipping, even if the filter only adds loss. How can this happen? The filter changes phase response which can then change how the different frequencies constructively add in the audio envelope. A good illustration of this is here.
This is a digital problem, not a Windows problem. Thankfully, the same solution used to avoid intersample overs, 4 dB digital preamp loss, should provide enough margin for this in practice as well.
Is EAPO "good enough"?
OK, so adding some loss in an input APO solves our clipping and limiter issues. Next question: what about EAPO, is it's performance really "good enough"? To answer this, I tested EAPO with this complex filter set (highest frequency notch is @ 100Hz)
Here's EAPOs digital output with the prior 4 tone REW test stimulus. Faultless, as expected from 32bit float processing used by EAPO:
EAPO also gets a knock for using "textbook" filters. These are known to cause "cramping" in high frequencies. In short, cramping is when the PEQ filter "bell" shape gets increasingly asymmetrical as it approaches half the sample rate. So I looked into this as well. In a nice outcome, it turns out that the filters generated by REW using "generic filter" setting are the same filters implemented by EAPO. What you see is what you get when using filters designed by REW, implemented by EAPO.
Upsampling Performance
Another question is whether automatic sample rate switching is needed in Windows, or if a fixed high sample rate can be set, relying on Windows upsampling. Archimago showed that Windows upsampling performed poorly in 2015, but I think the jury is still out. My testing in Dec '20 shows that the Windows upsampler is probably more than good enough. It appears like Windows made improvements since 2015. Playing a 44.1kHz file with upsampling to 96kHz, 24 bits, and EAPO set to -0.2 dB to avoid CAudioLimiter, the highest distortion component was at -134 dB:
If you're fussy (like I am), you can change the sample rate when playing back high resolution material, but I think leaving it set at 96kHz should be more than good enough.
Windows "Remote Desktop"
To sweeten the deal, Windows also provides the convenience of free remote desktop from your Android phone. You can sit in front of your speakers and tweak settings, and adjust EQ's etc in real time. This provides the same convenience as "Spotify Connect" but for all music sources whether Tidal or local file playback etc.
What About Analog?
I also want to address how to make this all work for you analog junkies. I own a pile of vinyl and a nice table so had to solve this for myself. I use a low cost external USB A/D tested in loopback showing >100 dB SNR, which blows away the performance of any RIAA preamplifier in front of it. I plumb that into the PC and through EAPO get all the same benefits of room and headphone equalization from vinyl. Getting this right ensures not clipping the A/D. I've created a separate spreadsheet to achieve this, but its beyond the scope here.
Summary Recommendations:
- Install Equalizer APO and use it to disable original APOs and set EAPO's preamp gain at ~ -4 dB to avoid upsample overs, filtering induced peaks, and the Windows CAudioLimiter
- Set Windows audio to 24 bits so that it's added dither doesn't compromise dynamic range
- Set Windows sample rate to the same rate as the native file, or to 96 kHz if you play back high resolution material
- Turn off Windows system sounds and enhancements
- Install "remote desktop" for "Spotify Connect"-like added convenience, for all your digital sources
- Take the money saved and buy more music, better speakers and a few bottles of wine
I'm hoping you found this helpful.
Attachments
Last edited: