v0.5.0 - Ballistics-accurate metering
What's new
Input and output meters now show real ballistics instead of a raw peak read:
- Peak — instant attack, ~20dB/s exponential release
- VU — one-pole RMS integrator, ~300ms to settle on a step (classic VU-style ballistics)
- True peak — 4x-oversampled estimate (Catmull-Rom interpolation) catching inter-sample peaks a plain sample read misses
- Clip indicator — held ~1.5s, triggered at a small headroom margin below 0dBFS
All of it runs on a read-only side path off a copy of the buffer — it can't add latency to the actual signal chain, keeping the plugin's zero-added-latency guarantee intact.
Bugs found and fixed during verification
Both caught by the project's real-audio test harness, not by pluginval or GUI-only checks:
- Clip threshold never triggered. An exact
>= 1.0fcheck missed genuinely full-scale samples because normalized-parameter round-tripping through the "0dB" gain stage doesn't always land on bit-exact1.0f. Fixed with a-0.1dBFSheadroom threshold — also just how real clip indicators are normally built. - Clip hold timing was wrong. The hold counter was tracked in "blocks remaining," decremented once per
process()call, but the hold duration was computed assuming a specific block size. Different block sizes on later calls threw off the real elapsed hold time. Fixed by tracking samples remaining instead.
Verified
pluginvalstrictness level 5: clean on both VST3 and AU- Real-audio test harness: peak attack/release timing, VU ballistics, true-peak inter-sample detection, and clip-hold duration all checked against known test signals
- Hosted successfully in REAPER
Known limitations
- Dynamic EQ: no external sidechain input yet (internal detection only)
- Not yet tested against real (non-silent) audio hardware in a live signal chain
- No linear-phase mode — intentionally out of scope (zero latency is the point)
Full Changelog: v0.4.0...v0.5.0