dgo42
Member
- Joined
- Jul 7, 2026
- Messages
- 44
- Likes
- 45
Hi all,
following a suggestion, here is a dedicated thread for Phonalyser - a free, open-source audio measurement workbench I develop. AGPL-licensed, no account, no telemetry; it grew on my own bench and I use it daily.
Links first:
A desktop analyzer (Windows / Linux / macOS) plus a WebAudio port of the same engine that runs in Chrome/Edge. The modules:
Highlights of the last release: the ideal-filter overlay/compare and the flatness readout on the frequency-response module; the scope's residual view and the DSO-grade dense trace rendering; per-card calibration profiles (full-scale follows the physical card across backends, one row per attenuator/DIP range, per-channel L/R values, known-card catalog seeded for Cosmos ADC / I2SoverUSB); the QA40x backend on all three desktop platforms; output-channel selectors; help in English, German and Ukrainian, UI in 31 languages. Full changelog: https://dgo42.github.io/Phonalyser/changelog.html
A look ahead - 1.1.1 (in test now)
The headline is a metrology correction I want to be transparent about. While cross-checking noise numbers against a QA403 I ended up building a ground-truth pipeline (raw WAV capture -> least-squares sine fit and subtraction -> rectangular-window Parseval band integral; script and reference capture are in the repo). The outcome on my side: all integrated-noise metrics (SNR, N, N+D, SINAD, ENOB, THD+N) were pessimistic by the analysis window's noise bandwidth (NENBW) - 1.76 dB with Hann, 3.0 dB with Blackman-Harris 4, up to 7.5 dB with HFT248D. Tones and THD were never affected. 1.1.1 divides the noise integrals by the exact NENBW computed from the actual window table, rescales the integral for the excluded signal zones instead of counting them as silence, and makes the fundamental's skirt exclusion robust at high overlap. Validated against constructed, independently computed dither power; the Theory-of-operation chapter documents the math and tabulates every window's factor. Desktop and web both.
Also in 1.1.1: a fixed 32-bit Windows build (a libusb calling-convention bug crashed QA40x streaming - relevant if your measurement PC is an old lab machine), and the plain JARs become fully self-contained: the WASAPI-exclusive 24-bit mixers, the help and all UI languages now ride inside the JAR and unpack themselves on first start.
I'm happy about feedback, measurement cross-checks and bug reports - here or on GitHub. Screenshots attached below.
Multufunctional tab:
FFT: ultralow distortion:
Frequency response: 1kHz twin-T notch filter:
following a suggestion, here is a dedicated thread for Phonalyser - a free, open-source audio measurement workbench I develop. AGPL-licensed, no account, no telemetry; it grew on my own bench and I use it daily.
Links first:
- Project site: https://dgo42.github.io/Phonalyser/
- Run it in the browser, nothing to install: https://dgo42.github.io/Phonalyser/web/
- Source: https://github.com/dgo42/Phonalyser
- Downloads (Windows installer, Microsoft Store, platform JARs for Windows/Linux/macOS): https://dgo42.github.io/Phonalyser/download.html
A desktop analyzer (Windows / Linux / macOS) plus a WebAudio port of the same engine that runs in Chrome/Edge. The modules:
- FFT analyzer - THD, THD+N, IMD, SNR, N, N+D, SINAD, ENOB with per-harmonic readout; coherent and power averaging with overlap up to 93.75 %; windows from Hann through Blackman-Harris, flat-top, HFT144D/248D, Kaiser and Dolph-Chebyshev; live .frc calibration. With a capable converter (e.g. E1DA Cosmos) sub-ppm THD measurements are practical - coherent averaging pulls the correlated floor down.
- Oscilloscope - triggered time-domain view with digital-phosphor dense rendering, glitch trigger, and a residual view: captured signal minus a best-fit tone (single or dual), which exposes the distortion, noise and glitches hiding under the fundamental.
- Frequency response - Farina log-sweep deconvolution, RIAA/IEC and ideal-filter overlays (low/high/band-pass, notch × Butterworth, Chebyshev, inverse Chebyshev, elliptic, Bessel) with measured-vs-ideal compare, and a band-flatness readout (−X dB corners or ± deviation over a range).
- Signal generator - DDS sine, dual-tone, rectangle/triangle, noise, sweeps; dither depth settable in bits or directly in dBV so it reads straight off the FFT noise floor.
- DAC pre-distortion - a closed-loop wizard that iteratively cancels the DAC's own harmonics (and dual-tone IMD), pushing the playback chain below what the converter does alone.
- Notch tuning - a live looping sweep tracks a passive twin-T's null while you trim it, then de-embeds the notch's response from the FFT.
- Audio paths - WASAPI-exclusive and WDM-KS on Windows, CoreAudio on macOS, JavaSound on Linux - bit-exact, high sample rates, 16/24/32-bit. Plus a native USB backend for the QuantAsylum QA402/QA403 (vendor software closed): always-duplex on the device's single clock, true 24-bit, full-scale taken from the device's own range calibration.
Highlights of the last release: the ideal-filter overlay/compare and the flatness readout on the frequency-response module; the scope's residual view and the DSO-grade dense trace rendering; per-card calibration profiles (full-scale follows the physical card across backends, one row per attenuator/DIP range, per-channel L/R values, known-card catalog seeded for Cosmos ADC / I2SoverUSB); the QA40x backend on all three desktop platforms; output-channel selectors; help in English, German and Ukrainian, UI in 31 languages. Full changelog: https://dgo42.github.io/Phonalyser/changelog.html
A look ahead - 1.1.1 (in test now)
The headline is a metrology correction I want to be transparent about. While cross-checking noise numbers against a QA403 I ended up building a ground-truth pipeline (raw WAV capture -> least-squares sine fit and subtraction -> rectangular-window Parseval band integral; script and reference capture are in the repo). The outcome on my side: all integrated-noise metrics (SNR, N, N+D, SINAD, ENOB, THD+N) were pessimistic by the analysis window's noise bandwidth (NENBW) - 1.76 dB with Hann, 3.0 dB with Blackman-Harris 4, up to 7.5 dB with HFT248D. Tones and THD were never affected. 1.1.1 divides the noise integrals by the exact NENBW computed from the actual window table, rescales the integral for the excluded signal zones instead of counting them as silence, and makes the fundamental's skirt exclusion robust at high overlap. Validated against constructed, independently computed dither power; the Theory-of-operation chapter documents the math and tabulates every window's factor. Desktop and web both.
Also in 1.1.1: a fixed 32-bit Windows build (a libusb calling-convention bug crashed QA40x streaming - relevant if your measurement PC is an old lab machine), and the plain JARs become fully self-contained: the WASAPI-exclusive 24-bit mixers, the help and all UI languages now ride inside the JAR and unpack themselves on first start.
I'm happy about feedback, measurement cross-checks and bug reports - here or on GitHub. Screenshots attached below.
Multufunctional tab:
FFT: ultralow distortion:
Frequency response: 1kHz twin-T notch filter:
Last edited: