Oversampling 101: A Beginner's Guide to HQPlayer

:construction: This post is a wiki! If you’re good with HQPlayer, feel free to edit it, especially since I won’t know the configuration for everyone’s use case! :construction:

I spent some time learning how to do the HQPlayer thing recently, so I thought I’d start a community guide! If you’ve been thinking about getting into HQPlayer, but you’ve been confused by all the filter choices and whatnot, I hope this helps!

I’ve also included sections on enabling the built-in oversampling in Roon and Audirvana. If you’ve never played with external oversampling before, I would recommend starting there before you go all the way to HQPlayer:

Oversampling in Roon

Under the volume button, there’s an option for “DSP”:

In this menu, there’s an option called “Sample Rate Conversion.” For the first option, I recommend Max PCM rate (power of 2) or Custom.

The second option provides four filter options: “linear” and “minimum” phase; and “precise” and “smooth.” In an ideal world, you’d be able to customize these based on the source sample rate, but in lieu of that, my recommendation is to choose a precise filter if you mostly listen to 44.1/48kHz music and to choose a smooth filter if you listen to lots of higher sample rate music.

As for “linear” vs. “minimum,” Roon’s docs have some explanation as to why you might choose one over the other, but in short, digital filters aren’t free: “linear” has pre-ringing and “minimum” has phase smearing, so either is a tradeoff. I personally prefer linear.

It’s also generally recommended to turn on “Headroom management” and set it to -3db since it’s possible for oversampling to introduce clipping.

If you don’t hear any sound, it’s possible that you might be oversampling to a sample rate that your DAC can’t handle. Make sure that your device setup has the correct “Max sample rate (PCM)”, which is under the advanced settings.

Oversampling in Audirvana Studio

PLACEHOLDER - EDIT ME!

Upsampling Recommendations:

  • Forced upsampling type: Power of Two or Custom
  • Algorithm: r8Brain
Introduction to HQPlayer

According to their website, HQPlayer is a multichannel audio player for Windows, MAC, and Linux. It is an extremely powerful, flexible, audio player that can do much (MUCH) more than oversample / upsample digital audio files. But for the sake of clarity, here we will just focus on using it as a tool for oversampling.

The HQPlayer “architecture” is very similar to the Roon architecture, in that it has 3 pieces to it: Desktop (similar to Roon Core), Control (similar to Roon Remote), and NAA (similar to Roon Endpoint).
This is a bit of an oversimplification, because each of these three pieces in HQPlayer have different features and capabilities than Roon, but conceptually they perform similar functions within the flow and processing of digital audio files:

  • HQPlayer Desktop - Desktop is the heart of the system. It can actually be used standalone (similar to how Roon Core can be used standalone). The computer that HQPlayer Desktop is running on handles playback and processing of audio files. It supports both local / networked file playback, as well as integration with internet streaming services (such as Qobuz). For upsampling, the Desktop is where you configure the upsampling algorithm, noise shapers, bit depth, sampling frequency, etc. The computer (Mac, PC, Linux) running Desktop needs to have sufficient resources (CPU, GPU, Memory) to handle the processing options selected, otherwise playback will be “janky” (or non-existent).

  • HQPlayer Control - The Control application is a separate program that “controls” HQPlayer Desktop playback. HQPlayer provides its own application (creatively) named “HQPlayer Client”. For the most basic use cases, it is much easier to directly control HQPlayer Desktop from the HQPlayer Desktop application, not using a separate Control application. But if you use HQPlayer in conjunction with Roon, Roon can be used as the HQPlayer Control application. This allows you to control HQPlayer music playback from Roon the same way you control playback for any other Roon endpoint. It takes a little bit of effort to set this up, but once it’s running, the Roon integration of HQPlayer is nice to use.

  • HQPlayer NAA - NAA stands for Network Audio Adapter. This is the endpoint for network streaming. It plays a similar role in network audio playback as the Roon endpoint. From HQPlayer Desktop you select the endpoint you want to play music through. After upsampling / processing is done in the Desktop program, the resulting data is streamed over your network to the NAA, where it is output to the DAC / Amp for playback.

While this looks somewhat complex, the most basic setup (which is HIGHLY recommended for trialing / demoing HQPlayer) can be done on a single computer:

And when running in this “single computer” setup, all you need is a single application: HQPlayer Desktop. From here you can have a lot of fun experimenting with various processing options. And the best part is you can do so with the free demo version, making the real cost to trying HQPlayer just your time.

