Saturday, 26 February 2022

Using the MeLE Mini PC for Upsampling/Filtering - HQPlayer Desktop 4 streaming from Roon. [Going forward, AVX2 needed for HQPlayer + Roon... For some reason.]

Hey folks, a few weeks ago, I mentioned that I've got the little MeLE Quieter2Q Windows 10/11 computer in my sound room these days used as a low-power (<10W) Roon streamer capable of 2.0 and 5.1 multichannel. The computer is relatively powerful for just an audio device handling Roon streams; 8GB DDR4 RAM, a 2.0+GHz turbo Celeron J4125 quad-core CPU is certainly much more than needed just to basically get data from the gigabit ethernet and shove it to USB or HDMI for playback!

It works fantastically also as a little fanless HTPC for movies with 4K video and audio bitstreaming. A tip: K-Lite Codec Pack works very well, it can even play MKV/MKA files with lossless TrueHD-Atmos like the 2019 Beatles Abbey Road BluRay rip which I know will trip up some HDMI hardware.

I mentioned in the previous article that it might be fun to consider utilizing the processing power of the little fanless box for audio. For many Roon users, one way of taking advantage of processing power is by using HQPlayer from Signalyst for high-quality upsampling with digital filtering, and possibly even PCM-to-DSD conversion. 

Before we start loading up HQPlayer, I want to remind everyone as per the previous blog post, I'm actually "underclocking/undervolting" this Windows machine for the sake of keeping energy consumption low as a 24/7 device. I think these days it's a good idea to be mindful of the general "footprint" we're leaving in this world!

In fact, over the last couple weeks, I've turned down the Intel power envelope even further on this box:

Basically throttling the CPU down to between 6-8W maximum. Total power utilization as seen at the wall plug with the watt meter is now <9W during the highest loads. Even with this amount of power restriction, the computer is capable of almost 18GFLOPS average using LinpackXtreme benchmark (standard 3GB memory setting):

By the way, after about 25 minutes with 100% processing, the machine is just merely warm. No issue with heat (remember, this box is fanless).

With that out of the way, let's see about installing HQPlayer Desktop 4 on this computer. Three points to be aware of before we start:

1. HQPlayer is clearly "geek" software. Simply put, most audiophile listeners will not need it, nor care, nor feel that it's beneficial. If you're using Roon, I would argue the upsampling options in Roon are more than good enough if you feel that your DAC isn't doing a good enough job!

2. For some reason, since HQPlayer 4.14, the AVX2 instruction set is needed. Most Celeron machines including this one and older processors cannot be used even though apparently the more recent Ubuntu/Linux builds at least to the current 4.17.1 still run for now without AVX2 instructions. Bummer. When installing HQPlayer 4.14+, there is no warning that it's incompatible, the machine will simply not start the HQPlayer Desktop program.

3. Going forward, from February 28th, Roon will require HQPlayer Desktop 4.16.2+ which means what I'm going to be showing below with Roon streaming to the Windows version of HQPlayer Desktop 4 on the Celeron will be a no-go unless you run the Ubuntu/Linux version. Double bummer.

Despite Point 2 and the incompatibility of the recent versions with this machine, I was able to run the trial version 4.13.1 (August 2021) which I downloaded awhile back as I was thinking of writing an update to my HQPlayer Desktop 3.25 article from 2019. This older version will form the foundation for the article today.

As suggested above, calling this "geek software", the complexity and options in this program will likely be overwhelming for many. Since version 3.25, the author Jussi Laako has gone even further with the upsampling options available; check this out for the menu options for PCM and DSD in version 4.16.2 which runs fine on my Ryzen 9 Windows 11 workstation:

Let's talk about this dizzying array of choices later on.

Connecting HQPlayer to Roon is quite easy. You go into Roon's Settings --> Setup --> HQPlayer option and tell Roon which IP on the network HQPlayer is running.

I have set the MeLE PC as a static IP on my LAN at so it's always easy to just point Roon to the machine:

On most routers, DHCP will only manage devices above so I have this sound room computer at to make sure it's out of the way.

After setting this, you should be able start HQPlayer on your streamer computer, making sure to click on the "network control" icon so the program is ready to receive audio from Roon:

With that huge list of PCM and DSD upsampling options, obviously, it would take ages to go through the variations and permutations not just of upsampling algorithms but also dithering/noise shaping! Let me just focus on a few interesting ones, observe the filtering characteristics, and evaluate how well they run on the MeLE Celeron J4125.

I. Everyone knows about linear and minimum phase filters. Let's try out one of the "intermediate phase" settings which has asymmetrical pre- and post-ringing on the impulse response.

