- By default, Windows audio quality can be technically inferior as has been shown in this measurement.
- ASIO drivers or similar can improve audio output significantly by bypassing Windows resampling and other not-so-well implemented audio processing stages.
This post arose as a consequence of testing the USB-input of H-DAC. Its PCM2707C-circuit is capable of “only” 48 kHz / 16-bit audio so I was not expecting superb measurement results but was still amazed how bad they actually were. This is purely a technical inspection but the differences are significant so I can easily imagine some golden ears can spot the difference.
Take a look at the spectrum below showing 997 Hz 0 dBFS signal played with foobar2000. This signal is generated in foobar with 48 kHz sample rate and Windows sound device is set to 48 kHz / 16-bit output. You would imagine there was no resampling and output would be quite clean, if not bit-perfect. Well, that is far from clean. And the results are even worse if sample rate is set to 44.1 kHz. Obviously there is some resampling or whatever and the implementation is very poor, likely to achieve faster execution. THD+N level of the signal below is -78 dBV which is quite bad number for a modern digital audio device.
Before I pointed my finger at Windows, I spend hours trying to figure out what is wrong with the PCM2707C circuit in my H-DAC. I took my miniDSP miniStreamer (as it was the only USB to digital audio gadget I had besides my H-DAC) to my workplace and investigated the issue with APx585 audio analyser. I hooked the miniStreamer to the APx via S/PDIF and played sine tones with foobar and the results are seen below. These are 48 kHz / 24 bits signals measured in digital domain, USB to S/PDIF, so all we see is actually present in the signal, there is no analog conversion.
997 Hz -100 dBFS signal. This is a noise floor test. All good. We have tiny signal coming out from extremely low (24-bit) noise floor. Remember, this is all digital.
After raising the level to -60 dBFS (common signal level for dynamic range test), we see something odd forming although distortion level is still very low – way below analog noise floor.
0 dBFS and the spectrum is almost identical to the analog output seen in H-DAC via USB, thus the odd components are not generated during DA-conversion. Remember this is all digital – from PC to S/PDIF via USB interface. We should not see any distortion, only signal and noise.
At this point it is clear that something is happening in the digital domain and likely before the USB-I2S gadget, namely in Windows. To bypass Windows sound processing, some form of direct connection is required. One such connection is ASIO driver. Although ASIO is generally a feature of professional sound interfaces, ASIO4All is a driver that can be used with any sound device.
Next one is the same as above but with ASIO4All drivers instead of Windows sound driver. Now we have very clean output with only extremely tiny second and fourth harmonics.
Based on this small experiment I would say case closed. Windows has been found guilty.
Below is H-DAC analog output via USB input using ASIO4All drivers. When compared to the first figure, the difference is massive.
Comparing the first and the last FFT image tells a lot. I have tried these with one Windows 7 computer and one Windows 10 computer and with two different USB audio devices: miniStreamer and PCM2707C-based H-DAC. For these tests I used foobar2000 but also tried Windows Media Player and Spotify. Results vary depending on how the test tones are created, what is the sample rate of the file, the setting in Windows, etc. Spotify uses lossy audio codec causing some extra spectral deficiencies. However, the only result that looked good in FFT was achieved with ASIO drivers. Anyway, I still cannot say that what is seen here would always be the case. Maybe some players can perform better, I do not know as I am not expert in Windows audio. And not many are. Therefore, I dare to say that if you want to make sure you are getting the best possible audio, I suggest using ASIO drivers or similar methods to leave Windows mixer, interpolation, etc. out of the equation.
I have used ASIO4All and have to say it is not a perfect solution either. When software with ASIO is used, it reserves the sound device and no other software can use it in the meantime. The device should be released when the ASIO-software is closed or the sound device set to something else. However, it did not work so easily for me and ASIO seemed to reserve the device for good and I could not play anything even after closing the player or changing the sound device – whatever the reason. It may be good to have two sound devices in one PC, for example USB for “audiophile playback” with foobar or similar player, and Toslink for other playback.
References and further reading:
- Headphone addict: Bit perfect playback in foobar tutorial, this is how I set up my ASIO4All drivers in foobar
- Archimago’s Musings: MEASUREMENTS: Windows 10 “Audio Stack” / DirectSound Upsampling, after my own measurements I found this regarding Windows upsampling – and the results are not pleasing
If you have references to more detailed explanation of how Windows audio works, feel free to comment. Also, I would like to hear if some more “hifi” solutions (for example, DAC or streamer from known hifi manufacturer) have dedicated drivers that can bypass Windows audio processing. I would not be happy if I spent my money on a high-end USB audio device and all this would still be happening in Windows.