HQPlayer feature requests

Hmmmmm…this is new wrinkle in my coming HQPlayer adoption and setup for a main listening environment. My Roon library is a deep mix of FLAC, .DSF, and ALAC files specifically as I chose that format when ripping my CD library since it played nice with all things Apple ecosystem. So not wanting to transcode containers obviously as that would be a ton of work. So even though Roon plays ALAC just fine, are we saying here that these files won’t work with HQPlayer upsampling? Major bummer for me if so. Hoping not.

As long as you play through Roon, HQPlayer never sees FLAC, ALAC or DSF. Only raw PCM or DSD.

Standalone, HQPlayer plays FLAC and DSF for example. But not ALAC (and it is not planned either).

OTOH, standalone HQPlayer plays for example WavPack compressed PCM and DSD which I believe is not supported by Roon.

Ok, I figured it would be before DSP to avoid clipping, but I guess you have some internal headroom.

Thank you @jussi_laako I do plan on using Roon with HQPlayer on M1 Mac mini feeding your NAA image installed on an Intel Celeron NUC---->USB into a Holo MAY KTE. Very much looking forward to the results!

Hi Jussi

Does HQP OS support AIFF ?

Edit: just seen the HQP Embedded page and the answer is yes

https://www.signalyst.com/custom.html

any chance of a sinc-L filter that is apodizing? Or is there something about the way this filter is built that precludes apodizing?

Yes, by definition it cannot be apodizing.

very interesting. My overly simplistic view was that it was similar to sinc-M. But I guess there’s more going on under the hood…

thanks!

No, it is totally different from sinc-S or sinc-Mx (sinc-M is just “stupid” fixed-length version of sinc-Mx), nothing in common with sinc-L. sinc-S and sinc-Mx are similar. While sinc-L has much less stop-band attenuation although being very long. But technically sinc-L is maybe closer to Chord WTA although being longer.

2 Likes

Nice. Thanks for the clarification! The engineer in me would love a look behind the scenes on these filters, but I know there’s proprietary information that you really can’t share. Thanks for the little bits of insight here and there. Makes using the filters more fun.

I try to describe the relevant aspects in the manual without getting overwhelmingly technical.

But I’m happy to answer questions regarding filters. In the answers I just leave out the details I’m not comfortable talking about.

The filter naming in HQPlayer is such that the prefix tells about rough DSP algorithm type, and then middle part tells about the particular filter design family, and possible (optional) suffix about sub-type of the filter (linear-/intermediate-/minimum-phase), and when necessary distinction between two-stage and single-stage variants. Sometimes finding names for the filters is challenging though. But they try to describe the design intention. Like poly-sinc-ext (older) and poly-sinc-ext2 (newer) are very different while having same design goals. While poly-sinc-ext2 and poly-sinc-ext3 are very similar, similar goals, with different length. Many times I just write out the length in filter name, short/long/xl, etc.

1 Like

maybe this could be moved to a different thread, as it’s getting quite a ways off topic from “feature requests”. But I have some general questions based on your response, specifically the naming scheme:

[dsp_algorithm_type]-[filter_design_family]-[sub-type]

So taking one of the more basic filters as an exaple, poly-sinc-lp:
dsp_algorithm_type = poly
filter_design_family = sinc
sub-type = lp

poly? is it polynomial? or what does a poly algorithm refer to?
sinc, I’m assuming utilizes sinc functions
lp, linear phase, that makes sense

for poly-sinc-long-lp
is “sinc-long” the filter design family? long ringing? is it it length of the filter?

because on poly-sinc-gauss-long, I get the impress long refers to filter length. but in poly-sinc-long-lp I think it’s more about ringing. Or are they the same thing, and I’m just exposing my shallow understanding of DSP filter design…

(it’s been ~20 years since i took my digital filtering class… my design career went more analog than digital…)

It is actually mentioned in the manual… :wink: But “poly” is short for a polyphase filter.

Yes, that’s right…

Yes, right…

It means it has high number of taps → long filter → long ringing.

Yes it’s a same thing, high number of taps means long filter (in time) means long ringing (in time) and that roughly means faster/steeper roll-off in frequency domain.

My biggest efforts in filter design are about coming up with filters that try to get as close as possible to the mathematically impossible: being short in time domain, having steep enough roll-off, while having maximum possible stop-band attenuation - for most accurate reconstruction. Mathematically impossible because time and frequency domain have 1/x mathematical relationship.

3 Likes

You could get an analyzer to look at DAC outputs and visually see differences in how everything behaves :smiley:

Or super clean DAC and ADC (like RME ADI-2 Pro) ?

Does this mean sinc-Mx and sinc-L have long ringing? What I hear from these doesn’t seem the same as what I hear from other “long” filters. In terms of step response / impulse response what other filters are the sinc-Mx and sinc-L filters similar to? Or are these just completely unique?

Makes sense. And your efforts here are greatly appreciated! Many of your filters are truly remarkable.

But I also wonder how much of the non-ideality of most (all?) reconstruction filters is “baked” into the recordings during the mixing/mastering process? The audio engineer is listening to the mix through some DAC (RME ADI-2? and other similar studio equipment?), and that DAC has some imperfect reconstruction filter that will influence playback. Based on this playback the mix is adjusted. I wonder if this is part of why filters that more closely approximate an ideal response can sound “worse” than filters that are less ideal? Of course there is more goodness hiding in these recordings, hence the benefits we hear in better filters and noise shapers. But there must be some limit due to the mixing/mastering process.

yeah… almost brought home some test equipment from the lab at work last weekend, but ran out of time. One of these days I’ll do it.

And yes, the RME ADI-2 is on my list for future upgrades! Just need to sell another kidney to fund the purchase…

1 Like

Archimago had a look at HQP this way but a very limited look. And old version

And with ESS based DAC

1 Like

Yes, a million tap filter rings for a million samples. So, at 16x (705.6/768k) rate for a bit over a second. In practice, sinc-Mx a bit less than sinc-L even if they’d have the same number of taps, due to differences in the design.

I’d say a way less than how much non-ideality of the ADC anti-alias filters and other components are baked into the recordings. This is the reason why we need apodizing filters in the playback chain - to correct some of those errors.

Mostly because you can more clearly hear all the faults in there… Of course apodizing filters can correct certain types of errors from the digital production chain. But not other kinds of mistakes and faults.

But I’d say that apodizing filters give you more consistent results over varisous recordings.

2 Likes

Hi @jussi_laako

Any chance of having a version of sinc-L than can adapt to any rate?

Since UAC2 input of UP Gateway works fine when HQP output rate is fixed at one number, it would be nice to have this ability with sinc-L

And I assume there are others that would like it, if their DACs don’t support 48k base rates, for example.

I would assume the same for sinc-M and sinc-S

Out of interest only, how many “taps” does poly-sinc-xtr-lp have for 16x conversion ratio?

Or maybe a way to set different filter for 44.1k rate and different filter for 48k rate…

Then I could have sinc-L for RBCD and poly-sinc-xtr-lp for PCM48kHz music (not family, but actual music at that rate).

Seperate to Nx option…

1x-44.1k and 1x-48k

This is probably more flexible option?

Then I would fix all rates to fixed rate PCM705k output

No…

If you want conversion between rate families, use one of the suitable poly-sinc filters.

That is totally irrelevant information…

That just doesn’t make any sense…

HQPlayer doesn’t have anywhere anything that would lock things to something like “44.1k” or “48k”. What if the source is 47.5k instead?

1x is now defined as “<= 50k”.