Skip to content

v0.5.0 - Ballistics-accurate metering

Choose a tag to compare

@stoatworks-labs stoatworks-labs released this 17 Jul 09:38

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.0f check missed genuinely full-scale samples because normalized-parameter round-tripping through the "0dB" gain stage doesn't always land on bit-exact 1.0f. Fixed with a -0.1dBFS headroom 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

  • pluginval strictness 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