HQ Player Explanation of by Jussi Laako (Author of HQPlayer)


HQ Player (HQP) is generally considered the gold standard of music up sampling programs. It can be a little intimidating to set up and get to do what you want. There are several good sources on the web that can assist you and a lot of information on forums as well, but that takes hours of reading and wading thru endless chatter and side conversations. I have pulled a few things from the web and forums that may give you a better understanding of how this player works.

HQP can be used as a standalone player to play back and up sample your music. It can be easily integrated into Roon to up sample your music collection and if you have a tidal subscription up sample anything you play back from it. HQP can also be used as a Network Audio Adaptor (NAA) and I'll admit I know very little about the NAA mode as I wanted to keep it simple (KISS) and only needed to send music to my 2 channel audio system so I use it integrated with Roon and directly connected to my dac via USB. Here is a simplified explanation of each from Geoffery Armstrong of Sound Galleries: “ Finally, I'll try to clear up any mis-conceptions about using a HQPlayer as either a stand alone software player or using it via a Network Audio Adapter. I now have some experience of using an NAA with HQPlayer. I'll briefly mention those experiences here:

When HQPlayer is used as a "standalone" software player your DAC is connected directly to your computer, commonly by USB cable. You then select your DAC from within HQPlayer as described in the above guide.

In HQPlayer's settings/prefs you select your DAC under "Device" and your DAC's name then appears there. (Except in the new Mac version as noted above).

If you have an NAA that is supported by HQPlayer, such as SOtM SMS-100 reviewed right here Computer Audiophile - SOtM sMS-100 Mini Server Review on the front of CA, the NAA is connected to the same LAN as your computer by ethernet cable and the NAA is then connected via USB cable to your DAC.

In this case under HQPlayer's settings/prefs your DAC's name will be preceded by "default: "

This will only work with a DAC that can be recognized automatically by the NAA because it is a USB class 1 or 2 DAC which doesn't need proprietary drivers to work with Linux. This currently excludes the use of the exasound DACs

The main advantage of using an NAA is immunity from RFI and other impurities, which could be transmitted across your USB cable when the DAC is directly connected to your computer. This may particularly cause problems when the CPU is pushed hard, such as when using the more demanding filters in HQPlayer. Using an NAA you might be able to use the more demanding filters without damaging sound quality” .

Below are some comments Jussi (the developer of HQP) made about his product in various forums (mostly Computer Audiophile). I just copied them into this article. It helps if you have screen shots of his settings menu or are sitting in front of a computer with HQP loaded. Horizontal lines indicate a new thread.

First a bit explanation on time and frequency domain, please excuse me for some technical jargon. Frequency is signal change as function of time. Thus a signal has presentation in both frequency and time domains. "Linear phase filter" is a filter where all frequencies pass with same time delay. "Minimum phase filter" is a filter where all frequencies pass through as fast as possible, higher frequencies faster than lower ones. Longer/steeper filters change faster from passing frequencies to not passing frequencies as function of frequency. Shorter/gentler filters transition more slowly or "gently" from pass to stop as function of frequency. More accurately the filter wants to detect frequencies and transition pass/stop faster, longer time the filter has to "look" at the signal. This has side effect called "ringing" or rather "time blur". On the other hand, extremely short filter like a one that looks only at single moment cannot filter anything at all, because it sees only single point of time at once without any history or future (so it cannot detect any frequencies as those are a change over time). Linear phase filter takes equal amount of history and future into account during calculation. The problem in this is that it is kind of unnatural for something that is going to happen in future to affect already the present. Minimum phase filter on the other hand considers only from present to past, so it doesn't reflect things that are coming in future. This "ringing" is already in most RedBook recordings, since in most cases the ADC has gone through down-conversion and possibly another round at mastering from 24/96 or similar to RedBook. "Apodizing" filter is one that replaces or modifies this original ringing with it's own - that can be less than the original. All the filters explained below are more or less "apodizing" unless otherwise noted.