Recommended Hardware for HQPlayer Desktop
You can trial HQPlayer on almost any modern computer hardware, but depending on your hardware (CPU, GPU, memory) you will be limited in the PCM upsampling rates and DSD modulators you can use. If you are just trying out HQPlayer to see if it’s something you will like, then almost any modern computer will do the trick. I’ve found the best “bang for your buck” option for HQPlayer is the M1 Mac Mini. Even the most basic 8GB RAM version is capable of running all but the highest rate DSD modulators. The 16GB version is certainly recommended. HQPlayer has a native arm64 version, that allows the M1 to run VERY efficiently. And if you are a Roon user, you can use the M1 Mac Mini to run both your Roon Core and HQPlayer.

Downloading HQPlayer

If you’re running HQPlayer on a computer or laptop, you’ll go to this page, scroll down to the bottom, and click the download link for your platform. If you’re using a newer M1 or M2 Mac, choose “arm64,” otherwise choose “x64” for older Intel Macs.

If you’re using a dedicated music server such as a sonicTransporter, check if your manufacturer has specific instructions for setting up an embedded version of HQPlayer (such as MySonicorbiter).

Installing and Opening HQPlayer

When you install HQPlayer, the program you want is called “HQPlayer4Desktop.” (You can also install “HQPlayer4Client” if you really want to, but I don’t recommend it.) You’ll probably also want to copy the PDF manual.

The first time you open “HQPlayer4Desktop,” you should see a popup that looks something like this:

This is because you’re running a free trial version of HQPlayer, which means that the program will automatically close after 30 minutes. If HQPlayer randomly closes itself, don’t worry, that’s normal. Just click OK.

This is the main HQPlayer interface. You won’t use this screen much, but if you’re running HQPlayer on a different computer than the computer you’re using to run Roon/Audirvana/whatever music software you’re using, then you’ll need to click this icon to make HQPlayer visible on your network:

Mac:
b1d756ef-cdaa-45d1-a2e5-ee9bcedde301

Windows:
38ba6ba1-ebf2-48b3-8789-9c7cbd38905e

Setup for Mac/Windows over USB

PLACEHOLDER - EDIT ME!

For Mac, you’ll set your “Backend” to CoreAudio, then set the “Device” to your USB device. My understanding is that Windows users should set their “Backend” to ASIO, or if that’s not available, they should choose WASAPI.

If you have a NOS R2R DAC, it’s recommended to set “DAC bits” to the actual bit resolution of your DAC (if you don’t know, 19 is a reasonable guess). If your DAC is going to do further processing of the digital signal or if you have a delta-sigma DAC, then set “DAC bits” to the highest bit value that your DAC will accept (likely 24 over S/PDIF and AES/EBU, or 32 over USB).

Setup for Sonore/SotM Streamers and Roon

If you’re using a Sonore streamer or an SotM streamer, select “HQPlayer NAA”:

Then open HQPlayer’s settings screen:

HQPlayer_SystemMenu_Preferences

Set your “Backend” to either Network Audio Adapter or Network Audio Adapter IPv6, then set the “Device” to your streamer.

If you have a NOS R2R DAC, it’s recommended to set “DAC bits” to the actual bit resolution of your DAC (if you don’t know, 19 is a reasonable guess). If your DAC is going to do further processing of the digital signal or if you have a delta-sigma DAC, then set “DAC bits” to the highest bit value that your DAC will accept (likely 24 over S/PDIF and AES/EBU, or 32 over USB).

Next, you’ll go into Roon, select “Settings”, then select “Setup”. One of the options listed there should be to add a zone for HQPlayer. If your Roon core and HQPlayer are both running on the same machine, keep it at the default of localhost. If HQPlayer is running on a different machine from your Roon core, then you’ll need to enter the IP address of the machine that’s running HQPlayer.

And now you should have a zone in Roon that will stream music to HQPlayer.

HQPlayer Settings: PCM vs. DSD

PLACEHOLDER - EDIT ME!

The “Default Output Mode” setting gives you options to always convert to PCM, always convert to DSD, or to keep files in the same format that they start in. As a general guideline, converting to PCM should be better for R2R DACs and converting to DSD should be better for delta-sigma DACs.

I’m currently using HQPlayer with a NOS R2R DAC and I can really only provide recommendations for PCM oversampling. However, my understanding is that converting tracks from PCM to DSD requires a significant amount of computer processing, so using DSD might make it harder to run some of the heavier filters.

HQPlayer Settings: Filters and Dither/Noise-Shaping

