The viewer's audio engine: owns the AudioContext (through three's
AudioListener, which is the master gain), the three buses and the ducker,
the autoplay gate, and one SoundNode per sound node in the loaded
scene (SOUND_SPEC.md §4.1).
Everything the engine needs from the rest of the viewer arrives as PORTS —
the camera, the dims manager, the scene graph, the container, the embedder
emitter — so audio/ sits between data and scene in the layer order and
the engine runs in a node test with a fake AudioContext injected through
THREE.AudioContext.setContext.
Nothing is constructed until a scene with at least one sound node attaches:
a viewer showing a plain points scene never creates an AudioContext.
The viewer's audio engine: owns the
AudioContext(through three'sAudioListener, which is the master gain), the three buses and the ducker, the autoplay gate, and one SoundNode persoundnode in the loaded scene (SOUND_SPEC.md§4.1).Everything the engine needs from the rest of the viewer arrives as PORTS — the camera, the dims manager, the scene graph, the container, the embedder emitter — so
audio/sits betweendataandscenein the layer order and the engine runs in a node test with a fakeAudioContextinjected throughTHREE.AudioContext.setContext.Nothing is constructed until a scene with at least one sound node attaches: a viewer showing a plain points scene never creates an
AudioContext.