• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

I designed a digital filter myself, for converting WAV files

Gary136185925

Member
Joined
Aug 22, 2026
Messages
8
Likes
0
Thanks to the AI era,an open-source audio file converter I designed myself,runs on Windows,converts 44.1/48khz to 176.4/192k, passband cutoff frequency 22.05/24 kHz,I recommend the latest WLS MIN digital filter option,this is more advanced than the traditional kaiser-windowed Sinc truncation function

check
https://github.com/136185925/garyaudioconverter
How to use it?
Download the Release folder and use it on a Windows computer

A Windows desktop WAV sample-rate converter built with Flutter and a native C++ DSP engine. It accepts uncompressed 16-bit or packed 24-bit PCM WAV files at 44.1 or 48 kHz and writes selectable 16-bit or 24-bit 4× output at 176.4 or 192 kHz beside each source file by default, or to a selected custom folder.

It is the best-sounding digital filter I have ever heard, if you have a DAC, or NOS DAC, feel free to try it
I wrote it into another project of mine, a USB audio digital interface based on STM32F769DISCO, check out my other project

https://github.com/136185925/STM32F769I-DISCO-USB-Audio-Upsampler

QQ20260822-174107.png
 
Hi and welcome to ASR. Do you have any frequency or phase response measurements, impulse response plots or any other data on the filter performance?

Also, of you say "best sounding", could you elaborate how you tested that?
 
Hi and welcome to ASR. Do you have any frequency or phase response measurements, impulse response plots or any other data on the filter performance?

Also, of you say "best sounding", could you elaborate how you tested that?
The initial idea for this filter stemmed from the fact that my Bifrost 1 sounded a bit harsh, but it could only bypass the built-in digital filter through 4x upsampling. Therefore, the testing environment is subjective; whether you find it pleasant or unpleasant is ultimately up to your ears.
 
I just converted a 24/96 to a 16/44 in Audacity, then set FB2K to ABX both. From the results, FB2K decided I could not tell them apart!
I assume Audacity is not as good as your converter, so I guess it's wasted on my ears!
I could try a diff, and see how far apart the two files are between Audacity and FirMin - but then storage is cheap enough to keep the 24/96 as purchased! It's still a fun project though.
 
The initial idea for this filter stemmed from the fact that my Bifrost 1 sounded a bit harsh, but it could only bypass the built-in digital filter through 4x upsampling. Therefore, the testing environment is subjective; whether you find it pleasant or unpleasant is ultimately up to your ears.
It would be a good first step to use an ABX tool like this extension for foobar2000 to establish whether therer is any audible difference at all. Attributing characteristics to filters where it's not even clear if audible differences exist is in essence attacking the problem from the wrong angle.

Analyzing the filter response in the frequency and phase domain would also be essential to understand if the filter is well behaved and actually does what you want it to do. It's not a question of pleasant or unpleasant: You want to know what a filter does before you let it loose on your audio system. What if it clips all over the place? What if it creates ultrasonics with an amplitude response >1 or other crazy stuff? Seems like you would want to know that beforehand.
 
I had AI help me run some Python spectrum analysis tests,the test files contain 1M tapes,although I haven't released this version yet,this version includes some FLAC,APE and other decoding features,Some FFmpeg decoder files are relatively large, but Github has a 100MB file limit so I can't upload it


comparison_mastering.png


comparison_mastering.png
 

Attachments

The inconsistent energy before and after the main peak in the lower right of the figure is due to the sampling window, and is not actually asymmetric

If you feel the sound is polished too smoothly, you can add some TPDF as appropriate
 
Last edited:
  • WLS LISTEN has been changed to true Constrained WLS + Minimum Phase, and the Release build has been completed. Main changes:
    • 44.1 kHz: passband 0–20.5 kHz, transition to 22.05 kHz
    • 48 kHz: passband 0–22 kHz, transition to 24 kHz
    • Automatically tries 1/4/16/64/256× passband weights
    • Each candidate uses FFT to check passband ripple and stopband peak
    • Selects the candidate that satisfies the constraints and has the flattest passband
    • Constrained WLS uses up to 512 PCG iterations, 1e-12 relative accuracy
    • Continues to use Minimum-phase, with no linear-phase pre-echo
    • Kaiser MIN, WLS MIN, WLS LINEAR are all unchanged
Download Release_v2.2 at right side
 
Last edited:
While filterless NOS DACs greatly improves in sound quality, and signal fidelity, when using high bitrates (and thus also upsampling) isn't the whole point of using filterless DACs to listen to 44.1 and 48kHz files without a(ny) reconstruction filter (which an upsampler will add) and to kind-of 'enjoy' the 'roll-off' of a sample-and-hold waveform.

Can you zoom in on the transition band and on the passband ripple ?

Why not reach the stopband (say -100dB) at Nyquist ?
 
Last edited:
While filterless NOS DACs greatly improves in sound quality, and signal fidelity, when using high bitrates (and thus also upsampling) isn't the whole point of using filterless DACs to listen to 44.1 and 48kHz files without a(ny) reconstruction filter (which an upsampler will add) and to kind-of 'enjoy' the 'roll-off' of a sample-and-hold waveform.

Can you zoom in on the transition band and on the passband ripple ?

Why not reach the stopband (say -100dB) at Nyquist ?
Adjusted, check Release_v2.2
 
Release_v2.4:
Add WLS LISTEN 20K
20480 Taps for both 44.1k and 48k
Adjusted passband weight and PCG
Multi-Core CPU utilize
 
Release_v2.8:
FIR MIN -> FIR MIN SOFT
WLS LISTEN -> WLS LISTEN TRANSIENT
Parameter optimization
 
Back
Top Bottom