Skip to content

WorldAudio Limits Reference

Guribo edited this page Jul 11, 2026 · 4 revisions

WorldAudio Limits Reference

Technical reference for WorldAudio system limits and platform constraints.

VRChat Audio Limits

VRChat has platform-imposed limits on active audio sources:

Limit Count
Active (playing) AudioSources ~32
Virtual (pausable) AudioSources ~64
Neither playing nor virtual No automatic recovery

The WorldAudio system manages these limits via MaxActiveSources. When the limit is reached, lower-importance AudioSources are suspended.

Performance Considerations

  • Importance recalculation happens every frame for a subset of emitters
  • More emitters = more CPU per frame
  • Occlusion requires raycasting — more raycasts = more CPU
  • Use PartitionState to configure emitter partitioning. Tune update frequency with UpdatesPerFrame and ImportanceUpdatesPerFrame on WorldAudioController

AVPro Incompatibility

WorldAudio only works with Unity-based video players (e.g., Unity VideoPlayer, VRC Unity Video Player). It does not work with AVPro Video Player or other third-party video players.

Why: WorldAudio manages AudioSource components directly. AVPro bypasses Unity's audio pipeline and outputs audio through its own system, making it invisible to WorldAudio.

Workaround: Use Unity-based video players. For AVPro, use a separate audio source component on the same GameObject and configure it manually.

Single Listener Requirement

The WorldAudio system assumes exactly one AudioListener in the scene. Multiple listeners are not supported.

Why: Importance calculations and occlusion raycasts are relative to a single listener position. Multiple listeners would require duplicating these calculations.

Workaround: Use a single camera with an AudioListener. Do not add AudioListener to other cameras.

Direct Control Restrictions

Once an AudioSource is registered with WorldAudio, you cannot control it directly from your code. WorldAudio manages play/pause/culling state based on importance and privacy.

Why: WorldAudio calculates importance scores and decides which AudioSources should be active. Directly setting AudioSource.Play() or AudioSource.Stop() conflicts with WorldAudio's management.

Workaround: Use AudioSourceStateController (on the same GameObject) to control play/pause/stop. For manual control, do not register the AudioSource with WorldAudio.

See Also

Clone this wiki locally