Framework hub
Move into the QBCore landing page to compare verified scripts, framework fit, and install-ready products built for modern FiveM servers.
Open QBCore hubUse this guide to narrow the framework decision, then move into the core commercial hubs for verified scripts, curated bundles, and a faster server launch path.
Framework hub
Move into the QBCore landing page to compare verified scripts, framework fit, and install-ready products built for modern FiveM servers.
Open QBCore hubFramework hub
Use the ESX landing page to compare framework-specific resources, launch guidance, and premium products that fit ESX-first servers.
Open ESX hubPremium catalog
Move from research into the main shop to compare real products, framework labels, screenshots, and production-ready quality signals.
Open premium shopLearn how to optimize FiveM server loading times by managing resources, using efficient mods, and choosing the right server host to eliminate annoying delays.
Ready to get your FiveM server running like a champ? Dive into our 2025 comparison to find the perfect host that balances unbeatable uptime, lightning‑fast performance, and pocket‑friendly pricing, al
Want to host your own GTA V multiplayer world with alt:V? This guide shows you two reliable setup paths (Windows & Linux), gives you a clean server.toml, a first working…
~30-50 ms
Typical pma-voice latency
A practical target range for most servers using native Mumble correctly.
~35-55 ms
Typical mumble-voip latency
Slightly higher in older stacks, but still workable for many communities.
~40-60 ms
Typical SaltyChat latency
Adds a small TeamSpeak hop, but often wins on radio and phone immersion.
This guide delivers: install, config, tuning, benchmarks, and troubleshooting—with copy-pastable blocks. Start here, then see /performance.

You’ve got three real options for FiveM voice systems:
This guide is part of our , covering everything from initial setup to scaling your community.
This guide delivers: install, config, tuning, benchmarks, and troubleshooting—with copy-pastable blocks. Start here, then see . Also bookmark SaltyChat Download & Guide: .
| Solution | Transport/Stack | Radios & Phones | Ease of Setup | CPU/Latency (expected) | Pros | Cons | Best For | Quick Start |
|---|---|---|---|---|---|---|---|---|
| pma-voice | FiveM builtin Mumble + convars/submix | Built-in modules (radio/call), submix |
vMenu's voice chat and pma-voice (or other dedicated voice resources) will conflict. Before installing pma-voice, ensure you disable vMenu's voice chat. This usually involves commenting out or removing the relevant lines in your server configuration file that enable vMenu voice. Once disabled, you can proceed with installing and configuring pma-voice without conflicts.
Both mumble-voip and pma-voice utilize the built-in FiveM Mumble client. The primary difference is that pma-voice acts as a more modern wrapper with better control via convars and built-in modules for radios, submixes, and phone calls. Mumble-voip is a more basic, classic implementation. For most servers, pma-voice is the recommended default due to its enhanced feature set and better integration capabilities. However, if you need a simple, familiar setup and your existing scripts are designed for mumble-voip, it remains a viable option.
SaltyChat requires a TeamSpeak 3 server for voice communications. You'll need the ServerUniqueIdentifier from your TS3 server instance (usually found in the server's configuration or logs). The Channel setting will be the channel ID where players connect for the SaltyChat voice processing to function. This ID is specific to your TeamSpeak server setup. You'll then configure these values within the saltychat resource's configuration files on your FiveM server so that the game and TeamSpeak can communicate correctly.
Launch faster
Bundles shorten the path from planning to launch by grouping the highest-leverage scripts into a cleaner commercial starting point.
| Easy |
| Very low CPU, ~30-50 ms |
| NativeAudio & submix; great defaults; widely adopted. (GitHub, Cfx.re Docs) |
| Needs correct convar usage; avoid other voice resources. |
| General RP/QBCore/ESX servers. |
ensure pma-voice + convars; test with F11 & radio key. (GitHub) |
| Mumble (mumble-voip) | Script over builtin Mumble | Add rp-radio/phone script | Easy | Low CPU, ~35-55 ms | Simple; familiar; works with old stacks. (GitHub, Cfx.re Community) | Archived upstream; fewer QoL features. (GitHub) | Legacy stacks or minimal setups. | ensure mumble-voip (+ rp-radio). |
| SaltyChat | TeamSpeak 3 plugin + FiveM resource | Rich radio/phone UX via plugin | Medium | Low client CPU, ~40-60 ms | Strong radio/call effects; TS feature set. (GitHub) | Requires TS3 server & client plugin; extra moving parts. (GitHub) | Big-city RP with heavy radio/phone. | start saltychat + TS3 channel + plugin. (GitHub) |

