Golden's HQPlayer Oversampling Guide

MY HQPLAYER SETTINGS CAN BE FOUND HERE: HQPlayer Settings - Google Drive
If you’d just like to import my settings for a particular DAC, you can grab them in a .XML file at the link above. Simply open HQPlayer, then click file->import settings.
If you’d like to know a bit more then keep reading!

I recently posted the review for the Holo Cyan 2, which you can watch here:

The Cyan 2 is a NOS or non-oversampling only DAC, and as such if you do want to do oversampling, you have to do it with an external tool. Though HQPlayer can also be used to provide extremely high performance oversampling for any other DAC, and particularly if you’re a Roon user it’s something I’d recommend running.

 

Some Background:

For those wondering what high performance oversampling even does, the short answer is that it allows you to better adhere to Nyquist Theorem, attaining a more accurate reconstruction of the digital data. This is because Nyquist Theorem states that you can perfectly reconstruct the original signal with a bandwidth of up to half the original sampling rate (so 22.05khz for 44.1khz music), IF you perfectly band-limit.

This is the major misconception about digital audio and Nyquist reconstruction. Nyquist Theorem does NOT state that 44.1khz audio automatically gives you the original signal under 22.05khz, you MUST reconstruct or filter out the unwanted components first, and this is exactly why almost all DACs on the market have internal oversampling.

Perfect band-limiting means instantaneous and infinite attenuation, completely eliminating anything above 22.05khz and leaving anything below that untouched. However this would require infinite computing power and is therefore not practical in the real world. DACs typically do not have much compute power, and so typical DAC oversampling filters have usually somewhere between 128 and 1024 filter coefficients, which leaves us with filters that either roll-of content under 20khz, or do not fully attenuate by the Nyquist frequency and are therefore still leaving aliased products, meaning it’s not actually a perfect reconstruction:

But, we can throw more compute power at the problem and get a better result with tools such as the Chord MScaler, HQplayer or PGGB, which use the full power of your PC to facilitate filters with millions (or sometimes billions in the case of PGGB) of coefficients, providing a near instantaneous cutoff and much more accurate reconstruction that properly adheres to Nyquist Theorem:

HQPlayer and PGGB can also provide unique benefits to NOS R2R DACs thanks to their high performance and adjustable bit-depth noise shapers. Unlike delta-sigma DACs which will always be running their own noise shaper internally and you can’t therefore ‘override’ it, NOS R2R DACs do no DSP of their own, and so by setting the noise shaping and bit depth correctly, you can actually measurably improve the linearity of the DAC beyond stock performance, in some cases quite substantially.

 

HQPlayer Guide:

  1. First step: download HQPlayer. You can get it from this link: Downloads – Signalyst
    The software itself is reasonably pricy, but there is a free trial available, with the only limit being that every 30 minutes you have to close and re-open the software to have it continue to play.

  2. Download the ASIO driver for your DAC if available. Normal windows WASAPI typically only supports up to 384khz, whereas ASIO supports up to 1.536Mhz PCM on certain DACs, and also then allows native DSD transfer.

  3. If you are using HQPlayer standalone, you can launch the ‘HQPlayer Client’ program after launching the main ‘HQPlayer 5 Desktop’ software to get a slightly nicer UI for playing music locally or via Qobuz. You can also just drag and drop files into the main HQPlayer window. However if you are a Roon user, you can set HQPlayer as an output device thanks to Roon’s built-in support. Just go to Settings → Setup, and then click ‘Add HQPlayer’. If your roon core is running on a different machine to HQPlayer, you may need to manually input the IP address for the device which is running HQPlayer, but a recent update means it should automatically detect it. Leave it as ‘localhost’ if HQP and Roon are running on the same machine.

Then, just choose HQPlayer as your output device in the bottom right:

  1. Configure. Lets talk through what the various settings mean.

INPUT TAB:

This is just used if you are wanting to route a device like a microphone or capture card through HQPlayer. For anyone just using HQP for music, ignore this and leave device set to ‘none’

 

OUTPUT TAB:

