Automatic gain control was always on with no way to turn it off. Toggle
it with F12, the /agc command, or the agc FIFO command, and persist the
choice in the configuration file the same way noise suppression does.
AgcEnabled defaults to true so existing setups keep their current
behavior, and the saved value is applied to the stream on connect. The
enabled flag becomes an atomic.Bool because the capture goroutine reads
it while the UI goroutine writes it, and the lazily created right
channel AGC now inherits the left channel's state.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Lower maxGain from 8x to 4x (12dB) and target level from 18% to 12%.
The previous 8x gain would amplify quiet noise floors by 18dB,
transforming room tone and electrical hum into audible static. The
compression threshold is raised from 70% to 85% with a gentler 2:1
ratio instead of 3:1, reducing pumping distortion. The soft limiter
threshold is relaxed from 0.90 to 0.95 with a 0.2 knee instead of
0.1, providing more headroom before limiting engages.
These changes reduce the distortion and unnatural 'processed' sound
that other users would hear from barnard clients.
Implements 7 voice effects that can be cycled through with F12:
- None (default)
- Echo: Single repeating delay with feedback (250ms)
- Reverb: Multiple short delays without feedback
- High Pitch: Chipmunk voice using cubic interpolation
- Low Pitch: Deep voice effect
- Robot: Ring modulation for robotic sound
- Chorus: Layered voices with pitch variations
The effects are applied after noise suppression and AGC in the audio
pipeline. Selected effect is persisted to config file. Includes
comprehensive documentation in README.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This addresses low microphone volume issues by automatically normalizing
outgoing audio levels with dynamic range compression and soft limiting.
The AGC is always enabled and applies voice-optimized parameters to
ensure consistent audio levels are sent to other users while preserving
manual volume control for incoming audio.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>