HQPlayer has a ton of filters and a lot of the fun is playing around with which different ones you like, but I recommend these ones to get you started:

  • poly-sinc-gauss family (gauss-xla, gauss-long, gauss-hires-lp)
  • sinc family (sinc-Mx, sinc-S)
  • poly-sinc-ext family (ext3, ext2)
  • poly-sinc-short-mp (specifically for maximizing transients)

There are two different places to choose filters in the settings: one called “Filter 1x” and another called “Filter Nx.” The setting for “Filter 1x” only applies to 44.1kHz and 48kHz source sample rates, while the setting for “Filter Nx” applies to all higher sample rates.

According to the creator of HQPlayer, gauss-xla and ext3 are particularly steep filters that may be only well-suited to 44.1/48 content, so if you’re using those two filters, you may want to consider setting your “Filter Nx” to less steep filters in the same family (such as gauss-long, gauss-hires-lp, and ext2).

The recommendations for dither/noise-shaping will depend on the sample rate that you’re oversampling to. Specifically, some standard recommendations are:

  • For 96 kHz, use TPDF or Gauss1
  • For 192 kHz, use NS9, TPDF, or Gauss1
  • For 384 kHz, use NS5
  • For 768 kHz and higher, use LNS15

(NOTE: TPDF and Gauss1 are also reasonable choices for any sample rate if noise-shaping doesn’t make sense for any reason.)

I haven’t actually played with these settings too much, so your mileage may vary. Also, for starting out, I recommend using the highest sample rate that your chain will support.

For volume min and max, I recommend setting these both to the same value. The general recommendation is to set these to -3db because oversampling can introduce clipping.

Now the rest of the checkboxes: “Multicore DSP” should be set to auto (filled-in grey box) and “Adaptive output rate” should be checked. “Log file” is up to you, but having a log file can be good when you’re reporting bugs and asking for help and such.

HQPlayer Network Streaming - NAA Endpoints

→ add info about network streaming to NAA endpoints such as RPi and iFi Zen Stream

Beware the Network Traffic
It’s worth thinking a little bit about just how much bandwidth HQPlayer requires when upsampling to the highest PCM and DSD frequencies. We’ve gotten used to music streaming being so far below the available network bandwidth, that it’s just not an issue. But with HQPlayer you can easily exceed the bandwidth required to stream 4k UHD movies over your home network.

So let’s do a little math:
For 44.1kHz 16bit FLAC files, the required bandwidth is
(44,100 samples / second) x (16 bits / sample) x 2 (for stereo) = 1,411,200 bits per second (1.4Mbps)

This is well within most peoples home WiFi bandwidth, even in bad corners of the house, making it very feasible to stream FLAC files over WiFi.

If you set HQPlayer to do 16x upsampling (705.6kHz) and 32 bits / sample, you get the following:
(44,100 samples / second) x (16x upsampling) x (32 bits / sample) x 2 (for stereo) = 45,158,400 bits per second (45Mbps).

Now we are doing some real data! Streaming 4k UHD movies requires between 15Mbps and 25Mbps of bandwidth. So we are now running 2x - 3x the bandwidth required for a 4k UHD movie.

If we really want to have some fun, and if your DAC supports it, run at 32x upsampling (1,411.2 kHz):
(44,100 samples / second) x (32x upsampling) x (32 bits / sample) x 2 (for stereo) = 90,316,800 bits per second (90Mbps).

It is very easy in the 45Mbps to 90Mbps to get into the realm of unreliability for WiFi. Especially if there is any other traffic on the WiFi besides your HQPlayer upsampled stream. It’s very easy for any WiFi network traffic, for example someone turning on a Netflix stream in your house, to cause playback to glitch.

What can make matters much worse (and quite frankly unfeasible) is if your PC running HQPlayer is also connected to the network via WiFi. Then you have >45Mbps of traffic being streamed wirelessly from your PC to the wireless access point, and then streamed wirelessly to your HQPlayer NAA endpoint. Essentially doubling the WiFi traffic, and easily bringing most home WiFi networks to their knees. Any non audio related traffic will almost certainly result in a playback glitch.

For this reason, if you plan to upsample to 16x or 32x, it is highly recommended to run HQPlayer on a PC that is hardline ethernet connected to your network. And if at all possible, run the NAA endpoint on a hardline ethernet connection as well. You might get away with the NAA endpoint being wireless, but I can almost guarantee you won’t get away with both being wireless.

