VoiceLevel
A fader that only ever turns the mic down

What it does
A leveler for a speech microphone has one job on a stage: when the presenter leans in and gets loud, bring them back down before the room complains. A compressor does that syllable by syllable and changes the sound of the voice; an automatic gain control does it in both directions, and will lift the gain during a pause until the system feeds back. VoiceLevel does what a good operator does with a hand on the fader instead — and only that.
Unity gain is the ceiling. There is no path in the plugin that can add gain, whatever the settings, so a quiet talker is left alone and a pause cannot creep the channel up towards feedback. The attenuation moves like a fader, not a compressor: it slews towards the target at a rate in decibels per second, so a loud talker is brought down over a second or two and the sound of the voice is untouched. When the microphone drops below a hold threshold the fader freezes where it is, because a pause is not a reason to bring a hot mic back up. And the audio path is a single multiply per sample with no look-ahead, so it adds nothing to the delay through the desk — the lag is on the fader's movement, which is the point.
Two detectors run on a 100 Hz high-passed copy of the input, so plosives and handling noise do not pull the fader down: a fast RMS that decides whether anyone is talking, and a slow one that only integrates while they are, so the level the fader is steered by is the level of the speech rather than of the speech and the silences together. Learn uses the same measurement at the soundcheck — five seconds of speech, pauses excluded — and parks the fader at the attenuation that puts that talker on target for the rest of the show.
- Attenuation only: 0 dB is the ceiling, and the tests assert the output never exceeds the input sample for sample
- Zero latency: no look-ahead, no internal buffering, reported latency 0 — safe to monitor through
- Target level, with the fader pulled down at a dB/s Speed and eased back up at a slower Recovery, stopping at unity
- Hold below: under a threshold you set the fader does not move, so pauses hold rather than recover
- Range caps how far the fader can ever go, in every mode
- Learn: measure five seconds of speech with the pauses left out, then park the fader in Fixed mode — from the editor or from the Mode parameter alone
- Fixed mode with a draggable fader, doubling as a bypass at 0 dB
- Meters that show the target as a line, the talker's speech level as a tick, and the fader as what is being taken off
- Stereo-linked: the louder channel steers and both get the same gain
- VST3 and CLAP for Windows, macOS and Linux, plus a standalone app that runs on an audio device for trying it on a real mic
Where it stands
Released at v0.1.0, whose macOS builds are signed and notarised by Apple. Beta: the leveler is pinned by fifteen unit tests (it never boosts, sample for sample; it pulls a hot signal to target at the configured dB/s; it recovers more slowly and stops at unity; it holds through silence; Learn measures speech with the pauses excluded and commits on leaving Learn; stereo linking; rumble rejection; a zero-latency impulse), the VST3 passes pluginval at strictness 10 with a reported latency of 0, and the standalone has been run live on synthesised speech through a loopback device, where the pull-down and the hold through silence were watched happening. It has not yet been used on a real microphone at a real event, and it has met few hosts. The CLAP build passes clap-validator except four state-load checks that fail identically on nih-plug's own example plugin.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead