[RELEASE] omp-voice — Proximity + Radio/Phone Voice Chat for open.mp & SA-MP 0.3.7
What is omp-voice?
omp-voice is a full-featured, server-authoritative voice chat system for open.mp and SA-MP 0.3.7 R5. It brings proximity voice, radio channels, and phone calls to your server — all encrypted, low-latency, and scriptable via Pawn.
GitHub: https://github.com/staark-dev/omp-voice
Features
🎙️ Proximity Voice
Architecture
omp-voice uses a hybrid mixing model:
Module
Roleshared/
Wire protocol, crypto (libsodium), INI, UDP
core/
Routing engine: proximity, bus router, channels, mix policy
relay/
Standalone relay process — AEAD transport shell
samp/
SA-MP 0.3.7 plugin bridge (Pawn natives)
omp/
open.mp component bridge
client/
Windows
.asi
— WASAPI, Opus, RNNoise, ImGui panel
Installation
Server Side
Open UDP port 7779 inbound on your server:
# Windows (admin)
netsh advfirewall firewall add rule name="VoiceChat 7779" dir=in action=allow protocol=UDP localport=7779
# Linux
sudo ufw allow 7779/udp
Pawn API (quick overview)
In-Game Controls (Client)
Key Action:
B Proximity push-to-talk
N Radio/phone push-to-talk
F9 Self-mute
F8 Toggle "who's talking" HUD
INSERT Open settings panel
All keys are rebindable in the in-game panel.
Building from Source
One-shot Windows build:
powershell -ExecutionPolicy Bypass -File .\build.ps1
Manual CMake (production config, x86):
cmake -S . -B build -A Win32 -DVC_NO_SODIUM=OFF -DVC_WITH_OPUS=ON -DVC_BUILD_CLIENT=ON
cmake --build build --config Release
All third-party dependencies (libsodium, Opus, Dear ImGui, MinHook, RNNoise) are fetched and built automatically by CMake — no manual installs needed.
CI/CD via GitHub Actions builds and tests on every push. Tagged releases (v*) publish ready-to-use bundles automatically.
Current Status
Core engine and all major features are implemented and validated in-game (2-player proximity with occlusion + falloff, radio/phone channels, speakerphone, RNNoise, ImGui panel).
Remaining / planned:
Download
👉 GitHub Releases: https://github.com/staark-dev/omp-voice/releases
Bundles available:
INSTALL.txt.
License
MIT — free to use, modify, and distribute. See LICENSE.
Feedback, bug reports, and pull requests are welcome on GitHub!
What is omp-voice?
omp-voice is a full-featured, server-authoritative voice chat system for open.mp and SA-MP 0.3.7 R5. It brings proximity voice, radio channels, and phone calls to your server — all encrypted, low-latency, and scriptable via Pawn.
GitHub: https://github.com/staark-dev/omp-voice
Features
🎙️ Proximity Voice
- Hear nearby players in 3D audio with logarithmic distance falloff and stereo panning
- Occlusion support — voices are muffled through walls and closed vehicles
- Three preset ranges: Whisper / Normal / Shout, or a custom range per player
- Interior and virtual-world gating (you only hear players in the same dimension)
- Radio filter: bandpass + squelch + half-duplex garble for that authentic feel
- Phone filter: narrowband colouring for realistic call audio
- Mixed per-listener on the server for perfect control
- Speakerphone (
/vspeaker
) — let bystanders hear a phone call out loud
- Per-connect cryptographic token identity (not IP-based)
- Every relay↔client datagram sealed with XChaCha20-Poly1305 AEAD encryption
- Server is fully authoritative for position, flags, and channels — anti-spoof
- Opus codec — industry-standard, low-latency voice compression
- RNNoise neural noise suppression (enable/disable per client)
- Adaptive jitter buffer for smooth playback
- Push-to-Talk or Voice Activation modes (exclusive per client)
- Press INSERT to open the control panel: volumes, devices, PTT key rebind, noise suppression
- "Who's talking" HUD (toggle with F8) — see active speakers on-screen
- Optional floating labels above player heads while they talk
- Per-player local mute and volume control
Architecture
omp-voice uses a hybrid mixing model:
- Proximity audio is relayed per-speaker as raw Opus; the client spatialises it locally (lowest latency)
- Radio/Phone buses are decoded, filtered, and mixed server-side per listener, then re-encoded and streamed
Module
Roleshared/
Wire protocol, crypto (libsodium), INI, UDP
core/
Routing engine: proximity, bus router, channels, mix policy
relay/
Standalone relay process — AEAD transport shell
samp/
SA-MP 0.3.7 plugin bridge (Pawn natives)
omp/
open.mp component bridge
client/
Windows
.asi
— WASAPI, Opus, RNNoise, ImGui panel
Installation
Server Side
- Drop
plugins/VoiceChat.dll
(SA-MP) or the open.mp component into
components/
- Place
voice_relay.exe
alongside the server executable
- Copy
qawno/include/voicechat.inc
(+
voicechat_ui.inc
) for your gamemode
- Add
voice.ini
(config file — annotated, comes with the release)
- Add to
config.json
:
"legacy_plugins": ["VoiceChat"]
or to
server.cfg
for SA-MP
- Place
VoiceChat.asi
in the GTA SA folder (requires an ASI loader: SilentPatch, CLEO, etc.)
- Edit
voicechat.ini
— set
relay_ip
to the server's IP address
Open UDP port 7779 inbound on your server:
# Windows (admin)
netsh advfirewall firewall add rule name="VoiceChat 7779" dir=in action=allow protocol=UDP localport=7779
# Linux
sudo ufw allow 7779/udp
Pawn API (quick overview)
Code:
#include <voicechat>
#include <voicechat_ui>
public OnGameModeInit() {
gProximity = Voice_CreateChannel(VOICE_FILTER_NONE, false);
return 1;
}
public OnPlayerConnect(playerid) {
new ip[16]; GetPlayerIp(playerid, ip, sizeof ip);
Voice_OnPlayerConnect(playerid, ip);
Voice_AddToChannel(playerid, gProximity);
Voice_SetPlayerRange(playerid, VOICE_RANGE_NORMAL);
return 1;
}
public OnPlayerUpdate(playerid) {
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
new veh = GetPlayerVehicleID(playerid) ? VOICE_VEH_CLOSED : VOICE_ONFOOT;
Voice_UpdatePosition(playerid, x, y, z,
GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid), veh);
return 1;
}
public OnPlayerStartTalking(playerid) { VoiceUI_OnStartTalking(playerid); return 1; }
public OnPlayerStopTalking(playerid) { VoiceUI_OnStopTalking(playerid); return 1; }
public OnPlayerDisconnect(playerid, reason) {
Voice_OnPlayerDisconnect(playerid);
return 1;
}
Key Natives
// Channel management
Voice_CreateChannel(filter, bool:positional, priority = 100);
Voice_AddToChannel(playerid, channelid);
Voice_RemoveFromChannel(playerid, channelid);
// Player control
Voice_SetPlayerRange(playerid, preset, Float:override = 0.0);
Voice_SetPlayerFlags(playerid, bool:muted, bool:deafen, bool:alive, bool:spectator);
Voice_SetMixPolicy(playerid, policy, Float:duckLevel = 0.5, Float:proximityFloor = 0.25);
Voice_MutePlayer(playerid, targetid, bool:mute = true); // per-pair mute
Voice_SetSpeakerphone(playerid, bool:on = true);
// Lifecycle
Voice_OnPlayerConnect(playerid, const ip[]);
Voice_OnPlayerDisconnect(playerid);
Voice_ReloadConfig(); // reload voice.ini at runtimeIn-Game Controls (Client)
Key Action:
B Proximity push-to-talk
N Radio/phone push-to-talk
F9 Self-mute
F8 Toggle "who's talking" HUD
INSERT Open settings panel
All keys are rebindable in the in-game panel.
Building from Source
One-shot Windows build:
powershell -ExecutionPolicy Bypass -File .\build.ps1
Manual CMake (production config, x86):
cmake -S . -B build -A Win32 -DVC_NO_SODIUM=OFF -DVC_WITH_OPUS=ON -DVC_BUILD_CLIENT=ON
cmake --build build --config Release
All third-party dependencies (libsodium, Opus, Dear ImGui, MinHook, RNNoise) are fetched and built automatically by CMake — no manual installs needed.
CI/CD via GitHub Actions builds and tests on every push. Tagged releases (v*) publish ready-to-use bundles automatically.
Current Status
Core engine and all major features are implemented and validated in-game (2-player proximity with occlusion + falloff, radio/phone channels, speakerphone, RNNoise, ImGui panel).
Remaining / planned:
- AEC (Acoustic Echo Cancellation) — deferred; headphones avoid the issue for now
- Linux 32-bit.so for SA-MP (relay and open.mp component already build on Linux x64)
Download
👉 GitHub Releases: https://github.com/staark-dev/omp-voice/releases
Bundles available:
- voicechat-client-win32.zip
— client.asi + voicechat.ini
- voicechat-server-win.zip
— server plugin + relay + includes + voice.ini
- voicechat-relay-linux-x64.tar.gz
— relay binary for Linux servers
INSTALL.txt.
License
MIT — free to use, modify, and distribute. See LICENSE.
Feedback, bug reports, and pull requests are welcome on GitHub!

