A sound node is heard rather than drawn, so this is the smallest leaf loader:
it attaches a placeholder THREE.Group (with the node transform, so a spatial
voice parented under it inherits the scene-graph pose), reads the optional
(K, ndim) positions array, and binds a lazy clip reader to the scene's
store — the same raw store.get() the overlay manager's opaque-file reader
wraps. The clip bytes are NOT fetched here; the audio engine decodes them
after the scene attaches (audio/audio-engine.ts), so scene load stays fast
and a viewer that never creates an AudioContext never pays for a decode.
No loader-registry registration: the node has no per-slice fetch, so it
takes no part in the update sweep and has no retry path. Errors surface
through loadLeafNode like every other leaf, so siblings still render.
Initial-load path for a single
soundleaf node.A sound node is heard rather than drawn, so this is the smallest leaf loader: it attaches a placeholder
THREE.Group(with the node transform, so a spatial voice parented under it inherits the scene-graph pose), reads the optional(K, ndim)positions array, and binds a lazy clip reader to the scene's store — the same rawstore.get()the overlay manager's opaque-file reader wraps. The clip bytes are NOT fetched here; the audio engine decodes them after the scene attaches (audio/audio-engine.ts), so scene load stays fast and a viewer that never creates anAudioContextnever pays for a decode.No loader-registry registration: the node has no per-slice fetch, so it takes no part in the update sweep and has no retry path. Errors surface through
loadLeafNodelike every other leaf, so siblings still render.