SvxLink is excellent for ham radio voice services, but when used with a PC microphone and reflector workflows, the default sound can feel narrower and more “radio-like” than modern VoIP apps.
In this update, I focused on one goal: make SvxLink voice sound cleaner, wider, and more natural while preserving reliability.
Repository and code changes: https://github.com/s1lviu/svxlink
Why SvxLink can sound narrow in PC mic setups
Classic FM-oriented processing is useful for RF paths, but for internet-based voice transport it can reduce the natural high-frequency detail and dynamics people expect from apps like WhatsApp, Telegram, or dedicated VoIP clients.
The two biggest factors were:
- Opus encoder configuration coverage and defaults.
- RX/TX audio pipeline stages designed for radio-style shaping.
What I changed
Implementation commit: https://github.com/s1lviu/svxlink/commit/19ad2a6a
1) Extended Opus encoder option support
I completed Opus option wiring so reflector config values are fully applied, including:
APPLICATIONMAX_BANDWIDTHBANDWIDTHSIGNALFEC/INBAND_FECPACKET_LOSSDTXLSB_DEPTH
This allows proper control from OPUS_ENC_* configuration keys and avoids partial tuning where only a subset of options is honored.
2) Better Opus defaults for voice
I also tuned default Opus behavior toward spoken-voice clarity:
APPLICATION=VOIPBITRATE=32000MAX_BANDWIDTH=WIDEBANDCOMPLEXITY=10
These defaults are better aligned with real-time speech quality than generic audio settings.
3) Added VOICE_FILTER_BYPASS in RX and TX paths
VOICE_FILTER_BYPASS now has practical value for VoIP-style deployments:
- On RX: skip radio-oriented voiceband/splatter shaping when desired.
- On TX: bypass FM-style limiter, hard clipper, and voiceband filter stages when cleaner microphone audio is preferred.
For convenience, TX bypass is also auto-enabled when PTT_TYPE=NONE (typical non-RF/local audio cases).
Recommended configuration
Use this as a baseline for reflector + PC mic setups:
[ReflectorLogic]
OPUS_ENC_FRAME_SIZE=20
OPUS_ENC_COMPLEXITY=10
OPUS_ENC_BITRATE=64000
OPUS_ENC_VBR=1
OPUS_ENC_CVBR=1
OPUS_ENC_MAX_BANDWIDTH=FULLBAND
OPUS_ENC_BANDWIDTH=AUTO
OPUS_ENC_SIGNAL=VOICE
OPUS_ENC_APPLICATION=VOIP
OPUS_ENC_DTX=0
[Rx1]
VOICE_FILTER_BYPASS=1
[Tx1]
PTT_TYPE=NONE
VOICE_FILTER_BYPASS=1
Notes:
- If
PTT_TYPE=NONE, TX bypass may already activate automatically. - Keep
VOICE_FILTER_BYPASS=1explicitly for clarity and predictable behavior.
Real-world result
After these changes, the voice presentation is significantly less “pinched” and more complete, with better natural tone and intelligibility for normal speech.
In practical feedback, the sound was considered clearly improved and acceptable for daily use, with only minor comments about wanting slightly more highs in some cases.
Troubleshooting
Still hearing robotic or choppy audio?
Check network quality:
- UDP frame loss
- jitter spikes
- out-of-sequence frames
Even perfect TX tuning cannot fully mask packet-loss artifacts.
FAQ
What is the best Opus setting for SvxLink voice quality?
For speech-first operation, start with APPLICATION=VOIP, SIGNAL=VOICE, COMPLEXITY=10, and FRAME_SIZE=20.
What does VOICE_FILTER_BYPASS do in SvxLink?
It disables radio-oriented shaping stages so microphone audio keeps more natural bandwidth and tone.
Does this make SvxLink identical to WhatsApp audio?
Not identical, but much closer in perceived clarity and fullness, especially for PC mic + reflector workflows.
Final thoughts
If your SvxLink node is increasingly used as an IP voice endpoint (not only classic RF chain), these modifications are a strong quality upgrade with low operational risk.
The key improvement is simple: keep Opus fully tunable and avoid unnecessary FM-style processing where it does not belong.
View full project on GitHub: https://github.com/s1lviu/svxlink