Why is "filtering" needed? Because otherwise upsampling/oversampling produces alias (distortion) components in frequencies above the original one. In down-conversion case it is even worse, because those components are produces below the original ones. D-A conversion also produces these components above half of the sampling rate frequency, and those are then removed by the analog reconstruction filters. Higher the sampling rate seen by the D-A conversion stage, simpler the following analog filter can be. Digital filters can easily outperform analog ones. Removing those spurious frequencies by filtering is called signal "reconstruction".

SET Up
So if I go from left to right on the main window...

First is the filter selection, most of these can perform either up or down conversion, depending on what is needed.
- So "IIR" the first one is how a steep analog filter would sound like, I don't recommend using it for anything else than upsampling and only at 2x or 3x ratios, although it can do higher ratios or down-conversion too. I think this is mostly useful to hear how "extreme analog" would sound like. Some DAC chips have slightly similar output stages.
- Then there are three types of traditional "FIR", these are similar in construction to those ones used inside most DACs, the "asym" one being somewhere between linear and minimum phases, only taking "near future" into account. So a traditional design made as good as possible.
- "FFT" is a special kind in that it performs it's work in frequency domain and is also fairly steep. This is technically closer to how audio codecs work than how upsampling is traditionally done. I don't know if any hardware oversampling implementation would use similar technique.
- "poly-sinc-*" these are the ones I use most and recommend the most, these can perform conversion from most input rates to outputs rates in a single pass and with a very low CPU load. Single pass approach maximizes the filter precision. (those who will eventually ask, these are synchronous converters)
- "sinc" is a true asynchronous converter and can perform conversion practically from any rate to any other rate. Although it is quite high quality, it has fairly high CPU load too and not recommended unless the "poly-sinc-*" ones cannot do the needed conversion.
- "polynomial*" is not a filter as such, but just polynomial interpolation approach to upsampling. These look only at small number of samples to calculate a new one and thus don't "ring", but on the other hand the filtering performance is poor too. These kind of filters typically also cause premature treble roll-off (roughly 3 dB or so at 20 kHz for RedBook material, starting from ~10 kHz). These are the controversial upsampling "filters" some people like a lot while others don't like at all. (non-apodizing)
- "minringFIR" this is a single-pass filter that is very similar to the polynomial interpolators above in that it is really short and looks only at very brief period of time, while still performing better at filtering and not having such treble roll-off issues. Not recommended for other than 2x/4x/8x/etc ratios. (non-apodizing)

Update on some recent changes regarding (Version) 2.9.1 and later:

There are now "poly-*-hb" filters for both up/down-sampling and DSD->PCM conversion. These are steep so called "half band" linear phase non-apodizing filters. These are in many upsampling cases completely reversible interpolation. Not really recommended for general purpose use, but interesting to play with.

The "poly-*" DSD->PCM converters (in DSDIFF/DSF Settings) have been heavily optimized and are now much faster while also having even more accuracy, so these are now actually one of the lowest CPU load while having best quality, most recommended choice now for the conversion.

Then to the next item, dither and noise-shaping. This is needed whenever any processing is performed. Reason is that calculations can lead to results that have more precision than can be expressed in the resolution supported by the DAC. Just truncating or rounding the result to fit the DACs precision causes distortion that is directly related to the signal. Dither hides this rounding error into very low-level non-audible constant noise (a bit like thermal noise) - then it's no more related to the signal. Noise-shaping takes this further by moving this noise to less- or non-audible frequencies. Especially multi-bit converters but to some extent others too also benefit from noise-shaped upsampling in improved linearity.

I don't recommend any noise-shaper for 44.1/48 kHz output rates, because there is no proper frequency space available where to park the noise.

There are number of noise shapers:
- "NS1" is a first-order shaper, just tilting the noise floor so that it increases towards higher frequencies and it has a bit of extra "against-the-wall" high frequency noise too. Not really recommended for anything, but included for completeness sake.
- "NS4" is fourth order shaper that has a gentle step to move a bit of lower frequency noise to ultrasonic frequencies. The only shaper that I would say is useful at 88.2/96 kHz rates.
- "NS5" is fifth order shaper that has been designed to be used at 352.8/384 kHz output rates or above. This one moves aggressively roughly 40 dB worth of noise from low frequencies to ultrasonic range.
- "NS9" is ninth order shaper variant for use with 176.4/192 kHz, the step from low to higher noise is more clear, but otherwise similar to the "NS5"
- "RPDF" this is just plain white noise, not really recommended, but also included for completeness sake.
- "TPDF" is industry standard flat triangular dither, good for any case, especially for 44.1/48 playback cases. Doesn't generate practically any CPU load either.
- "Gauss1" is Gaussian noise dither, should be more "perfect" than TPDF, but also loads the CPU more. Works for all cases too.

