Releases: GarageDeveloper/qa40x-rs
Release list
v0.4.0
Still an early stage release — and a big one: multi-device support lands. Several analyzers (and the built-in virtual QA403) can now share one bench, each with its own capture loop, signal routing, measurement programs and export identity. The A/B loopback bench against the official application stayed green through every step (24/24 metrics × flat-top and Hann, re-run per merged lot).
What's new
Multi-device (#25, lots A–F)
- Several devices at once: add a second unit (real or the built-in virtual QA403) from the Traces panel — each device gets its own trace group with per-group Run/Stop/Connect, user-renamable labels, and a focus selector deciding what the toolbar and footer describe. Unplugging a unit leaves a dormant, named group with one-click revive on the same slot.
- Signal routing matrix: each signal source can drive any device × channel combination (L/R/both per target), edited per source row — a source pinned to device B plays on B while A stays focused, no focus gesture. Persisted slot-keyed, so workspace docs stay bench-portable.
- Per-device measurement programs: sweeps run on the device they're pinned to (destination picker on the program row), concurrently across devices, with per-device exclusivity gates backend-side. Scripts route to their pinned device too (one script at a time bench-wide).
- Honest export identity: CSV/SVG headers and PNG footers name the device that OWNS the exported data — never whatever device happens to be focused — with capture-time provenance (
capture_*block) whenever the bench moved since capture, and aexport_devicesroll call on mixed tiles. - Rhai
device(): scripts can read the identity, live status and capability record of the device their run is bound to. The REST scheme stays deliberately mono-device (official-app parity); multi-device REST is tracked separately.
Oscilloscope (lots A–B of #26)
- Real trigger: AUTO / NORMAL / SINGLE with Schmitt hysteresis, sub-sample edge alignment, per-endpoint settings and a held-picture provenance snapshot.
- Measurement suite: Vpp, Vmean, AC RMS, frequency, rise/fall, duty — with sliding statistics and a reset.
Measurements
- THD vs level sweep (#27) and wow & flutter (DIN/IEC 386, #28) wired to the UI as measurement programs — result curves land as traces you can freeze, compare and persist.
- User weighting curves (#29): import a CSV response (e.g. ITU-R 468) and apply it as a transform step.
Data & storage
- CSV / SVG / PNG export with provenance headers (#30): device identity, acquisition settings, converter calibration — plus capture-time provenance per trace (#40).
;-separated CSV with.decimals (locale-proof for spreadsheets). - Workspace storage moved to IndexedDB with binary frames (#44): saving a bench full of frozen 32k captures no longer hits the localStorage quota.
What's fixed
- LINK LED parity (#54): an in-capture ~1 Hz keepalive keeps the front-panel LINK LED lit like the official app.
- Trigger chip no longer leaks onto spectrum/sweep tiles; scope CSV exports clip to the displayed window; sweep exports carry per-curve units; many smaller fixes from the per-lot adversarial reviews.
Docs
- doc/device-notes.md grew I2S protocol notes, page selector and trace buffer details.
- Rhai scripting API (incl.
device()) documented insrc-tauri/src/script.rs's module doc; example scripts updated in-app.
"Negative Feedback" still welcome ;)
qa40x-rs Audio Analyzer v0.3.0
Still an early stage release — but this one comes with a milestone: the A/B loopback bench against the official QA40x application is fully green for the first time (all 24 compared metrics within tolerance, under flat-top AND Hann analysis windows, on the same QA402).
What's fixed
- THD at low fundamentals now matches the official app (#14):
/ThdDbhonors its max-harmonic parameter (it used to stop at 10 harmonics — optimistic, not cleaner), and the REST acquisition no longer analyzes a latency-gated window (the tone is played as a periodic continuation, so the analyzed frame is pure steady state). THD @ 100 Hz went from a −5.2 dB divergence to +0.86 dB agreement. - Output level is factory-calibrated (#8): the per-unit DAC trims are now applied when generating dBV stimuli, not just when reading them — absolute level agrees with the official app to 0.014 dB.
- REST
AudioGenamplitudes are dBV with the official call signatures (#20) — breaking if you scripted the old dBFS behavior: add your output range's dBV (e.g. dBFS + 8 on the +8 dBV range).
What's new
/Settings/Windowing/{Rectangle|Bartlett|Hamming|Hann|FlatTop}— the official (wiki-undocumented) analysis-window endpoint. The REST measurement default is now flat-top, like the official app at startup; set/Settings/Windowing/Hannfor the previous behavior.- "Round to bin" toggle in the Signal Sources panel — the official app's Round to eliminate leakage, on by default; the actually-played frequency is shown next to the ask (e.g.
1000 Hz → 1000.4883 Hz). Off plays the exact asked frequency. - The A/B bench grew a window matrix (same window forced on both apps per pass), a THD-method probe, per-acquisition spread reporting, and an offline
--probemode — that tooling is what found the two bugs above.
Docs
- New verified A/B baseline (24/24 × 2) and a root-cause post-mortem in doc/bench-ab.md.
"Negative Feedback" still welcome ;)
qa40x-rs Audio Analyzer v0.2.2
Still an early stage release — please don't trust it for your measurements yet :)
What's fixed
- Averaging (×N) is now a true rolling window — the trace no longer resets every N frames (#10, first user report from the QuantAsylum forum — thank you @BarryLambert!)
- Restored extra tones are no longer invisible: the Tones button shows the enabled count and lights up, and the tone editor's open state survives a relaunch (#17)
- Integrated band noise now matches the official app (coherent generator + ENBW) (#7)
- REST: the generator drives both outputs, matching the official app
- The app-settings button (⚙) moved to the top-right, on the same edge as the drawer it opens (#13)
Docs
- Verified A/B parity baseline vs the official QA40x app, published and linked from the README
"Negative Feedback" still welcome ;)
qa40x-rs Audio Analyzer v0.2.1
Still an early stage release — please don't trust it for your measurements yet :)
What's fixed
- Linux: the packaged udev rule now also grants access to the NXP bootloader, so firmware flashing works without a manual rule.
"Negative Feedback" still welcome ;)
qa40x-rs Audio Analyzer v0.2.0
Still an early stage release — please don't trust it for your measurements yet :)
What's new
- Demo mode: one click spins up an embedded virtual QA403 (vqa40x-core v0.3.0) — no hardware needed to try the app. The simulated noise floor is now live: every acquisition is a fresh noise realization, so spectra dance like on a real analyzer.
- Plug in a real QA40x mid-demo and the session hands over to the hardware.
- Dependency updates.
"Negative Feedback" still welcome ;)
qa40x-rs Audio Analyzer v0.1.0
This is an early stage release. Please don't trust it for your measurements, and indeed don't trust it at all :)
"Negative Feedback" welcome ;)