1: Backend audio pipeline. Use ASIO if you have it (you’ll need to download the driver from your DAC manufacturer), WASAPI if your DAC does not have an ASIO driver, and you can use NetworkAudioAdapter if you are streaming HQPlayer’s output to a streamer device like the Holo RED.

2: Device, choose the DAC you want to output to

3: Channel count. Set this to 2 by default, but for more advanced usage like multi-channel room correction adjust this to however many channels your device supports.

4: SDM pack. Setting this to ‘none’ means HQP will provide native DSD to the DAC. But this is only possible via an ASIO driver. Some DACs also may not support native DSD input. If your DAC doesn’t accept native DSD or doesn’t have an ASIO driver, then set this to ‘DoP’, which will pack DSD data into PCM samples and the DAC will then unpack them.

5: Some devices like the Holo Audio DACs can support DSD at 48khz base rates. However most DACs only support DSD at 44.1khz. This is not usually listed as a feature on most spec sheets, so simply try playing 48khz DSD and playing a 48khz song/file through HQPlayer. If you experience audible glitches, or slowed-down playback, your device doesn’t support 48khz DSD and so you should uncheck this. But if your DAC does support 48khz DSD leave it enabled.

6: Adaptive rate. This controls whether HQPlayer will either upsample to output rates that are a power of 2 of the input. (so 44.1khz only to 705.6khz but not 768khz etc), or whether it can output up to the max output rate. I’d strongly recommend leaving this set to square/half-checked. As this means it will upsample to the max possible rate when the filter allows, but when using a filter that only works for 2x rates, it’ll do 2x rates. Setting this to fully checked can sometimes cause HQP not to play with certain configurations.

7: This is your maximum volume limit, which you can later adjust with the knob on the main HQP window. You should keep this set to -3.0dB or lower. Setting this higher means you can encounter intersample overs clipping, but -3dB ensures that you will not clip other than in extreme cases (where the song’s mastering is quite frankly the issue anyway).

 

PCM TAB:

This is where you configure settings for outputting PCM audio to the DAC.

1: Filter 1x is the filter that is applied to 44.1khz/48khz content. There are a large number of filters available, but I would strongly suggest using either Sinc-L or Sinc-Mx. Sinc-L is a 2 million coefficient non-apodizing filter, and Sinc-Mx is a 1 million coefficient (or 2 million if outputting 1.5Mhz) apodizing filter. Both of these are extremely high performance and quite a bit better than many of the other options. You can also try some of the gaussian filters like poly-sinc-gauss-halfband if desired, although I’d recommend Sinc-L for more transient heavy music and Sinc-Mx for more vocal heavy music and live recordings.

2: Filter Nx is the filter that is applied to hi-res music. This allows you to for example configure HQPlayer to have no filter for hi-res content and feed it to your DAC as is whilst still applying oversampling to 44.1khz content. But for most of the time, I’d recommend just keeping this set to whatever you have filter 1x set to so that the same oversampling is used for everything.

3: Max sample rate that HQPlayer will feed to your DAC. HQPlayer will also automatically detect what your DAC reports for its capabilities, but you can manually set it lower if desired. Some DACs like the holo may support up to 1.536Mhz PCM, but most DACs will support either 768khz (via ASIO) or 384khz if using WASAPI output. Typically just choose the highest rate your DAC supports.

4: Dithering/noise shaping can affect the dynamic range of the output. For delta-sigma DACs this is less important since they’ll be applying noise shaping of their own internally which effectively ‘overwrites’ the work done by HQPlayer’s noise shaper, but for NOS R2R DACs especially, the high performance 15th order LNS15 noise shaper is what I’d strongly recommend as this gives hundreds of dB of digital dynamic range in the audible band even at lower bit depths. Noise shaping allows you to exceed the typical dynamic range limitations of 16/24 bit formats.

5: For delta sigma DACs, set bit depth to 24 so that their internal noise shaper has the most info to work with. (I generally avoid 32 as it’s of little practical benefit over 24, and many DACs just truncate 32 bit to 24 bit internally which is not ideal.)
For R2R DACs, setting this to the correct bit depth allows you to achieve measurably better linearity and small-signal accuracy than stock performance, or if you were using normal 24 bit dithering. Unfortunately, working out the exact value sort of requires having an analyzer. BUT, you can generally get the right answer by looking at the THD+N/SINAD measurement, and dividing by 6. So a DAC with 96dB SINAD should be set to 16 bit etc. You can also check my google drive folder to see if I have a config for that particular DAC.

 

