-
Notifications
You must be signed in to change notification settings - Fork 8
WorldAudioController
Guribo edited this page Jul 11, 2026
·
2 revisions
Packages/tlp.udonvoiceutils/Runtime/Core/WorldAudio/WorldAudioController.cs
Core controller driving the importance-based emitter update loop.
WorldAudioController is the entry point for the WorldAudio subsystem. Each frame it:
- Rebuilds the emitter registry if changed
- Recalculates importance for a subset of emitters
- Updates a subset of emitters (privacy check, occlusion, culling, reverb)
Only one allowed per scene. Reads configuration from PlayerAudioController.
| Field | Default | Range | Description |
|---|---|---|---|
ImportanceUpdatesPerFrame |
1 |
1–100 | Emitters to recalculate importance for per frame. Higher = more responsive, more CPU |
UpdatesPerFrame |
3 |
1–100 | Emitters to update (apply effects) per frame. Higher = more responsive, more CPU |
MaxActiveSources |
32 |
— | Max concurrent active emitters. Beyond this, lowest-importance emitters are culled |
| Field | Type | Purpose |
|---|---|---|
ImportanceTree |
AvlTree |
AVL tree for importance-based sorting |
PlayerAudioController |
PlayerAudioController |
Reads occlusion config and local override from this. Resolved at runtime via VoiceUtils.FindPlayerAudioController()
|
PartitionState |
PartitionState |
Partition configuration |
PartitionCursor |
PartitionCursor |
Round-robin iteration state |
EmitterRegistry |
EmitterRegistry |
Tracks active emitters |
- Runs in
PostLateUpdate(after all other audio processing) - When
EmitterRegistry.NeedsRebuildis true, rebuilds partitions and scheduler - Recalculates importance for
ImportanceUpdatesPerFrameemitters per frame - Updates
UpdatesPerFrameemitters per frame (privacy, occlusion, culling, reverb)
Do not directly control this component. It is managed by the WorldAudio system.
- OccludedEmitter — the emitters this controller manages
- PlayerAudioController — reads configuration from this component
- PartitionState — partition configuration
- EmitterRegistry — tracks active emitters
- 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