@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
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Options for {@link AudioInput.open} — forwarded to `getUserMedia` audio constraints. */
|
|
2
|
+
export interface AudioInputOptions {
|
|
3
|
+
/** Specific input device id (from `enumerateDevices`). */
|
|
4
|
+
deviceId?: string;
|
|
5
|
+
/** Enable browser echo cancellation. Default: browser default. */
|
|
6
|
+
echoCancellation?: boolean;
|
|
7
|
+
/** Enable browser noise suppression. */
|
|
8
|
+
noiseSuppression?: boolean;
|
|
9
|
+
/** Enable browser automatic gain control. */
|
|
10
|
+
autoGainControl?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A live audio capture source — a microphone or WebRTC `MediaStream` obtained
|
|
14
|
+
* via `getUserMedia`. **Not a {@link Playable}**: you don't "play" a mic, you
|
|
15
|
+
* *open* it. Pass it to {@link AudioManager.open} to get an
|
|
16
|
+
* {@link InputVoice} for monitoring, analysis, or recording.
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* const mic = await AudioInput.open({ echoCancellation: true });
|
|
20
|
+
* const input = app.audio.open(mic);
|
|
21
|
+
* new AudioAnalyser({ source: input }); // visualise / beat-detect (no feedback)
|
|
22
|
+
* const clip = await input.record(2000); // capture 2s -> Sound
|
|
23
|
+
* mic.close(); // release the device
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare class AudioInput {
|
|
27
|
+
private readonly _stream;
|
|
28
|
+
private constructor();
|
|
29
|
+
/** The underlying `MediaStream`. */
|
|
30
|
+
get stream(): MediaStream;
|
|
31
|
+
/**
|
|
32
|
+
* Request microphone access and resolve with an `AudioInput`. Throws / rejects
|
|
33
|
+
* if the user denies permission or no input device is available.
|
|
34
|
+
*/
|
|
35
|
+
static open(options?: AudioInputOptions): Promise<AudioInput>;
|
|
36
|
+
/** Stop every track in the stream, releasing the input device. */
|
|
37
|
+
close(): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=AudioInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioInput.d.ts","sourceRoot":"","sources":["../../../src/audio/AudioInput.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IAEtC,OAAO;IAIP,oCAAoC;IACpC,IAAW,MAAM,IAAI,WAAW,CAE/B;IAED;;;OAGG;WACiB,IAAI,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAe9E,kEAAkE;IAC3D,KAAK,IAAI,IAAI;CAKrB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A live audio capture source — a microphone or WebRTC `MediaStream` obtained
|
|
3
|
+
* via `getUserMedia`. **Not a {@link Playable}**: you don't "play" a mic, you
|
|
4
|
+
* *open* it. Pass it to {@link AudioManager.open} to get an
|
|
5
|
+
* {@link InputVoice} for monitoring, analysis, or recording.
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* const mic = await AudioInput.open({ echoCancellation: true });
|
|
9
|
+
* const input = app.audio.open(mic);
|
|
10
|
+
* new AudioAnalyser({ source: input }); // visualise / beat-detect (no feedback)
|
|
11
|
+
* const clip = await input.record(2000); // capture 2s -> Sound
|
|
12
|
+
* mic.close(); // release the device
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
class AudioInput {
|
|
16
|
+
_stream;
|
|
17
|
+
constructor(stream) {
|
|
18
|
+
this._stream = stream;
|
|
19
|
+
}
|
|
20
|
+
/** The underlying `MediaStream`. */
|
|
21
|
+
get stream() {
|
|
22
|
+
return this._stream;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Request microphone access and resolve with an `AudioInput`. Throws / rejects
|
|
26
|
+
* if the user denies permission or no input device is available.
|
|
27
|
+
*/
|
|
28
|
+
static async open(options = {}) {
|
|
29
|
+
if (typeof navigator === 'undefined' || !navigator.mediaDevices?.getUserMedia) {
|
|
30
|
+
throw new Error('AudioInput.open: getUserMedia is not available in this environment.');
|
|
31
|
+
}
|
|
32
|
+
const constraints = {};
|
|
33
|
+
if (options.deviceId !== undefined)
|
|
34
|
+
constraints.deviceId = options.deviceId;
|
|
35
|
+
if (options.echoCancellation !== undefined)
|
|
36
|
+
constraints.echoCancellation = options.echoCancellation;
|
|
37
|
+
if (options.noiseSuppression !== undefined)
|
|
38
|
+
constraints.noiseSuppression = options.noiseSuppression;
|
|
39
|
+
if (options.autoGainControl !== undefined)
|
|
40
|
+
constraints.autoGainControl = options.autoGainControl;
|
|
41
|
+
const stream = await navigator.mediaDevices.getUserMedia({ audio: Object.keys(constraints).length > 0 ? constraints : true });
|
|
42
|
+
return new AudioInput(stream);
|
|
43
|
+
}
|
|
44
|
+
/** Stop every track in the stream, releasing the input device. */
|
|
45
|
+
close() {
|
|
46
|
+
for (const track of this._stream.getTracks()) {
|
|
47
|
+
track.stop();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { AudioInput };
|
|
53
|
+
//# sourceMappingURL=AudioInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioInput.js","sources":["../../../../src/audio/AudioInput.ts"],"sourcesContent":[null],"names":[],"mappings":"AAYA;;;;;;;;;;;;;AAaG;MACU,UAAU,CAAA;AACJ,IAAA,OAAO;AAExB,IAAA,WAAA,CAAoB,MAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;IACvB;;AAGA,IAAA,IAAW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA;;;AAGG;AACI,IAAA,aAAa,IAAI,CAAC,UAA6B,EAAE,EAAA;AACtD,QAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE;AAC7E,YAAA,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC;QACxF;QAEA,MAAM,WAAW,GAA0B,EAAE;AAC7C,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAC3E,QAAA,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS;AAAE,YAAA,WAAW,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB;AACnG,QAAA,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS;AAAE,YAAA,WAAW,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB;AACnG,QAAA,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;AAAE,YAAA,WAAW,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe;AAEhG,QAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,IAAI,EAAE,CAAC;AAC7H,QAAA,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC;IAC/B;;IAGO,KAAK,GAAA;QACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE;YAC5C,KAAK,CAAC,IAAI,EAAE;QACd;IACF;AACD;;;;"}
|
|
@@ -1,27 +1,40 @@
|
|
|
1
|
+
import { Signal } from '#core/Signal';
|
|
2
|
+
import type { System } from '#core/System';
|
|
3
|
+
import type { Time } from '#core/Time';
|
|
1
4
|
import { AudioBus } from './AudioBus';
|
|
5
|
+
import type { AudioInput } from './AudioInput';
|
|
2
6
|
import { AudioListener } from './AudioListener';
|
|
3
|
-
import type {
|
|
7
|
+
import type { SpatialVoice } from './BaseVoice';
|
|
8
|
+
import { InputVoice } from './InputVoice';
|
|
9
|
+
import type { Playable, PlayOptions, Voice } from './Playable';
|
|
4
10
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
11
|
+
* Per-{@link Application} owner of the audio mix: three pre-configured
|
|
12
|
+
* {@link AudioBus} instances (`master` ← `music` + `sound`), a single
|
|
13
|
+
* {@link AudioListener} for spatial audio, and a registry of any extra busses
|
|
14
|
+
* the user constructs.
|
|
9
15
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* propagates visibility-driven mute when {@link AudioManager.muteOnHidden}
|
|
16
|
-
* is enabled.
|
|
16
|
+
* The `AudioContext` is shared process-wide, but each Application owns its own
|
|
17
|
+
* bus subtree, so multiple Applications mix independently. Access it via
|
|
18
|
+
* `app.audio`. Drives the per-frame `_tick()` on the listener and every spatial
|
|
19
|
+
* voice, and propagates visibility-driven mute when
|
|
20
|
+
* {@link AudioManager.muteOnHidden} is enabled.
|
|
17
21
|
*/
|
|
18
|
-
export declare class AudioManager {
|
|
22
|
+
export declare class AudioManager implements System {
|
|
23
|
+
/** App-systems tick band — audio after interaction. @internal */
|
|
24
|
+
readonly order = 300;
|
|
19
25
|
readonly master: AudioBus;
|
|
20
26
|
readonly music: AudioBus;
|
|
21
27
|
readonly sound: AudioBus;
|
|
22
28
|
readonly listener: AudioListener;
|
|
29
|
+
/**
|
|
30
|
+
* Fires once when the AudioContext transitions to "running" — i.e. the first
|
|
31
|
+
* user gesture unlocks audio under the browser's autoplay policy. Check
|
|
32
|
+
* {@link AudioManager.locked} for the current state; sounds played while
|
|
33
|
+
* locked are deferred and start automatically on that gesture.
|
|
34
|
+
*/
|
|
35
|
+
readonly onUnlock: Signal<[]>;
|
|
23
36
|
private readonly _registered;
|
|
24
|
-
private readonly
|
|
37
|
+
private readonly _spatial;
|
|
25
38
|
private _muteOnHidden;
|
|
26
39
|
constructor();
|
|
27
40
|
/**
|
|
@@ -32,12 +45,51 @@ export declare class AudioManager {
|
|
|
32
45
|
*/
|
|
33
46
|
get muteOnHidden(): boolean;
|
|
34
47
|
set muteOnHidden(value: boolean);
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
48
|
+
/**
|
|
49
|
+
* `true` while audio is blocked by the browser's autoplay policy — no user
|
|
50
|
+
* gesture has resumed the AudioContext yet. Voices played while locked are
|
|
51
|
+
* deferred (streams) or skipped (generators) until that gesture.
|
|
52
|
+
*/
|
|
53
|
+
get locked(): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Play a {@link Playable} asset and return a {@link Voice} handle.
|
|
56
|
+
*
|
|
57
|
+
* Each call creates an independent playback instance. Call `play()` again
|
|
58
|
+
* to start another concurrent voice. The returned Voice lets you control
|
|
59
|
+
* this specific instance (`stop()`, `volume`, `fade()`, capabilities).
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* const voice = app.audio.play(shootSfx);
|
|
64
|
+
* // Later:
|
|
65
|
+
* voice.stop();
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* @param source - Any {@link Playable} asset (Sound, AudioStream, AudioGenerator).
|
|
69
|
+
* @param options - Per-play overrides (bus, volume, loop, playbackRate, detune, time, muted).
|
|
70
|
+
* @returns A {@link Voice} handle for the new instance.
|
|
71
|
+
*/
|
|
72
|
+
play(source: Playable, options?: PlayOptions): Voice;
|
|
73
|
+
/**
|
|
74
|
+
* Open a live {@link AudioInput} (microphone / WebRTC stream) and return an
|
|
75
|
+
* {@link InputVoice}. The input is analysis-only by default (not audible) —
|
|
76
|
+
* tap it with an analyser, route it to a bus to monitor, or record it.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts
|
|
80
|
+
* const mic = await AudioInput.open();
|
|
81
|
+
* const input = app.audio.open(mic);
|
|
82
|
+
* input.analyse(analyser);
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
open(input: AudioInput): InputVoice;
|
|
86
|
+
/** Called once per frame from Application.update(). The frame delta is unused here (hence `_delta`); present for {@link System} contract compliance. */
|
|
87
|
+
update(_delta: Time): void;
|
|
88
|
+
/**
|
|
89
|
+
* Internal: register a spatial voice for per-frame position updates. Called by
|
|
90
|
+
* a {@link Voice} the first time it is spatialized (position set or follow).
|
|
91
|
+
*/
|
|
92
|
+
_registerSpatial(voice: SpatialVoice): void;
|
|
41
93
|
/** Internal: called by Application when visibility changes. */
|
|
42
94
|
_applyVisibility(visible: boolean): void;
|
|
43
95
|
/**
|
|
@@ -58,18 +110,4 @@ export declare class AudioManager {
|
|
|
58
110
|
hasBus(name: string): boolean;
|
|
59
111
|
destroy(): void;
|
|
60
112
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Lazy accessor for the singleton {@link AudioManager}. Constructs the
|
|
63
|
-
* instance on first call, returns the same instance for every subsequent
|
|
64
|
-
* call. Equivalent to `app.audio`.
|
|
65
|
-
*/
|
|
66
|
-
export declare function getAudioManager(): AudioManager;
|
|
67
|
-
/**
|
|
68
|
-
* Dispose and clear the module-level audio singleton.
|
|
69
|
-
*
|
|
70
|
-
* Useful for deterministic teardown between independent engine lifecycles
|
|
71
|
-
* (for example hot-reload flows, embedded runtimes, or test harnesses that
|
|
72
|
-
* spin up multiple isolated apps in one process).
|
|
73
|
-
*/
|
|
74
|
-
export declare function disposeAudioManager(): void;
|
|
75
113
|
//# sourceMappingURL=AudioManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../../src/audio/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../../src/audio/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,YAAW,MAAM;IACzC,iEAAiE;IACjE,SAAgB,KAAK,OAAO;IAC5B,SAAgB,MAAM,EAAE,QAAQ,CAAC;IACjC,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAChC,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAChC,SAAgB,QAAQ,EAAE,aAAa,CAAC;IACxC;;;;;OAKG;IACH,SAAgB,QAAQ,aAAgB;IAExC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,aAAa,CAAS;;IAkB9B;;;;;OAKG;IACH,IAAW,YAAY,IAAI,OAAO,CAEjC;IAED,IAAW,YAAY,CAAC,KAAK,EAAE,OAAO,EAKrC;IAED;;;;OAIG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;;;;;;;;;;;;;;;;OAiBG;IACI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,KAAK;IAI3D;;;;;;;;;;;OAWG;IACI,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAgB1C,wJAAwJ;IACjJ,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI;IAYjC;;;OAGG;IACI,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAIlD,+DAA+D;IACxD,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM/C;;;;OAIG;IACI,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAQvC;;;;OAIG;IACI,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAczC,mEAAmE;IAC5D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAQrC,yDAAyD;IAClD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B,OAAO,IAAI,IAAI;CASvB"}
|
|
@@ -1,27 +1,37 @@
|
|
|
1
|
+
import { Signal } from '../core/Signal.js';
|
|
2
|
+
import { onAudioContextReady, isAudioContextReady, getAudioContext } from './audio-context.js';
|
|
1
3
|
import { AudioBus } from './AudioBus.js';
|
|
2
4
|
import { AudioListener } from './AudioListener.js';
|
|
5
|
+
import { InputVoice } from './InputVoice.js';
|
|
3
6
|
|
|
4
7
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
8
|
+
* Per-{@link Application} owner of the audio mix: three pre-configured
|
|
9
|
+
* {@link AudioBus} instances (`master` ← `music` + `sound`), a single
|
|
10
|
+
* {@link AudioListener} for spatial audio, and a registry of any extra busses
|
|
11
|
+
* the user constructs.
|
|
9
12
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* propagates visibility-driven mute when {@link AudioManager.muteOnHidden}
|
|
16
|
-
* is enabled.
|
|
13
|
+
* The `AudioContext` is shared process-wide, but each Application owns its own
|
|
14
|
+
* bus subtree, so multiple Applications mix independently. Access it via
|
|
15
|
+
* `app.audio`. Drives the per-frame `_tick()` on the listener and every spatial
|
|
16
|
+
* voice, and propagates visibility-driven mute when
|
|
17
|
+
* {@link AudioManager.muteOnHidden} is enabled.
|
|
17
18
|
*/
|
|
18
19
|
class AudioManager {
|
|
20
|
+
/** App-systems tick band — audio after interaction. @internal */
|
|
21
|
+
order = 300;
|
|
19
22
|
master;
|
|
20
23
|
music;
|
|
21
24
|
sound;
|
|
22
25
|
listener;
|
|
26
|
+
/**
|
|
27
|
+
* Fires once when the AudioContext transitions to "running" — i.e. the first
|
|
28
|
+
* user gesture unlocks audio under the browser's autoplay policy. Check
|
|
29
|
+
* {@link AudioManager.locked} for the current state; sounds played while
|
|
30
|
+
* locked are deferred and start automatically on that gesture.
|
|
31
|
+
*/
|
|
32
|
+
onUnlock = new Signal();
|
|
23
33
|
_registered = new Map();
|
|
24
|
-
|
|
34
|
+
_spatial = new Set();
|
|
25
35
|
_muteOnHidden = false;
|
|
26
36
|
constructor() {
|
|
27
37
|
this.master = new AudioBus('master', { parent: null });
|
|
@@ -32,6 +42,9 @@ class AudioManager {
|
|
|
32
42
|
this._registered.set('master', this.master);
|
|
33
43
|
this._registered.set('music', this.music);
|
|
34
44
|
this._registered.set('sound', this.sound);
|
|
45
|
+
onAudioContextReady.add(() => {
|
|
46
|
+
this.onUnlock.dispatch();
|
|
47
|
+
});
|
|
35
48
|
}
|
|
36
49
|
/**
|
|
37
50
|
* When `true`, the master bus is muted while `document.hidden` is true.
|
|
@@ -48,20 +61,79 @@ class AudioManager {
|
|
|
48
61
|
// Application is responsible for calling _applyVisibility() when
|
|
49
62
|
// visibility changes.
|
|
50
63
|
}
|
|
51
|
-
/**
|
|
52
|
-
|
|
64
|
+
/**
|
|
65
|
+
* `true` while audio is blocked by the browser's autoplay policy — no user
|
|
66
|
+
* gesture has resumed the AudioContext yet. Voices played while locked are
|
|
67
|
+
* deferred (streams) or skipped (generators) until that gesture.
|
|
68
|
+
*/
|
|
69
|
+
get locked() {
|
|
70
|
+
return !isAudioContextReady();
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Play a {@link Playable} asset and return a {@link Voice} handle.
|
|
74
|
+
*
|
|
75
|
+
* Each call creates an independent playback instance. Call `play()` again
|
|
76
|
+
* to start another concurrent voice. The returned Voice lets you control
|
|
77
|
+
* this specific instance (`stop()`, `volume`, `fade()`, capabilities).
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```ts
|
|
81
|
+
* const voice = app.audio.play(shootSfx);
|
|
82
|
+
* // Later:
|
|
83
|
+
* voice.stop();
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* @param source - Any {@link Playable} asset (Sound, AudioStream, AudioGenerator).
|
|
87
|
+
* @param options - Per-play overrides (bus, volume, loop, playbackRate, detune, time, muted).
|
|
88
|
+
* @returns A {@link Voice} handle for the new instance.
|
|
89
|
+
*/
|
|
90
|
+
play(source, options) {
|
|
91
|
+
return source._createVoice(this, options ?? {});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Open a live {@link AudioInput} (microphone / WebRTC stream) and return an
|
|
95
|
+
* {@link InputVoice}. The input is analysis-only by default (not audible) —
|
|
96
|
+
* tap it with an analyser, route it to a bus to monitor, or record it.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```ts
|
|
100
|
+
* const mic = await AudioInput.open();
|
|
101
|
+
* const input = app.audio.open(mic);
|
|
102
|
+
* input.analyse(analyser);
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
open(input) {
|
|
106
|
+
const audioContext = getAudioContext();
|
|
107
|
+
const sourceNode = audioContext.createMediaStreamSource(input.stream);
|
|
108
|
+
const output = audioContext.createGain();
|
|
109
|
+
return new InputVoice({
|
|
110
|
+
audioContext,
|
|
111
|
+
output,
|
|
112
|
+
bus: this.sound,
|
|
113
|
+
manager: this,
|
|
114
|
+
volume: 1,
|
|
115
|
+
sourceNode,
|
|
116
|
+
stream: input.stream,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/** Called once per frame from Application.update(). The frame delta is unused here (hence `_delta`); present for {@link System} contract compliance. */
|
|
120
|
+
update(_delta) {
|
|
53
121
|
this.listener._tick();
|
|
54
|
-
|
|
55
|
-
|
|
122
|
+
// Tick spatial voices and prune ended ones.
|
|
123
|
+
for (const voice of this._spatial) {
|
|
124
|
+
if (voice.ended) {
|
|
125
|
+
this._spatial.delete(voice);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
voice._tickSpatial();
|
|
56
129
|
}
|
|
57
130
|
}
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
this._spatialSounds.delete(sound);
|
|
131
|
+
/**
|
|
132
|
+
* Internal: register a spatial voice for per-frame position updates. Called by
|
|
133
|
+
* a {@link Voice} the first time it is spatialized (position set or follow).
|
|
134
|
+
*/
|
|
135
|
+
_registerSpatial(voice) {
|
|
136
|
+
this._spatial.add(voice);
|
|
65
137
|
}
|
|
66
138
|
/** Internal: called by Application when visibility changes. */
|
|
67
139
|
_applyVisibility(visible) {
|
|
@@ -113,7 +185,7 @@ class AudioManager {
|
|
|
113
185
|
}
|
|
114
186
|
destroy() {
|
|
115
187
|
this.listener.destroy();
|
|
116
|
-
this.
|
|
188
|
+
this._spatial.clear();
|
|
117
189
|
for (const bus of this._registered.values()) {
|
|
118
190
|
// Note: destroying built-ins too — AudioManager is destroyed only when app shuts down.
|
|
119
191
|
bus.destroy();
|
|
@@ -121,32 +193,6 @@ class AudioManager {
|
|
|
121
193
|
this._registered.clear();
|
|
122
194
|
}
|
|
123
195
|
}
|
|
124
|
-
// Module-level singleton (lazy)
|
|
125
|
-
let _manager = null;
|
|
126
|
-
/**
|
|
127
|
-
* Lazy accessor for the singleton {@link AudioManager}. Constructs the
|
|
128
|
-
* instance on first call, returns the same instance for every subsequent
|
|
129
|
-
* call. Equivalent to `app.audio`.
|
|
130
|
-
*/
|
|
131
|
-
function getAudioManager() {
|
|
132
|
-
if (_manager === null) {
|
|
133
|
-
_manager = new AudioManager();
|
|
134
|
-
}
|
|
135
|
-
return _manager;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Dispose and clear the module-level audio singleton.
|
|
139
|
-
*
|
|
140
|
-
* Useful for deterministic teardown between independent engine lifecycles
|
|
141
|
-
* (for example hot-reload flows, embedded runtimes, or test harnesses that
|
|
142
|
-
* spin up multiple isolated apps in one process).
|
|
143
|
-
*/
|
|
144
|
-
function disposeAudioManager() {
|
|
145
|
-
if (_manager) {
|
|
146
|
-
_manager.destroy();
|
|
147
|
-
_manager = null;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
196
|
|
|
151
|
-
export { AudioManager
|
|
197
|
+
export { AudioManager };
|
|
152
198
|
//# sourceMappingURL=AudioManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioManager.js","sources":["../../../../src/audio/AudioManager.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AudioManager.js","sources":["../../../../src/audio/AudioManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { PlaybackOptions } from '#core/types';
|
|
2
|
+
import type { AudioManager } from './AudioManager';
|
|
3
|
+
import type { Playable, PlayOptions, Voice } from './Playable';
|
|
4
|
+
/**
|
|
5
|
+
* Streaming long-form audio backed by an `HTMLAudioElement` — background
|
|
6
|
+
* tracks, voice-over, **and internet radio** (same mechanism, low CPU/RAM).
|
|
7
|
+
* Decoded lazily via the browser's media pipeline, so memory cost scales with
|
|
8
|
+
* the decode buffer rather than total duration.
|
|
9
|
+
*
|
|
10
|
+
* `AudioStream` is a **data descriptor**: it holds the media element and default
|
|
11
|
+
* playback parameters but does not play itself. Playback is driven by
|
|
12
|
+
* `AudioManager.play(stream, options)`, which returns an {@link AudioStreamVoice}
|
|
13
|
+
* for fine-grained control (pause/resume, seek, loop, rate, volume, spatial).
|
|
14
|
+
*
|
|
15
|
+
* Because an `HTMLAudioElement` has a single playhead, a stream has **one active
|
|
16
|
+
* voice at a time** — playing again stops the previous voice. Routes through the
|
|
17
|
+
* manager's `music` bus by default (override via {@link PlayOptions.bus}).
|
|
18
|
+
*
|
|
19
|
+
* Use {@link Sound} for short, frequently-triggered clips that benefit from
|
|
20
|
+
* pre-decoded `AudioBuffer` storage and pooled overlapping playback.
|
|
21
|
+
*/
|
|
22
|
+
export declare class AudioStream implements Playable {
|
|
23
|
+
private readonly _audioElement;
|
|
24
|
+
/** Default volume applied to new voices. Range [0, 1]. */
|
|
25
|
+
volume: number;
|
|
26
|
+
/** Default loop flag applied to new voices. */
|
|
27
|
+
loop: boolean;
|
|
28
|
+
/** Default playback rate applied to new voices. */
|
|
29
|
+
playbackRate: number;
|
|
30
|
+
/** Default muted flag (starts a voice at volume 0). */
|
|
31
|
+
muted: boolean;
|
|
32
|
+
private _sourceNode;
|
|
33
|
+
private _activeVoice;
|
|
34
|
+
constructor(audioElement: HTMLAudioElement, options?: Partial<PlaybackOptions>);
|
|
35
|
+
/** The backing `HTMLAudioElement`. */
|
|
36
|
+
get audioElement(): HTMLMediaElement;
|
|
37
|
+
/** Total media duration in seconds (`NaN` until metadata has loaded). */
|
|
38
|
+
get duration(): number;
|
|
39
|
+
/**
|
|
40
|
+
* Implements {@link Playable}. Called by {@link AudioManager.play}.
|
|
41
|
+
*
|
|
42
|
+
* Stops any previously active voice (a stream has a single playhead), then
|
|
43
|
+
* starts a fresh {@link AudioStreamVoice}.
|
|
44
|
+
*/
|
|
45
|
+
_createVoice(manager: AudioManager, options: PlayOptions): Voice;
|
|
46
|
+
/** Stop the active voice and release the media graph. */
|
|
47
|
+
destroy(): void;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=AudioStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioStream.d.ts","sourceRoot":"","sources":["../../../src/audio/AudioStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,WAAY,YAAW,QAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IAEjD,0DAA0D;IACnD,MAAM,EAAE,MAAM,CAAC;IACtB,+CAA+C;IACxC,IAAI,EAAE,OAAO,CAAC;IACrB,mDAAmD;IAC5C,YAAY,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IAChD,KAAK,EAAE,OAAO,CAAC;IAEtB,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,YAAY,CAAiC;gBAElC,YAAY,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAYrF,sCAAsC;IACtC,IAAW,YAAY,IAAI,gBAAgB,CAE1C;IAED,yEAAyE;IACzE,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;;;OAKG;IACI,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,KAAK;IAyCvE,yDAAyD;IAClD,OAAO,IAAI,IAAI;CAUvB"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { clamp } from '../math/utils.js';
|
|
2
|
+
import { getAudioContext } from './audio-context.js';
|
|
3
|
+
import { AudioStreamVoice } from './AudioStreamVoice.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Streaming long-form audio backed by an `HTMLAudioElement` — background
|
|
7
|
+
* tracks, voice-over, **and internet radio** (same mechanism, low CPU/RAM).
|
|
8
|
+
* Decoded lazily via the browser's media pipeline, so memory cost scales with
|
|
9
|
+
* the decode buffer rather than total duration.
|
|
10
|
+
*
|
|
11
|
+
* `AudioStream` is a **data descriptor**: it holds the media element and default
|
|
12
|
+
* playback parameters but does not play itself. Playback is driven by
|
|
13
|
+
* `AudioManager.play(stream, options)`, which returns an {@link AudioStreamVoice}
|
|
14
|
+
* for fine-grained control (pause/resume, seek, loop, rate, volume, spatial).
|
|
15
|
+
*
|
|
16
|
+
* Because an `HTMLAudioElement` has a single playhead, a stream has **one active
|
|
17
|
+
* voice at a time** — playing again stops the previous voice. Routes through the
|
|
18
|
+
* manager's `music` bus by default (override via {@link PlayOptions.bus}).
|
|
19
|
+
*
|
|
20
|
+
* Use {@link Sound} for short, frequently-triggered clips that benefit from
|
|
21
|
+
* pre-decoded `AudioBuffer` storage and pooled overlapping playback.
|
|
22
|
+
*/
|
|
23
|
+
class AudioStream {
|
|
24
|
+
_audioElement;
|
|
25
|
+
/** Default volume applied to new voices. Range [0, 1]. */
|
|
26
|
+
volume;
|
|
27
|
+
/** Default loop flag applied to new voices. */
|
|
28
|
+
loop;
|
|
29
|
+
/** Default playback rate applied to new voices. */
|
|
30
|
+
playbackRate;
|
|
31
|
+
/** Default muted flag (starts a voice at volume 0). */
|
|
32
|
+
muted;
|
|
33
|
+
_sourceNode = null;
|
|
34
|
+
_activeVoice = null;
|
|
35
|
+
constructor(audioElement, options) {
|
|
36
|
+
this._audioElement = audioElement;
|
|
37
|
+
this.volume = clamp(options?.volume ?? 1, 0, 1);
|
|
38
|
+
this.loop = options?.loop ?? false;
|
|
39
|
+
this.playbackRate = clamp(options?.playbackRate ?? 1, 0.1, 20);
|
|
40
|
+
this.muted = options?.muted ?? false;
|
|
41
|
+
if (options?.time !== undefined) {
|
|
42
|
+
this._audioElement.currentTime = Math.max(0, options.time);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** The backing `HTMLAudioElement`. */
|
|
46
|
+
get audioElement() {
|
|
47
|
+
return this._audioElement;
|
|
48
|
+
}
|
|
49
|
+
/** Total media duration in seconds (`NaN` until metadata has loaded). */
|
|
50
|
+
get duration() {
|
|
51
|
+
return this._audioElement.duration;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Implements {@link Playable}. Called by {@link AudioManager.play}.
|
|
55
|
+
*
|
|
56
|
+
* Stops any previously active voice (a stream has a single playhead), then
|
|
57
|
+
* starts a fresh {@link AudioStreamVoice}.
|
|
58
|
+
*/
|
|
59
|
+
_createVoice(manager, options) {
|
|
60
|
+
const bus = options.bus ?? manager.music;
|
|
61
|
+
const audioContext = getAudioContext();
|
|
62
|
+
if (this._activeVoice !== null && !this._activeVoice.ended) {
|
|
63
|
+
this._activeVoice.stop();
|
|
64
|
+
}
|
|
65
|
+
// The MediaElementAudioSourceNode is 1:1 with the element — create it once.
|
|
66
|
+
if (this._sourceNode === null) {
|
|
67
|
+
this._sourceNode = audioContext.createMediaElementSource(this._audioElement);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this._sourceNode.disconnect();
|
|
71
|
+
}
|
|
72
|
+
const output = audioContext.createGain();
|
|
73
|
+
const loop = options.loop ?? this.loop;
|
|
74
|
+
const playbackRate = clamp(options.playbackRate ?? this.playbackRate, 0.1, 20);
|
|
75
|
+
const volume = clamp(options.muted ? 0 : (options.volume ?? (this.muted ? 0 : this.volume)), 0, 1);
|
|
76
|
+
const voice = new AudioStreamVoice({
|
|
77
|
+
audioContext,
|
|
78
|
+
output,
|
|
79
|
+
bus,
|
|
80
|
+
manager,
|
|
81
|
+
volume,
|
|
82
|
+
element: this._audioElement,
|
|
83
|
+
sourceNode: this._sourceNode,
|
|
84
|
+
loop,
|
|
85
|
+
playbackRate,
|
|
86
|
+
...(options.time !== undefined && { startTime: options.time }),
|
|
87
|
+
});
|
|
88
|
+
this._activeVoice = voice;
|
|
89
|
+
voice.onEnd.add(() => {
|
|
90
|
+
if (this._activeVoice === voice)
|
|
91
|
+
this._activeVoice = null;
|
|
92
|
+
});
|
|
93
|
+
return voice;
|
|
94
|
+
}
|
|
95
|
+
/** Stop the active voice and release the media graph. */
|
|
96
|
+
destroy() {
|
|
97
|
+
if (this._activeVoice !== null) {
|
|
98
|
+
this._activeVoice.stop();
|
|
99
|
+
this._activeVoice = null;
|
|
100
|
+
}
|
|
101
|
+
if (this._sourceNode !== null) {
|
|
102
|
+
this._sourceNode.disconnect();
|
|
103
|
+
this._sourceNode = null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export { AudioStream };
|
|
109
|
+
//# sourceMappingURL=AudioStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioStream.js","sources":["../../../../src/audio/AudioStream.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|