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 192.168.1.90 so it's always easy to just point Roon to the machine:
|On most routers, DHCP will only manage devices above 192.168.xxx.100+ so I have this sound room computer at 192.168.1.90 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):
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.|
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":
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.
Frequency Response - Selected Upsampling Options...
|I've put the Nyquist frequency of 22.05kHz as the cursor.|
Dithering & Noise-Shaping PCM Options...
Thoughts on Subjective Impressions, Filtering and HQPlayer...
PS: Parting thoughts on HQPlayer - A suggestion: simplifying & better defining the options?
"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