SDM/DSD TAB:

This is where you’ll configure settings for DSD output.

1: Oversampling 1x determines the oversampling filter used for 44.1khz/48khz content. For DSD, I basically always use Sinc-L, as I find DSD sounds subjectively a touch softer than PCM in most instances, and Sinc-L is an extremely incisive filter that reconstructs right up to 22.05khz, so I always use that for DSD.

2: Oversampling Nx is the filter used for hi-res audio. Again I’d strongly suggest using Sinc-L with DSD.

3: The modulator is the biggest factor in both the quality of the end result, and the compute intensiveness of DSD upsampling. Be aware that certain DSD configurations in HQPlayer will literally bring your RTX5090+I9 14900KS PC to their knees, so depending on your PC specs you may need to play about with different options if you find that playback is pausing often due to not being able to process fast enough. If you are outputting DSD256 or higher, you can try the ‘512+fs’ variants of the modulators, which prioritise greater dynamic range in the audible band at the expense of slightly higher ultrasonic noise. I’ve generally found that ‘ASDM7EC-Super’ and ‘ASDM7EC-Super 512+fs’ are the best sounding modulators, but they can be quite intense to run and you will need a beefy PC.

4: Here you can choose the max output rate to feed to your DAC. Whilst you can just set this to the max your DAC supports, many DACs do perform slightly better with DSD256 than DSD512 or DSD1024. Setting this to the max is not always better. And additionally, a slightly lower DSD rate with a higher performance modulator is better than a higher rate with a poorer modulator, so I’d recommend using DSD256 or 512 and experimenting with what rate/modulator combination your PC can run.

 

ADVANCED TAB:

The advanced tab has some additional options, but most people will only need to look at two of them.

1: Multicore DSP determines whether HQP will use multiple CPU cores for processing. Generally keep this to square/half-checked so that HQPlayer can choose the optimal setup for each of its tasks.

2: CUDA offload. If you have an NVIDIA GPU you can offload some processing to the GPU, which can be particularly helpful for making more intense DSD upsampling configurations feasible that would otherwise be impossible with solely CPU processing. Square/half-checked will do convolution on the GPU, but fully checked (recommended) will also offload the main processing where possible. Not all modulator/filter combinations can be offloaded but keeping this checked will ensure they are if it’s possible.

14 Likes

This is an EXTREMELY valuable contribution- thank you. I have hesitated to jump into the HQP arena and thus to consider a Holo Cyan or Spring because I found HQP so intimidating- this helps massivelly.

1 Like

@GoldenSound - thank you for a helpful guide. One item of note:

“2: CUDA offload… Again keep this to square/half-checked so HQP can decide what is optimal to offload to the GPU”

This is a bit off the mark. Half checked (grey) = Convolution only being offloaded to the CUDA.

Ah you’re right, thanks and fixed!

Hoping to confirm, think I’m understanding at this point, any HQPlayer usage for the Cyan 2 product would be suboptimal on a Pi2AES product?

Pi2AES has a 192khz limit.
But you don’t need the pi2aes itself, you can just use the raspberry pi without the pi2aes. You can install either HQP NAA image for the pi, or RopieeXL if you also want to have roon support. And then just output via USB to the cyan

I posted over in the Roon forum but it was sad to see half-baked measurements here.

You have “DSD” measurements but no mention in your article about what DSD rate this is - there is significant difference between DSD64 and DSD1024 results…

And most of your measurements are not with DSD input.

Here are my Cyan2 measurements at DSD256:

And 1 year later here are my Audalytic AH90 measurements at DSD256 (using its built in NAA input and it is under half the price:

Both DACs excellent - AH90 better under 100kHz overall and under half the price with built in NAA input

1 Like

I’ve updated the post to indicate more clearly, but it’s DSD128

I’m not sure what you mean when you say “half-baked”? There are over 20 different measurement results for the Cyan 2 here.
The post focuses quite intentionally on PCM is because that is how 95% of people are going to be using this product.

I may do full DSD measurements in future, but unfortunately without access to HQPlayer Pro, I can’t create the files needed to make this feasible for frequent measurements. Doing all these measurements takes time and doesn’t work properly when routing through HQP desktop as the huge latency screws with the AP software. So while some of the measurements can be done manually (though doing so for every one would still take an extra full day or more of work), many of them can’t as with many seconds of latency I’ve not been able to get delay and settling times to work properly to produce accurate results.

If Jussi is willing to provide a license for HQP pro to do DSD testing I’d be grateful and happy to link to signalyst/HQP in all measurement posts that use DSD measurements, but afaik he doesn’t ever do discounts or anything on HQP Pro, I’ve already bought HQP 5 Desktop and can’t afford HQP pro. So for the time being DSD measurements will need to be more basic. DSD is just a bit of a pain to work with for anything other than static tests.

1 Like

Obviously I was referring to DSD measurements - ironically the only DSD measurement you showed was just 1kHz SINAD. There are a lot of useful static tests other than 1kHz SINAD. You don’t need HQP Pro for that

You can see my comprehensive set of DSD256 measurements.

Including dynamic CCIF vs level using Multitone Analyser

Thats where you will see an enormous ESS style IMD hump for Cyan2 - much lower level in AH90 at DSD256. Like 30dB lower in hump region

Doing IMD vs Level measurements without being able to use AP’s own tool requires manually testing and plotting all 128 points individually which would take a considerable amount of time. And that’s just for 1 test, let alone if you then want to do it again at a different DSD rate to compare.

To be clear I’d like to have this stuff for DSD for DACs where the DSD pathway is different, it’s just not practical from a time standpoint given how long it’d take to manually test and plot a lot of the level/frequency dependent tests, and again given as the vast majority of users will be using PCM that’s what I’m focusing on.

Unfortunately spending an additional 1-2 days just replicating all the existing tests for DSD is not practical at the moment. At some point I’ll see if I can wrangle the AP software into not freaking out when there’s 5s+ of latency but so far I’ve not had much success.

As I wrote, There are other tools. Took me 10 minutes to run IMD vs level using Multitone Analyzer, as I mentioned already

I went to get a coffee in the meantime

The static DSD tests for me took no more time than PCM and people can see my very comprehensive measurements, not just one 1kHZ SINAD

Anyway we’re both getting circular in our posts, I’m happy to leave it there.

Thank you very much for the great review. @GoldenSound Do you use the DAC correction feature on the Holo DACs?

1 Like

Usually not, as it’s only available when using the Holo Asio device. But I’m using an intermediary device to facilitate doing a digital crossover and 4ch room correction in HQP. Which then means that it doesn’t allow you to use the corrections.

I have tried them when using the dacs standalone though. The difference seems to be fairly small. Maybe a very slight improvement overall?

As far as I’ve been able to find from testing though it’s basically just a minor adjustment to the frequency response to compensate for the analog filter in the DAC. Which is nice, but if you’re only making a tiny adjustment it’s not really a big deal

Thanks for your feedback :slight_smile:

I find the difference with DAC correction quite significant. The whole sense of space is greatly enhanced, and there’s much more separation between instruments. At the same time, though, it also feels a bit unnatural, and for me, it really affects long-term listening comfort. Without DAC correction, I can listen much longer and more relaxed. Still, I often catch myself switching it on and off again :smiley:

It would be really great if there were more information about what the DAC correction actually does and why it’s so computationally demanding.

1 Like

DAC correction wasn’t around when I was able to measure Cyan2.

It is mainly to correct the fixed freq resp early roll-off - which my AH90 doesn’t have with DSD256.

Goldensound could easily measure. Does not need HQPlayer Pro for all these measurements as he wrote.

2 Likes

I’ve not found dac correction to have any effect on measured performance besides FR. Distortion and other aspects were the same with it on or off.

From both the measurements and inspecting the digital output it seems it’s just compensating for the analog filter in the DAC.