Sunday, 17 February 2019

MEASUREMENTS: A Look At HQPlayer 3.25; Filtering, Dithering and DSD Conversion.

Over the years, no doubt many computer audio users have heard or perhaps tried using HQPlayer Desktop from Signalyst for music playback. While there is a GUI for playback as well as a sophisticated network transport architecture, it's the upsampling and PCM-to-DSD features that are the program's claim to fame. There has been a good amount of talk about the sound quality of the upsampling algorithms and some swear by the sonic differences the program makes.

While admittedly I don't follow HQPlayer chatter closely, I don't recall reading about specific settings and what they do other than opinions about the sound quality. In this way, HQPlayer has been a bit of a mystery and I know some folks have had difficulty getting it running over the years. It has certainly been on my list of items to look into. In fact, back in early 2017 when I wrote about Roon 1.2, I mentioned installing HQPlayer but never got around to actually writing about it.

Well, after all these years, and now with the requisite pieces of hardware at my disposal for a more thorough evaluation (reasonably fast CPU/GPU system, ADC capable of >192kHz, DAC capable of DSD512), it's time to have a peek "under the hood" at what it does...

The tests today are done with a recent version of HQPlayer - 3.25.2 available as a demo (I see that there is now a 3.25.3 build available at the time of publication). The demo will run for 30 days, but 30 minutes at a time - enough time to try out, listen and run samples through the audio analyzer to get an idea of what it's doing. For the tests today here is the general hardware set-up:
Intel i7-3770K CPU + nVidia GTX 1080 GPU Windows 10 computer --> 16' generic USB --> Oppo UDP-205 as DAC --> generic 6' XLR --> RME ADI-2 Pro FS ADC --> generic USB --> Win 10 i5 measurement laptop
Notice the setup is the same as the recent Oppo UDP-205 DSD playback post - using my Intel i7-3770K computer at stock 3.5GHz base speed up to 3.9GHz Turbo, 16GB DDR3 RAM Windows 10 PC. Remember I used various off-line PCM-to-DSD conversion tools and realtime JRiver 24 in that previous post, so feel free to compare.

HQPlayer is processing-hungry and I included the nVidia GTX 1080 GPU above since this is significant as HQPlayer allows one to offload much of the DSD conversion to the GPU which I activated for these tests. Remember, as discussed, there's no need to worry about "noise" with GPU and CPU's many feet away from my DAC. To give you an idea of processing demands, when doing realtime PCM-to-DSD conversion, this is what the CPU/GPU utilization looks like:

This is the "Performance" tab in Windows 10 Task Manager when playing back 24/96 PCM as DSD512 using "poly-sinc" oversampling and the "AMSDM7 512" modulator. As you can see, about 32% of the CPU and 25% of the GPU were utilized. This is rather in contrast to the much less processor-hungry JRiver 24 which only used 15-25% of the CPU without GPU assistance!

