-
Notifications
You must be signed in to change notification settings - Fork 8
How to Set Up WorldAudio Emitter
Guribo edited this page Jul 5, 2026
·
4 revisions
Step-by-step guide for adding managed AudioSources to your scene using the WorldAudio system.
-
TLP_PlayerAudioController prefab in your scene at
Packages/tlp.udonvoiceutils/Runtime/Prefabs/Core/TLP_PlayerAudioController.prefab -
TLP_Essentials prefab at
Packages/tlp.udonutils/Runtime/Prefabs/TLP_Essentials.prefab -
TLP_WorldAudioController prefab at
Packages/tlp.udonvoiceutils/Runtime/Prefabs/Core/TLP_WorldAudioController.prefab
- Create a new empty GameObject (name it e.g.
AmbientMusic) - Add an AudioSource component
- Assign your audio clip
- Configure basic settings:
- Spatialize: ✅ enabled (required for VRChat 3D audio)
- Loop: ✅ enabled (for ambient/music)
- Play On Awake: ✅ enabled (starts automatically)
- Max Distance: set based on your needs (e.g. 50)
-
Add an OccludedEmitter component to the same GameObject
-
The following components are added automatically:
-
ReverbController— manages reverb and lowpass filter -
AudioSourceStateController— play/pause/cull state machine -
AudioLowPassFilter— distance-based muffling -
AudioReverbFilter— reverb effect
-
-
Configure settings:
-
Disable GameObject When Culled: ✅ enabled (saves CPU when culled)
⚠️ Set to false for Unity VideoPlayer sources — disabling breaks audio filters
-
Privacy Channel Id:
-1(no privacy, audible to all)
-
Disable GameObject When Culled: ✅ enabled (saves CPU when culled)
VRChat requires the VRCSpatialAudioSource component for proper 3D spatialization:
- Add VRCSpatialAudioSource component to the same GameObject
- Configure settings:
- Enable Spatialization: ✅ enabled
-
Gain:
0(default, no volume boost) -
Far:
40(distance where audio becomes inaudible) -
Near:
5(distance where audio is at full volume) -
Volumetric Radius:
5(range where audio is not spatialized)
AmbientMusic
├─ AudioSource (Spatialize: true, Loop: true)
├─ AudioLowPassFilter
├─ AudioReverbFilter
├─ OccludedEmitter
├─ ReverbController
├─ AudioSourceStateController
└─ VRCSpatialAudioSource
Select the TLP_WorldAudioController and adjust if needed:
| Field | Default | Description |
|---|---|---|
| Importance Updates Per Frame | 1 |
Emitters to recalculate importance for per frame. Higher = more responsive, more CPU |
| Updates Per Frame | 3 |
Emitters to update per frame. Higher = more responsive, more CPU |
| Max Active Sources | 32 |
Max concurrent active emitters. Beyond this, lowest-importance emitters are culled |
- Enable ClientSim
- Click Play
- Walk toward the AudioSource — audio should be clear and loud
- Walk away — audio should fade with distance
- Walk beyond Max Distance — audio should be inaudible
Repeat the steps above for each AudioSource you want managed:
- Ambient music
- Sound effects
- Environmental audio
- Video player audio (set
Disable GameObject When Culledto false)
| Symptom | Cause | Fix |
|---|---|---|
| AudioSource not playing | Missing OccludedEmitter | Add OccludedEmitter to the AudioSource GameObject |
| AudioSource stuck silent | Direct AudioSource.Play()/Stop() used |
Use AudioSourceStateController methods instead |
| Audio not managed | AVPro Video Player | AVPro bypasses Unity audio pipeline. Use Unity VideoPlayer |
| Emitters not updating | Multiple AudioListeners | WorldAudio supports exactly one AudioListener |
See Troubleshooting Reference for more issues.
- WorldAudio-Subsystem — how the system works
- WorldAudio-Limitations — AVPro incompatibility, direct control restrictions
- OccludedEmitter — per-emitter configuration
- WorldAudioController — controller settings
- How to Set Up Reverb — emitter reverb configuration
- Architecture
- Occlusion
- Voice Directionality
- Height Scaling
- Audio Processing Pipeline
- Private Voice Channels
- WorldAudio Subsystem
- WorldAudio Limitations
- Set Up Occlusion
- Set Up Voice Channels
- Set Up Reverb
- Set Up Height Scaling
- Set Up Voice Directionality
- Set Up Microphone
- Set Up WorldAudio Emitters
- Enable Debug Mode
- Tutorial #1: Custom Voice Override Zone
- Tutorial #2: Private Voice Channels
- Tutorial #3: Setting Up World Audio
- PlayerAudioController
- PlayerAudioOverride
- PlayerAudioOverrideList
- PlayerAudioView
- PlayerAudioConfigurationModel
- SyncedPlayerAudioConfigurationModel
- VoiceUtils
- IgnoredPlayers
- AudioObstacle
- DefaultPlayerOcclusion
- NullPlayerOcclusion
- PlayerOcclusionStrategy
- Privacy Channel Reference
- AdjustableGain
- DynamicPrivacy
- PickupMicrophone — MVC microphone system with MicModel/MicController/MicView
- VoiceOverrideTriggerZone
- VoiceOverrideRoom