Overview
San Andreas Sound Suite combines four framework-independent FiveM resources with one local Content Builder. Sound provides the playback and compatibility layer, Dispatch and Station Pack provide optional synchronized programming, and Radio coordinates the OneSync-backed in-vehicle experience.
Requirements
- Framework
- None
- Synchronization
- OneSync is required by san_andreas_radio
- Runtime resources
- Sound first; Dispatch and Station Pack optional; Radio last
- Content Builder
- Node.js 20+ on a local developer or server-owner computer
- Media rights
- Retain every component license, attribution, provenance, and media notice
Installation
- 01
Place san_andreas_sound, san_andreas_dispatch, san_andreas_station_pack, and san_andreas_radio in the server resources directory without renaming them.
- 02
Start san_andreas_sound first. Do not run the original xsound or interact-sound resources beside it while its compatibility aliases are enabled.
- 03
Start the optional san_andreas_dispatch and san_andreas_station_pack resources when their synchronized programming is needed.
- 04
Start san_andreas_radio last with OneSync enabled, then validate native radio, suite media, scanner state, late joins, and vehicle-state synchronization.
- 05
Keep the San Andreas Sound Suite Content Builder on a developer computer, install Node.js 20 or newer, and never add the builder directory to server.cfg.
Configuration
Choose the runtime components
Sound and Radio form the core vehicle-audio path. Add Dispatch for synchronized service channels and Station Pack for server-owned music programming. The two optional resources can be omitted when those sources are not needed.
Review compatibility aliases
San Andreas Sound provides xsound and interact-sound aliases for dependent resources. Validate every consumer against the documented compatibility surface and remove duplicate legacy providers before starting the suite.
Configure direct media and fallbacks
Direct media URLs need appropriate CORS access for Web Audio spatial processing, HRTF, and EQ. HTML or YouTube fallback playback can preserve basic volume control but cannot provide the same spatial processing path.
Keep safe Radio defaults
Vehicle radios start powered off, no third-party Satellite or scanner fallback URL is enabled, and the San Andreas Sound provider is the default. Configure only streams, identifiers, playlists, artwork, and compatibility cues the server is authorized to use.
05Enable the optional voice bridge deliberately
The pma-voice live-player bridge is optional and disabled by default. Confirm the voice resource, provider configuration, and player-facing behavior on a development server before enabling it.
Run the Content Builder locally
Keep the San Andreas Sound Suite Content Builder on a developer or server-owner computer. Install Node.js 20 or newer, use Launch Content Builder.cmd on Windows or the documented npm workflow on other platforms, and never add the builder directory to server.cfg.
Usage and validation
Inspect Sound and streamer mode
Use the status command to print active-sound diagnostics. Streamer mode locally mutes all San Andreas Sound-managed audio for that player while shared synchronization continues.
/san_andreas_sound_status
/streamermode status
/streamermode on
/streamermode offUse Radio and scanner controls
The default Radio and scanner key mappings are Q and J. /saradio opens or toggles the head unit, /sascanner toggles synchronized scanner power, /scannerhud changes only local HUD visibility, and /saradiotrack prints current track data to F8.
/saradio
/sascanner
/scannerhud
/saradiotrackValidate synchronized timelines
Test a current Dispatch transmission and Station Pack program with two clients, then reconnect or tune a second client mid-item. The late client should enter at the current shared offset rather than restarting the item.
Review imported media before deployment
Check imported recordings, identifiers, artwork, stations, streams, and metadata for redistribution rights, privacy, personal information, and server policy before building a public package.
Suite components
Each component has a distinct runtime responsibility and can be evaluated separately before the complete stack is enabled.
San Andreas Sound 1.5.16
Dependency-free positional audio backend with native playback controls, diagnostics, streamer mode, and xSound and InteractSound compatibility surfaces.
San Andreas Dispatch 0.5.2 manifest baseline
Server-authoritative scheduler for six independent locally hosted service channels. It publishes synchronized descriptors but does not render audio by itself.
San Andreas Station Pack 1.0.0
Optional server-owned station catalog and deterministic program clock with three original demonstration tracks and one original artwork image.
San Andreas Radio 1.0.0
OneSync-backed vehicle head unit for native radio, Satellite, Bluetooth playlists, Server Radio, scanner controls, and synchronized vehicle state.
Content Builder 0.5.3
Local Node 20+ browser workbench for configuration, import, validation, and deployment exports. It is not a FiveM resource or published npm package.
Public APIs
Use the documented exports and local server events rather than internal Radio network events. The repository Developer Guide remains the detailed contract reference.
Sound playback surface
Native client exports cover positional and URL playback, destroy, position, entity, distance, volume, time, playing state, spectrum, readiness, diagnostics, and streamer mode. The snippet below is client-side; matching server relay calls require a leading target player ID before the options, sound name, or new value.
exports['san_andreas_sound']:PlayPositional(options)
exports['san_andreas_sound']:SetPosition(soundId, coords)
exports['san_andreas_sound']:SetVolume(soundId, volume)
exports['san_andreas_sound']:Destroy(soundId)Dispatch synchronized state
Read the complete snapshot, one channel, or catalog counts from the server. A server-local event announces transmission changes to consuming resources.
local snapshot = exports['san_andreas_dispatch']:GetSnapshot()
local police = exports['san_andreas_dispatch']:GetChannel('police')
local counts = exports['san_andreas_dispatch']:GetCatalogCounts()
AddEventHandler('san_andreas_dispatch:server:transmissionChanged', function(channelId, source)
-- consume the synchronized descriptor locally on the server
end)Station Pack catalog state
Read configured stations and their current program state through GetStations, GetSnapshot, and GetStation. The local server event san_andreas_radio:server:stationPackChanged is emitted after the active program or track advances.
Radio vehicle state
The documented server export GetVehicleRadioState returns the suite-managed state for a networked vehicle. Treat Radio's internal network events as implementation details rather than public integration contracts.
Media and licensing
Software licenses
Sound, Dispatch software and configuration, Radio, Station Pack, and the Content Builder each include an MIT software license. Preserve third-party notices shipped with compatibility code.
Original documentation and selected media
Original release-manual text, diagrams, and layout, the Radio thematic artwork, and Station Pack demo media are covered by their CC BY 4.0 notices with stated exclusions and attribution requirements.
Dispatch recording boundary
The 600 bundled Dispatch recordings are excluded from MIT. The public attribution file identifies the 100 aviation clips as CC0-derived and states that source and permission records for the other 500 are retained privately; downstream redistributors must evaluate those recording terms separately.
Troubleshooting
A dependent resource cannot find its audio provider
Confirm san_andreas_sound starts first, its compatibility alias is enabled for the expected provider name, and the original provider is not also running under a conflicting identity.
Direct media has volume but no spatial processing
Confirm the media host permits the Web Audio request through CORS and that the source is using the direct playback path. HTML or YouTube fallback playback cannot provide the same HRTF and EQ path.
Radio state does not remain synchronized
Confirm OneSync is enabled, san_andreas_radio starts after its selected providers and optional catalogs, and no other resource is fighting the same vehicle radio state.
Dispatch or Station Pack restarts an item for late listeners
Verify the consuming Radio or scanner reads the current snapshot and offset rather than replaying a file from zero, and confirm catalog durations match the actual local media files.
The Content Builder is being treated as a server resource
Remove it from server.cfg. Run the builder locally with Node.js 20 or newer, then deploy only the generated FiveM resource configuration and media that passed validation and rights review.
Reference
Release documentation
The repository docs directory contains the Release User Guide, Developer Guide, Content Builder Guide, and setup guides for Sound, Dispatch, Radio, and Station Pack.
Component source references
Each runtime directory includes its own README, LICENSE, and applicable media, attribution, provenance, or third-party notice files. Those component files control when a summary differs from runtime metadata.
- The repository has no GitHub tag or Release; the public files represent the current main-branch snapshot.
- The root release table labels Dispatch 1.0.0, while docs/README.md defines fxmanifest versions as authoritative and the Dispatch manifest reports 0.5.2. This guide follows the manifest until the repository labels are aligned.
- Documentation CC BY 4.0 terms do not relicense game screenshots, trademarks, third-party media, or source excerpts that the documentation depicts.