@codexo/exojs 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +133 -6
- package/README.md +80 -63
- package/dist/esm/animation/Tween.js +1 -1
- package/dist/esm/animation/Tween.js.map +1 -1
- package/dist/esm/animation/TweenManager.d.ts +9 -5
- package/dist/esm/animation/TweenManager.d.ts.map +1 -1
- package/dist/esm/animation/TweenManager.js +14 -8
- package/dist/esm/animation/TweenManager.js.map +1 -1
- package/dist/esm/animation/index.d.ts +6 -4
- package/dist/esm/animation/index.d.ts.map +1 -1
- package/dist/esm/audio/AudioBus.d.ts +12 -12
- package/dist/esm/audio/AudioBus.js +29 -29
- package/dist/esm/audio/AudioEffect.d.ts +18 -0
- package/dist/esm/audio/AudioEffect.d.ts.map +1 -0
- package/dist/esm/audio/AudioEffect.js +16 -0
- package/dist/esm/audio/AudioEffect.js.map +1 -0
- package/dist/esm/audio/AudioGenerator.d.ts +91 -0
- package/dist/esm/audio/AudioGenerator.d.ts.map +1 -0
- package/dist/esm/audio/AudioGenerator.js +165 -0
- package/dist/esm/audio/AudioGenerator.js.map +1 -0
- package/dist/esm/audio/AudioGeneratorVoice.d.ts +52 -0
- package/dist/esm/audio/AudioGeneratorVoice.d.ts.map +1 -0
- package/dist/esm/audio/AudioGeneratorVoice.js +141 -0
- package/dist/esm/audio/AudioGeneratorVoice.js.map +1 -0
- package/dist/esm/audio/AudioInput.d.ts +39 -0
- package/dist/esm/audio/AudioInput.d.ts.map +1 -0
- package/dist/esm/audio/AudioInput.js +53 -0
- package/dist/esm/audio/AudioInput.js.map +1 -0
- package/dist/esm/audio/AudioManager.d.ts +72 -34
- package/dist/esm/audio/AudioManager.d.ts.map +1 -1
- package/dist/esm/audio/AudioManager.js +97 -51
- package/dist/esm/audio/AudioManager.js.map +1 -1
- package/dist/esm/audio/AudioStream.d.ts +49 -0
- package/dist/esm/audio/AudioStream.d.ts.map +1 -0
- package/dist/esm/audio/AudioStream.js +109 -0
- package/dist/esm/audio/AudioStream.js.map +1 -0
- package/dist/esm/audio/AudioStreamVoice.d.ts +61 -0
- package/dist/esm/audio/AudioStreamVoice.d.ts.map +1 -0
- package/dist/esm/audio/AudioStreamVoice.js +137 -0
- package/dist/esm/audio/AudioStreamVoice.js.map +1 -0
- package/dist/esm/audio/BaseVoice.d.ts +111 -0
- package/dist/esm/audio/BaseVoice.d.ts.map +1 -0
- package/dist/esm/audio/BaseVoice.js +298 -0
- package/dist/esm/audio/BaseVoice.js.map +1 -0
- package/dist/esm/audio/BiquadEffect.d.ts +53 -0
- package/dist/esm/audio/BiquadEffect.d.ts.map +1 -0
- package/dist/esm/audio/BiquadEffect.js +110 -0
- package/dist/esm/audio/BiquadEffect.js.map +1 -0
- package/dist/esm/audio/InputVoice.d.ts +41 -0
- package/dist/esm/audio/InputVoice.d.ts.map +1 -0
- package/dist/esm/audio/InputVoice.js +85 -0
- package/dist/esm/audio/InputVoice.js.map +1 -0
- package/dist/esm/audio/NoopVoice.d.ts +29 -0
- package/dist/esm/audio/NoopVoice.d.ts.map +1 -0
- package/dist/esm/audio/NoopVoice.js +52 -0
- package/dist/esm/audio/NoopVoice.js.map +1 -0
- package/dist/esm/audio/Playable.d.ts +135 -0
- package/dist/esm/audio/Playable.d.ts.map +1 -0
- package/dist/esm/audio/Sound.d.ts +64 -69
- package/dist/esm/audio/Sound.d.ts.map +1 -1
- package/dist/esm/audio/Sound.js +176 -377
- package/dist/esm/audio/Sound.js.map +1 -1
- package/dist/esm/audio/SoundVoice.d.ts +63 -0
- package/dist/esm/audio/SoundVoice.d.ts.map +1 -0
- package/dist/esm/audio/SoundVoice.js +168 -0
- package/dist/esm/audio/SoundVoice.js.map +1 -0
- package/dist/esm/audio/{filters/WorkletFilter.d.ts → WorkletEffect.d.ts} +3 -3
- package/dist/esm/audio/WorkletEffect.d.ts.map +1 -0
- package/dist/esm/audio/{filters/WorkletFilter.js → WorkletEffect.js} +6 -6
- package/dist/esm/audio/WorkletEffect.js.map +1 -0
- package/dist/esm/audio/audio-context.js +1 -1
- package/dist/esm/audio/audio-context.js.map +1 -1
- package/dist/esm/audio/crossFade.d.ts +22 -13
- package/dist/esm/audio/crossFade.d.ts.map +1 -1
- package/dist/esm/audio/crossFade.js +21 -13
- package/dist/esm/audio/crossFade.js.map +1 -1
- package/dist/esm/audio/filters/HighpassFilter.d.ts +2 -2
- package/dist/esm/audio/filters/HighpassFilter.js +2 -2
- package/dist/esm/audio/filters/LowpassFilter.d.ts +2 -2
- package/dist/esm/audio/filters/LowpassFilter.js +2 -2
- package/dist/esm/audio/filters/index.d.ts +0 -10
- package/dist/esm/audio/filters/index.d.ts.map +1 -1
- package/dist/esm/audio/index.d.ts +13 -15
- package/dist/esm/audio/index.d.ts.map +1 -1
- package/dist/esm/core/Application.d.ts +127 -10
- package/dist/esm/core/Application.d.ts.map +1 -1
- package/dist/esm/core/Application.js +226 -25
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/BuildInfo.js +2 -2
- package/dist/esm/core/Color.d.ts +6 -4
- package/dist/esm/core/Color.d.ts.map +1 -1
- package/dist/esm/core/Color.js +19 -15
- package/dist/esm/core/Color.js.map +1 -1
- package/dist/esm/core/DisposalScope.d.ts +50 -0
- package/dist/esm/core/DisposalScope.d.ts.map +1 -0
- package/dist/esm/core/DisposalScope.js +86 -0
- package/dist/esm/core/DisposalScope.js.map +1 -0
- package/dist/esm/core/Perf.d.ts +10 -22
- package/dist/esm/core/Perf.d.ts.map +1 -1
- package/dist/esm/core/Perf.js +15 -8
- package/dist/esm/core/Perf.js.map +1 -1
- package/dist/esm/core/Registry.d.ts +64 -0
- package/dist/esm/core/Registry.d.ts.map +1 -0
- package/dist/esm/core/Registry.js +79 -0
- package/dist/esm/core/Registry.js.map +1 -0
- package/dist/esm/core/Scene.d.ts +69 -21
- package/dist/esm/core/Scene.d.ts.map +1 -1
- package/dist/esm/core/Scene.js +109 -16
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.d.ts +22 -60
- package/dist/esm/core/SceneManager.d.ts.map +1 -1
- package/dist/esm/core/SceneManager.js +68 -153
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +43 -2
- package/dist/esm/core/SceneNode.d.ts.map +1 -1
- package/dist/esm/core/SceneNode.js +101 -12
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Signal.js.map +1 -1
- package/dist/esm/core/Stage.d.ts +42 -0
- package/dist/esm/core/Stage.d.ts.map +1 -0
- package/dist/esm/core/System.d.ts +22 -0
- package/dist/esm/core/System.d.ts.map +1 -0
- package/dist/esm/core/SystemRegistry.d.ts +35 -0
- package/dist/esm/core/SystemRegistry.d.ts.map +1 -0
- package/dist/esm/core/SystemRegistry.js +104 -0
- package/dist/esm/core/SystemRegistry.js.map +1 -0
- package/dist/esm/core/Time.d.ts +15 -0
- package/dist/esm/core/Time.d.ts.map +1 -1
- package/dist/esm/core/Time.js +25 -0
- package/dist/esm/core/Time.js.map +1 -1
- package/dist/esm/core/dev.d.ts +9 -4
- package/dist/esm/core/dev.d.ts.map +1 -1
- package/dist/esm/core/dev.js +5 -0
- package/dist/esm/core/dev.js.map +1 -1
- package/dist/esm/core/index.d.ts +26 -15
- package/dist/esm/core/index.d.ts.map +1 -1
- package/dist/esm/core/letterbox.d.ts +25 -0
- package/dist/esm/core/letterbox.d.ts.map +1 -0
- package/dist/esm/core/letterbox.js +26 -0
- package/dist/esm/core/letterbox.js.map +1 -0
- package/dist/esm/core/serialization/NodeSerializer.d.ts +71 -0
- package/dist/esm/core/serialization/NodeSerializer.d.ts.map +1 -0
- package/dist/esm/core/serialization/Prefab.d.ts +49 -0
- package/dist/esm/core/serialization/Prefab.d.ts.map +1 -0
- package/dist/esm/core/serialization/Prefab.js +61 -0
- package/dist/esm/core/serialization/Prefab.js.map +1 -0
- package/dist/esm/core/serialization/SerializationRegistry.d.ts +95 -0
- package/dist/esm/core/serialization/SerializationRegistry.d.ts.map +1 -0
- package/dist/esm/core/serialization/SerializationRegistry.js +108 -0
- package/dist/esm/core/serialization/SerializationRegistry.js.map +1 -0
- package/dist/esm/core/serialization/commonFields.d.ts +20 -0
- package/dist/esm/core/serialization/commonFields.d.ts.map +1 -0
- package/dist/esm/core/serialization/commonFields.js +149 -0
- package/dist/esm/core/serialization/commonFields.js.map +1 -0
- package/dist/esm/core/serialization/coreSerializers.d.ts +9 -0
- package/dist/esm/core/serialization/coreSerializers.d.ts.map +1 -0
- package/dist/esm/core/serialization/coreSerializers.js +101 -0
- package/dist/esm/core/serialization/coreSerializers.js.map +1 -0
- package/dist/esm/core/serialization/index.d.ts +6 -0
- package/dist/esm/core/serialization/index.d.ts.map +1 -0
- package/dist/esm/core/serialization/read.d.ts +65 -0
- package/dist/esm/core/serialization/read.d.ts.map +1 -0
- package/dist/esm/core/serialization/read.js +48 -0
- package/dist/esm/core/serialization/read.js.map +1 -0
- package/dist/esm/core/serialization/renderingSerializers.d.ts +7 -0
- package/dist/esm/core/serialization/renderingSerializers.d.ts.map +1 -0
- package/dist/esm/core/serialization/renderingSerializers.js +311 -0
- package/dist/esm/core/serialization/renderingSerializers.js.map +1 -0
- package/dist/esm/core/serialization/serialize.d.ts +56 -0
- package/dist/esm/core/serialization/serialize.d.ts.map +1 -0
- package/dist/esm/core/serialization/serialize.js +144 -0
- package/dist/esm/core/serialization/serialize.js.map +1 -0
- package/dist/esm/core/serialization/serializerHelpers.d.ts +46 -0
- package/dist/esm/core/serialization/serializerHelpers.d.ts.map +1 -0
- package/dist/esm/core/serialization/serializerHelpers.js +161 -0
- package/dist/esm/core/serialization/serializerHelpers.js.map +1 -0
- package/dist/esm/core/serialization/types.d.ts +49 -0
- package/dist/esm/core/serialization/types.d.ts.map +1 -0
- package/dist/esm/core/serialization/types.js +9 -0
- package/dist/esm/core/serialization/types.js.map +1 -0
- package/dist/esm/core/serialization/uiSerializers.d.ts +7 -0
- package/dist/esm/core/serialization/uiSerializers.d.ts.map +1 -0
- package/dist/esm/core/serialization/uiSerializers.js +206 -0
- package/dist/esm/core/serialization/uiSerializers.js.map +1 -0
- package/dist/esm/core/types.d.ts +1 -1
- package/dist/esm/core/types.d.ts.map +1 -1
- package/dist/esm/core/utils.d.ts +1 -16
- package/dist/esm/core/utils.d.ts.map +1 -1
- package/dist/esm/core/utils.js +2 -100
- package/dist/esm/core/utils.js.map +1 -1
- package/dist/esm/debug/PerformanceLayer.js +8 -9
- package/dist/esm/debug/PerformanceLayer.js.map +1 -1
- package/dist/esm/debug/PointerStackLayer.d.ts.map +1 -1
- package/dist/esm/debug/PointerStackLayer.js +9 -6
- package/dist/esm/debug/PointerStackLayer.js.map +1 -1
- package/dist/esm/debug/RenderPassInspectorLayer.d.ts.map +1 -1
- package/dist/esm/debug/RenderPassInspectorLayer.js +19 -12
- package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -1
- package/dist/esm/extensions/Extension.d.ts +39 -4
- package/dist/esm/extensions/Extension.d.ts.map +1 -1
- package/dist/esm/extensions/materialize.d.ts +9 -1
- package/dist/esm/extensions/materialize.d.ts.map +1 -1
- package/dist/esm/extensions/materialize.js +17 -2
- package/dist/esm/extensions/materialize.js.map +1 -1
- package/dist/esm/extensions/snapshot.d.ts +2 -1
- package/dist/esm/extensions/snapshot.d.ts.map +1 -1
- package/dist/esm/extensions/snapshot.js +8 -0
- package/dist/esm/extensions/snapshot.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +34 -59
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/FocusManager.d.ts +59 -0
- package/dist/esm/input/FocusManager.d.ts.map +1 -0
- package/dist/esm/input/FocusManager.js +175 -0
- package/dist/esm/input/FocusManager.js.map +1 -0
- package/dist/esm/input/Gamepad.d.ts.map +1 -1
- package/dist/esm/input/Gamepad.js +8 -4
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/GamepadAxis.js +2 -2
- package/dist/esm/input/GamepadDefinitions.d.ts.map +1 -1
- package/dist/esm/input/GamepadDefinitions.js +6 -2
- package/dist/esm/input/GamepadDefinitions.js.map +1 -1
- package/dist/esm/input/GestureRecognizer.d.ts +1 -2
- package/dist/esm/input/GestureRecognizer.d.ts.map +1 -1
- package/dist/esm/input/GestureRecognizer.js +1 -3
- package/dist/esm/input/GestureRecognizer.js.map +1 -1
- package/dist/esm/input/InputBinding.js +3 -3
- package/dist/esm/input/InputBinding.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts +7 -2
- package/dist/esm/input/InputManager.d.ts.map +1 -1
- package/dist/esm/input/InputManager.js +35 -21
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionManager.d.ts +67 -2
- package/dist/esm/input/InteractionManager.d.ts.map +1 -1
- package/dist/esm/input/InteractionManager.js +165 -41
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/input/KeyEvent.d.ts +25 -0
- package/dist/esm/input/KeyEvent.d.ts.map +1 -0
- package/dist/esm/input/KeyEvent.js +32 -0
- package/dist/esm/input/KeyEvent.js.map +1 -0
- package/dist/esm/input/Pointer.d.ts +21 -4
- package/dist/esm/input/Pointer.d.ts.map +1 -1
- package/dist/esm/input/Pointer.js +54 -15
- package/dist/esm/input/Pointer.js.map +1 -1
- package/dist/esm/input/index.d.ts +3 -1
- package/dist/esm/input/index.d.ts.map +1 -1
- package/dist/esm/math/AbstractVector.d.ts.map +1 -1
- package/dist/esm/math/AbstractVector.js +7 -2
- package/dist/esm/math/AbstractVector.js.map +1 -1
- package/dist/esm/math/Circle.d.ts.map +1 -1
- package/dist/esm/math/Circle.js +5 -1
- package/dist/esm/math/Circle.js.map +1 -1
- package/dist/esm/math/Line.d.ts +1 -1
- package/dist/esm/math/Line.d.ts.map +1 -1
- package/dist/esm/math/Line.js +1 -1
- package/dist/esm/math/Line.js.map +1 -1
- package/dist/esm/math/Matrix.d.ts.map +1 -1
- package/dist/esm/math/Matrix.js +6 -1
- package/dist/esm/math/Matrix.js.map +1 -1
- package/dist/esm/math/ObservableVector.d.ts +26 -8
- package/dist/esm/math/ObservableVector.d.ts.map +1 -1
- package/dist/esm/math/ObservableVector.js +24 -16
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts +5 -0
- package/dist/esm/math/Polygon.d.ts.map +1 -1
- package/dist/esm/math/Polygon.js +27 -3
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/Random.d.ts +9 -9
- package/dist/esm/math/Random.d.ts.map +1 -1
- package/dist/esm/math/Random.js +46 -46
- package/dist/esm/math/Random.js.map +1 -1
- package/dist/esm/math/Rectangle.d.ts +11 -4
- package/dist/esm/math/Rectangle.d.ts.map +1 -1
- package/dist/esm/math/Rectangle.js +12 -6
- package/dist/esm/math/Rectangle.js.map +1 -1
- package/dist/esm/math/Vector.d.ts +1 -1
- package/dist/esm/math/Vector.d.ts.map +1 -1
- package/dist/esm/math/Vector.js +1 -1
- package/dist/esm/math/Vector.js.map +1 -1
- package/dist/esm/math/collision-detection.d.ts +42 -0
- package/dist/esm/math/collision-detection.d.ts.map +1 -1
- package/dist/esm/math/collision-detection.js +54 -4
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/collision-primitives.d.ts.map +1 -1
- package/dist/esm/math/collision-primitives.js +4 -0
- package/dist/esm/math/collision-primitives.js.map +1 -1
- package/dist/esm/math/geometry.d.ts +26 -0
- package/dist/esm/math/geometry.d.ts.map +1 -1
- package/dist/esm/math/geometry.js +89 -2
- package/dist/esm/math/geometry.js.map +1 -1
- package/dist/esm/math/index.d.ts +7 -5
- package/dist/esm/math/index.d.ts.map +1 -1
- package/dist/esm/math/swept-collision.d.ts +13 -0
- package/dist/esm/math/swept-collision.d.ts.map +1 -1
- package/dist/esm/math/swept-collision.js +15 -1
- package/dist/esm/math/swept-collision.js.map +1 -1
- package/dist/esm/math/triangulate.d.ts.map +1 -1
- package/dist/esm/math/triangulate.js +9 -1
- package/dist/esm/math/triangulate.js.map +1 -1
- package/dist/esm/math/utils.d.ts +20 -0
- package/dist/esm/math/utils.d.ts.map +1 -1
- package/dist/esm/math/utils.js +18 -15
- package/dist/esm/math/utils.js.map +1 -1
- package/dist/esm/renderer-sdk.d.ts +2 -0
- package/dist/esm/renderer-sdk.d.ts.map +1 -1
- package/dist/esm/{rendering.js → renderer-sdk.js} +1 -1
- package/dist/esm/renderer-sdk.js.map +1 -0
- package/dist/esm/rendering/CallbackRenderPass.js +1 -1
- package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
- package/dist/esm/rendering/Container.d.ts +3 -0
- package/dist/esm/rendering/Container.d.ts.map +1 -1
- package/dist/esm/rendering/Container.js +28 -5
- package/dist/esm/rendering/Container.js.map +1 -1
- package/dist/esm/rendering/Drawable.d.ts +24 -0
- package/dist/esm/rendering/Drawable.d.ts.map +1 -1
- package/dist/esm/rendering/Drawable.js +54 -0
- package/dist/esm/rendering/Drawable.js.map +1 -1
- package/dist/esm/rendering/GpuResourceAccountant.d.ts +65 -0
- package/dist/esm/rendering/GpuResourceAccountant.d.ts.map +1 -0
- package/dist/esm/rendering/GpuResourceAccountant.js +130 -0
- package/dist/esm/rendering/GpuResourceAccountant.js.map +1 -0
- package/dist/esm/rendering/RenderBackend.d.ts +15 -1
- package/dist/esm/rendering/RenderBackend.d.ts.map +1 -1
- package/dist/esm/rendering/RenderBatch.d.ts +55 -0
- package/dist/esm/rendering/RenderBatch.d.ts.map +1 -0
- package/dist/esm/rendering/RenderBatch.js +107 -0
- package/dist/esm/rendering/RenderBatch.js.map +1 -0
- package/dist/esm/rendering/RenderNode.d.ts +50 -10
- package/dist/esm/rendering/RenderNode.d.ts.map +1 -1
- package/dist/esm/rendering/RenderNode.js +113 -20
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderNodePass.js +2 -2
- package/dist/esm/rendering/RenderNodePass.js.map +1 -1
- package/dist/esm/rendering/RenderStats.d.ts +39 -0
- package/dist/esm/rendering/RenderStats.d.ts.map +1 -1
- package/dist/esm/rendering/RenderStats.js +14 -0
- package/dist/esm/rendering/RenderStats.js.map +1 -1
- package/dist/esm/rendering/RendererRegistry.d.ts.map +1 -1
- package/dist/esm/rendering/RendererRegistry.js +20 -23
- package/dist/esm/rendering/RendererRegistry.js.map +1 -1
- package/dist/esm/rendering/RenderingContext.d.ts +88 -4
- package/dist/esm/rendering/RenderingContext.d.ts.map +1 -1
- package/dist/esm/rendering/RenderingContext.js +107 -5
- package/dist/esm/rendering/RenderingContext.js.map +1 -1
- package/dist/esm/rendering/TransformBuffer.d.ts.map +1 -1
- package/dist/esm/rendering/TransformBuffer.js +2 -0
- package/dist/esm/rendering/TransformBuffer.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +47 -15
- package/dist/esm/rendering/View.d.ts.map +1 -1
- package/dist/esm/rendering/View.js +44 -27
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +3 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
- package/dist/esm/rendering/geometry/Geometry.d.ts.map +1 -1
- package/dist/esm/rendering/geometry/Geometry.js +4 -2
- package/dist/esm/rendering/geometry/Geometry.js.map +1 -1
- package/dist/esm/rendering/gradient/Gradient.d.ts.map +1 -1
- package/dist/esm/rendering/gradient/Gradient.js +7 -2
- package/dist/esm/rendering/gradient/Gradient.js.map +1 -1
- package/dist/esm/rendering/material/MaterialKey.d.ts.map +1 -1
- package/dist/esm/rendering/material/MaterialKey.js +2 -0
- package/dist/esm/rendering/material/MaterialKey.js.map +1 -1
- package/dist/esm/rendering/material/ShaderSource.js +6 -0
- package/dist/esm/rendering/material/ShaderSource.js.map +1 -1
- package/dist/esm/rendering/mesh/ImmediateMesh.d.ts +48 -0
- package/dist/esm/rendering/mesh/ImmediateMesh.d.ts.map +1 -0
- package/dist/esm/rendering/mesh/ImmediateMesh.js +85 -0
- package/dist/esm/rendering/mesh/ImmediateMesh.js.map +1 -0
- package/dist/esm/rendering/mesh/Mesh.d.ts +29 -6
- package/dist/esm/rendering/mesh/Mesh.d.ts.map +1 -1
- package/dist/esm/rendering/mesh/Mesh.js +40 -13
- package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
- package/dist/esm/rendering/pixelSnap.d.ts.map +1 -1
- package/dist/esm/rendering/pixelSnap.js +1 -0
- package/dist/esm/rendering/pixelSnap.js.map +1 -1
- package/dist/esm/rendering/plan/RenderCommand.d.ts +31 -9
- package/dist/esm/rendering/plan/RenderCommand.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderCommand.js +23 -21
- package/dist/esm/rendering/plan/RenderCommand.js.map +1 -1
- package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderEffectExecutor.js +1 -0
- package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -1
- package/dist/esm/rendering/plan/RenderInstruction.d.ts +7 -37
- package/dist/esm/rendering/plan/RenderInstruction.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts +17 -2
- package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanBuilder.js +132 -46
- package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanOptimizer.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanOptimizer.js +31 -4
- package/dist/esm/rendering/plan/RenderPlanOptimizer.js.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanPlayer.js +54 -17
- package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -1
- package/dist/esm/rendering/plan/RenderScope.d.ts +16 -10
- package/dist/esm/rendering/plan/RenderScope.d.ts.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts +6 -0
- package/dist/esm/rendering/primitives/Graphics.d.ts.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.js +17 -1
- package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
- package/dist/esm/rendering/{index.d.ts → public.d.ts} +5 -35
- package/dist/esm/rendering/public.d.ts.map +1 -0
- package/dist/esm/rendering/shader/ShaderAttribute.d.ts.map +1 -1
- package/dist/esm/rendering/shader/ShaderAttribute.js +2 -0
- package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +11 -0
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.js +24 -2
- package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/NineSliceSprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/NineSliceSprite.js +10 -11
- package/dist/esm/rendering/sprite/NineSliceSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/RepeatingSprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/RepeatingSprite.js +1 -3
- package/dist/esm/rendering/sprite/RepeatingSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.js +30 -3
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/sprite/nineSlice.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/nineSlice.js +12 -18
- package/dist/esm/rendering/sprite/nineSlice.js.map +1 -1
- package/dist/esm/rendering/sprite/repeatingSpritePlan.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/repeatingSpritePlan.js +2 -2
- package/dist/esm/rendering/sprite/repeatingSpritePlan.js.map +1 -1
- package/dist/esm/rendering/text/BitmapText.d.ts +2 -0
- package/dist/esm/rendering/text/BitmapText.d.ts.map +1 -1
- package/dist/esm/rendering/text/BitmapText.js +4 -0
- package/dist/esm/rendering/text/BitmapText.js.map +1 -1
- package/dist/esm/rendering/text/GlyphAtlas.d.ts.map +1 -1
- package/dist/esm/rendering/text/GlyphAtlas.js +2 -1
- package/dist/esm/rendering/text/GlyphAtlas.js.map +1 -1
- package/dist/esm/rendering/text/GlyphAtlasPool.d.ts +8 -1
- package/dist/esm/rendering/text/GlyphAtlasPool.d.ts.map +1 -1
- package/dist/esm/rendering/text/GlyphAtlasPool.js +9 -12
- package/dist/esm/rendering/text/GlyphAtlasPool.js.map +1 -1
- package/dist/esm/rendering/text/GlyphSdf.d.ts.map +1 -1
- package/dist/esm/rendering/text/GlyphSdf.js +5 -1
- package/dist/esm/rendering/text/GlyphSdf.js.map +1 -1
- package/dist/esm/rendering/text/HTMLText.d.ts.map +1 -1
- package/dist/esm/rendering/text/HTMLText.js +1 -0
- package/dist/esm/rendering/text/HTMLText.js.map +1 -1
- package/dist/esm/rendering/text/Text.d.ts +17 -6
- package/dist/esm/rendering/text/Text.d.ts.map +1 -1
- package/dist/esm/rendering/text/Text.js +7 -12
- package/dist/esm/rendering/text/Text.js.map +1 -1
- package/dist/esm/rendering/text/TextLayout.d.ts.map +1 -1
- package/dist/esm/rendering/text/TextLayout.js +4 -18
- package/dist/esm/rendering/text/TextLayout.js.map +1 -1
- package/dist/esm/rendering/texture/DataTexture.js +2 -2
- package/dist/esm/rendering/texture/DataTexture.js.map +1 -1
- package/dist/esm/rendering/texture/Texture.d.ts +6 -0
- package/dist/esm/rendering/texture/Texture.d.ts.map +1 -1
- package/dist/esm/rendering/texture/Texture.js +8 -0
- package/dist/esm/rendering/texture/Texture.js.map +1 -1
- package/dist/esm/rendering/texture/TextureRegion.d.ts.map +1 -1
- package/dist/esm/rendering/texture/TextureRegion.js.map +1 -1
- package/dist/esm/rendering/texture/repeat.d.ts.map +1 -1
- package/dist/esm/rendering/texture/repeat.js +2 -2
- package/dist/esm/rendering/texture/repeat.js.map +1 -1
- package/dist/esm/rendering/types.d.ts +11 -0
- package/dist/esm/rendering/types.d.ts.map +1 -1
- package/dist/esm/rendering/types.js +11 -0
- package/dist/esm/rendering/types.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +7 -3
- package/dist/esm/rendering/video/Video.d.ts.map +1 -1
- package/dist/esm/rendering/video/Video.js +7 -3
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +2 -2
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +21 -2
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +106 -6
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js +2 -2
- package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +17 -0
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +122 -38
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.js +2 -1
- package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +16 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js +32 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.js +15 -11
- package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js +14 -3
- package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js +3 -3
- package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js +11 -2
- package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +7 -2
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js +3 -2
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +10 -4
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +18 -2
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +91 -10
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js +3 -0
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +13 -0
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +102 -24
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js +6 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js +19 -9
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +8 -4
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +1 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +19 -7
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +13 -2
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +22 -2
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -1
- package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js +1 -1
- package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js.map +1 -1
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.d.ts +7 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js +8 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js.map +1 -1
- package/dist/esm/resources/Asset.d.ts +1 -1
- package/dist/esm/resources/Asset.d.ts.map +1 -1
- package/dist/esm/resources/Asset.js +0 -2
- package/dist/esm/resources/Asset.js.map +1 -1
- package/dist/esm/resources/AssetContainer.d.ts +75 -0
- package/dist/esm/resources/AssetContainer.d.ts.map +1 -0
- package/dist/esm/resources/AssetContainer.js +100 -0
- package/dist/esm/resources/AssetContainer.js.map +1 -0
- package/dist/esm/resources/AssetDefinitions.d.ts +3 -3
- package/dist/esm/resources/AssetDefinitions.d.ts.map +1 -1
- package/dist/esm/resources/Assets.d.ts.map +1 -1
- package/dist/esm/resources/Assets.js +0 -1
- package/dist/esm/resources/Assets.js.map +1 -1
- package/dist/esm/resources/FactoryRegistry.d.ts.map +1 -1
- package/dist/esm/resources/FactoryRegistry.js +14 -23
- package/dist/esm/resources/FactoryRegistry.js.map +1 -1
- package/dist/esm/resources/IndexedDbDatabase.d.ts.map +1 -1
- package/dist/esm/resources/IndexedDbDatabase.js +8 -1
- package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
- package/dist/esm/resources/IndexedDbKeyValueStore.d.ts +37 -0
- package/dist/esm/resources/IndexedDbKeyValueStore.d.ts.map +1 -0
- package/dist/esm/resources/IndexedDbKeyValueStore.js +58 -0
- package/dist/esm/resources/IndexedDbKeyValueStore.js.map +1 -0
- package/dist/esm/resources/KeyValueStore.d.ts +31 -0
- package/dist/esm/resources/KeyValueStore.d.ts.map +1 -0
- package/dist/esm/resources/Loader.d.ts +42 -2
- package/dist/esm/resources/Loader.d.ts.map +1 -1
- package/dist/esm/resources/Loader.js +92 -7
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/MemoryStore.d.ts +17 -0
- package/dist/esm/resources/MemoryStore.d.ts.map +1 -0
- package/dist/esm/resources/MemoryStore.js +30 -0
- package/dist/esm/resources/MemoryStore.js.map +1 -0
- package/dist/esm/resources/WebStorageStore.d.ts +40 -0
- package/dist/esm/resources/WebStorageStore.d.ts.map +1 -0
- package/dist/esm/resources/WebStorageStore.js +84 -0
- package/dist/esm/resources/WebStorageStore.js.map +1 -0
- package/dist/esm/resources/coreAssetBindings.d.ts.map +1 -1
- package/dist/esm/resources/coreAssetBindings.js +16 -5
- package/dist/esm/resources/coreAssetBindings.js.map +1 -1
- package/dist/esm/resources/factories/BmFontFactory.js +4 -4
- package/dist/esm/resources/factories/BmFontFactory.js.map +1 -1
- package/dist/esm/resources/factories/MusicFactory.d.ts +9 -9
- package/dist/esm/resources/factories/MusicFactory.d.ts.map +1 -1
- package/dist/esm/resources/factories/MusicFactory.js +7 -7
- package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
- package/dist/esm/resources/factories/SoundFactory.js +2 -2
- package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
- package/dist/esm/resources/factories/SubtitleFactory.d.ts +11 -1
- package/dist/esm/resources/factories/SubtitleFactory.d.ts.map +1 -1
- package/dist/esm/resources/factories/SubtitleFactory.js +13 -9
- package/dist/esm/resources/factories/SubtitleFactory.js.map +1 -1
- package/dist/esm/resources/index.d.ts +51 -34
- package/dist/esm/resources/index.d.ts.map +1 -1
- package/dist/esm/resources/utils.js +4 -4
- package/dist/esm/resources/utils.js.map +1 -1
- package/dist/esm/ui/Button.d.ts +54 -0
- package/dist/esm/ui/Button.d.ts.map +1 -0
- package/dist/esm/ui/Button.js +139 -0
- package/dist/esm/ui/Button.js.map +1 -0
- package/dist/esm/ui/Label.d.ts +17 -0
- package/dist/esm/ui/Label.d.ts.map +1 -0
- package/dist/esm/ui/Label.js +37 -0
- package/dist/esm/ui/Label.js.map +1 -0
- package/dist/esm/ui/Panel.d.ts +38 -0
- package/dist/esm/ui/Panel.d.ts.map +1 -0
- package/dist/esm/ui/Panel.js +61 -0
- package/dist/esm/ui/Panel.js.map +1 -0
- package/dist/esm/ui/ProgressBar.d.ts +37 -0
- package/dist/esm/ui/ProgressBar.d.ts.map +1 -0
- package/dist/esm/ui/ProgressBar.js +76 -0
- package/dist/esm/ui/ProgressBar.js.map +1 -0
- package/dist/esm/ui/Stack.d.ts +34 -0
- package/dist/esm/ui/Stack.d.ts.map +1 -0
- package/dist/esm/ui/Stack.js +69 -0
- package/dist/esm/ui/Stack.js.map +1 -0
- package/dist/esm/ui/UIRoot.d.ts +31 -0
- package/dist/esm/ui/UIRoot.d.ts.map +1 -0
- package/dist/esm/ui/UIRoot.js +49 -0
- package/dist/esm/ui/UIRoot.js.map +1 -0
- package/dist/esm/ui/Widget.d.ts +45 -0
- package/dist/esm/ui/Widget.d.ts.map +1 -0
- package/dist/esm/ui/Widget.js +113 -0
- package/dist/esm/ui/Widget.js.map +1 -0
- package/dist/esm/ui/index.d.ts +13 -0
- package/dist/esm/ui/index.d.ts.map +1 -0
- package/dist/exo.debug.esm.js +1 -948
- package/dist/exo.debug.esm.js.map +1 -1
- package/dist/exo.esm.js +1 -40945
- package/dist/exo.esm.js.map +1 -1
- package/package.json +24 -13
- package/dist/esm/audio/AbstractMedia.d.ts +0 -75
- package/dist/esm/audio/AbstractMedia.d.ts.map +0 -1
- package/dist/esm/audio/AbstractMedia.js +0 -179
- package/dist/esm/audio/AbstractMedia.js.map +0 -1
- package/dist/esm/audio/AudioAnalyser.d.ts +0 -128
- package/dist/esm/audio/AudioAnalyser.d.ts.map +0 -1
- package/dist/esm/audio/AudioAnalyser.js +0 -473
- package/dist/esm/audio/AudioAnalyser.js.map +0 -1
- package/dist/esm/audio/AudioFilter.d.ts +0 -17
- package/dist/esm/audio/AudioFilter.d.ts.map +0 -1
- package/dist/esm/audio/AudioFilter.js +0 -15
- package/dist/esm/audio/AudioFilter.js.map +0 -1
- package/dist/esm/audio/BeatDetector.d.ts +0 -207
- package/dist/esm/audio/BeatDetector.d.ts.map +0 -1
- package/dist/esm/audio/BeatDetector.js +0 -424
- package/dist/esm/audio/BeatDetector.js.map +0 -1
- package/dist/esm/audio/Media.d.ts +0 -37
- package/dist/esm/audio/Media.d.ts.map +0 -1
- package/dist/esm/audio/Music.d.ts +0 -42
- package/dist/esm/audio/Music.d.ts.map +0 -1
- package/dist/esm/audio/Music.js +0 -164
- package/dist/esm/audio/Music.js.map +0 -1
- package/dist/esm/audio/OscillatorSound.d.ts +0 -100
- package/dist/esm/audio/OscillatorSound.d.ts.map +0 -1
- package/dist/esm/audio/OscillatorSound.js +0 -346
- package/dist/esm/audio/OscillatorSound.js.map +0 -1
- package/dist/esm/audio/dsp/fft.d.ts +0 -23
- package/dist/esm/audio/dsp/fft.d.ts.map +0 -1
- package/dist/esm/audio/dsp/mel.d.ts +0 -44
- package/dist/esm/audio/dsp/mel.d.ts.map +0 -1
- package/dist/esm/audio/dsp/mel.js +0 -70
- package/dist/esm/audio/dsp/mel.js.map +0 -1
- package/dist/esm/audio/dsp/tempogram.d.ts +0 -52
- package/dist/esm/audio/dsp/tempogram.d.ts.map +0 -1
- package/dist/esm/audio/filters/ChorusFilter.d.ts +0 -54
- package/dist/esm/audio/filters/ChorusFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/ChorusFilter.js +0 -155
- package/dist/esm/audio/filters/ChorusFilter.js.map +0 -1
- package/dist/esm/audio/filters/CompressorFilter.d.ts +0 -54
- package/dist/esm/audio/filters/CompressorFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/CompressorFilter.js +0 -123
- package/dist/esm/audio/filters/CompressorFilter.js.map +0 -1
- package/dist/esm/audio/filters/DelayFilter.d.ts +0 -36
- package/dist/esm/audio/filters/DelayFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/DelayFilter.js +0 -114
- package/dist/esm/audio/filters/DelayFilter.js.map +0 -1
- package/dist/esm/audio/filters/DuckingFilter.d.ts +0 -45
- package/dist/esm/audio/filters/DuckingFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/DuckingFilter.js +0 -172
- package/dist/esm/audio/filters/DuckingFilter.js.map +0 -1
- package/dist/esm/audio/filters/EqualizerFilter.d.ts +0 -51
- package/dist/esm/audio/filters/EqualizerFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/EqualizerFilter.js +0 -138
- package/dist/esm/audio/filters/EqualizerFilter.js.map +0 -1
- package/dist/esm/audio/filters/GranularFilter.d.ts +0 -63
- package/dist/esm/audio/filters/GranularFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/GranularFilter.js +0 -107
- package/dist/esm/audio/filters/GranularFilter.js.map +0 -1
- package/dist/esm/audio/filters/PitchShiftFilter.d.ts +0 -45
- package/dist/esm/audio/filters/PitchShiftFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/PitchShiftFilter.js +0 -66
- package/dist/esm/audio/filters/PitchShiftFilter.js.map +0 -1
- package/dist/esm/audio/filters/ReverbFilter.d.ts +0 -38
- package/dist/esm/audio/filters/ReverbFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/ReverbFilter.js +0 -122
- package/dist/esm/audio/filters/ReverbFilter.js.map +0 -1
- package/dist/esm/audio/filters/VocoderFilter.d.ts +0 -50
- package/dist/esm/audio/filters/VocoderFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/VocoderFilter.js +0 -94
- package/dist/esm/audio/filters/VocoderFilter.js.map +0 -1
- package/dist/esm/audio/filters/WorkletFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/WorkletFilter.js.map +0 -1
- package/dist/esm/audio/worklets/beat-detector.worklet.d.ts +0 -2
- package/dist/esm/audio/worklets/beat-detector.worklet.d.ts.map +0 -1
- package/dist/esm/audio/worklets/beat-detector.worklet.js +0 -647
- package/dist/esm/audio/worklets/beat-detector.worklet.js.map +0 -1
- package/dist/esm/audio/worklets/granular.worklet.d.ts +0 -2
- package/dist/esm/audio/worklets/granular.worklet.d.ts.map +0 -1
- package/dist/esm/audio/worklets/granular.worklet.js +0 -89
- package/dist/esm/audio/worklets/granular.worklet.js.map +0 -1
- package/dist/esm/audio/worklets/pitch-shift.worklet.d.ts +0 -2
- package/dist/esm/audio/worklets/pitch-shift.worklet.d.ts.map +0 -1
- package/dist/esm/audio/worklets/pitch-shift.worklet.js +0 -74
- package/dist/esm/audio/worklets/pitch-shift.worklet.js.map +0 -1
- package/dist/esm/audio/worklets/vocoder.worklet.d.ts +0 -2
- package/dist/esm/audio/worklets/vocoder.worklet.d.ts.map +0 -1
- package/dist/esm/audio/worklets/vocoder.worklet.js +0 -92
- package/dist/esm/audio/worklets/vocoder.worklet.js.map +0 -1
- package/dist/esm/input/internal/interactionManagerRegistry.d.ts +0 -10
- package/dist/esm/input/internal/interactionManagerRegistry.d.ts.map +0 -1
- package/dist/esm/input/internal/interactionManagerRegistry.js +0 -10
- package/dist/esm/input/internal/interactionManagerRegistry.js.map +0 -1
- package/dist/esm/rendering/index.d.ts.map +0 -1
- package/dist/esm/rendering/plan/RenderInstruction.js +0 -45
- package/dist/esm/rendering/plan/RenderInstruction.js.map +0 -1
- package/dist/esm/rendering.d.ts +0 -29
- package/dist/esm/rendering.d.ts.map +0 -1
- package/dist/esm/rendering.js.map +0 -1
- package/dist/esm/resources/JsonStore.d.ts +0 -19
- package/dist/esm/resources/JsonStore.d.ts.map +0 -1
- package/dist/esm/resources/JsonStore.js +0 -62
- package/dist/esm/resources/JsonStore.js.map +0 -1
package/dist/esm/audio/Sound.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { clamp } from '../math/utils.js';
|
|
2
2
|
import { Vector } from '../math/Vector.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { getAudioContext, isAudioContextReady } from './audio-context.js';
|
|
4
|
+
import { NoopVoice } from './NoopVoice.js';
|
|
5
|
+
import { SoundVoice } from './SoundVoice.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Eviction strategy used when the pool is full and a new play is requested.
|
|
@@ -26,62 +26,54 @@ var SoundPoolStrategy;
|
|
|
26
26
|
SoundPoolStrategy["LowestPriority"] = "priority";
|
|
27
27
|
})(SoundPoolStrategy || (SoundPoolStrategy = {}));
|
|
28
28
|
/**
|
|
29
|
-
* Pre-decoded short audio clip backed by an `AudioBuffer`.
|
|
30
|
-
* {@link Sound.play} call grabs a free `AudioBufferSourceNode` from the
|
|
31
|
-
* pool (default size 8) so the same sound can overlap itself; when the
|
|
32
|
-
* pool is full the configured {@link SoundPoolStrategy} decides which
|
|
33
|
-
* source to evict.
|
|
29
|
+
* Pre-decoded short audio clip backed by an `AudioBuffer`.
|
|
34
30
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
31
|
+
* Sound is a **data descriptor** — it holds the decoded audio buffer, sprite
|
|
32
|
+
* definitions, default playback parameters, and spatial configuration but does
|
|
33
|
+
* NOT start playback itself. Playback is driven by
|
|
34
|
+
* `AudioManager.play(sound, options)` which returns a {@link Voice} handle.
|
|
37
35
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* attenuation handled by Web Audio.
|
|
36
|
+
* Multiple concurrent plays of the same Sound are supported up to `poolSize`.
|
|
37
|
+
* When the pool is full the configured {@link SoundPoolStrategy} decides which
|
|
38
|
+
* active voice to evict.
|
|
42
39
|
*
|
|
43
|
-
* Use {@link
|
|
40
|
+
* Use {@link AudioStream} for long-form streaming audio (single source, decoded
|
|
44
41
|
* lazily) — `Sound` is best for short, frequently-triggered clips.
|
|
45
42
|
*/
|
|
46
|
-
class Sound
|
|
43
|
+
class Sound {
|
|
47
44
|
_audioBuffer;
|
|
48
|
-
_pooledSources = [];
|
|
49
|
-
_queuedPooledPlays = [];
|
|
50
45
|
_sprites = new Map();
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
46
|
+
// Playable buffer window (seconds). Full buffer by default; narrowed by clip().
|
|
47
|
+
_clipStart = 0;
|
|
48
|
+
_clipEnd = 0;
|
|
49
|
+
/** Default volume applied to new voices. */
|
|
50
|
+
volume;
|
|
51
|
+
/** Default loop flag applied to new voices. */
|
|
52
|
+
loop;
|
|
53
|
+
/** Default playback rate applied to new voices. */
|
|
54
|
+
playbackRate;
|
|
55
|
+
/** Default muted flag applied to new voices. */
|
|
56
|
+
muted;
|
|
57
|
+
_poolSize;
|
|
58
|
+
_poolStrategy;
|
|
59
|
+
_priority;
|
|
60
|
+
// Spatial descriptor params — read by _createVoice to configure the PannerNode.
|
|
56
61
|
_position = null;
|
|
57
62
|
_velocity = null;
|
|
58
|
-
_pannerNode = null;
|
|
59
63
|
_distanceModel = 'linear';
|
|
60
64
|
_refDistance = 50;
|
|
61
65
|
_maxDistance = 1000;
|
|
62
66
|
_rolloffFactor = 1;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
this.setupWithAudioContext(ctx);
|
|
66
|
-
};
|
|
67
|
-
get paused() {
|
|
68
|
-
return this._paused;
|
|
69
|
-
}
|
|
70
|
-
set paused(paused) {
|
|
71
|
-
if (paused) {
|
|
72
|
-
this.pause();
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
this.play();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
get analyserTarget() {
|
|
79
|
-
return this._audioSetup?.gainNode ?? null;
|
|
80
|
-
}
|
|
67
|
+
// Active voice pool — tracks concurrent voices for eviction logic.
|
|
68
|
+
_activeVoices = [];
|
|
81
69
|
/** The underlying decoded audio data. Useful for sharing a single decoded buffer across multiple `Sound` instances. */
|
|
82
70
|
get audioBuffer() {
|
|
83
71
|
return this._audioBuffer;
|
|
84
72
|
}
|
|
73
|
+
/** Playable duration in seconds — the full buffer, or the clip span for a {@link Sound.clip}. */
|
|
74
|
+
get duration() {
|
|
75
|
+
return this._clipEnd - this._clipStart;
|
|
76
|
+
}
|
|
85
77
|
get poolSize() {
|
|
86
78
|
return this._poolSize;
|
|
87
79
|
}
|
|
@@ -117,16 +109,11 @@ class Sound extends AbstractMedia {
|
|
|
117
109
|
if (this._position !== null) {
|
|
118
110
|
this._position.destroy();
|
|
119
111
|
this._position = null;
|
|
120
|
-
this._teardownSpatial();
|
|
121
|
-
getAudioManager()._unregisterSpatialSound(this);
|
|
122
112
|
}
|
|
123
113
|
return;
|
|
124
114
|
}
|
|
125
115
|
if (this._position === null) {
|
|
126
|
-
// Becoming spatial
|
|
127
116
|
this._position = new Vector(value.x, value.y);
|
|
128
|
-
this._setupSpatial();
|
|
129
|
-
getAudioManager()._registerSpatialSound(this);
|
|
130
117
|
}
|
|
131
118
|
else {
|
|
132
119
|
this._position.set(value.x, value.y);
|
|
@@ -151,15 +138,12 @@ class Sound extends AbstractMedia {
|
|
|
151
138
|
}
|
|
152
139
|
}
|
|
153
140
|
}
|
|
154
|
-
/** Distance-attenuation model.
|
|
141
|
+
/** Distance-attenuation model. */
|
|
155
142
|
get distanceModel() {
|
|
156
143
|
return this._distanceModel;
|
|
157
144
|
}
|
|
158
145
|
set distanceModel(value) {
|
|
159
146
|
this._distanceModel = value;
|
|
160
|
-
if (this._pannerNode !== null) {
|
|
161
|
-
this._pannerNode.distanceModel = value;
|
|
162
|
-
}
|
|
163
147
|
}
|
|
164
148
|
/** Reference distance — volume is at full strength at and below this distance. */
|
|
165
149
|
get refDistance() {
|
|
@@ -167,9 +151,6 @@ class Sound extends AbstractMedia {
|
|
|
167
151
|
}
|
|
168
152
|
set refDistance(value) {
|
|
169
153
|
this._refDistance = Math.max(0, value);
|
|
170
|
-
if (this._pannerNode !== null) {
|
|
171
|
-
this._pannerNode.refDistance = this._refDistance;
|
|
172
|
-
}
|
|
173
154
|
}
|
|
174
155
|
/** Maximum distance for the `'linear'` model — volume reaches zero here. */
|
|
175
156
|
get maxDistance() {
|
|
@@ -177,9 +158,6 @@ class Sound extends AbstractMedia {
|
|
|
177
158
|
}
|
|
178
159
|
set maxDistance(value) {
|
|
179
160
|
this._maxDistance = Math.max(0, value);
|
|
180
|
-
if (this._pannerNode !== null) {
|
|
181
|
-
this._pannerNode.maxDistance = this._maxDistance;
|
|
182
|
-
}
|
|
183
161
|
}
|
|
184
162
|
/** Falloff steepness. Higher values attenuate faster with distance. */
|
|
185
163
|
get rolloffFactor() {
|
|
@@ -187,27 +165,18 @@ class Sound extends AbstractMedia {
|
|
|
187
165
|
}
|
|
188
166
|
set rolloffFactor(value) {
|
|
189
167
|
this._rolloffFactor = Math.max(0, value);
|
|
190
|
-
if (this._pannerNode !== null) {
|
|
191
|
-
this._pannerNode.rolloffFactor = this._rolloffFactor;
|
|
192
|
-
}
|
|
193
168
|
}
|
|
194
169
|
constructor(audioBuffer, options = {}) {
|
|
195
|
-
super({
|
|
196
|
-
duration: audioBuffer.duration,
|
|
197
|
-
volume: 1,
|
|
198
|
-
playbackRate: 1,
|
|
199
|
-
loop: false,
|
|
200
|
-
muted: false,
|
|
201
|
-
});
|
|
202
170
|
this._audioBuffer = audioBuffer;
|
|
203
|
-
|
|
171
|
+
this._clipEnd = audioBuffer.duration;
|
|
172
|
+
const { poolSize, poolStrategy, priority, sprites, volume, loop, playbackRate, muted, distanceModel, refDistance, maxDistance, rolloffFactor } = options;
|
|
173
|
+
this.volume = clamp(volume ?? 1, 0, 1);
|
|
174
|
+
this.loop = loop ?? false;
|
|
175
|
+
this.playbackRate = clamp(playbackRate ?? 1, 0.1, 20);
|
|
176
|
+
this.muted = muted ?? false;
|
|
204
177
|
this._poolSize = Math.max(1, Math.floor(poolSize ?? 8));
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
}
|
|
208
|
-
if (priority !== undefined) {
|
|
209
|
-
this._priority = priority;
|
|
210
|
-
}
|
|
178
|
+
this._poolStrategy = poolStrategy ?? SoundPoolStrategy.FirstInFirstOut;
|
|
179
|
+
this._priority = priority ?? 0;
|
|
211
180
|
if (distanceModel !== undefined) {
|
|
212
181
|
this._distanceModel = distanceModel;
|
|
213
182
|
}
|
|
@@ -220,52 +189,9 @@ class Sound extends AbstractMedia {
|
|
|
220
189
|
if (rolloffFactor !== undefined) {
|
|
221
190
|
this._rolloffFactor = Math.max(0, rolloffFactor);
|
|
222
191
|
}
|
|
223
|
-
if (Object.keys(playbackOptions).length > 0) {
|
|
224
|
-
this.applyOptions(playbackOptions);
|
|
225
|
-
}
|
|
226
192
|
if (sprites) {
|
|
227
193
|
this.setSprites(sprites);
|
|
228
194
|
}
|
|
229
|
-
if (isAudioContextReady()) {
|
|
230
|
-
this.setupWithAudioContext(getAudioContext());
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
onAudioContextReady.add(this._onAudioContextReady);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
setVolume(value) {
|
|
237
|
-
const volume = clamp(value, 0, 2);
|
|
238
|
-
if (this._volume === volume) {
|
|
239
|
-
return this;
|
|
240
|
-
}
|
|
241
|
-
this._volume = volume;
|
|
242
|
-
if (this._audioSetup) {
|
|
243
|
-
const { gainNode, audioContext } = this._audioSetup;
|
|
244
|
-
gainNode.gain.setTargetAtTime(this.muted ? 0 : volume, audioContext.currentTime, 0.01);
|
|
245
|
-
}
|
|
246
|
-
return this;
|
|
247
|
-
}
|
|
248
|
-
setLoop(loop) {
|
|
249
|
-
this._loop = loop;
|
|
250
|
-
return this;
|
|
251
|
-
}
|
|
252
|
-
setPlaybackRate(value) {
|
|
253
|
-
this._playbackRate = clamp(value, 0.1, 20);
|
|
254
|
-
return this;
|
|
255
|
-
}
|
|
256
|
-
getTime() {
|
|
257
|
-
return 0;
|
|
258
|
-
}
|
|
259
|
-
setTime(currentTime) {
|
|
260
|
-
return this;
|
|
261
|
-
}
|
|
262
|
-
setMuted(muted) {
|
|
263
|
-
this._muted = muted;
|
|
264
|
-
if (this._audioSetup) {
|
|
265
|
-
const { gainNode, audioContext } = this._audioSetup;
|
|
266
|
-
gainNode.gain.setTargetAtTime(muted ? 0 : this.volume, audioContext.currentTime, 0.01);
|
|
267
|
-
}
|
|
268
|
-
return this;
|
|
269
195
|
}
|
|
270
196
|
setPoolSize(poolSize) {
|
|
271
197
|
const normalizedPoolSize = Math.max(1, Math.floor(poolSize));
|
|
@@ -273,7 +199,7 @@ class Sound extends AbstractMedia {
|
|
|
273
199
|
return this;
|
|
274
200
|
}
|
|
275
201
|
this._poolSize = normalizedPoolSize;
|
|
276
|
-
this.
|
|
202
|
+
this._trimActiveVoices();
|
|
277
203
|
return this;
|
|
278
204
|
}
|
|
279
205
|
setSprites(sprites) {
|
|
@@ -313,45 +239,57 @@ class Sound extends AbstractMedia {
|
|
|
313
239
|
return this;
|
|
314
240
|
}
|
|
315
241
|
/**
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
*
|
|
319
|
-
*
|
|
320
|
-
*
|
|
242
|
+
* Return a new {@link Sound} that plays only the `[offset, offset + duration]`
|
|
243
|
+
* sub-range (seconds) of this sound's buffer — an audio atlas / sprite-sheet
|
|
244
|
+
* clip. The clip shares the same decoded {@link AudioBuffer} (no extra memory)
|
|
245
|
+
* and inherits this sound's default playback + spatial settings, including its
|
|
246
|
+
* own independent voice pool.
|
|
321
247
|
*/
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
this.
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
this.
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
this.
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
248
|
+
clip(offset, duration) {
|
|
249
|
+
const start = clamp(offset, 0, this._audioBuffer.duration);
|
|
250
|
+
const end = clamp(start + duration, start, this._audioBuffer.duration);
|
|
251
|
+
const clip = new Sound(this._audioBuffer, {
|
|
252
|
+
volume: this.volume,
|
|
253
|
+
loop: this.loop,
|
|
254
|
+
playbackRate: this.playbackRate,
|
|
255
|
+
muted: this.muted,
|
|
256
|
+
poolSize: this._poolSize,
|
|
257
|
+
poolStrategy: this._poolStrategy,
|
|
258
|
+
priority: this._priority,
|
|
259
|
+
distanceModel: this._distanceModel,
|
|
260
|
+
refDistance: this._refDistance,
|
|
261
|
+
maxDistance: this._maxDistance,
|
|
262
|
+
rolloffFactor: this._rolloffFactor,
|
|
263
|
+
});
|
|
264
|
+
clip._clipStart = start;
|
|
265
|
+
clip._clipEnd = end;
|
|
266
|
+
return clip;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Implements {@link Playable}. Called by {@link AudioManager.play}; do not
|
|
270
|
+
* call directly — use `manager.play(sound, options)` instead.
|
|
271
|
+
*
|
|
272
|
+
* Creates one {@link SoundVoice} backed by a single `AudioBufferSourceNode`.
|
|
273
|
+
* Pool limits are enforced: if the pool is full the configured eviction
|
|
274
|
+
* strategy picks a victim to stop before the new voice starts.
|
|
275
|
+
*/
|
|
276
|
+
_createVoice(manager, options) {
|
|
277
|
+
const offset = this._clipStart + Math.max(0, options.time ?? 0);
|
|
278
|
+
if (offset >= this._clipEnd) {
|
|
279
|
+
return new NoopVoice(options.bus ?? manager.sound);
|
|
280
|
+
}
|
|
281
|
+
return this._buildVoice(manager, options, offset, {
|
|
282
|
+
base: this._clipStart,
|
|
283
|
+
end: this._clipEnd,
|
|
284
|
+
loopStart: this._clipStart,
|
|
285
|
+
loopEnd: this._clipEnd,
|
|
349
286
|
});
|
|
350
|
-
this._paused = false;
|
|
351
|
-
this.onStart.dispatch();
|
|
352
|
-
return this;
|
|
353
287
|
}
|
|
354
|
-
|
|
288
|
+
/**
|
|
289
|
+
* Create a voice for a named sprite clip.
|
|
290
|
+
* @internal Used by managers that want sprite-level playback.
|
|
291
|
+
*/
|
|
292
|
+
_createSpriteVoice(manager, name, options = {}) {
|
|
355
293
|
const clip = this._sprites.get(name);
|
|
356
294
|
if (!clip) {
|
|
357
295
|
throw new Error(`Sound sprite "${name}" is not defined.`);
|
|
@@ -362,196 +300,99 @@ class Sound extends AbstractMedia {
|
|
|
362
300
|
throw new Error(`Sound sprite "${name}" offset (${clipOffset}s) exceeds clip duration (${clip.end - clip.start}s).`);
|
|
363
301
|
}
|
|
364
302
|
const loop = options.loop ?? clip.loop;
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
}
|
|
369
|
-
if (options.muted !== undefined) {
|
|
370
|
-
this.setMuted(options.muted);
|
|
371
|
-
}
|
|
372
|
-
this._enqueuePooledPlay({
|
|
373
|
-
offset,
|
|
374
|
-
duration: loop ? undefined : clip.end - offset,
|
|
375
|
-
loop,
|
|
303
|
+
return this._buildVoice(manager, { ...options, loop }, offset, {
|
|
304
|
+
base: clip.start,
|
|
305
|
+
end: clip.end,
|
|
376
306
|
loopStart: clip.start,
|
|
377
307
|
loopEnd: clip.end,
|
|
378
|
-
playbackRate,
|
|
379
308
|
});
|
|
380
|
-
this.onStart.dispatch();
|
|
381
|
-
return this;
|
|
382
309
|
}
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
const
|
|
391
|
-
const
|
|
392
|
-
this.
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
310
|
+
/**
|
|
311
|
+
* Shared voice construction for full-buffer and sprite playback. Enforces the
|
|
312
|
+
* pool limit, builds the {@link SoundVoice}, seeds spatialization from the
|
|
313
|
+
* descriptor's position, and tracks the voice for eviction.
|
|
314
|
+
*/
|
|
315
|
+
_buildVoice(manager, options, offset, window) {
|
|
316
|
+
const loop = options.loop ?? this.loop;
|
|
317
|
+
const playbackRate = clamp(options.playbackRate ?? this.playbackRate, 0.1, 20);
|
|
318
|
+
const detune = options.detune ?? 0;
|
|
319
|
+
const volume = clamp(options.muted ? 0 : (options.volume ?? (this.muted ? 0 : this.volume)), 0, 1);
|
|
320
|
+
const bus = options.bus ?? manager.sound;
|
|
321
|
+
// Pool eviction: stop the victim voice if we're at capacity.
|
|
322
|
+
this._pruneEndedVoices();
|
|
323
|
+
if (this._activeVoices.length >= this._poolSize) {
|
|
324
|
+
const victimIndex = this._pickEvictionVictim();
|
|
325
|
+
const victim = this._activeVoices[victimIndex];
|
|
326
|
+
if (victim) {
|
|
327
|
+
this._activeVoices.splice(victimIndex, 1);
|
|
328
|
+
victim.voice.stop();
|
|
329
|
+
}
|
|
397
330
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
331
|
+
const audioContext = getAudioContext();
|
|
332
|
+
const output = audioContext.createGain();
|
|
333
|
+
const voice = new SoundVoice({
|
|
334
|
+
audioContext,
|
|
335
|
+
output,
|
|
336
|
+
bus,
|
|
337
|
+
manager,
|
|
338
|
+
volume,
|
|
339
|
+
spatial: {
|
|
340
|
+
distanceModel: this._distanceModel,
|
|
341
|
+
refDistance: this._refDistance,
|
|
342
|
+
maxDistance: this._maxDistance,
|
|
343
|
+
rolloffFactor: this._rolloffFactor,
|
|
344
|
+
},
|
|
345
|
+
buffer: this._audioBuffer,
|
|
346
|
+
loop,
|
|
347
|
+
playbackRate,
|
|
348
|
+
detune,
|
|
349
|
+
offset,
|
|
350
|
+
window,
|
|
351
|
+
});
|
|
352
|
+
// Seed spatialization from the descriptor's position (initial value only;
|
|
353
|
+
// move a live voice via `voice.position` or `voice.follow(node)`).
|
|
354
|
+
if (this._position !== null) {
|
|
355
|
+
voice.position = this._position;
|
|
411
356
|
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
const
|
|
417
|
-
if (
|
|
418
|
-
|
|
419
|
-
}
|
|
420
|
-
else {
|
|
421
|
-
upstream.connect(this._audioSetup.audioContext.destination);
|
|
357
|
+
const startedAt = audioContext.currentTime;
|
|
358
|
+
const effectiveDuration = loop ? Infinity : window.end - offset;
|
|
359
|
+
const pooledVoice = { voice, startedAt, effectiveDuration };
|
|
360
|
+
voice.onEnd.add(() => {
|
|
361
|
+
const index = this._activeVoices.indexOf(pooledVoice);
|
|
362
|
+
if (index !== -1) {
|
|
363
|
+
this._activeVoices.splice(index, 1);
|
|
422
364
|
}
|
|
365
|
+
});
|
|
366
|
+
this._activeVoices.push(pooledVoice);
|
|
367
|
+
return voice;
|
|
368
|
+
}
|
|
369
|
+
/** Stop all currently active voices (e.g. for replace mode). */
|
|
370
|
+
_stopAllVoices() {
|
|
371
|
+
const voices = [...this._activeVoices];
|
|
372
|
+
this._activeVoices.length = 0;
|
|
373
|
+
for (const pv of voices) {
|
|
374
|
+
pv.voice.stop();
|
|
423
375
|
}
|
|
424
376
|
}
|
|
425
377
|
destroy() {
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
this._pannerNode = null;
|
|
429
|
-
}
|
|
378
|
+
this._stopAllVoices();
|
|
379
|
+
this._sprites.clear();
|
|
430
380
|
if (this._position !== null) {
|
|
431
381
|
this._position.destroy();
|
|
432
382
|
this._position = null;
|
|
433
|
-
getAudioManager()._unregisterSpatialSound(this);
|
|
434
383
|
}
|
|
435
384
|
if (this._velocity !== null) {
|
|
436
385
|
this._velocity.destroy();
|
|
437
386
|
this._velocity = null;
|
|
438
387
|
}
|
|
439
|
-
super.destroy();
|
|
440
|
-
onAudioContextReady.remove(this._onAudioContextReady);
|
|
441
|
-
this._audioSetup?.gainNode.disconnect();
|
|
442
|
-
this._stopAllPooled();
|
|
443
|
-
this._queuedPooledPlays.length = 0;
|
|
444
|
-
this._sprites.clear();
|
|
445
|
-
}
|
|
446
|
-
/** Internal: called by AudioManager.update() once per frame for spatial sounds. */
|
|
447
|
-
_tickSpatial() {
|
|
448
|
-
if (this._pannerNode === null || this._position === null)
|
|
449
|
-
return;
|
|
450
|
-
const ctx = this._pannerNode.context;
|
|
451
|
-
const t = ctx.currentTime;
|
|
452
|
-
const panner = this._pannerNode;
|
|
453
|
-
if (panner.positionX) {
|
|
454
|
-
panner.positionX.setValueAtTime(this._position.x, t);
|
|
455
|
-
panner.positionY.setValueAtTime(this._position.y, t);
|
|
456
|
-
panner.positionZ.setValueAtTime(0, t);
|
|
457
|
-
}
|
|
458
|
-
else if (panner.setPosition) {
|
|
459
|
-
panner.setPosition(this._position.x, this._position.y, 0);
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
_setupSpatial() {
|
|
463
|
-
if (!this._audioSetup || this._pannerNode !== null)
|
|
464
|
-
return;
|
|
465
|
-
const ctx = this._audioSetup.audioContext;
|
|
466
|
-
const panner = ctx.createPanner();
|
|
467
|
-
panner.panningModel = 'equalpower';
|
|
468
|
-
panner.distanceModel = this._distanceModel;
|
|
469
|
-
panner.refDistance = this._refDistance;
|
|
470
|
-
panner.maxDistance = this._maxDistance;
|
|
471
|
-
panner.rolloffFactor = this._rolloffFactor;
|
|
472
|
-
this._pannerNode = panner;
|
|
473
|
-
// Re-route: gainNode → pannerNode → bus.inputNode
|
|
474
|
-
this._audioSetup.gainNode.disconnect();
|
|
475
|
-
this._audioSetup.gainNode.connect(panner);
|
|
476
|
-
const busInput = this.bus._getInputNode();
|
|
477
|
-
if (busInput) {
|
|
478
|
-
panner.connect(busInput);
|
|
479
|
-
}
|
|
480
|
-
else {
|
|
481
|
-
panner.connect(ctx.destination);
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
_teardownSpatial() {
|
|
485
|
-
if (!this._audioSetup || this._pannerNode === null)
|
|
486
|
-
return;
|
|
487
|
-
this._audioSetup.gainNode.disconnect();
|
|
488
|
-
this._pannerNode.disconnect();
|
|
489
|
-
this._pannerNode = null;
|
|
490
|
-
// Restore: gainNode → bus.inputNode
|
|
491
|
-
const busInput = this.bus._getInputNode();
|
|
492
|
-
if (busInput) {
|
|
493
|
-
this._audioSetup.gainNode.connect(busInput);
|
|
494
|
-
}
|
|
495
|
-
else {
|
|
496
|
-
this._audioSetup.gainNode.connect(this._audioSetup.audioContext.destination);
|
|
497
|
-
}
|
|
498
388
|
}
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
if (inputNode) {
|
|
504
|
-
gainNode.connect(inputNode);
|
|
505
|
-
}
|
|
506
|
-
else {
|
|
507
|
-
gainNode.connect(audioContext.destination);
|
|
508
|
-
}
|
|
509
|
-
this._audioSetup = { audioContext, gainNode };
|
|
510
|
-
this._flushQueuedPooledPlays();
|
|
511
|
-
}
|
|
512
|
-
_enqueuePooledPlay(play) {
|
|
513
|
-
if (!this._audioSetup) {
|
|
514
|
-
this._queuedPooledPlays.push(play);
|
|
515
|
-
return;
|
|
516
|
-
}
|
|
517
|
-
this._playPooledNow(play);
|
|
518
|
-
}
|
|
519
|
-
_flushQueuedPooledPlays() {
|
|
520
|
-
if (!this._audioSetup || this._queuedPooledPlays.length === 0) {
|
|
521
|
-
return;
|
|
522
|
-
}
|
|
523
|
-
const queued = [...this._queuedPooledPlays];
|
|
524
|
-
this._queuedPooledPlays.length = 0;
|
|
525
|
-
for (const play of queued) {
|
|
526
|
-
this._playPooledNow(play);
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
_playPooledNow(play) {
|
|
530
|
-
if (!this._audioSetup) {
|
|
531
|
-
return;
|
|
532
|
-
}
|
|
533
|
-
const { audioContext } = this._audioSetup;
|
|
534
|
-
const sourceNode = this._createBufferSourceNode(this._audioSetup, play);
|
|
535
|
-
const startedAt = audioContext.currentTime;
|
|
536
|
-
const effectiveDuration = play.loop ? Infinity : (play.duration ?? Infinity);
|
|
537
|
-
const pooledSource = { node: sourceNode, startedAt, effectiveDuration };
|
|
538
|
-
sourceNode.onended = () => {
|
|
539
|
-
const index = this._pooledSources.indexOf(pooledSource);
|
|
540
|
-
if (index !== -1) {
|
|
541
|
-
this._pooledSources.splice(index, 1);
|
|
389
|
+
_pruneEndedVoices() {
|
|
390
|
+
for (let i = this._activeVoices.length - 1; i >= 0; i--) {
|
|
391
|
+
if (this._activeVoices[i]?.voice.ended === true) {
|
|
392
|
+
this._activeVoices.splice(i, 1);
|
|
542
393
|
}
|
|
543
|
-
|
|
544
|
-
if (this._pooledSources.length === 0 && this._queuedPooledPlays.length === 0) {
|
|
545
|
-
this._paused = true;
|
|
546
|
-
}
|
|
547
|
-
};
|
|
548
|
-
this._pooledSources.push(pooledSource);
|
|
549
|
-
this._trimPooledSources();
|
|
394
|
+
}
|
|
550
395
|
}
|
|
551
|
-
/**
|
|
552
|
-
* Pick the index within `_pooledSources` of the source to evict.
|
|
553
|
-
* The returned index is always valid (0 .. length-1).
|
|
554
|
-
*/
|
|
555
396
|
_pickEvictionVictim() {
|
|
556
397
|
switch (this._poolStrategy) {
|
|
557
398
|
case SoundPoolStrategy.LeastRecentlyUsed: {
|
|
@@ -566,18 +407,15 @@ class Sound extends AbstractMedia {
|
|
|
566
407
|
return 0; // oldest
|
|
567
408
|
}
|
|
568
409
|
}
|
|
569
|
-
/**
|
|
570
|
-
* Returns the index of the source with the smallest remaining playback
|
|
571
|
-
* time (i.e. closest to its natural end). Used for `LeastRecentlyUsed`.
|
|
572
|
-
*/
|
|
573
410
|
_pickClosestToEnd() {
|
|
574
|
-
|
|
575
|
-
return 0;
|
|
576
|
-
const now = this._audioSetup.audioContext.currentTime;
|
|
411
|
+
const now = isAudioContextReady() ? getAudioContext().currentTime : 0;
|
|
577
412
|
let minRemaining = Infinity;
|
|
578
413
|
let minIndex = 0;
|
|
579
|
-
for (let i = 0; i < this.
|
|
580
|
-
const src = this.
|
|
414
|
+
for (let i = 0; i < this._activeVoices.length; i++) {
|
|
415
|
+
const src = this._activeVoices[i];
|
|
416
|
+
if (src === undefined) {
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
581
419
|
const elapsed = now - src.startedAt;
|
|
582
420
|
const remaining = src.effectiveDuration - elapsed;
|
|
583
421
|
if (remaining < minRemaining) {
|
|
@@ -587,54 +425,15 @@ class Sound extends AbstractMedia {
|
|
|
587
425
|
}
|
|
588
426
|
return minIndex;
|
|
589
427
|
}
|
|
590
|
-
|
|
591
|
-
while (this.
|
|
428
|
+
_trimActiveVoices() {
|
|
429
|
+
while (this._activeVoices.length > this._poolSize) {
|
|
592
430
|
const victimIndex = this._pickEvictionVictim();
|
|
593
|
-
const victim = this.
|
|
594
|
-
if (!victim)
|
|
431
|
+
const victim = this._activeVoices[victimIndex];
|
|
432
|
+
if (!victim)
|
|
595
433
|
break;
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
victim.node.onended = null;
|
|
599
|
-
this._stopSourceNode(victim.node);
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
/** Stop all pooled sources immediately (used by `replace: true` and `pause()`). */
|
|
603
|
-
_stopAllPooled() {
|
|
604
|
-
for (const pooledSource of this._pooledSources) {
|
|
605
|
-
pooledSource.node.onended = null;
|
|
606
|
-
this._stopSourceNode(pooledSource.node);
|
|
607
|
-
}
|
|
608
|
-
this._pooledSources.length = 0;
|
|
609
|
-
}
|
|
610
|
-
_stopSourceNode(sourceNode) {
|
|
611
|
-
try {
|
|
612
|
-
sourceNode.stop(0);
|
|
613
|
-
}
|
|
614
|
-
catch {
|
|
615
|
-
// source nodes can only be stopped once; ignore invalid state errors
|
|
616
|
-
}
|
|
617
|
-
sourceNode.disconnect();
|
|
618
|
-
}
|
|
619
|
-
_createBufferSourceNode(setup, play) {
|
|
620
|
-
const { gainNode } = setup;
|
|
621
|
-
const sourceNode = setup.audioContext.createBufferSource();
|
|
622
|
-
sourceNode.buffer = this._audioBuffer;
|
|
623
|
-
sourceNode.loop = play.loop;
|
|
624
|
-
sourceNode.playbackRate.value = play.playbackRate;
|
|
625
|
-
if (play.loop) {
|
|
626
|
-
sourceNode.loopStart = play.loopStart ?? 0;
|
|
627
|
-
sourceNode.loopEnd = play.loopEnd ?? this.duration;
|
|
628
|
-
}
|
|
629
|
-
sourceNode.connect(gainNode);
|
|
630
|
-
const duration = play.duration;
|
|
631
|
-
if (!play.loop && duration !== undefined && duration > 0) {
|
|
632
|
-
sourceNode.start(0, play.offset, duration);
|
|
633
|
-
}
|
|
634
|
-
else {
|
|
635
|
-
sourceNode.start(0, play.offset);
|
|
434
|
+
this._activeVoices.splice(victimIndex, 1);
|
|
435
|
+
victim.voice.stop();
|
|
636
436
|
}
|
|
637
|
-
return sourceNode;
|
|
638
437
|
}
|
|
639
438
|
}
|
|
640
439
|
|