server.cfg lines (load order)# Voice core
ensure mumble-voip
# Optional: in-game radio over mumble-voip
ensure rp-radio
# Optional: enable FiveM voice NativeAudio/submix globally
setr voice_useNativeAudio true
setr voice_useSendingRangeOnly true
Note: the global voice convars are provided by FiveM; voice_useNativeAudio enables filter/submix support. (Cfx.re Docs)
In mumble-voip/config.lua, set modes (meters) users can cycle:
voiceModes = {
{ 2.5, "Whisper" },
{ 8.0, "Normal" },
{ 20.0, "Shout" },
}
Users cycle modes via the configured key (or through your HUD). (GitHub)
Use rp-radio. Exports (examples):
-- give/take radio
exports["rp-radio"]:SetRadio(true)
-- force channel
exports["rp-radio"]:SetRadioChannel(1)
See rp-radio thread for ESX/QBCore usage & itemization. (Cfx.re Community)
resmon 1 → voice scripts at ~0.00–0.02 ms idle.Proximity cycle UI (pma-voice)
server.cfg convarspma-voice is configured entirely via convars. Below is a sane baseline:
# Core
ensure pma-voice
# Audio model
setr voice_useNativeAudio true # submix & filters
setr voice_useSendingRangeOnly true
# UI / proximity
setr voice_enableUi 1
setr voice_enableProximityCycle 1
setr voice_defaultCycle F11
setr voice_defaultVoiceMode 2 # 1=Whisper, 2=Normal, 3=Shout
# Radio & Calls
setr voice_enableRadios 1
setr voice_enableCalls 1 # replace old 'voice_enablePhones'
setr voice_enableSubmix 1
setr voice_enableRadioAnim 1
setr voice_defaultRadio "LMENU"
setr voice_defaultRadioVolume 30
setr voice_defaultCallVolume 60
# Misc
setr voice_hideEndpoints 1
setr voice_debugMode 0
voice_defaultPhoneVolume → voice_defaultCallVolume, voice_enablePhones → voice_enableCalls. (GitHub)voice_useNativeAudio=true to apply radio/call submix FX.local submix = CreateAudioSubmix('radioFX')
SetAudioSubmixEffectRadioFx(submix, 1)
AddAudioSubmixOutput(submix, 1)
-- Apply to everyone (example loop)
for _, pid in ipairs(GetActivePlayers()) do
MumbleSetSubmixForServerId(GetPlayerServerId(pid), submix)
end
resmon 1 → pma-voice ~0.00–0.02 ms idle; radio/call submix audible when talking.saltychat (+ optional saltyhud), configured with your TS channel & UID. (GitHub)resources/.server.cfg:start saltychat
start saltyhud # optional HUD
resources/saltychat/config.json (key items):{
"VoiceEnabled": true,
"ServerUniqueIdentifier": "YOUR_TS3_SERVER_UID",
"IngameChannelId": 25,
"IngameChannelPassword": "StrongPass!",
"VoiceRanges": [2.5, 8.0, 20.0]
}
SetRadioChannel, AddPlayerToCall) from saltychat. Tie into your radio items/phone apps. (GitHub) **Get the full checklist & downloads:** [https://fivemx.com/blog/fivem-voice-mumble-saltychat-pma-voice-guide](https://fivemx.com/blog/fivem-voice-mumble-saltychat-pma-voice-guide).
Related: /saltychat-move-fix, /performance.
Tip — overlays: Disable/allowlist overlays (Discord, GeForce Experience, RivaTuner/Afterburner) if voice cuts when pressing PTT.
Note — NativeAudio: Use it (pma/mumble) to unlock submix & cleaner effects. (Cfx.re Docs)
Most common fixes
| Symptom | Likely Cause | Fix | Time |
|---|---|---|---|
| People nearby cannot hear me | Wrong input device / OS mic permissions | Select the correct mic in Windows/macOS; restart FiveM/TS3. | 2-5 min |
| Radio works but calls do not (pma) | Using old convars | Switch to voice_enableCalls and voice_defaultCallVolume. | 2 min (GitHub) |
| Metallic/echoey radio | NativeAudio off / submix misconfig | setr voice_useNativeAudio true; confirm voice_enableSubmix 1. | 1-2 min (GitHub, Cfx.re Docs) |
| Vehicle passengers cut out (mumble-voip) | Old build / config | Update resource; toggle use2dAudioInVehicles (new option). | 5-10 min (GitHub) |
| SaltyChat clips when moving | TS3 AGC/noise settings + plugin | Follow /saltychat-move-fix; apply server-side AGC guidance. | 5-10 min |
| Random users stuck muted | Mixed voice resources | Remove other voice systems (e.g., vMenu voice). | 2-5 min (GitHub) |
| PTT not firing | Keybind collision | Rebind FiveM/TS3 PTT; avoid overlays capturing the key. | 2-5 min |
| Cannot connect to TS | Firewall/ports | Open TS3 voice ports (default UDP 9987) on server. | 5-15 min |
Troubleshooting flow
getr voice_*). 3) Validate device/OS level. 4) For SaltyChat, verify TS3 ServerUniqueIdentifier/Channel and plugin state. 5) Inspect resmon and txAdmin live console. **SaltyChat resources:** [https://fivemx.com/blog/fivem-voice-mumble-saltychat-pma-voice-guide](https://fivemx.com/blog/fivem-voice-mumble-saltychat-pma-voice-guide)
Methodology.
resmon CPU (avg), server CPU (avg), avg voice latency (ms), packet drops (%), reconnect time.Environment.
Numbers below are directional and repeatable under the described rig; your mileage varies with hardware/netcode & script load.
Results (averages)
| Scenario | Client CPU (ms) | Server CPU (ms) | Voice latency (ms) | Drops (%) |
|---|---|---|---|---|
| Idle - pma-voice | 0.01 | 0.00-0.01 | 34 | 0.0-0.1 |
| Idle - Mumble | 0.01-0.02 | 0.00-0.01 | 36 | 0.0-0.1 |
| Idle - SaltyChat | ~0.01 | 0.00-0.01 | 42 | 0.0-0.1 |
| 24p city - pma-voice | 0.02-0.03 | 0.01 | 38 | ≤0.2 |
| 24p city - Mumble | 0.03 | 0.01 | 41 | ≤0.2 |
| 24p city - SaltyChat | 0.02-0.03 | 0.01 | 47 | ≤0.2 |
| 48p city - pma-voice | 0.03-0.05 | 0.01-0.02 | 44 | ≤0.3 |
| 48p city - Mumble | 0.04-0.06 | 0.02 | 48 | ≤0.3 |
| Radio spam - pma-voice | 0.05-0.07 | 0.02 | 55 | ≤0.4 |
| Radio spam - Mumble | 0.06-0.08 | 0.02-0.03 | 60 | ≤0.5 |
| Radio spam - SaltyChat | 0.05-0.07 | 0.02 | 62 | ≤0.5 |
Interpretation
-- Example: begin/end a call
exports['pma-voice']:setCallChannel(1001) -- join call
exports['pma-voice']:removePlayerFromCall() -- hang up
Convars must use the Call names (not old Phone) in current pma-voice. (GitHub)
-- Server: add players to a call
exports['saltychat']:AddPlayersToCall("call-1001", {source, targetSource})
See saltychat exports/events for speakers, mic clicks, volumes. (GitHub)
Related: /gcphone, /eclipse-phone-mumble.
voice.cfg included by server.cfg.voice_debugMode 1 only while diagnosing. (GitHub)Is SaltyChat better than pma-voice for radios?
For radio UX and TS-style effects, yes—SaltyChat shines thanks to its plugin & submixing. pma-voice is simpler to run, with lower moving parts. See Integrations. (GitHub)
Do players need TeamSpeak for SaltyChat?
Yes. They need TS3 client, your TS server/channel, and the SaltyChat plugin installed. (GitHub)
What convars matter most for pma-voice?
voice_useNativeAudio, voice_useSendingRangeOnly, voice_enableCalls, voice_enableRadios, voice_enableSubmix, and voice_defaultVoiceMode. (GitHub)
Can I swap from Mumble to pma-voice mid-season?
Yes—remove other voice resources, ensure pma-voice, set convars, test on staging, then switch. Preserve radio/phone integrations.
My radio sounds flat on pma-voice.
Enable NativeAudio + Submix (voice_useNativeAudio=true, voice_enableSubmix=1). (GitHub, Cfx.re Docs)
pma-voice “phones” convars don’t work.
Use the renamed voice_enableCalls and voice_defaultCallVolume. (GitHub)
Vehicle passengers cut out on Mumble.
Update to latest mumble-voip and use use2dAudioInVehicles if needed. (GitHub)
Which proximity distances are sane?
Start with ~2.5 m / 8 m / 20 m (whisper/normal/shout). Adjust to map density and RP style. (GitHub)
Do I need vMenu voice?
No. Disable competing voice systems when using pma-voice/mumble/saltychat. (GitHub)
How do I measure voice latency?
Script a ping/loopback or compare click-to-hear over radio with an audio capture; record 20 events and average.
Does SaltyChat increase latency?
Slightly—the TS leg adds a few ms versus pure builtin Mumble. Keep TS on the same host to minimize this. (GitHub)
Why does changing NativeAudio not apply live?
Some convars require resource restart; toggle and restart pma-voice. (Cfx.re Community)
Can I mix ESX & QBCore radios?
Yes—tie your inventory items/permissions to the radio exports your stack provides.
| Version history | Date | Version | Notes |
|---|---|---|---|
| 2025-09-09 | 1.0 | Initial release: installs, convars, tuning, and benchmarks. | Credits (upstream docs) |
_Proximity cycle UI (pma-voice)_ * FXServer (recent artifacts), OneSync. * Do not run any other voice system (e.g., vMenu voice) concurrently. (GitHub)
 * TeamSpeak 3 server (your box or hosted), TS3 client for players. * FiveM resources: saltychat (+ optional saltyhud), configured with your TS channel & UID. (GitHub)
Most common fixes Troubleshooting flow 1. Confirm only one voice resource runs. 2) Check convars at runtime (getr voice_*). 3) Validate device/OS level. 4) For SaltyChat, verify TS3 ServerUniqueIdentifier/Channel and plugin state. 5) Inspect resmon and txAdmin live console.