Because HQPlayer has so many different settings, it makes it difficult and time-consuming to check out all the combinations possible (but I'll try to get a good taste of what it does nonetheless). The "Settings" tab looks like this:

HQPlayer settings. Doesn't look very nice with Windows scaling but text made easier to read.
"CUDA offloading" is active for the nVidia GPU. I've also activated "Multicore DSP" which is a necessity when offloading to the GPU (you can leave it as a grayed out "Auto" setting). Notice the "Vol Max" has been reduced to -3.0dB which I've read is recommended to prevent overloading although I didn't notice any problems even at 0dB when sending bit perfect through ASIO. In the lower left are the PCM settings including type of dithering.

And for DSD realtime playback, the key parameters are on the right lower part under "SDM Defaults" to select which "Oversampling" algorithm you want to use and below that the "Modulator" used to convert PCM to DSD/SDM. Of course, you can then specify the "Bit rate" which in this example is "44.1k x512" - also known as DSD512 or 1-bit 22.6MHz. In HQPlayer one has the choice of using either 44.1 or 48kHz "base" and the usual multiples like 64/128/256/512/1024 and a few other atypical choices (like 32kHz base frequency). Depending on your DAC, not all these options would be meaningful or applicable.

I. Digital Filter Options

The "Oversampling" setting allows you to try various upsampling filters. You have a ton of options both for PCM and DSD:

Rather overwhelming. Let's just jump in and look at the impulse responses for some of the options one could choose in that list above:

I think that's a decent survey of 8 of them. As you can see, these are variations of orthodox linear and minimum phase filtering (I use the word "orthodox" as a good thing here!). Some are longer/sharper filters than others. As usual, one could show the frequency domain performance to check for noise and ultrasonic distortions. Here is what the "poly-sinc", "poly-sinc-xtr-2s", "sinc-M" (one million taps), and "poly-sinc-mqa-mp" resamplers look like when upsampling from 44.1kHz with "Vol Max" at 0dB. I've presented the graphs in the Juergen Reis-inspired "digital filter composite" (DFC) I've been using here over the years (click on image to enlarge):

Those are very clean filters. Since I'm interested in resampler performance rather than the DSD modulator at this point, the above were performed in PCM upsampling a 44.1kHz signal to 192kHz for the most part. The only exception is the "poly-sinc-xtr-2s" setting where you can see that it was converted to DSD512; this is one of the resampler settings only available when doing DSD conversion. Notice that the noise floor in the audible spectrum is higher with DSD than PCM which is consistent with previous measurements of the Oppo among others and which we'll talk more about a little later. Of note, "sinc-M" which is a Chord-like "megatap" filter is a strong brick wall, and the "poly-sinc-mqa-mp" setting allows a slightly more gentle roll-off while maintaining very good ultrasonic suppression (used to filter out high frequency noise added by MQA encoding).

The fact that "Vol Max" was set to 0dB and I played the signals back at full volume suggests to me that HQPlayer does a great job of preventing intersample overloading without any extra volume attenuation.

For comparison with other software upsampling:

The top row consists of JRiver 24 graphs with and without using the SoX resampling option. Notice the presence of intersample overloading with the 0dBFS wideband noise. This is despite "Clip Protection" being on in DSP Studio. Not much difference in JRiver whether SoX used or not.

In the bottom row are my piCorePlayer "Goldilocks" and "Extremus" settings discussed previously, showing that we can "roll our own" resampling and achieve some great results with a Raspberry Pi 3 and free software. Remember that the piCorePlayer resampling suggestions were for intermediate phase settings with some pre-ring suppression. Like with minimum phase settings, this will not show up in the DFC FFT graphs but will be shown in the impulse response plots and phase response will be slightly altered.

II. PCM Dithering Options

If you have a 24-bit DAC, you don't have to worry about dithering; the lowest few bits will be under the analogue noise floor anyway. However, there are still 16-bit DACs out there like those NOS TDA154X devices where it would be wise sending a dithered 16-bit stream. Also, it might be good dithering down to 20 bits for devices like the Schiit Yggdrasil. Easily done in HQPlayer. Here's what it would look like converting everything to 16/88.2 PCM:

As you can see, we can choose which dithering algorithm to use. Here are the options:

So what do those do? Well, we could read about it in the HQPlayer manual (do a search for the manual - I see version 3.20 is online). Or we can just have a look with my Oppo's output :-).

Let's start off with the basic issue.

The FFT above shows us a -30dBFS 1kHz 24/44.1 sine wave as it's upsampled but bit-depth reduced to 16/88.2 using the "poly-sinc" filter. The lowest 8 bits of the 24-bit signal have been truncated down to 16-bits without dithering performed. I had set my ADC to 96kHz so we capture the full 44.1kHz bandwidth. In green, we see the effect of this 24-to-16-bit truncation. We see the presence of "quantization distortion" leading to a very uneven noise floor. This is obviously a "bad" thing although to be honest, with real music it might not be all that audible and it really depends on the quality of the recordings - many modern dynamically compressed albums are noisier than this so with a lot of modern pop/rock, it might not even matter!

Here's what happens when we apply a few of the "standard" types of dithering to the signal:

In green this time, we have the original 24-bit signal played back without any bit-depth reduction or dithering. As we already know, the Oppo UDP-205 is capable of hi-res playback >16-bit resolution hence the nice low noise floor with a few expected harmonic distortion peaks.

If we applied the "industry standard" TPDF (Triangular Probability Density Function) dither which is pretty well ubiquitous, the noise floor becomes the yellow tracing. Notice that it's smoothed and flattened out compared to the 16-bit undithered graph above. The RPDF (Rectangular Probability Density Function) dithering looks similar but the noise level is a bit higher than with the triangular function. And we also see the "Gauss1" setting which sits a little lower in noise level than TPDF.

As an aside, back in 2014 when Meridian/Bob Stuart released its paper at the AES trying to make a big deal of the audibility of "typical audio filters", they used the inferior RPDF dithering rather than even TPDF as a test condition. This was one of the criticisms of the research as can be seen in the comments.

Now let's move on to the noise shaped dithering choices:

Noise shaping will push around the noise, shifting the noise level from the lower audible spectrum up to the higher end where our ears have lower sensitivity. As you can see, the NS5 and NS9 settings are rather aggressive and with this example of upsampling to 88.2kHz, the noise level looks very low up to 3-5kHz, and after which it rises very rapidly to an even higher level than NS1 and NS4. This is why the HQPlayer manual recommends that NS5 is optimized to 8x (352.8kHz) and 16x rates (705.6kHz), while NS9 is good for 4x (176.4kHz) sample rates.

So, following the manual's recommendation, this is what happens when instead of 88.2kHz, I upsample to 16/352.8kHz (8x) using these dithering algorithms compared to TPDF (with my ADC running at 384kHz):

Nice. At 16/352.8kHz, the NS9 noise floor remains very low up to ~20kHz while NS5 maintains the low noise level up to a still respectable 15kHz and crosses the level of the TPDF dithering noise floor at around 20kHz.

Finally, for completeness, here's what the last "shaped" dither setting looks like compared to TPDF (back at "poly-sinc" 16/88.2 upsampling):

Yeah, overall lower noise level with the "shaped" setting but notice that the noise floor isn't as smooth as TPDF with occasional spurious noise seen.

III. DSD Modulator Options

Now that we have seen a bit of the different digital filters we can apply and dithering, let's consider the DSD conversion and the different sigma-delta modulator (SDM) settings that can be used. I suspect this is what audiophiles would be most curious about. Check out this page for background information about SDM and modulators. Let's cut to the chase, basically one has a choice of 5th and 7th order modulators in HQPlayer:

With 8 options to choose from, that's a lot of combinations when we consider the resampler settings and different samplerates we can use. Let's try to systematically look at the major "families" of modulators on offer. The procedure is similar to what I published previously but using realtime conversion with HQPlayer of course. I kept the resampling algorithm the same ("poly-sinc") for each of the following modulator tests.

A. DSD5 (and v2) Modulator:
Let's start with the first setting on the list, DSD5.

As I did previously, since much of the difference between modulators is in the noise level, let's start off with 24/384 tests which will allow us to capture the noise level out to 192kHz. I know of no loudspeakers with super-tweeters or headphones with frequency responses good to around 200kHz. Furthermore, I am not aware of any human ears (or even animal ears!) with sensitivity to frequencies of ~200kHz and trust that graphs going out into the MHz range which I have seen posted are a wee bit excessive :-).

Numerically and on the graphs, we really don't see much different than what was published before with the Oppo UDP-205 and DSD playback. Notice the effect of noise-shaping in DSD64 and DSD128 with noise floor rising up to around -75dBFS up at 80kHz for DSD64. Should not be a problem for decent amps and should not blow tweeters.

There is what looks like a closely related "DSD5v2" modulator option. The manual says nothing about the difference other than it's a "revised" version. To see if there was a difference, I ran the 24/384 test signal through at DSD128 and DSD512:

Looks essentially identical to me... Maybe the algorithm improved something in DSD64 or DSD512 playback I didn't measure. Maybe it improved processor efficiency. But I have a hard time believing that they would sound any different.

B. DSD7 Modulator:
Numeric summary:

Notice the effect of the higher order modulator on the noise level with DSD64 and DSD128. It's a more "aggressive" setting that keeps the noise floor relatively flat for DSD64 out to >25kHz (whereas we can see that with DSD5, the noise floor will rise quickly after 20kHz). One of the side effects is that the peak amplitude of the noise is now up at -60dB at ~85kHz. I trust this level of ultrasonic noise should not be a problem for decent amps still.

C. ASDM5 Modulator:

For "fun", I included the THD and IMD graphs used in calculation of the distortion values.
As the name implies, this is also a 5th order modulator and in fact looks very much like DSD5 above. Within the audible spectrum the noise level and distortion results very much mirror that setting. Not sure I can say much else given how undistinctive this looks!

D. ASDM7 Modulator:

The 7th order "adaptive" SDM. Again, notice the shape of the ultrasonic noise in the DSD64 and DSD128 playback compared to the DSD5 and DSD7 modulators. It looks like an intermediate between DSD5 and DSD7; not as aggressive as DSD7 and the ultrasonic noise with DSD64 peaks around -65dB at 75kHz.

E. High Sample Rate Modulator Settings ("DSD5v2 256+fs", "DSD7 256+fs" and "AMSDM7 512+fs"):
Then there are these specialized modulators designed for higher rate DSD. When you select these, only DSD256 and DSD512 sample rates are available...

Numerically I see nothing all that unusual or unique within the audible 20-20kHz spectrum. However, there were a couple of anomalies I highlighted in the noise graph.

First, the most obvious is the yellow "AMSDM7 512+fs" tracing at DSD256. While "AMSDM7 512+fs" is meant for DSD512 only, when you activate it in the settings, it does allow the modulator to be used with DSD256 playback. And if one were to do so, the resulting playback noise floor looks like that of a DSD128 modulator (even though the Oppo verifies that it's playing at the DSD256 sample rate). Looks like a "hole" in the settings that should be closed off or fixed.

The other anomaly is some strange noise artifacts when playing the "DSD5v2 256+fs" modulator at DSD256 on the Oppo. It's subtle on the graph above with all the tests overlaid, but here are 2 runs showing the same anomaly in that frequency range (I actually ran this 3 times showing the same thing, but forgot to save the results for one of the runs):

Strange considering that I did not have any issue like this elsewhere at DSD256 and even with DSD512 settings. Of course, given that this is all >35kHz and way below -100dBFS, it would not be audible.

F. Selected measurements at 24/96 for crosstalk and IMD+N graphs...
Finally, I just thought I'd throw together a number of 24/96 measurements using a few modulators and DSD sample rates so I can show the crosstalk and IMD+N sweeps properly. Alas, RightMark has bugs when plotting out these graphs at >96kHz samplerate.

Other than the ultrasonic noise which we can see in the DSD64 conversion and concomitant distortions this brings, there's nothing else unusual in the crosstalk or IMD+N sweeps. Remember that the hardware is exactly the same with each of the tests above. Variations are due to changes in the software settings.

IV. Subjective listening and conclusions...

Though I didn't test every single option, I think the results above provide an adequate overview of the digital filters, dithering settings, and nature of the DSD modulators HQPlayer provides. Hopefully a picture is "worth a thousand words" and the discussion above demystifies things a bit given the plethora of options. (There is no need to resort to mysticism of course whether it be hardware or software; it's all just computing tech!)

While running the tests, I took the opportunity to play some music to see if I can get a general "feel" of the different modulator settings particularly. I tried out some Aerosmith's Greatest Hits, 10cc's The Original Soundtrack (SHM-CD 24/88 rip), The 52nd Street Blues Project's live Blues & Grass, and the California Guitar Trio's The First Decade. For the most part I listened using my Sennheiser HD800 plugged into the Oppo. Honestly guys, at normal listening levels, the various settings sound excellent. As I've expressed before (as far back as 2013), I sometimes find that DSD64 changes the sound compared to PCM and can make the sound a little "smoother" and even "spatially" more pleasant as in a wider and deeper subjective soundstage.

The digital filter variants sound at best subtle to me and HQPlayer offers a good selection of high quality options as can be seen in the DFC graphs above. Dithering as mentioned would be important for 16-bit DACs so they're unlikely to be used with a modern hi-res device like the Oppo. As for the different modulator variants, I really have no preference here despite reading about folks swearing by this setting or that... There are clearly measurable objective differences of course, and as usual, conversion of the 24-bit PCM signal to DSD results in added noise at varying levels which were not intrusive in my listening. Remember, the addition of noise to the signal when we use DSD is inevitable and chasing after a "better" sound is essentially about listening for the "euphonic distortion" of the conversion process. That preference would be idiosyncratic to specific listeners and perhaps DACs. There is no "new information" being added that was not there already in the PCM data.

My testing here is with the Oppo UDP-205 and the ESS ES9038Pro DAC chip inside. Not a bad choice I think because arguably this is the best performing PCM DAC currently, so it's nice to know how it handles DSD. It's possible that other DAC chips will show significantly different results than the ES9038Pro. As usual, while I can measure and show differences, this doesn't mean the differences are necessarily audible.

By the way, HQPlayer can handle multichannel and can perform convolution DSP; neither of which were used here.

So... The bottom line...

1. HQPlayer provides a nice collection of resampling digital filters to choose from. They work without overloading and suppress ultrasonic artifacts very well. It looks like HQPlayer does this by providing a bit of attenuation for the headroom, this is likely why if we compare the computed RightMark results, you'll tend to see that the noise level appears higher and dynamic range lower with HQPlayer than JRiver 24 PCM-to-DSD measurements by about 3dB.

These filters would be a great complement if you're running NOS DACs that can accept high samperate material, and the dithering algorithms provide many options for those who are still using 16-bit DACs. However, if your DAC already provides good filtering and you have no special needs around dithering, it's unlikely you will hear any additional benefit unless of course you prefer to upsample PCM to DSD with the modulators provided.

2. HQPlayer needs quite a bit of horsepower if you're planning to do realtime PCM-to-DSD/SDM conversion; especially if you intend to aim for DSD256+. Your CPU also needs to have SSE4.2 instructions for the 64-bit version (should be fine with any reasonably fast CPU in the last decade). As I did in this post, you can offload some of the calculations to a nVidia GPU with CUDA. The caveat with this is that powerful computers and graphics cards are not fanless currently (and I don't like the sound of computer fans in my sound room). One should then put the server in another room and stream through a high bandwidth gigabit ethernet system to a NAA (Network Audio Adapter) streamer.

3. From a sound quality perspective, I don't think you could go wrong with any of the "sinc" resamplers and DSD modulators I tested out. While I remain agnostic around which DSD/sigma-delta modulator is "best", I accept that people can have subjective opinions on this since there are real differences in distortion and noise levels between the different settings. Perhaps certain settings could lead to more "euphonic" output depending on one's gear. But I believe sonic differences would be at best subtle though based on my own listening and what the results tell me.

4. Notice again, like the last time I measured the Oppo UDP-205 DSD playback, noise floor level increases particularly with the jump from DSD128 to DSD256 and goes back down a bit with DSD512. I suspect there is a good explanation for this. I have not tried measuring my other DSD256+ capable gear at this point to compare how non-ESS DACs perform.

5. The GUI works but is rather spartan compared to many player software out there. This is why historically HQPlayer is used in conjunction with software like Roon for the user interface and library functions. Consider this into the complete system price when incorporating HQPlayer.

Another issue I had was that the program seems to buffer whole tracks or at least large proportions of tracks then begin the conversion before playback. This is fine for PCM upsampling but when doing DSD256 or DSD512 conversion, it can take many seconds to start playback. This wears on one's patience especially when it can take >10 seconds to start playback even with an overclocked >4GHz quad-core i7 processor with GPU assist. I know there are audiophiles who think buffering to RAM makes a big difference... But surely not when latency can be this severe, right?

6. Have fun with the demo and see if it meets your needs. It is a nice way to experiment on upsampling, trying different filter settings and listen to realtime PCM-to-DSD conversion with a 30-day trial. It's good to have the experience as an audiophile.


Whew! I knew going into HQplayer would take a bit of time and effort to characterize a number of the options it provides. (Which is probably why I procrastinated over the years in writing about this program.)

I know there has been discussion about the "Do digital audio players sound different? (Playing 16/44.1 music.)" blind test and whether capturing the 16/44.1 output as 24/96 conveys the "sound" of the devices being tested including the effects of the filters.

IMO, 24/96 is certainly adequate for the purpose and I'll talk about why this is next time... In the meantime, please keep sending in your results. Big thanks to those who have already done so!

Back in December, I mentioned that I finally updated my main computer from 16GB to 32GB RAM. That is a little bit of a milestone considering that RAM requirements really haven't increased much for many years now for home use. This past week I finally hit another computer milestone and got my first 1TB SSD:

Nothing special, just a WD 1TB Blue SSD; I was also tempted by the Samsung 860 EVO 1TB for a few more bucks. What is remarkable of course is how fast prices are dropping - down to US$130 these days for that terabyte. I remember clearly a decade ago in 2008 buying my first 1TB hard drive (a Hitachi Deskstar). In just a handful of years from now, I believe we'll be able to all own multi-terabytes of solid-state storage for a few hundred dollars for large lossless and high-res music collections. Exciting.

