Skip to content

New UI and Noise Gate - #44

Merged
benjibutten merged 18 commits into
mainfrom
staging
Sep 14, 2026
Merged

benjibutten merged 18 commits into
mainfrom
staging

Conversation

@benjibutten

Copy link
Copy Markdown
Owner

No description provided.

Benjiboy added 18 commits September 14, 2026 15:00
Add NoiseGateSampleProvider to mute the mic branch between phrases,
gated after switching and both mic volumes so the threshold reflects
the level actually sent. Add a primary-only volume ramp to
SwitchingSampleProvider for the normal mic, and raise the processed
voice volume ceiling from unity to a 2x boost to match.
Add NormalMicVolume, NoiseGateEnabled and NoiseGateThresholdDb to
AppSettings, and clamp them (and the now-2x ProcessedVoiceVolume
ceiling) on load like the other saved levels.
Add a Volume slider under the normal mic, move the processed-voice
Volume slider next to it under the modified-voice picker (same 0-200%
scale), and add a Noise gate checkbox with threshold slider and live
level bar under push-to-talk.
Update README, RELEASE_NOTES, the local voice profiles doc and the
FiveM guide (voice detection lingering after you stop talking) for
the new noise gate and normal/processed mic volume controls.
Add AppSettings.Clone, CopyConfigurationFrom and ConfigurationEquals so
the settings window can apply changes live while only its Save button
writes them. CopyConfigurationFrom is the one list of fields that
belong to the settings window; music card, music folders and window
size stay saved as they change. Add SetupGuideDismissed for the
first-run setup guide.
Move endpoint enumeration, the device heuristics and default selection
into AudioDevices so the main window and the setup guide agree on what
a virtual cable is. Recognize Virtual Audio Cable and Voicemeeter in
addition to VB-CABLE, pair a cable's playback end with its recording
end, and stop guessing a cable's recording end as a microphone.
A seven-step window that explains what MicMixer does and how a virtual
cable works, detects an installed cable (showing VB-CABLE install steps
only when none is found), and collects the microphone, modified voice,
cable, monitoring device, hotkey and push-to-talk. Nothing is written
until Finish; closing without Skip keeps the guide coming back, e.g.
after restarting Windows for the cable driver.
The main window now holds a status strip (state pill, hotkey and route
summary, Enable/Stop), problem cards that appear only when something
differs from the saved setup, and the full-width music card. The
two-column layout and its narrow mode are gone.

All setup controls move to a non-modal settings window with the pages
Devices, Hotkey, Noise gate, Overlay, Secondary output, Music folders
and General, with Save and Discard. Starting routing no longer writes
the devices it used into the settings, so a stand-in for a missing
device is reported instead of replacing the saved choice. The setup
guide opens on the first start and from Settings > General.

"Virtual cable output" is renamed "Send the mix to", with a diagram of
which cable end MicMixer and the game use.
Update README, INSTALLATION, release notes, the site and the guides to
the new settings locations and the Send the mix to name, and replace
the main window screenshot and add one of the settings window.
When the client closes, HttpListener's CloseOutputAsync tears the
connection down as part of its own close reply, so the test client
occasionally gets a connection reset instead of the reply and
CloseAsync throws. The test is about the client count, so accept that
and keep asserting that the count drops to zero.
The zero-allocation tests warmed up with a single call, so the 30-call
tiering threshold was crossed inside the measured loop, which now and
then showed up as a few KB allocated on the test thread under load.
Warm up with 100 calls first.
When the saved voice changer device was missing and no other input
existed, the last fallback picked the cable's recording end, which
would feed the mix back into itself. Device guessing now returns no
device instead, so Enable stops with a message.
Add an Off / Voice changer app / MicMixer voices switch and a voice
picker under the status card. The choice is built into the route, so a
running route restarts with it; the voice changer choice and its voice
are now saved as they change instead of waiting for Save.

Rename "Local voice profile" to "MicMixer voices" and "Modified voice"
to "Voice changer", and explain in the settings window why devices are
locked while routing runs, with a Stop routing button.
Update README, INSTALLATION, release notes, guides and the local voice
profiles doc to the new names, the main window switch and the locked
settings banner, and refresh the main window screenshot.
@benjibutten
benjibutten merged commit 0007025 into main Sep 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant