Voice Systems
On this page11
Config.VoiceSystem = 'auto'Two jobs. Talk detection — can we tell that this person is speaking, right now, to this listener? And the audible voice changer — do people nearby also hear an effect?
Every system does the first. Only pma-voice does the second.
Support and auto order
| System | Support | Auto order | Talk detection | Audible changer |
|---|---|---|---|---|
| pma-voice | Supported | 1 | full — normalised talking state, proximity, radio and call channels | yes |
| SaltyChat | Supported | 2 | remote talking plus its talk-state event and voice range | no |
| YaCA | Supported | 3 | its isPlayerTalking export and voice range | no |
| TokoVOIP | Stub | 4 | its player-data export, best effort | no |
| FiveM for GTA V Enhanced | Stub — beta | 5 | native, always low-trust | no |
| native Mumble | Supported | 6 (fallback) | the talking natives | no |
pma-voice is checked first because it also provides the mumble-voip and tokovoip names — a plain "is mumble-voip running?" test would mis-detect a pma server.
pma-voice
Nothing to install on a default setup: pma-voice enables native audio when it is unset, which is what the changer's submix needs.
The effect is sent to the players inside Config.VoiceChanger.EffectRange (30 m) and
to nobody else — never as a public state bag.
Presets
Three ship by default — robot, radio, muffled — and they are pma-voice
radio-filter settings. They are starting values: tune them in game before you
ship them, because wrong filter numbers do not error, they just make voices crackle
or clip.
Add your own by copying an entry in Config.VoiceChanger.Presets and giving it a new
key.
SaltyChat
Set RequestTalkStates = true in SaltyChat's own config, or other players'
talking is not visible to our scanner and the voice cue never fills for anyone but
the speaker themselves.
YaCA
Talking through exports['yaca-voice']:isPlayerTalking(serverId), voice range from
its own state. Paid and TeamSpeak-based; the integration is written from its
documentation.
TokoVOIP
Read through its getPlayerData(serverId, 'voip:talking') export. Effectively
dead as a project, and only selected by 'auto' when pma-voice is not running.
FiveM for GTA V Enhanced
Native Mumble
The fallback, and a perfectly reasonable choice. Also covers a real (non-pma) mumble-voip install.
Low-trust voice
Some voice systems cannot reliably report that another player is talking. On those, the script still uses voice, but marks those results as low-trust so admins can see it. Nothing is ever blocked.
Config.Voice.LowTrustSelfReport = true
Config.Voice.AutoLowTrust = { Enabled = true, ... }| Key | Default | What it does |
|---|---|---|
Config.Voice.LowTrustSelfReport | true | On voice systems that cannot see other players talking, still use voice and mark it low-trust. |
Config.Voice.AutoLowTrust.Enabled | true | Notices by itself when voice detection on your server is not working and marks voice low-trust for a while (ExpireMinutes). |
Voice cue settings
| Key | Default | What it does |
|---|---|---|
Config.Voice.RequireBothReports | true | Voice only counts when the listener hears the speaker and the speaker's game reports talking. Keep it on. |
Config.Voice.IgnoreRadio | true | A voice over the radio never fills the bar. |
Config.Voice.IgnoreCall | true | Neither does a phone call. |
Config.Voice.UseVoiceRange | true | Only speech the listener could actually hear counts. |
Config.Voice.MinRange | 1.5 | The smallest voice range used, in metres. Leave it as it is. |
Config.Voice.ConflictCreditShare | 0.5 | Advanced. Leave it at the default unless support asks. |
Full reference: Voice & Voice Changer.
Checking what resolved
The boot summary names the provider:
[5code-recognition] Integrations: ... voice=pma-voice ...Each player's own game reports its provider when it joins, so a mixed server (some
players on an old build, some not) shows up in recognition:status as counts per
provider rather than as one number.
Custom
Set Config.VoiceSystem = 'custom' and fill the 'custom' branch in
bridge/voice_client.lua and bridge/voice_server.lua. The core needs: is this
player talking, what is their voice range, are they on the radio or a call, and
(optionally) apply a submix for the changer.