Third selection is set of available output sampling rates, computed based on what the hardware and selected filter are capable of, in combination.

Generally, I recommend choosing between "poly-sinc-*" filters and using highest possible sampling rate. Dither or noise-shaper chosen based on above description, "NS9" for 192 kHz output, "NS5" for 384 kHz output and "TPDF" or "Gauss1" for any lower rates...

To be continued, I'll make two other posts. One for the DSD->PCM conversion and maybe other one for PCM->SDM (DSD) conversion.

Hope this helps...


In most cases, poly-sinc family is a good starting point. Apart from poly-sinc-hb, all the poly-sinc filters are apodizing and can thus deal with the ringing introduced by typical decimation filters during the production phase of the recording, giving more consistent recording-to-recording performance.
Minimum-phase variants are usually good for multi-tracked studio pop/rock recordings that have lot of fast transients like drums/percussions. While linear-phase variants are usually good for classical music or other content recorded in natural acoustics with minimal micing techniques.
You can also try closed-form filter which is quite special, and non-apodizing by definition. In some ways similar to poly-sinc-hb. As a result it may sound good on good recordings while not improving not-so-good ones so much.

Closed-form, by definition is not apodizing, so it may sound good with good source material where the digital filters used for recording and/or mastering stage are sonically good. But it cannot fix the defects of bad digital filters from the earlier stages unlike apodizing filters do.

So apodizing filters like poly-sinc (except poly-sinc-hb which is non-apodizing) usually give more consistent performance regardless of source material. Because you hear only differences in the actual source signal when material changes, but not the differences between digital filters used in the source material production phase (recording/mastering).

I would put things roughly this way for filters:
- Minimum-phase filters for studio productions of non-classical music
- Linear-phase filters for classical and other music recorded in real acoustics with minimal miking.

OK, then a bit about configuration of DSDIFF/DSF (DSD) content conversion to PCM... 2.8 MHz DSD64 content is converted to 176.4 kHz PCM and 5.6 MHz DSD128 content to 352.8 kHz PCM. These intermediate formats can be further converted to any other supported output rate using methods outlines in my earlier post.

In DSDIFF/DSF Settings -dialog there are two selections, conversion type and noise filter.

Conversion type, this defines how the delta-sigma modulation is converted to lower rate PCM format:
- "normal" is a traditional multi-stage way to do the conversion, this is very similar to how modern delta-sigma ADC chips do the conversion to PCM output
- "single-steep" is a single-pass brickwall-conversion, this has technically very accurate results.
- "single-short" is a single-pass more gentler conversion, introduces much less ringing than "steep". I'm using mostly this one when I need conversion.
- "poly-*" these are similar to the "poly-sinc-*" ones mentioned in my earlier post, performed in single pass, but requiring really powerful CPU...

Noise filter, this is used to reduce the ultrasonic high frequency noise of delta-sigma modulation:
- "standard" this is the SACD/Scarletbook standard one. Recommended for most cases.
- "low" this has lower transition corner than the standard one, useful for equipment that is sensitive to the ultrasonic noise of delta-sigma modulation. Good alternative for the standard one.
- "slow-*" linear- and minimum- phase gentle noise filters. A bit more aggressive noise filter than above.
- "fast-*" linear- and minimum- phase steep noise filters. The most aggressive noise filter of these.

Then there's the "6 dB gain" setting, since DSD is specified to have max -6 dB of the theoretical maximum level in use, the content may sound quiet compared to PCM after the PCM conversion. This setting enables 6 dB gain to match maximum specified DSD level to maximum possible PCM level. However, this should be used only for content that doesn't exceed the specified maximum. There seems to be also content out there that exceeds this maximum level and would thus result in overload. Whether this leads to limiting actually depends on the HQPlayer's volume setting...

