Skip to content

How to Set Up WorldAudio Emitter

Guribo edited this page Jul 11, 2026 · 4 revisions

How to Set Up WorldAudio Emitters

Step-by-step guide for adding managed AudioSources to your scene using the WorldAudio system.

Prerequisites

  1. TLP_PlayerAudioController prefab in your scene at Packages/tlp.udonvoiceutils/Runtime/Prefabs/Core/TLP_PlayerAudioController.prefab
  2. TLP_Essentials prefab at Packages/tlp.udonutils/Runtime/Prefabs/TLP_Essentials.prefab
  3. TLP_WorldAudioController prefab at Packages/tlp.udonvoiceutils/Runtime/Prefabs/Core/TLP_WorldAudioController.prefab

Add a Managed AudioSource

1. Create the AudioSource GameObject

  1. Create a new empty GameObject (name it e.g. AmbientMusic)
  2. Add an AudioSource component
  3. Assign your audio clip
  4. 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)

2. Add OccludedEmitter

  1. Add an OccludedEmitter component to the same GameObject

  2. The following components are added automatically:

    • AudioSource — also auto-added via RequireComponent, but already present from step 1
    • ReverbController — manages reverb and lowpass filter
    • AudioSourceStateController — play/pause/cull state machine
    • AudioLowPassFilter — distance-based muffling
    • AudioReverbFilter — reverb effect
  3. 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)

3. Add VRCSpatialAudioSource

VRChat requires the VRCSpatialAudioSource component for proper 3D spatialization:

  1. Add VRCSpatialAudioSource component to the same GameObject
  2. 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)

4. Final GameObject Structure

AmbientMusic
├─ AudioSource (Spatialize: true, Loop: true)
├─ AudioLowPassFilter
├─ AudioReverbFilter
├─ OccludedEmitter
├─ ReverbController
├─ AudioSourceStateController
└─ VRCSpatialAudioSource

Configure WorldAudioController (Optional)

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

Test

  1. Enable ClientSim
  2. Click Play
  3. Walk toward the AudioSource — audio should be clear and loud
  4. Walk away — audio should fade with distance
  5. Walk beyond Max Distance — audio should be inaudible

Adding More Emitters

Repeat the steps above for each AudioSource you want managed:

  • Ambient music
  • Sound effects
  • Environmental audio
  • Video player audio (set Disable GameObject When Culled to false)

Troubleshooting

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.

See Also

Clone this wiki locally