The compromise that worked well for me is mesh wifi. I hardline connected my HQPlayer PC and NAA endpoint into mesh nodes. Then all of the HQPlayer traffic was wireless routed over the mesh backhaul connection, which had sufficient bandwidth to be >95% reliable / glitch free. Ultimately, switching to full hardline ethernet connections has given me 100% reliable playback.

My current setup uses a Denafrips Pontus II DAC, which can support 32x PCM via the USB connection. The DAC is only 24bit, and realistically 18-19bit linear. So no need to take the bit depth up to 32bit. For this DAC I run the following:
(44.1kHz) x (32x) x (24bit) x (2 channels) = 67.7Mbps

If limit the bits to the “linear range” of the DAC, this can be reduced down to
(44.1kHz) x (32x) x (18bit) x (2 channels) = 50.8Mbps

The same math can be done for 48kHz based files, increasing the final bandwidth by ~10%

Bonus: Comparing with Hardware (Chord Hugo M Scaler, etc.)

According to the creator of HQPlayer, the sinc-L family of filters are the most similar to the filters you would hear from a Chord product. Specifically, here are some rough equivalents:

  • sinc-Ls = Chord Mojo/Hugo
  • sinc-Lm = Chord Dave
  • sinc-Ll = Chord M Scaler
  • sinc-L = 2x Chord M Scaler

Also, Schiit has occasionally described their filter as a “closed-form” filter, so you might be interested in trying the closed-form family of filters when comparing with Schiit products.

Bonus: Only 44.1/48kHz -> 88.2/96kHz

If you’re so inclined, I experimented with only oversampling 44.1/48kHz content to 88.2/96kHz and passing through all other higher sample rate content as a split-the-difference kind of setting. Essentially, the idea is to set “Filter Nx” to none, as described in this quote from an earlier post:

Bonus: Not all DACs are Created Equal

→ add info about how DACs utilize upsampled data differently. PCM and DSD formats are also handled very differently by different DACs.

12 Likes

+1 just for the work needed to organize this.

5 Likes

So in the guide, I recommend three filter families to start with, but I don’t actually describe what those filters sound like. This will probably be different based on your specific chain, but for some quick opinions:


sinc family: These sound the most spacially grand and impressive to me, to the point that it feels exaggerated, though it’s honestly really enjoyable to listen to. It also seems slightly hazier to my ear than the the poly-sinc-gauss family.

poly-sinc-ext family: Kind of the opposite of the sinc filters, these sound a little bit flat, but the reason I included them is because they sound a little aggressive to me and I really like that aggression with electronic tracks. (Also, it makes a nice contrast to the other two.)

poly-sinc-gauss family: These are kind of a middle-ground between sinc and poly-sinc-ext families in terms of spaciousness and sharpness, but I find that these sound the most “correct” to me (whatever that means).

EDIT: Also added poly-sinc-short-mp to the list of recommendations, which sounds even more aggressive to me than the poly-sinc-ext filters.


Also pinging @elementze in case you have any opinions! I know you’ve mentioned a few times that you like the sinc-L filter when you’re PCM oversampling.

3 Likes

Thanks @rgdelato, in general I agree with your summary, but like anything with HQPlayer the devil is in the details. I feel like HQPlayer is the digital version of tube rolling - a true decent into madness with almost unlined options to experiment with. And like tube rolling, when you hit the sweet spot, it’s very rewarding!

That said, I’m way overdue to write an HQPlayer update!

With my recent Pontus II purchase I’ve resurrected (and upgraded) my HQPlayer setup. The reason for this is the Pontus II (along with other Denafrips DACs) has a dedicated 32 step FIR filter for DSD decoding, making it essentially two DACs in one.

With HQPlayer and Pontus II you can experiment with up to PCM 1536kHz and DSD1024. Which is just crazy compared to what you can do with other DACs. The NOS setting allows you to really hear what the PCM up sampling is doing. And the dedicated FIR filter for DSD makes our genuinely sound unique to the R2R stage used for PCM.

I’ll try to make progress on writing up my setup and observations this weekend. It’s been a whole new world using HQPlayer with the Pontus.

2 Likes

Updated the Wiki with an “Introduction to HQPlayer” section - this is really just an overview of the HQPlayer architecture. It skims over a lot of details, but gives a high level view of how HQPlayer is used for music upsampling and playback.

2 Likes

Yay! :tada: I know you have more experience using HQPlayer than I do, so I really appreciate you contributing to the guide!

1 Like

Updated section on network streaming, adding details about required network bandwidth. It’s worth thinking through this to understand why streaming HQPlayer over most WiFi networks is impractical, particularly at 16x and 32x upsampling. Having at least the HQPlayer Desktop running on a hardline ethernet connection is almost required. And the NAA endpoint on a hardline ethernet connection is recommended.

1 Like

@elementze I’ve been thinking about your M1 Mac Mini recommendation, so just curious, how is yours spec-ed out? Is it just the bottom-of-the-line model?

yes - absolute bottom: M1 with 8GB memory. it should probably be 16 GB memory just for long term health of the system. but i got this one used, local for $300, which is hard to beat. i can do PCM up to 1,536kHz (32x). Most DACs only support up to 768kHz (16x). and this is with any of the filter functions. so no limitation there. and for DSD I can get up to DSD256 with ASDM7ECV2 modulator. it can’t quite go to DSD512. but 16GB of memory won’t fix this. Maybe an M2 could get up to DSD512??? but i’ve not seen anyone confirm this on other forums. My Intel i5 mac mini couldn’t get even close to this level of DSD support.

Performance-per-dollar, it’s hard to beat a used M1 Mac Mini!

2 Likes

Awesome, thanks for all the details! That helps a lot!

I have a very light oversampling use case (PCM to 192kHz), though I’m looking for a machine to also be my Roon core as well. (I currently have both HQPlayer and my Roon core running on my work laptop where I’m also running builds and stuff during the work day.) If anything, a bottom tier M1 Mac Mini sounds like overkill, lol. But yeah, you got quite a nice price, for $300, I’d definitely buy one. :smiley:

EDIT: For a price comparison, an equivalent Amazon open-box M1 Mac Mini is about $500-ish:

FWIW - you could use a RPi4 with HQPlayer embedded running on it for PCM to 192kHz. It can handle most PCM upsampling to 768kHz reasonbly well. it struggles with the sinc-L filters. but other than that, it’s a neat option. and the demo version for embedded is the same as desktop: 30 minute playback at a time. so you can try it out quite thoroughly. the other benefit to RPi4 as the HQPlayer server is networking - very easy to put it on wired network switch next to the NAA endpoint. Roon can control it wirelessly and send original FLAC files to it wirelessly pretty easily. If you have a spare Raspberry Pi sitting around, it’s a low cost way to blow an entire weekend :rofl:

If you get an M1 Mac Mini w/ 16GB RAM, you’ll be rock solid (pun intended) for Roon Server, HQPlayer Desktop, and even some Plex Server fun. You could maybe argue benefits to using separate machines. But as a stepping stone to better overall architecture over time, this is a very solid investment. You also get the benefit of not streaming over your network between Roon and HQPlayer (all local within the machine). If you run the Mac Mini headless, and just do remote login, you’ll feel like a Roon pro. It’s very easy and reliable. Not to shill it too hard, but an M1 Mac Mini might be one of the best Digital Audio investments you can make in terms of ease of use, reliability, and just focusing on the music isntead of the computer infrastructure making it all happen. Hell, you could just go USB out of the M1 Mac into your DAC and do great with an all in one music box. (But maybe add a DDC in between there, USB noise will really suck doing it this way.)

2 Likes

Since you’re new, I thought I’d also let you know that this thread exists! There’s some advice on settings and filters and stuff buried in here if you’re interested. :smiley:

2 Likes

For anyone interested, HQPlayer launched a full new version today: HQPlayer 5.

It’s got a lot of usability upgrades in their controller and desktop apps. And a few new filter/modulator options.

I’ve recently returned to HQPlayer, using it on the Chord Qutest. Maybe because Chord DACs are designed to work with upscaling (ie M Scaler), it seems to take well to upsampled inputs better than other DACs I’ve tried. I’m currently running:

Roon ROCK → Mac Mini M1 (HQPlayer) → opticalRendu → SRC-DX → Qutest

SRC-DX is made by Audiowise, it’s a USB to Dual BNC converter. So with it I can upsample to 768kHz PCM and utilize the dual BNC input of the Qutest (USB input on Qutest sucks for many reasons).

Playback has been flawless in terms of dropouts and speed of interface. Really no issues to speak of (once setup correctly).

With HQPlayer’s big sinc filter functions, the Qutest seems to really shine. It still sounds like a Qutest, just with better spacial presentation and improved texture. I’ve not tried an Mscaler yet, but if it’s anything like this, I can see why people like it. I’ve been using HQPlayer on the Qutest exclusively for the last two weeks, and it’s been outstanding. I may stick with this until I move away from the Qutest at some point in the future. It’s such a better experience.

3 Likes