In the same dialog there are two settings related to native DSD playback.
- When "DirectSDM" is enabled, the internal delta-sigma processing engine for DSD content is bypassed. The engine is now capable of all the same functionality as is offered for PCM, including volume control, delay and convolution engine for digital room correction. But since DSD is about "Direct Stream Digital" (or probably originally Direct Sigma Delta before marketing department jumped on technical jargon), a direct path setting is provided.

- "Direct playback type" is selection to output different kinds of DSD-over-PCM packing methods supported by some playback gear in order to play native DSD. These days, the equipment is almost always "DoP marker" compatible, unless there is a native ASIO DSD driver (in which case "Native / none" is enough).

Then to the last and short post so far..

Regarding SDM (1-bit delta-sigma, or DSD in other words) output modes. So the player can perform all kinds of processing for PCM -> PCM, DSD -> PCM, PCM -> DSD and obviously DSD -> DSD.

When SDM output mode is selected in the main window, filter selection changes to control "oversampling" modes, matching descriptions of the earlier post. And dither selection switches to control the choice of actual delta-sigma modulator. Output sampling rate selector just shows SDM rates in MHz range, instead of PCM rates in kHz range.

There is also possibility to perform conversions like 192 kHz PCM to 2.8 MHz DSD. Or 2.8 MHz DSD to 5.6 MHz DSD (or vice versa). When processing is performed from DSD input to DSD output, all processing is performed at native rate, not at any low-speed PCM. The DSD -> PCM conversion now applies only when PCM output mode is selected and file being played back is DSD...

Important note! When performing any processing to DSD output, do not try to push the volume to max, use something reasonable like -3 dB setting max . DSD works better when it's not pushed to the max.

Comment from Jussi regarding NAA

Q- One thing that I'm curious about is the potential for high CPU and ram activity when using a tool such as HQPlayer to process the audio stream introducing electrical noise into the stream. How does it reconcile with the views of those (with and without commercial interests) that insist the computer should in effect run in limp mode with all non-essentials turned off, real time kernels etc?
A- That effect largely depends on the DAC how well it is isolated and how the computer itself is implemented. One can also use various USB isolator products (iFi, AudioQuest, UpTone). But there is a solution to address precisely that and it is called Network Audio Adapter or NAA for short. That is a small software module with asynchronous FIFO buffer between HQPlayer and DAC. Copper ethernet is transformer-isolated by the specification and for maximum isolation one can utilize optical ethernet. It also allows running HQPlayer server in a different room than where NAA + DAC is used. (combine that with Roon remote control and you have a great distributed system!)
NAA can run on a low-power PC (Atom or similar CPU) with Linux (preferable) or Windows, or some Mac computer. But going further it can run on various small very low-power ARM devices, like CuBox-i, BeagleBone Black or Raspberry Pi (or many many other similar ones). Usually these run very stripped down Linux with only the NAA service running and can be powered from high quality linear power supply.

I don't use the NAA setup since my Internet router is located 2 floors up from my listening room and the house is not wired for Ethernet nor is it easy to do so. I instead use the AQ jitterbug and Upton regen as isolators between my PC and Dac, probably not as good as a true NAA but it still sounds very good, to me.

The above comments are, as stated, pulled from various forums and are random in nature but I have found them very useful in setting up HQP for DSD and even PCM playback. In fact when I tried up sampling my music to DSD256 I could not get it to play until I read a comment above about a native ASIO driver and a setting that allows playback. When I was up sampling to DSD128 under SDM pack I selected SDM (using the 3.2 driver) after installing and using the DIYinHK 3.34 driver (native ASIO) I had to select none under the SDM packet to get DSD256 playback.

Also Jussi has a pretty good table with explanations of the various filters and dithers/noise shapers on pages 9-11 of his HQPlayer manual. I recommend printing them and keeping them near your PC for referral when you are changing to a different filter or dither setting.