By the way, through my 10GbE home network, I'm seeing throughput of >300MB/s (~3Gbps) Windows sustained file copy from SSD to SSD between my upstairs Workstation to the basement Server computer over Samba. Not bad. Looking forward to the day when every storage device can transfer data at such a speed over the home network on low-power storage devices, silently, without hard drives going to sleep or any spin-up time. That's what technological progress looks like.

Time to take a break and enjoy some music. I'm liking the ethnic/jazz blend of Que Vola? tonight as I complete this article. Until next time, stay rational dear audiophiles...


  1. Wow, information overload! Awesome for writing this up

    1. No worries, take your time to digest!

      I started writing this piece by piece over the last 3 weeks gathering the data... Clearly there's lots of stuff to take in and be familiar with in this program.

  2. Why didn't you do a digital capture of the output? That would have avoided interference from the DAC and ADC.

    1. Hi Mans,
      Yeah, for a few reasons. I did look at the simple way of capturing the digital data via Audacity ASIO loopback but it looks like it's not letting me by insisting on exclusive control. Admittedly, I didn't spend much time on this so maybe could work out. Not sure if there's a reasonably straight forward alternate way to do it? I'm sure the 64/80-bit calculations are done with excellent precision in any event.

      I have a vested interest to see how HQPlayer functions in "real life" with my computer and Oppo of course. Plus this allowed me to actually listen to the output along with run the measurements to compare with JRiver, etc... Nice to also use the actual recorded analogue output to demonstrate the effect of the 16-bit dithering for readers who may not have thought about these things.

    2. A virtual sound device driver that dumps the data to disk ought to do the trick. For the PCM tests, an S/PDIF capture would also work.

      The analogue captures are of course interesting in their own right, demonstrating how the playback device responds to different types of input.

      What would be interesting to find out here is where that "noise anomaly" comes from, the modulator itself or the DAC. Also, some of the differences between settings are, at least partially, masked by the modulator noise of your ADC.

    3. Hi Mans,
      Looked around a bit and found the VB-Audio ASIO Bridge / Hi-Fi Cable virtual device. Works and now I can capture the 24/384 output to have a peek at things like the "poly-sinc-xtr" impulse response and grab digital versions of the filter graphs...

      What I can do I suppose is to try capturing that modulator noise floor test with another DAC and see if it's there. Will at least let me know if it could just be the Oppo.

      When there's time :-).

    4. If you don't need a long test file, you can also use the HQPlayer 4 Pro trial for digital domain conversions back and forth. With trial, PCM output is also limited to 24-bit (instead of 32-bit on full). You can also ask me if you want to get some files run through the full one.

      Regarding dither, I alway consider it good to do instead of truncation, even if output is 32-bit, for the sake of correctness. It doesn't "cost extra".

      ASDM5 and ASDM7 modulators are the newest and what I've been recommending. In the most recent versions, DSD5 has got some updates too though.

      I'm not sure why in this test case noise floor looks like that with DSD inputs. Looks like equiripple digital decimation filter's aliasing of the noise or something. I don't have any 9038Pro's here. Only dual 9038K2M that is in the Pro-Ject Pre Box S2 Digital and I get same noise floor there for both PCM and DSD:

      Digital domain noise floor of DSD is always shaped, so a flat line means it is limited somewhere (could be analog too). Would need some investigation to figure out where in the DAC+ADC combination here.

    5. One additional thought: when comparing PCM and DSD in digital domain, you need to take into consideration that PCM inputs to a DAC is then typically subject to a digital filter and SDM modulator before conversion (unless it is R2R), so the final result is always defined by the particular DAC in question.

      By the way, ADI-2 works very nice in DSD256 too, when set to "DSD Direct" mode, sending the stream to it's conversion stage without extra processing. ESS Sabre doesn't offer such possibility though.

    6. Thanks for the input Miska!

      I was thinking of having a look at that RME ADI-2 Pro DSD output as a taste of the AKM. Alas, I won't be able to compare the RME playback with its own ADC though...

  3. That is great review. Personally I also do not use HQPlayer but tried it once. You did a great job with identifying what those multiple options and filters mean. Personally I do not believe much in DSD upsampling but if somebody has great DSD capable DAC why not.

    Congratulations to PC upgrade. I still use HDDs for big capacities in NAS etc., they are pretty fast sequentially today, in workstation and notebook I have smaller SSDs.

    As for dithering, for 16 bit it is necessary, but recently I tried to use last bit "randomization" TPDF dither (+-0.5 bit TDPF since the resampler I use can set the amplitude of TDPF dither, but it cannot do RPDF dither with would be probably enough) also in 24 bit upsampling and I am subjectively very satisfied with the upsampling results. Previously I tried TPDF (+-1 bit) dither and no dither with 24 bit upsampling, now I use as I wrote +-0.5 bit.

    Even if 24 bit is way under the noise floor, which I fully admit, the quantization error that can occur with upsampling can theoretically be fully "masked" within the last bit randomization, while possible noise fluctuation remain around -140 dB.

    Just an experience, maybe in 2020 I'll come up with some new combination :-) but now this sounds well to my ears.

    1. A correction of typographic error - TPDF is the correct abbreviation. RPDF Which would probably be enough.

      I know that TPDF in necessary for preventing noise volume fluctuations which may be perceived at 16 bit, that is why RPDF can be seen as inferior for 16 bit. But for 24 bit I tried a variant that just randomizes the last bit and compensates quantization error that can occur with upsampling. That is either 0.5 bit TPDF, or RPDF.

  4. Regarding the SSDs, that was actually the last step for me to get a "virtually" silent, but powerful PC.
    The chassis, PSU, radiator block and GPU fans stand still unless the temperature goes above 40°C, so the biggest noise came form the spinning HDD. Finally, after replacing it, now the PC is silent unless doing an intensive workload.

    The only noise comes form the CPU waterblock pump and to hear it you have to put your ear on the case fan mesh in a silent room.

    1. Yes SSDs help a lot in silencing workstations. HDDs still offer much better capacity and speed is also not bad in these days, but for OS as system drive, SSD is clear choice.

  5. I read Miska's comment about your test methodology. Looking forward to see your explanation about DSD noise floor.

    1. I suspect the seemingly increased noise floor with DSD could be aliasing from the ADC's digital decimation filter... Unless the Oppo is doing extra PCM conversion somewhere which is also possible.

  6. Thanks, it is was I expected.
    Let me only add that Muso is a free and reasonable UI to HQPlayer, so no need to have Roon.
    But ... given your findings, I shall continue to use JRiver Media Center 24.

    1. Thanks for the addition Teodoro,
      Yes, Muso would be great as well:

      I mentioned the software awhile back when I talked about Roon:

      I don't think it's free, but certainly much more affordable :-).

    2. For Android devices there's also for example HQPDcontrol:

  7. Dear Archimago,
    Longtime reader but infrequent commenter. Thank you for this remarkable article! Between this blog, ASR Forum, and Mark Waldrep's blog and book, the information these last few years has really changed how I view the audio hobby and what makes a difference. No small feat considering that I have been involved in this hobby for more than 30 years and at one time deeply immersed in the "subjective" culture and products.

    I just wish audiophile magazines had the courage and know-how to publish half of what you've eloquently expressed on this blog. I and some of my audio buddies have lost respect for those mainstream publications over the years.

    Keep up the amazing work! Cheers,
    Jonathan S
    Las Vegas

    1. Greetings Jonathan,
      Just trying to do my part in bringing balance to the Audiophile Force :-).

      I've been there myself immersed in the "subjective culture". Thankfully that was about 2 decades back, and at a time when I didn't have much in the bank account!

      Yes, I too wish for the audiophile magazines to do more independent investigations into audiophile claims. Unfortunately, I think most of the writers in the press have signed their souls over to the Industry at the expense of educating consumers a long time ago. While I don't like this state of affairs, I can also understand why they did this...

    2. +1 with Jonathan. I could have written almost the exact same thing word-for-word!

      The difference in my case was that the FUD (fear uncertainty doubt) from the high-end caused me to turn-off and tune-out completely, and not even bother to get involved. I used the same mid-fi receiver-amp and speakers for years. From time to time I entertained an serious upgrade investment, but whenever I looked at options the prices struck me as sky-high and the sound-quality improvement unquantifiable, yet asserted to in the most subjective, purple-prose one would find outside of a romance novel. As an engineer, I couldn't bring myself to trust the sales and marketing wank. I took a pass.

      I randomly happened upon Archimago's blog, saw real measurements intermixed with level-headed opinion and eventually decided to undertake a (relatively modest) upgrade investment that I've been thoroughly happy with.

  8. It would be nice to see comparison plots of digital filters against the ones in ES9038Pro. Now I cannot find such and that is one of the points of HQPlayer...

    1. I did do some of the "digital filter composite" graphs with the Oppo UDP-205 a little while back:

      Pretty good for built-in filter settings compared to other implementations of the ES9038Pro I've seen. No question your software provides more options and overall cleaner filtering.

    2. By the way Miska,
      What's the deal with the "poly-sinc-xtr" filter compared to the standard "poly-sinc"?

      The "xtr" impulse response looks to be at least 6x the duration of the non-xtra. Definitely needs quite a bit of extra horsepower to combine this with DSD512!

    3. "xtr" and "ext2" are kind of things pushed further. Most poly-sinc filters are designed to give clean output up to 32-bit PCM which is the maximum PCM output resolution at the moment (not technical limit though). Both "xtr" and "ext" take this further by pushing this to about equivalent of 40-bit PCM resolution, with >240 dB stop-band attenuation. They are also steeper, so the net effect is also much more taps and heavier processing. For DSD outputs, "ext2" is like "xtr-2s", but with twice higher intermediate rate. The sinc-M is variant of "ext2" with fixed mega-tap length, while normally the number of taps depend on particular conversion rate in question.

    4. Nice Miska, thanks for the clarification. Holy smokes - >240dB attenuation.

      Now that's technical perfectionism :-).

  9. I would love to see a similar measurement of the various DSD resampling options available in Roon. My server is not powerful enough reliably to resample to DSD128 via HQPlayer, but DSD512 works all day long in Roon.

    Would like to understand technically how good (or not) the Roon functionality is.

    1. Sure man...
      I'm a Roon user these days so will give this a go in the near future.

  10. Thanks very much for this very informative blog.
    I must admit however, there is still something that escapes me completely.
    Archimago, you stated:
    From a sound quality perspective, I don't think you could go wrong with any of the "sinc" resamplers and DSD modulators I tested out. While I remain agnostic around which DSD/sigma-delta modulator is "best", I accept that people can have subjective opinions on this since there are real differences in distortion and noise levels between the different settings. Perhaps certain settings could lead to more "euphonic" output depending on one's gear. But I believe sonic differences would be at best subtle though based on my own listening and what the results tell me.

    On my setup with music I know well, it is rather easy for me to identify between between the following 3 filters : poly-sinc-xtr-lp (preferred), poly-sinc-ext2, closed-form (all the rest being equal : upsampling to DSD256 with ADSM7 modulator)
    As I can bearily hear up to 10kHz, there must be other 'things' going on than what is measured over here ( and in general).
    And I would love to understand what those things are !?

    1. Good question dirk,
      I dunno man. Wondering can you hear the difference between these filters when not converted to DSD256? Say upsampling to PCM 384kHz or similar?

      The reason I ask is that if you can hear the difference, then we can at least easily get a digital capture of the 24/384 PCM using the different filter settings and compare audibility ensuring the same output level.

  11. Hi @Archimago

    Are you able to repeat the same Juergen Reis-inspired "digital filter composite" (DFC) curves, for the same 4 filters, but with PCM44.1 to PCM705kHz up-sampling for all 4 filters?

    And PCM44.1 to DSD512 up-sampling for all these same 4 filters?

    These results may be more useful to see further effects of HQP up-sampling.

    Many thanks.

    1. I'll see what I can do Unknown,
      A reason I haven't used the 705.6/768kHz samplerates have been because most of the tools I have can't handle such high rates. There is a way however...

  12. Hi! Thank you for such a good article.

    Could you, please, repeat the same measurements for foobar2000 DSD Transcoder plugin (SDM type A B C D settings)? Or maybe you already did, but I googled a lot and couldn't find any info.

    Thanks in advance.

    1. P.S. I primarily mean PCM to DSD conversion at higher rates (DSD256 or 512).


  13. Very nice blog...
    Latest HQPlayer has 2 new modulators: ASDM7EC and ASDM5EC
    Many people thinks that the SQ are much better..
    Just wonder if you could do an update..

  14. Hello. Since this article, HQplayer has released quite a few filters (and a few noise shapers and dither algorithms too). Would it be possible for you to go over some of those? I'm particularly interested in comparing Sinc-M, Sinc-L, Closed-Form-M, and Closed-Form-16M

  15. This comment has been removed by the author.