Skip to the content
Docs

Voice Systems

On this page11
lua
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

SystemSupportAuto orderTalk detectionAudible changer
pma-voiceSupported1full — normalised talking state, proximity, radio and call channelsyes
SaltyChatSupported2remote talking plus its talk-state event and voice rangeno
YaCASupported3its isPlayerTalking export and voice rangeno
TokoVOIPStub4its player-data export, best effortno
FiveM for GTA V EnhancedStub — beta5native, always low-trustno
native MumbleSupported6 (fallback)the talking nativesno

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.

lua
Config.Voice.LowTrustSelfReport = true
Config.Voice.AutoLowTrust = { Enabled = true, ... }
KeyDefaultWhat it does
Config.Voice.LowTrustSelfReporttrueOn voice systems that cannot see other players talking, still use voice and mark it low-trust.
Config.Voice.AutoLowTrust.EnabledtrueNotices by itself when voice detection on your server is not working and marks voice low-trust for a while (ExpireMinutes).

Voice cue settings

KeyDefaultWhat it does
Config.Voice.RequireBothReportstrueVoice only counts when the listener hears the speaker and the speaker's game reports talking. Keep it on.
Config.Voice.IgnoreRadiotrueA voice over the radio never fills the bar.
Config.Voice.IgnoreCalltrueNeither does a phone call.
Config.Voice.UseVoiceRangetrueOnly speech the listener could actually hear counts.
Config.Voice.MinRange1.5The smallest voice range used, in metres. Leave it as it is.
Config.Voice.ConflictCreditShare0.5Advanced. Leave it at the default unless support asks.

Full reference: Voice & Voice Changer.

Checking what resolved

The boot summary names the provider:

Code
[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.

See Writing a Custom Adapter.