I've written about using an intermediate setting when listening to modern rock/pop with strong dynamic compression before. In HQPlayer, there are two options: "asymFIR" and "poly-sinc-long-ip".

"Poly-sinc-long-ip" took ages to start the first time but fine subsequently. Let's just focus on "asymFIR" using these settings:

I'll output the audio over USB to my RME ADI-2 Pro FS R Black Edition with a 100ms buffer (optional), 32-bits (hey, might as well go the extra mile on precision!). We'll choose "asymFIR" for the "1x" samplerates (generally 44.1/48kHz). Let's use "NS9" or 9th-order noise shaping for the dithering option. The DAC can go up to 768kHz and I've checked the "Adaptive output rate" so for 44.1kHz material, it'll upsample to the integer 705.6kHz (16fs) rate.

As you can see, I'm playing a 44.1kHz track, sent as 64-bits from Roon and HQPlayer will upsample to 32/705.6 to the RME DAC. Not bad - HQPlayer only needed <15% CPU load.

On the Roon side, we can see the complementary information confirming the HQPlayer playback as well as the fact that I'm using ReplayGain to adjust output volume and the conversion of the 16-bit audio to 64-bits floating point:

Let's have a look at the "Digital Filter Composite" (DFC) for this combination of "asymFIR"/"NS9" (the DFC is an extension of the Juergen Reis discussion here):

Note that the DFC was plotted using digital data from upsampling 16/44.1 --> 24/192. We can see the 9th order noise shaping drop the noise floor below 17kHz. I've left HQPlayer output at 0dBFS and although there are hints of intersample overload with the 0dBFS white noise, HQPlayer uses a peak limiter I believe which reduces the effect of the overload.

And here's the "asymFIR" impulse response:

Looks great! Here's a peek at the phase shift comparing this filter with standard linear phase using poly-sinc-lp and minimum phase poly-sinc-mp (44.1kHz upsampled to 176.4kHz):

Cursor at 10kHz.

As expected, minimum phase settings will result in a greater phase shift in the higher frequencies. In a similar way, we can compare the group delay of these filters:

Cursor at 15kHz.

For those audiophiles who insist that human ears are highly sensitive to time-domain variations, be mindful that minimum phase filters will deviate from zero degree phase and will result in some group delay within the 20Hz-20kHz "audible" frequencies. You can decide if this is significant... As per my usual rationale, an intermediate phase setting is a compromise that reduces pre-ringing amplitude while causing less phase/group delay/temporal shift than minimum phase.

In more recent history, it's thanks to Bob Stuart / Meridian and the minimum phase apodizing filter in the Meridian 808.2/808i.2 from 2009 that created all the buzz in looking at impulse responses and the lack of pre-ringing with minimum phase from DAC output. This was subsequently picked up by magazines like Stereophile among others. Since then, Bob Stuart went full ridiculousness into MQA and their collection of poor filters used as the last "unfold". All of this has been aided and abetted by a "friendly" mainstream audiophile press that muddled the idea of excellent time-domain performance with the presence of pre-ringing (such as this John Atkinson article repeating claims by none other than Stuart and words like "blur" based on the impulse response image as if it's true).

Built on highly questionable premises, MQA is but another example of the legacy of money-losing ventures in audiophilia; here's the recent MQA company filing into Dec 2020. Good luck to the investors in this scheme as it's hard to imagine the 2021 financial report to be better with TIDAL splitting off into HiFi (non-MQA) and HiFi+ (MQA) tiers going forward.

Bottom line: If you want best time-domain performance when upsampling and filtering (to remove ultrasonic distortions), use a linear phase setting. The "sharpness" of the filter doesn't have to be "megatap", just a few hundreds to thousand taps will likely be more than enough! If you listen to modern compressed recordings often with DR9 or less, with the likely presence of occasionally clipped waveforms, then the intermediate phase filter like "asymFIR" will reduce pre-ringing due to the "illegal", poorly low-passed data while maintaining minimal phase shift. As an audiophile, I personally see no benefit in a strict minimum phase setting for basic hi-fi playback.

BTW, here's the impulse response for "poly-sinc-long-ip", clearly steeper than "asymFIR":

II. So, you want 1 MegaTap Filtering because that sounds cool? Let's have another look at "sinc-M".

Obviously I'm referring to ideas like those from Chord about the supposed importance of 1-million taps. As I've expressed before, this is very much over-kill and there's no known justification for this level of steep "brick wall" type filtering that I'm aware of.

In any event, can the little MeLE Celeron Mini PC do the job? Here are the settings I'll use:

We'll keep the 9th-order noise shaping the same. Let's see how much CPU processing is needed...

No problem at all with the little MeLE Celeron computer (even with reduced power). The CPU monitor shows 11% usage currently, it fluctuates but maintains <20% CPU load. Notice from the settings that we're doing megatap upsampling to 32-bits, 768kHz (in keeping with integer 16fs upsampling of 48kHz input), all without exceeding 9W.

Here's a look at the DFC for "sinc-M"/"NS9":

And of course, here's a portion of the loooong impulse response:

The most notable side-effect for such a long tap-length is the latency between pressing play and music starting. With the "sinc-M" setting and fixed 1M-taps, latency is longer with lower samplerates like 192kHz compared to a full 768kHz.

Use the "adaptive" versions like "sinc-S", "sinc-Mx", and "sinc-L" for variable tap-lengths based on conversion ratio. In my testing, "sinc-S" which is the least computationally intensive 4096 x conversion ratio (4096 x 16 for 705.6/768kHz = 65,536 taps) is already exceptionally high quality.

III. Let's see if we can do some DSD/1-bit SDM upsampling/transcoding on a Celeron.

Clearly, without a huge amount of horsepower, realtime conversion to DSD256/512 is a problem. As you can see in the settings above, there is the option for "CUDA offload" which will use the GPU for processing. In my previous post, we discussed the use of my nVidia GTX 1080 for DSD512 conversions.

With an Intel Celeron only, we need to look at something more modest. How about "poly-sinc-hb-2s", we'll use the "DSD7" modulator, and lock it at 44.1kHz x 128 (DSD128), turning off "Adaptive output rate".

Let's play something and see how the CPU handles this:

A bit more demand on the CPU here with just <50% load. I noticed that the "poly-sinc-hb-2s" setting is significantly less demanding on the CPU than "poly-sinc-hb". Conversion quality using the 2-step process is supposed to be the same but less CPU-intensive according to the manual.

I had a listen to some albums using these settings; it all sounded very good playing some Goldfrapp Supernature and Akiko Suwanai Poème. No issues with stuttering. Very good retrieval of detail as expected with DSD128 clearly capable of delivering high-resolution.

I was curious about what the "poly-sinc-hb" filter looked like - here's the DFC (done in PCM 16/44.1 --> 24/192):

That also looks very good! Obviously not as sharp of a "brick wall" like the "sinc-M" filter. As you can see, frequency response is flat basically all the way to Nyquist. Excellent suppression of imaging artifacts. Notice I just used the standard TPDF dithering, no noise shaping, hence a flat noise floor.

And a look at the "poly-sinc-hb" impulse response:

Looks like a standard linear phase impulse response of moderate length, as expected given the steepness of the filter.

IV. Let's say the machine has very little processing power or I need very low latencies, let's have a look at the quality of one of the weaker "short" filters.

So far, everything looks good from the perspective of the filter "DFC" graphs. However, there are a number of "short" filter options with minimal latency and described as having poorer quality. Low latencies are good in circumstances such as lip-syncing with video.

A filter like the "poly-sinc-short-lp" (linear phase) with TPDF dithering uses about 10% CPU load:

And this is what the reduced filtering quality looks like on the DFC:

We see the 24kHz "image" artifact coming through. The frequency response is more rolled-off than sharp "brick wall"; with attenuation of the 20kHz tone compared to 19kHz. 0dBFS white noise signal showing significantly more "overload" behaviour (doesn't dip into the noise floor).

Indeed, it's a shorter filter and the reason for the lower quality of the DFC.

Having said this, realize that human hearing acuity isn't particularly sensitive with high frequencies approaching the roll-off so even this "poorer quality" filter would sound good.

Frequency Response - Selected Upsampling Options...

For a better look at the filter frequency responses, here's a peek at a few of the settings you can choose from:

I've put the Nyquist frequency of 22.05kHz as the cursor.

We can better appreciate that the "sinc-M" filter is an extremely sharp 21kHz "brick wall". Notice that "lp" and "mp" versions like "poly-sinc-lp" and "poly-sinc-mp" are equivalent. "asymFIR" is very similar to "poly-sinc-*" (just a tad sharper).

If we overlay the graphs and normalize to 0dB:

We can appreciate just how steep the sinc-M "megatap" filter is compared to the others! Notice that it literally stops right at 21kHz.

The filter that pushes the furthest out to Nyquist is the "poly-sinc-hb". The one that rolls off the earliest is "poly-sinc-mqa/mp3-lp" which purposely takes off some of the high-frequency accentuation in MQA content.

I had not seen graphs of the new "sinc-XX" series of filters before other than "sinc-M", so here they are from version 4.13.1:

For reference, here's the description of each "sinc-XX" filter from the older 4.13.1 manual; newer versions of HQPlayer have even more options:

"sinc-S" has the lowest latency (around 0.1s) and as you can see is already extremely sharp. If you insist on a cut-off frequency right at Nyquist (~22kHz), then "sinc-L" is for you. Given how sharp the filters are, I wondered why sinc-M and the others were not all programmed to cut-off closer to 22kHz (for 44.1kHz sample rate) to be academically more "ideal". Not that anyone would hear the difference mind you.

Dithering & Noise-Shaping PCM Options...

One last series of tests for folks using HQPlayer 4. Here's a look at the noise level comparing the dithering/noise shaping options in PCM:

Among the options without strong noise-shaping, we see that TPDF is sandwiched between RPDF and Gauss1. The "shaped" dither looks like it can provide some gentle reduction in the noise floor at audible frequencies.

As for the specific noise-shaped options, "NS1" didn't leave any characteristic noise floor pattern so I didn't include it here (whatever dithering it's doing presumably is weak). 

No surprise about noise-shaping. The algorithms can push low-frequency noise in the audio spectrum (20Hz-20kHz) into the ultrasonic frequencies. In so doing, noise floor improves where human ears are most sensitive - particularly between 200Hz to around 7kHz. "LNS15" looks pretty good and keeps the noise floor low all the way to 20kHz.

Thoughts on Subjective Impressions, Filtering and HQPlayer...

As you can see, a little Celeron J4125 CPU machine like the fanless, inexpensive, low-power MeLE Quieter2Q (~US$250) is good enough to perform high quality upsampling/digital filtering with HQPlayer (also ~US$250) - at least up to version 4.13.

For completeness, while not discussed here, HQPlayer also features a number of higher-level features including its own convolution engine, "matrix processing" (changing channel levels, mixing down multichannel signals) and plugins like IIR parametric and RIAA EQ curves.

As I mentioned at the start of this article, I consider HQPlayer a type of perfectionist audio "geek" software. I believe it goes way above and beyond the call of necessity on the software side; a kind of counterpart to Chord and their "big numbers" hardware as discussed a few weeks ago.

Given the ubiquitous access to inexpensive, low-power computers, any audio guy with basic technical ability would appreciate that a device like the Chord Hugo M-Scaler (US$5000) is at best a very very small niche market at this point. The utilitarian purpose of the M-Scaler is just as easily achieved by HQPlayer. In fact, I expect even better upsampling/digital filtering at a fraction of the price (HQPlayer can send 32-bits to your DAC as opposed to M-Scaler's 24-bits) and the sound quality will be no different anyways. ("Reviews" and subjective claims like the ones here or this video are simply impossible to believe.)

Over the years, I've listened to and measured a number of DACs, including examinations of the digital filters. To be honest, I think the filters in most devices these days with modern chips from ESS, AKM, TI/BB sound very clean already. On the extremes, one should be able to pick out the difference between NOS and good oversampling (as demonstrated last week). Also, there are some DACs which use very weak filters by design that could have an impact on 44.1/48kHz playback (eg. PonoPlayer and the Ayre "Listen"). Most of the time, typical steep filters are likely going to be very difficult to tease out. Very steep linear phase filters with strong impulse response "pre-ringing" is not a problem with good quality recordings (we did a blind test here years ago).

Implied in these statements is that audible differences between competent digital filters should at best be subtle. I'd be very suspicious that something else other than just low-pass digital filtering is going on if indeed people hear "massive" or even "obvious" changes when switching filter settings (assuming that output level remains the same of course).

I've been listening to stuff over the last few nights with these settings through the RME ADI-2 Pro FS R Black at 32-bits 705.6/768kHz:

For 1x samplerates (44.1/48kHz), the intermediate phase "asymFIR" will do the job when I'm listening to my compressed rock/pop. By all means, give 1M-tap "sinc-M" a try for a taste of the "M-Scaler Sound" or "sinc-S" which would IMO be just as good with much less latency - don't feel disappointed if you don't hear miraculous differences!

The "LNS15" dithering setting will do a great job with achieving basically lowest noise level possible in the audible spectrum; I don't believe there's any music with a noise floor this "quiet".

Above 1x music samplerates (eg. your 24/88.2 and 24/96 hi-res downloads or streams), honestly, it doesn't really matter that you use best quality upsampling since imaging artifacts will be far out in the ultrasonic spectrum anyway; I chose "poly-sinc-hb" in the example screenshot for quality and efficiency. 

With these settings, CPU utilization even on the tweaked Celeron would be <20%, the Kill-A-Watt meter records <6W while streaming, and everything sounds great. The other night, while tested HQPlayer, I was in the mood for a little bit of Chinese "hi-fi vocal pop", a good example being Lily Chen's Each In A Different Corner of the World (一水隔天涯) (2003, DR12) - excellent resolution, great vocal presence, wide and deep soundstage, one of the best sounding female vocal recordings I've ever heard. Certainly as good as anything you'll hear from Diana Krall, Stacey Kent or Melody Gardot.

It has also been awhile since I dug into some old pop-metal. An oldie which I had forgotten about for many years - Firehouse's self-titled debut (DR11, 1990) is a fun ride back to the days of big hair and rockers who also showed off their "sensitive" side with ballads like "Love of a Lifetime" along with radio-friendly fun in "Don't Treat Me Bad". I really dig the sound of these older "hard rock" and even metal bands before the sound of recordings went south with severe dynamic range compression. Nice to turn up the volume on a track like "Rock on the Radio" with a good hi-fi system and enjoy the "clean", well-produced quality. Their "unplugged" album Good Acoustics (1996, DR9) isn't as dynamic but some of those arrangements are enjoyable and for a song like "Love of a Lifetime", performed up-tempo bringing a different emotional tone.

In the classical genre, I've been enjoying Daniil Trifonov's recent albums this past week Silver Age (DR12, 2020) and Bach: The Art of Life (DR12, 2021), both available as true hi-res piano/orchestral recordings. Amazing skills on display and from a sound quality perspective, these are excellent piano recordings that sound natural, full of nuance, with beautiful timbre and "tonal envelope".

This is all to say that HQPlayer does a great job with upsampling. The music you love will I'm sure continue to bring you joy as the algorithms accurately reproduce the contents in those recordings. (Let's just curb our enthusiasm about how much audible difference this actually makes, okay?)


PS: Parting thoughts on HQPlayer - A suggestion: simplifying & better defining the options?

With Roon now needing 4.16.2+ starting Feb 28, 2022 that I can't run on the Celeron in Windows, I uninstalled HQPlayer. As you can see from the results above, there's no reason high-quality 1M-taps PCM upsampling/filtering cannot be done with an inexpensive, fanless Celeron. I hope Jussi Laako will reconsider the need for the AVX2 instructions for those of us who may feel higher-powered, or newer CPUs are unnecessary (may even add to noise in the sound room) and also have no need for upsampling to DSD. How about a less expensive "HQPlayer Lite" that's only for PCM?

Simply put, almost any reasonable computer is adequately powerful enough to do realtime PCM upsampling with extreme quality. By insisting on the use of AVX2 presumably just because it can be done (Ubuntu version shows it's not needed), reduces the potential number of users of the software without apparently any good reason! Why do such a thing other than as another trait of this being "geek software"? Does AVX2 "sound better" than SSE4? :-)

[BTW, the newer generation Celeron 6305 (Tiger Lake) does have AVX2 but it's dual core and overall slower than the quad Celeron J4125. Later Alder Lake and Gracemont processors will also have AVX2, but as far as I can tell, are also more power-hungry.]

While uninstalling, I was thinking as a user, how one might want to improve what HQPlayer has to offer. I could not help but feel that there are simply too many upsampling options yet little actual control by the end user. Hey, if you're marketing to audiophile geeks, why not go all the way!?

What I mean is this - all those "poly-sinc-*", "sinc-XX" appear to be just variations on tap length/steepness, and phase using an accurate sinc function. As with most things in life, at some point, "less is more" and certainly my sense is that HQPlayer simply provides too many esoteric options that make no practical difference. I simply do not believe that this is good.

So why not just roll many of these into 2 main "sinc" options and allow the user to vary the specific parameters instead of a list of 20+ presets?

Imagine for a moment if the PCM upsampling menu could be collapsed into a manageable number. Here's a hypothetical mock-up image where the user is focused on a "Core" set of filters:

Roll all the windowed sinc variants into just "sinc-Static..." and "sinc-Adaptive...". And within each of these options, allow the user to select his/her own parameters. For example:

Within the "sinc-Static..." option, the user can fill in the cutoff frequency as a percent of Nyquist (so 98% with 44.1kHz would be 22.05 x 0.98 = 21.6kHz). Like it or not, Chord has popularized the number of "taps" as a kind of metric so a static number of taps (like say "164000" - here's looking at you US$12.5k Chord DAVE) - can be arbitrarily selected.

Then a "phase control" parameter would remove the need for minimum vs. intermediate vs. linear options and allow the audiophile to experiment. Note that SoX already can do it (as per the Goldilocks Filter article setting between 0-50) or iZotope RX resampled with a value between 0 (minimum) and 1 (linear); something like 0.9 might be a good intermediate phase value that will significantly reduce the amplitude of pre-ringing.

There might be other fine-tuning options (like apodizing options, and choice of windowing function - Blackman, Hamming, etc. - which even geeks might not care about) but these three above I think would cover the bases.

In the same way, a "sinc-Adaptive..." option where the number of taps can be set correlated with the fs ratio might be fantastic:

Even a 2048-tap base would be very steep already, scaling up with the fs ratio, so at 96kHz (2fs) it would be 4096 taps, 192kHz (4fs) 8192 taps, etc.

With these 2 "core" filters, there would be no need for those rather confusing, very steep "sinc-XX" versions and this would provide the ultimate "tweakability" for users. Furthermore, the audiophile can select extremely low-tap settings if desired; for example a minimum phase setting that might look like the PonoPlayer/Ayre Listen setting could be of interest to some. Heck, even a minimum phase, low-tap (20-80), cutoff around 90% "MQA-like" filter might be interesting, allowing for "aliasing" if desired.

The software can then provide other options beyond the customizable and powerful "core" windowed sinc functions; maybe "NOS/Zero-Order Hold", or quick linear/cubic interpolation recognizing that these are clearly "suboptimal" settings but some listeners might like them anyways. And then keep some of the more unique current variants as "Classic Presets" that users might want to quickly go back to like the "IIR" or maybe "poly-sinc-mqa".

While an update like this might take away from HQPlayer's advertising claims such as having "28 linear phase" options, this level of customizability would be IMO superior and would basically provide countless options the user could experiment with (within reason of course, I don't know why anyone would need >1,000,000 taps other than some kind of "bragging rights" for example). Furthermore, it would be easier to share the parameters with others and these values would make way more sense than the current unintuitive nomenclature - like whatever "sinc-Mx" is without looking at the manual.

I imagine similar ideas could be adapted for the DSD options as well that will improve the user experience. Anyhow, it would be lovely to see some disciplined control over the dizzying array of growing, inter-related filtering options. To escape from being idiosyncratic "geek" software to a certain extent, I think HQPlayer needs to seriously think about how to align with the needs and interests from a user's point of view, moving towards reliability, maturity, and elegance even if ultimately only perfectionistic audiophiles would ever care. Maybe with HQPlayer 5?


Well audiophiles, March is almost here and I can feel the arrival of Spring in the air in Vancouver. Days getting brighter, spring flowers like crocuses already out and in the next few weeks the cherry blossoms and then tulips should be in bloom as well.

As anticipated, COVID-19 restrictions are getting lifted gradually. Optimistically, this is looking like it's heading to a very nice Spring and Summer with increased freedom to gather and travel.

However, sadly the world is not in a good place these days with war, disunity, and propaganda. As petty and typically harmless as our battles in the audiophile sphere might be in the big picture of world powers, hierarchies and economies, as I've said over the years, I see our hobby as a microcosm of the world before us. How we align our allegiances, support/resist agendas, allow ideas to take hold of our belief systems, spend our money, impose our own "sanctions", can all be seen as little re-enactments of the tensions in the world. Thankfully, the battles and wars in this hobby do not (I trust) lead to tragedies and disasters personally or to those around us. For me, it's a playground to learn the technology, observe the psychology of humans while engaging in a hobby I enjoy, and of course put some writing out there to those who might also be going through this journey at this point in history.

As a reflection of scale, microcosmic disagreements are obviously much easier to settle. In the world of the audiophile, typically the "simple" choices are whether and how much faith we have in testimonies and to what degree we need to demand evidence; recognizing and allowing for levels of evidence to be our guide. Even at this basic level, human psychology is hard to navigate to achieve unity as hobbyists. So much more complex the issues in the larger world; nonetheless, at its heart, these themes of finding truth, and holding those who assert their philosophies and beliefs responsible remain fundamental.

This weekend, my hopes and prayers are with those in Ukraine though I recognize that every week, we can point to the never-ceasing pockets of suffering in this world.

Take care, dear audiophiles.

"In every bit of honest writing in the world, there is a base theme. Try to understand men, if you understand each other you will be kind to each other. Knowing a man well never leads to hate and nearly always leads to love. There are shorter means, many of them. There is writing promoting social change, writing punishing injustice, writing in celebration of heroism, but always that base theme. Try to understand each other!"
                                ― John Steinbeck, Of Mice and Men, 1938 journal entry


  1. Very good article and I hope Miska/HQPlayer takes note.

    1. Hi verifonix,
      Yeah, I've posted the link to this article over on the Roon forum so folks are aware of the thoughts...

  2. If Hires doesn't provide audible benefits, then wouldn't upsampling be pointless?

    1. Hi Unknown,
      The quality of the filtering is what's important here in the upsampling process. All we're potentially doing is to improve upon the built-in filter being used in your DAC. These days, many DACs are already excellent so the benefits might be limited anyways.

      With 44.1/48kHz recordings, it's good to have adequate filtering of course to make sure we don't have imaging artifacts, maintain a nice and flat frequency response, and I believe a linear phase (or intermediate phase) is the way to go to prevent/reduce phase changes.

      IMO, a DAC with relatively poor filter like say the Ayre Codex could be improved by HQPlayer's superior algorithms. As usual, I'm not insisting that "perfect" megatap brick wall is needed. ;-)

      For completeness, upsampling hi-res 88.2/96+kHz material is not all that important which is why the "Filter Nx" setting isn't as significant - a simple "poly-sinc-short-*" will do, saving CPU cycles.

  3. Jussi set out his reasons for AVX2 requirement here:

    The EC and EC2 modulators are popular choices amongst HQ Player users. Any chance of a review ?

    1. Hi Andybob,
      I don't see any discussion there about AVX2 vs. SSE4.2 being a huge difference. Just about product life cycles which isn't really pragmatic for audio upsampling!

      I don't think everyone interested in HQPlayer wants to use DSD upsampling (I don't personally because DSD often does not perform as well as PCM in many DACs - especially ESS ones).

      At some point, just like "megatap" filters, I think audiophiles stop being impressed by the numbers and just want to implement a very good, even "ideal" filter in their Roon streaming playback better than what's in the DAC. That's basically my argument here. I'm demonstrating that a low-power machine that's fanless can do the job well and some potential customers might be interested in buying HQPlayer for this purpose because it already competes with an expensive Chord M-Scaler. I don't see why Jussi would want to isolate these potential customers just to implement a few AVX2 instructions that might be helpful for DSD modulators that folks like myself would actually not care about!

      Like I said, I feel that this is "geeky" software that's not mature. IMO, if AVX2 is really that important, then at least detect the CPU's limitations at installation and warn users if they cannot run the program (instead of saying nothing). Even better, AVX2 can be the default for CPUs that support it, and if it indeed is essential for certain modes like the DSD modulators including EC, then turn those options off for CPUs that can't handle it. One of these days, are we then going to insist on AVX-512 just because it's newer or argue that hardware life cycle moved on?!

      IMO, this is just what graceful software implementations should look like with respect for the users who paid $250 and are happy with the function of the program for their needs. At least they can still use it as they might have for years, recognizing that if they want some of the more power-hungry functions like DSD512, sure, upgrade as desired!

      Yeah, maybe at some point I'll try out the EC modulator... I've taken my nVidia GTX 1080 GPU out of the sound room for the time being. Not sure what there is to look/listen for with EC anyways other than wasting electricity. ;-) Already everything's great with PCM!

    2. AVX2 was introduced on 4th Gen Intel Core, in 2013, 9 years ago. This is quite a while ago in terms of computers. Also all AMD Ryzen series CPUs support it. If you need to stick to SSE4.2 baseline, there's still that option on Ubuntu Linux and macOS. Windows is just generally horribly painful to deal with. One of the drivers for the change was all the complaints I got for performance on AMD CPUs. Now the performance is again level Intel vs AMD. Another driver was introduction of 12th Gen Intel CPUs that have two different types of CPU cores (similar to Apple's M1). Both Performance and Efficiency cores there support AVX2.

      These performance things apply to many other things, such as convolution engine as well.

      With the current changes, I can now do DSD512 with EC modulators from inexpensive i5-11600 CPU, some thing that couldn't do even DSD256 in first iterations. And DSD256 from low power i5-7600T. So it enables much more from inexpensive CPU models than before.

      Dynamic code selection also has certain overhead and added complexity for a big code base.

      I know many recent Atom (aka Celeron/Pentium) CPUs don't support this, but for those, Windows is pretty sub-optimal environment anyway and you get better performance on Linux. I'm writing this on such "Pentium Silver" laptop, on Linux Mint Cinnamon... And it runs latest HQPlayer just fine for certain simple tasks. No money spent on the OS (I wiped the Windows that came with the device immediately). 10 hours of emails on one charge!

    3. Thanks for the comment Jussi,
      I appreciate your work and what you have accomplished here. As I mentioned here and elsewhere, your software brings the filtering capability of computers easily up to the level of the much-touted Chord M-Scaler at a fraction of the cost of that hardware.

      In an age of inflationary price shocks and environmental stewardship, plus IMO the idea that more powerful computers are unnecessary (and could result in more noise in the sound room), I believe I have shown in this post that a simple fanless Celeron at $250 plus HQPlayer say full price at $250 is able to do at least what the M-Scaler does at less than 1/10 the price while sucking up <10W of power. Let's see the M-Scaler do 768kHz USB out, HDMI output, multichannel streaming, or even bitstreaming with Atmos content which are all easily achieved in Windows!

      As I said, I really don't care much about DSD which IMO is just too much effort for too little gain. I'd rather send the DAC 32-bits/352+kHz PCM and let it do its "magic" internally with typically multibit-SDM (or I guess multibit R-2R for those devices). I'm sure some DACs out there play DSD really well but this has not been my experience with the kinds of (realistically priced) gear that I play with.

      Given that SSE4.2 already worked for years on Windows, and is fine with something like the Atoms and Celerons, and Windows being a popular OS (in part I want to stick with Windows as a Home Theater PC when not playing music), I still think it's wise to maintain as much compatibility as possible for potential consumers. You already spent time writing the SSE4.2 code - I assume what it takes is to check the CPU the computer is running on and turning off the features that absolutely need AVX2. As you noted, even many current-model Atoms and Celerons don't do AVX2 and I bet Intel sells a bunch of those CPU's, all capable of being turned into fanless M-Scalers!

      Anyhow, it's your software so I respect your decisions. As a potential user, these are just my thoughts... It's a shame to waste capable hardware regardless of age / CPU generation I think.

      BTW: though not shown, I did test out the convolution DSP on this fanless computer and I see that it's still just as capable with basically zero penalty when using "sinc-M" - absolutely no problem!

    4. I think it is bad idea to run Windows on such low power hardware, since Windows is such a resource hog. These are much better off with Linux Mint with Cinnamon desktop for example. I'm writing this reply on such laptop under Mint.

      In addition Windows 11 has pretty high requirements and Microsoft is ending Windows 10 support in couple of years.

      At the moment I'm telling compiler to generate AVX2 code. Mixing SSE4.2 and AVX2 code makes performance degradation in certain cases (two different size SIMD register sets).

    5. What can I say, man? Windows works even with low power as I've shown! And it'll get even better with newer generations of computers with higher efficiency.

      And in the sound room as a home theater PC that supplies multichannel which HQPlayer can also support, it blows away any Linux version I've ever seen!

      As a business case, I still think it's best to support as many machines as you can! For PCM upsampling, there's IMO no reason not to. To keep chasing after the DSD side of the equation instead of focusing on the value of PCM upsampling which can be done on these lower power machines is IMO too focused on a small segment of the market which few audiophiles would find beneficial. (And in fact could end up sounding worse!)

    6. What do you mean by "blows away any Linux version"?

      HQPlayer is primarily designed to replace all the DSP processing performed inside DACs, including delta-sigma modulators.

      Changes in the Windows version have been largely driven by feedback I've got. So far, except your, I've got feedback of HQPlayer Windows version not working only from people with 2nd or 3rd gen Core CPUs.

      On my Atom servers, I run solely HQPlayer Embedded (no graphical desktop, just text console). It also enables UPnP Renderer functionality and doesn't need nearly as much RAM as Windows.

      But most cost-efficient PCM upsampling with HQPlayer is to run my HQPlayer OS image on RaspberryPi4. And almost as cost efficient is to run HQPlayer OS on something like UP Gateway or Fitlet2. No need to pay for OS, and you gain the said UPnP Renderer functionality as well.

    7. Sorry I was unclear, the "Linux version" I was referring to was in reference to using Linux as a home theater PC machine; not versions of HQPlayer - I've tried various distributions like Ubuntu and Mint over the years.

      While KODI and packages like LibreELEC are great on Linux-based boxes, the flexibility of Windows and broad compatibility for general web surfing, playback of video and audio files just works with less hassle than Linux implementations. Also, just the mass of potential other software available, hassle-free compatibility with streaming services makes it hard to leave Windows if the OS is available for more general purpose home theater AV.

      Anyhow, that's fine, I think if the HQPlayer customers are aiming towards Pi4 or Linux Atom servers on the lower power side or powerful machines +/- GPU on the other extreme, that's where the interest is...

  4. I usually switch between Sinc L and Sinc M, depending on whether the Apod counter on HQplayer starts going crazy. I remember seeing somewhere that Sinc M/Mx/S have an earlier frequency cutoff than sinc L, which cuts off almost exactly at nyquist.

  5. One of the main reasons i use HQplayer is because it has nice apodising filters that i found work well for badly mastered or badly recorded files. I never use DSD, only PCM. It would be nice if other resamplers had more than one linear phase filter option, either apodising or non apodising. I'm guessing this will just be down to window function options. A more stripped down, maybe cheaper, filter program which has some good filter base (linear phase, steep enough, cutoff around nyquist) modified with at least 2 different window functions would be nice to have, but in the meantime i will continue to use HQplayer.

  6. Great article archimago, ive been looking for a better explanation of the filters in hqplayer so thank you. i find it very interesting and after spending several months ABing the filters sticking with some for weeks at a time i seem to go back to sync m / lns15 / 1.5m to my holo may nos dac.