@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
|
@@ -3,7 +3,7 @@ import { onAudioContextReady, isAudioContextReady, getAudioContext } from './aud
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Hierarchical mixer node in the engine's audio routing graph. Each bus
|
|
6
|
-
* owns three Web Audio nodes (input gain, optional
|
|
6
|
+
* owns three Web Audio nodes (input gain, optional effect chain, stereo
|
|
7
7
|
* pan, output gain) and routes its output into its parent's input — the
|
|
8
8
|
* root bus connects to the destination.
|
|
9
9
|
*
|
|
@@ -14,8 +14,8 @@ import { onAudioContextReady, isAudioContextReady, getAudioContext } from './aud
|
|
|
14
14
|
*
|
|
15
15
|
* Volume is in 0..2 (1 = unity), pan is -1..1, mute is a boolean override.
|
|
16
16
|
* {@link AudioBus.fadeIn} / {@link AudioBus.fadeOut} produce smooth ramps
|
|
17
|
-
* over the output gain.
|
|
18
|
-
* {@link AudioBus.
|
|
17
|
+
* over the output gain. Effect changes via {@link AudioBus.addEffect} /
|
|
18
|
+
* {@link AudioBus.removeEffect} rebuild the chain in place.
|
|
19
19
|
*
|
|
20
20
|
* Setup is deferred until the global `AudioContext` is unlocked
|
|
21
21
|
* (browser autoplay policy); operations that need live nodes are no-ops
|
|
@@ -27,7 +27,7 @@ class AudioBus {
|
|
|
27
27
|
_volume;
|
|
28
28
|
_muted;
|
|
29
29
|
_pan;
|
|
30
|
-
|
|
30
|
+
_effects = [];
|
|
31
31
|
_setup = null;
|
|
32
32
|
_scheduledStopId = null;
|
|
33
33
|
_onAudioContextReady = (ctx) => {
|
|
@@ -43,8 +43,8 @@ class AudioBus {
|
|
|
43
43
|
this._volume = clamp(options.volume ?? 1, 0, 2);
|
|
44
44
|
this._muted = options.muted ?? false;
|
|
45
45
|
this._pan = clamp(options.pan ?? 0, -1, 1);
|
|
46
|
-
if (options.
|
|
47
|
-
this.
|
|
46
|
+
if (options.effects) {
|
|
47
|
+
this._effects.push(...options.effects);
|
|
48
48
|
}
|
|
49
49
|
if (isAudioContextReady()) {
|
|
50
50
|
this._setupAudio(getAudioContext());
|
|
@@ -91,21 +91,21 @@ class AudioBus {
|
|
|
91
91
|
return this._setup?.inputNode ?? null;
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
|
-
* Append a
|
|
94
|
+
* Append a effect to the end of the chain (before the pan stage). The
|
|
95
95
|
* chain is rebuilt in place; existing audio routes through the new
|
|
96
|
-
*
|
|
96
|
+
* effect on the next frame.
|
|
97
97
|
*/
|
|
98
|
-
|
|
99
|
-
this.
|
|
100
|
-
this.
|
|
98
|
+
addEffect(effect) {
|
|
99
|
+
this._effects.push(effect);
|
|
100
|
+
this._rebuildEffectChain();
|
|
101
101
|
return this;
|
|
102
102
|
}
|
|
103
|
-
/** Remove `
|
|
104
|
-
|
|
105
|
-
const index = this.
|
|
103
|
+
/** Remove `effect` from the chain. No-op if not present. Caller still owns + must `destroy()` it. */
|
|
104
|
+
removeEffect(effect) {
|
|
105
|
+
const index = this._effects.indexOf(effect);
|
|
106
106
|
if (index !== -1) {
|
|
107
|
-
this.
|
|
108
|
-
this.
|
|
107
|
+
this._effects.splice(index, 1);
|
|
108
|
+
this._rebuildEffectChain();
|
|
109
109
|
}
|
|
110
110
|
return this;
|
|
111
111
|
}
|
|
@@ -156,10 +156,10 @@ class AudioBus {
|
|
|
156
156
|
destroy() {
|
|
157
157
|
onAudioContextReady.remove(this._onAudioContextReady);
|
|
158
158
|
this._clearScheduledStop();
|
|
159
|
-
for (const
|
|
160
|
-
|
|
159
|
+
for (const effect of this._effects) {
|
|
160
|
+
effect.destroy();
|
|
161
161
|
}
|
|
162
|
-
this.
|
|
162
|
+
this._effects.length = 0;
|
|
163
163
|
if (this._setup) {
|
|
164
164
|
this._setup.inputNode.disconnect();
|
|
165
165
|
this._setup.outputNode.disconnect();
|
|
@@ -179,11 +179,11 @@ class AudioBus {
|
|
|
179
179
|
const inputNode = audioContext.createGain();
|
|
180
180
|
const panNode = audioContext.createStereoPanner();
|
|
181
181
|
const outputNode = audioContext.createGain();
|
|
182
|
-
// Internal chain: input → [
|
|
182
|
+
// Internal chain: input → [effects...] → pan → output
|
|
183
183
|
outputNode.gain.setTargetAtTime(this._muted ? 0 : this._volume, audioContext.currentTime, 0.01);
|
|
184
184
|
panNode.pan.setTargetAtTime(this._pan, audioContext.currentTime, 0.01);
|
|
185
185
|
this._setup = { audioContext, inputNode, outputNode, panNode };
|
|
186
|
-
this.
|
|
186
|
+
this._rebuildEffectChain();
|
|
187
187
|
this._connectUpstream();
|
|
188
188
|
}
|
|
189
189
|
_connectUpstream() {
|
|
@@ -221,22 +221,22 @@ class AudioBus {
|
|
|
221
221
|
});
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
|
-
|
|
224
|
+
_rebuildEffectChain() {
|
|
225
225
|
if (!this._setup)
|
|
226
226
|
return;
|
|
227
227
|
const { inputNode, panNode } = this._setup;
|
|
228
228
|
// Disconnect current chain
|
|
229
229
|
inputNode.disconnect();
|
|
230
|
-
for (const
|
|
231
|
-
|
|
232
|
-
|
|
230
|
+
for (const effect of this._effects) {
|
|
231
|
+
effect.inputNode.disconnect();
|
|
232
|
+
effect.outputNode.disconnect();
|
|
233
233
|
}
|
|
234
234
|
panNode.disconnect();
|
|
235
|
-
// Rebuild: input →
|
|
235
|
+
// Rebuild: input → effect[0].input → effect[0].output → effect[1].input → ... → pan → output
|
|
236
236
|
let prev = inputNode;
|
|
237
|
-
for (const
|
|
238
|
-
prev.connect(
|
|
239
|
-
prev =
|
|
237
|
+
for (const effect of this._effects) {
|
|
238
|
+
prev.connect(effect.inputNode);
|
|
239
|
+
prev = effect.outputNode;
|
|
240
240
|
}
|
|
241
241
|
prev.connect(panNode);
|
|
242
242
|
panNode.connect(this._setup.outputNode);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base for all insertable audio effects in ExoJS. Each effect exposes
|
|
3
|
+
* stable {@link inputNode} and {@link outputNode} AudioNodes that an
|
|
4
|
+
* {@link AudioBus} or {@link Voice} connects into the Web Audio graph. Async
|
|
5
|
+
* effects (e.g., worklet-based) expose a {@link ready} promise that resolves
|
|
6
|
+
* once the effect is fully initialized.
|
|
7
|
+
*/
|
|
8
|
+
export declare abstract class AudioEffect {
|
|
9
|
+
/** The node where audio enters this effect. */
|
|
10
|
+
abstract get inputNode(): AudioNode;
|
|
11
|
+
/** The node where audio exits this effect. */
|
|
12
|
+
abstract get outputNode(): AudioNode;
|
|
13
|
+
/** Resolves when the effect is fully initialized. Defaults to immediately-resolved for sync effects. */
|
|
14
|
+
get ready(): Promise<void>;
|
|
15
|
+
/** Disconnects all audio nodes and releases resources. Must be called when the effect is no longer needed. */
|
|
16
|
+
abstract destroy(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=AudioEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioEffect.d.ts","sourceRoot":"","sources":["../../../src/audio/AudioEffect.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,8BAAsB,WAAW;IAC/B,+CAA+C;IAC/C,aAAoB,SAAS,IAAI,SAAS,CAAC;IAC3C,8CAA8C;IAC9C,aAAoB,UAAU,IAAI,SAAS,CAAC;IAC5C,wGAAwG;IACxG,IAAW,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;IACD,8GAA8G;aAC9F,OAAO,IAAI,IAAI;CAChC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base for all insertable audio effects in ExoJS. Each effect exposes
|
|
3
|
+
* stable {@link inputNode} and {@link outputNode} AudioNodes that an
|
|
4
|
+
* {@link AudioBus} or {@link Voice} connects into the Web Audio graph. Async
|
|
5
|
+
* effects (e.g., worklet-based) expose a {@link ready} promise that resolves
|
|
6
|
+
* once the effect is fully initialized.
|
|
7
|
+
*/
|
|
8
|
+
class AudioEffect {
|
|
9
|
+
/** Resolves when the effect is fully initialized. Defaults to immediately-resolved for sync effects. */
|
|
10
|
+
get ready() {
|
|
11
|
+
return Promise.resolve();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { AudioEffect };
|
|
16
|
+
//# sourceMappingURL=AudioEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioEffect.js","sources":["../../../../src/audio/AudioEffect.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;AAMG;MACmB,WAAW,CAAA;;AAM/B,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;IAC1B;AAGD;;;;"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { AudioManager } from './AudioManager';
|
|
2
|
+
import type { Envelope } from './Envelope';
|
|
3
|
+
import type { Playable, PlayOptions, Voice } from './Playable';
|
|
4
|
+
import { SoundPoolStrategy } from './Sound';
|
|
5
|
+
export type OscillatorType = 'sine' | 'square' | 'sawtooth' | 'triangle';
|
|
6
|
+
/** Construction options for {@link AudioGenerator}. */
|
|
7
|
+
export interface AudioGeneratorOptions {
|
|
8
|
+
/** Oscillator frequency in Hz. Default 440 (A4). */
|
|
9
|
+
frequency?: number;
|
|
10
|
+
/** Oscillator waveform. Default `'sine'`. */
|
|
11
|
+
type?: OscillatorType;
|
|
12
|
+
/** Pitch detune in cents. Default 0. */
|
|
13
|
+
detune?: number;
|
|
14
|
+
/** Optional ADSR envelope. Default `null` (no envelope). */
|
|
15
|
+
envelope?: Envelope | null;
|
|
16
|
+
/** Default volume applied to new voices. Range [0, 1]. Default 1. */
|
|
17
|
+
volume?: number;
|
|
18
|
+
/** Default muted flag (starts a voice at volume 0). Default false. */
|
|
19
|
+
muted?: boolean;
|
|
20
|
+
/** Maximum concurrent voices. Default 8. */
|
|
21
|
+
poolSize?: number;
|
|
22
|
+
/** Eviction strategy when the pool is full. Default `FirstInFirstOut`. */
|
|
23
|
+
poolStrategy?: SoundPoolStrategy;
|
|
24
|
+
/** Priority for the `LowestPriority` strategy. Default 0. */
|
|
25
|
+
priority?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Procedural tone generator — produces audio from an `OscillatorNode` without
|
|
29
|
+
* any decoded asset. Good for prototyping, game-jam SFX, retro bleeps, and
|
|
30
|
+
* synth-style tones.
|
|
31
|
+
*
|
|
32
|
+
* `AudioGenerator` is a **data descriptor**: it holds the current synth settings
|
|
33
|
+
* (`frequency`, `type`, `detune`, `envelope`) and default playback parameters.
|
|
34
|
+
* Each `AudioManager.play(generator, options)` snapshots those settings into a
|
|
35
|
+
* fresh {@link AudioGeneratorVoice} and returns it. For per-note playback, set
|
|
36
|
+
* `generator.frequency` (or use {@link AudioGenerator.setNote}) before playing:
|
|
37
|
+
*
|
|
38
|
+
* ```ts
|
|
39
|
+
* generator.setNote(69); // A4
|
|
40
|
+
* const voice = app.audio.play(generator);
|
|
41
|
+
* // ...later
|
|
42
|
+
* voice.frequency = 880; // retune the live voice
|
|
43
|
+
* voice.stop(); // triggers the envelope release, if any
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* Routes through the manager's `sound` bus by default.
|
|
47
|
+
*/
|
|
48
|
+
export declare class AudioGenerator implements Playable {
|
|
49
|
+
/** Current oscillator frequency in Hz. Snapshotted into each new voice. */
|
|
50
|
+
frequency: number;
|
|
51
|
+
/** Current oscillator waveform. */
|
|
52
|
+
type: OscillatorType;
|
|
53
|
+
/** Current pitch detune in cents. */
|
|
54
|
+
detune: number;
|
|
55
|
+
/** Optional ADSR envelope applied to each voice. */
|
|
56
|
+
envelope: Envelope | null;
|
|
57
|
+
/** Default volume for new voices. Range [0, 1]. */
|
|
58
|
+
volume: number;
|
|
59
|
+
/** Default muted flag (starts a voice at volume 0). */
|
|
60
|
+
muted: boolean;
|
|
61
|
+
private _poolSize;
|
|
62
|
+
private _poolStrategy;
|
|
63
|
+
/** Priority for the `LowestPriority` eviction strategy. */
|
|
64
|
+
priority: number;
|
|
65
|
+
private readonly _activeVoices;
|
|
66
|
+
get poolSize(): number;
|
|
67
|
+
set poolSize(value: number);
|
|
68
|
+
get poolStrategy(): SoundPoolStrategy;
|
|
69
|
+
set poolStrategy(value: SoundPoolStrategy);
|
|
70
|
+
constructor(options?: AudioGeneratorOptions);
|
|
71
|
+
/** Set {@link AudioGenerator.frequency} from a MIDI note number (69 = A4 = 440 Hz). */
|
|
72
|
+
setNote(midiNote: number): this;
|
|
73
|
+
/** Frequency in Hz for a MIDI note number, without mutating the generator. */
|
|
74
|
+
static midiToFrequency(midiNote: number): number;
|
|
75
|
+
/**
|
|
76
|
+
* Implements {@link Playable}. Called by {@link AudioManager.play}.
|
|
77
|
+
*
|
|
78
|
+
* Snapshots the current synth settings into a new {@link AudioGeneratorVoice}.
|
|
79
|
+
* Returns an already-ended {@link NoopVoice} when the `AudioContext` is still
|
|
80
|
+
* locked by the autoplay policy — oscillators are ephemeral and cannot be
|
|
81
|
+
* deferred.
|
|
82
|
+
*/
|
|
83
|
+
_createVoice(manager: AudioManager, options: PlayOptions): Voice;
|
|
84
|
+
/** Stop every currently active voice from this generator. */
|
|
85
|
+
stopAll(): this;
|
|
86
|
+
/** Stop all active voices. */
|
|
87
|
+
destroy(): void;
|
|
88
|
+
private _pruneEndedVoices;
|
|
89
|
+
private _pickEvictionVictim;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=AudioGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioGenerator.d.ts","sourceRoot":"","sources":["../../../src/audio/AudioGenerator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAEzE,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,2EAA2E;IACpE,SAAS,EAAE,MAAM,CAAC;IACzB,mCAAmC;IAC5B,IAAI,EAAE,cAAc,CAAC;IAC5B,qCAAqC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACtB,oDAAoD;IAC7C,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACjC,mDAAmD;IAC5C,MAAM,EAAE,MAAM,CAAC;IACtB,uDAAuD;IAChD,KAAK,EAAE,OAAO,CAAC;IAEtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAoB;IACzC,2DAA2D;IACpD,QAAQ,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAE5D,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAW,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEhC;IAED,IAAW,YAAY,IAAI,iBAAiB,CAE3C;IAED,IAAW,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAE/C;gBAEkB,OAAO,GAAE,qBAA0B;IAatD,uFAAuF;IAChF,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKtC,8EAA8E;WAChE,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIvD;;;;;;;OAOG;IACI,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,KAAK;IA+CvE,6DAA6D;IACtD,OAAO,IAAI,IAAI;IAStB,8BAA8B;IACvB,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,mBAAmB;CAiB5B"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { clamp } from '../math/utils.js';
|
|
2
|
+
import { isAudioContextReady, getAudioContext } from './audio-context.js';
|
|
3
|
+
import { AudioGeneratorVoice } from './AudioGeneratorVoice.js';
|
|
4
|
+
import { NoopVoice } from './NoopVoice.js';
|
|
5
|
+
import { SoundPoolStrategy } from './Sound.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Procedural tone generator — produces audio from an `OscillatorNode` without
|
|
9
|
+
* any decoded asset. Good for prototyping, game-jam SFX, retro bleeps, and
|
|
10
|
+
* synth-style tones.
|
|
11
|
+
*
|
|
12
|
+
* `AudioGenerator` is a **data descriptor**: it holds the current synth settings
|
|
13
|
+
* (`frequency`, `type`, `detune`, `envelope`) and default playback parameters.
|
|
14
|
+
* Each `AudioManager.play(generator, options)` snapshots those settings into a
|
|
15
|
+
* fresh {@link AudioGeneratorVoice} and returns it. For per-note playback, set
|
|
16
|
+
* `generator.frequency` (or use {@link AudioGenerator.setNote}) before playing:
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* generator.setNote(69); // A4
|
|
20
|
+
* const voice = app.audio.play(generator);
|
|
21
|
+
* // ...later
|
|
22
|
+
* voice.frequency = 880; // retune the live voice
|
|
23
|
+
* voice.stop(); // triggers the envelope release, if any
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* Routes through the manager's `sound` bus by default.
|
|
27
|
+
*/
|
|
28
|
+
class AudioGenerator {
|
|
29
|
+
/** Current oscillator frequency in Hz. Snapshotted into each new voice. */
|
|
30
|
+
frequency;
|
|
31
|
+
/** Current oscillator waveform. */
|
|
32
|
+
type;
|
|
33
|
+
/** Current pitch detune in cents. */
|
|
34
|
+
detune;
|
|
35
|
+
/** Optional ADSR envelope applied to each voice. */
|
|
36
|
+
envelope;
|
|
37
|
+
/** Default volume for new voices. Range [0, 1]. */
|
|
38
|
+
volume;
|
|
39
|
+
/** Default muted flag (starts a voice at volume 0). */
|
|
40
|
+
muted;
|
|
41
|
+
_poolSize;
|
|
42
|
+
_poolStrategy;
|
|
43
|
+
/** Priority for the `LowestPriority` eviction strategy. */
|
|
44
|
+
priority;
|
|
45
|
+
_activeVoices = [];
|
|
46
|
+
get poolSize() {
|
|
47
|
+
return this._poolSize;
|
|
48
|
+
}
|
|
49
|
+
set poolSize(value) {
|
|
50
|
+
this._poolSize = Math.max(1, Math.floor(value));
|
|
51
|
+
}
|
|
52
|
+
get poolStrategy() {
|
|
53
|
+
return this._poolStrategy;
|
|
54
|
+
}
|
|
55
|
+
set poolStrategy(value) {
|
|
56
|
+
this._poolStrategy = value;
|
|
57
|
+
}
|
|
58
|
+
constructor(options = {}) {
|
|
59
|
+
this.frequency = options.frequency ?? 440;
|
|
60
|
+
this.type = options.type ?? 'sine';
|
|
61
|
+
this.detune = options.detune ?? 0;
|
|
62
|
+
this.envelope = options.envelope ?? null;
|
|
63
|
+
this.volume = clamp(options.volume ?? 1, 0, 1);
|
|
64
|
+
this.muted = options.muted ?? false;
|
|
65
|
+
this._poolSize = Math.max(1, Math.floor(options.poolSize ?? 8));
|
|
66
|
+
this._poolStrategy = options.poolStrategy ?? SoundPoolStrategy.FirstInFirstOut;
|
|
67
|
+
this.priority = options.priority ?? 0;
|
|
68
|
+
}
|
|
69
|
+
/** Set {@link AudioGenerator.frequency} from a MIDI note number (69 = A4 = 440 Hz). */
|
|
70
|
+
setNote(midiNote) {
|
|
71
|
+
this.frequency = AudioGenerator.midiToFrequency(midiNote);
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
/** Frequency in Hz for a MIDI note number, without mutating the generator. */
|
|
75
|
+
static midiToFrequency(midiNote) {
|
|
76
|
+
return 440 * Math.pow(2, (midiNote - 69) / 12);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Implements {@link Playable}. Called by {@link AudioManager.play}.
|
|
80
|
+
*
|
|
81
|
+
* Snapshots the current synth settings into a new {@link AudioGeneratorVoice}.
|
|
82
|
+
* Returns an already-ended {@link NoopVoice} when the `AudioContext` is still
|
|
83
|
+
* locked by the autoplay policy — oscillators are ephemeral and cannot be
|
|
84
|
+
* deferred.
|
|
85
|
+
*/
|
|
86
|
+
_createVoice(manager, options) {
|
|
87
|
+
const bus = options.bus ?? manager.sound;
|
|
88
|
+
if (!isAudioContextReady()) {
|
|
89
|
+
return new NoopVoice(bus);
|
|
90
|
+
}
|
|
91
|
+
this._pruneEndedVoices();
|
|
92
|
+
if (this._activeVoices.length >= this._poolSize) {
|
|
93
|
+
const victimIndex = this._pickEvictionVictim();
|
|
94
|
+
const victim = this._activeVoices[victimIndex];
|
|
95
|
+
if (victim) {
|
|
96
|
+
this._activeVoices.splice(victimIndex, 1);
|
|
97
|
+
victim.voice.stop();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const audioContext = getAudioContext();
|
|
101
|
+
const output = audioContext.createGain();
|
|
102
|
+
const detune = options.detune ?? this.detune;
|
|
103
|
+
const volume = clamp(options.muted ? 0 : (options.volume ?? (this.muted ? 0 : this.volume)), 0, 1);
|
|
104
|
+
const voice = new AudioGeneratorVoice({
|
|
105
|
+
audioContext,
|
|
106
|
+
output,
|
|
107
|
+
bus,
|
|
108
|
+
manager,
|
|
109
|
+
volume,
|
|
110
|
+
frequency: this.frequency,
|
|
111
|
+
type: this.type,
|
|
112
|
+
detune,
|
|
113
|
+
envelope: this.envelope,
|
|
114
|
+
});
|
|
115
|
+
const pooled = { voice, startedAt: audioContext.currentTime };
|
|
116
|
+
voice.onEnd.add(() => {
|
|
117
|
+
const index = this._activeVoices.indexOf(pooled);
|
|
118
|
+
if (index !== -1) {
|
|
119
|
+
this._activeVoices.splice(index, 1);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
this._activeVoices.push(pooled);
|
|
123
|
+
return voice;
|
|
124
|
+
}
|
|
125
|
+
/** Stop every currently active voice from this generator. */
|
|
126
|
+
stopAll() {
|
|
127
|
+
const voices = [...this._activeVoices];
|
|
128
|
+
this._activeVoices.length = 0;
|
|
129
|
+
for (const pooled of voices) {
|
|
130
|
+
pooled.voice.stop();
|
|
131
|
+
}
|
|
132
|
+
return this;
|
|
133
|
+
}
|
|
134
|
+
/** Stop all active voices. */
|
|
135
|
+
destroy() {
|
|
136
|
+
this.stopAll();
|
|
137
|
+
}
|
|
138
|
+
_pruneEndedVoices() {
|
|
139
|
+
for (let i = this._activeVoices.length - 1; i >= 0; i--) {
|
|
140
|
+
if (this._activeVoices[i]?.voice.ended === true) {
|
|
141
|
+
this._activeVoices.splice(i, 1);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
_pickEvictionVictim() {
|
|
146
|
+
if (this._poolStrategy === SoundPoolStrategy.LeastRecentlyUsed) {
|
|
147
|
+
// Oscillators are open-ended, so "closest to end" degenerates to oldest.
|
|
148
|
+
let oldest = 0;
|
|
149
|
+
let oldestTime = Infinity;
|
|
150
|
+
for (let i = 0; i < this._activeVoices.length; i++) {
|
|
151
|
+
const pooled = this._activeVoices[i];
|
|
152
|
+
if (pooled !== undefined && pooled.startedAt < oldestTime) {
|
|
153
|
+
oldestTime = pooled.startedAt;
|
|
154
|
+
oldest = i;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return oldest;
|
|
158
|
+
}
|
|
159
|
+
// FirstInFirstOut and LowestPriority (shared priority) → oldest.
|
|
160
|
+
return 0;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export { AudioGenerator };
|
|
165
|
+
//# sourceMappingURL=AudioGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioGenerator.js","sources":["../../../../src/audio/AudioGenerator.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { OscillatorType } from './AudioGenerator';
|
|
2
|
+
import { BaseVoice, type BaseVoiceInit } from './BaseVoice';
|
|
3
|
+
import type { Envelope } from './Envelope';
|
|
4
|
+
import type { RatePitched } from './Playable';
|
|
5
|
+
/** Construction parameters for {@link AudioGeneratorVoice}. */
|
|
6
|
+
export interface AudioGeneratorVoiceInit extends BaseVoiceInit {
|
|
7
|
+
frequency: number;
|
|
8
|
+
type: OscillatorType;
|
|
9
|
+
detune: number;
|
|
10
|
+
envelope: Envelope | null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Active playback handle for one {@link AudioGenerator} play call, backed by an
|
|
14
|
+
* `OscillatorNode` plus a per-voice envelope gain. Each `AudioManager.play`
|
|
15
|
+
* creates an independent voice.
|
|
16
|
+
*
|
|
17
|
+
* Exposes the generator parameters (`frequency`, `type`), mixes in
|
|
18
|
+
* {@link RatePitched} (`detune` is real; `playbackRate` is stored but inert — an
|
|
19
|
+
* oscillator has no playback rate, retune via `frequency`/`detune`), and (via
|
|
20
|
+
* {@link BaseVoice}) {@link Spatializable}.
|
|
21
|
+
*
|
|
22
|
+
* Graph: `oscillator → envelopeGain → [panner] → output(volume) → bus`. The
|
|
23
|
+
* envelope shapes the ADSR; the output gain carries the overall volume.
|
|
24
|
+
*
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export declare class AudioGeneratorVoice extends BaseVoice implements RatePitched {
|
|
28
|
+
private readonly _oscillator;
|
|
29
|
+
private readonly _envelopeGain;
|
|
30
|
+
private readonly _envelope;
|
|
31
|
+
private _frequency;
|
|
32
|
+
private _type;
|
|
33
|
+
private _detune;
|
|
34
|
+
private _playbackRate;
|
|
35
|
+
constructor(init: AudioGeneratorVoiceInit);
|
|
36
|
+
get frequency(): number;
|
|
37
|
+
set frequency(value: number);
|
|
38
|
+
get type(): OscillatorType;
|
|
39
|
+
set type(value: OscillatorType);
|
|
40
|
+
/**
|
|
41
|
+
* Stored but inert — an `OscillatorNode` has no playback rate. Retune via
|
|
42
|
+
* {@link AudioGeneratorVoice.frequency} or {@link AudioGeneratorVoice.detune}.
|
|
43
|
+
*/
|
|
44
|
+
get playbackRate(): number;
|
|
45
|
+
set playbackRate(value: number);
|
|
46
|
+
get detune(): number;
|
|
47
|
+
set detune(value: number);
|
|
48
|
+
stop(fadeMs?: number): void;
|
|
49
|
+
protected _routeThroughPanner(panner: PannerNode): void;
|
|
50
|
+
protected _teardownSource(): void;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=AudioGeneratorVoice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioGeneratorVoice.d.ts","sourceRoot":"","sources":["../../../src/audio/AudioGeneratorVoice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,+DAA+D;AAC/D,MAAM,WAAW,uBAAwB,SAAQ,aAAa;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,mBAAoB,SAAQ,SAAU,YAAW,WAAW;IACvE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAW;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAK;gBAEP,IAAI,EAAE,uBAAuB;IAmChD,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,SAAS,CAAC,KAAK,EAAE,MAAM,EAKjC;IAED,IAAW,IAAI,IAAI,cAAc,CAEhC;IAED,IAAW,IAAI,CAAC,KAAK,EAAE,cAAc,EAKpC;IAMD;;;OAGG;IACH,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,IAAW,YAAY,CAAC,KAAK,EAAE,MAAM,EAEpC;IAED,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,IAAW,MAAM,CAAC,KAAK,EAAE,MAAM,EAK9B;IAMe,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;cA4BxB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;cAM7C,eAAe,IAAI,IAAI;CAU3C"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { BaseVoice } from './BaseVoice.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Active playback handle for one {@link AudioGenerator} play call, backed by an
|
|
5
|
+
* `OscillatorNode` plus a per-voice envelope gain. Each `AudioManager.play`
|
|
6
|
+
* creates an independent voice.
|
|
7
|
+
*
|
|
8
|
+
* Exposes the generator parameters (`frequency`, `type`), mixes in
|
|
9
|
+
* {@link RatePitched} (`detune` is real; `playbackRate` is stored but inert — an
|
|
10
|
+
* oscillator has no playback rate, retune via `frequency`/`detune`), and (via
|
|
11
|
+
* {@link BaseVoice}) {@link Spatializable}.
|
|
12
|
+
*
|
|
13
|
+
* Graph: `oscillator → envelopeGain → [panner] → output(volume) → bus`. The
|
|
14
|
+
* envelope shapes the ADSR; the output gain carries the overall volume.
|
|
15
|
+
*
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
class AudioGeneratorVoice extends BaseVoice {
|
|
19
|
+
_oscillator;
|
|
20
|
+
_envelopeGain;
|
|
21
|
+
_envelope;
|
|
22
|
+
_frequency;
|
|
23
|
+
_type;
|
|
24
|
+
_detune;
|
|
25
|
+
_playbackRate = 1;
|
|
26
|
+
constructor(init) {
|
|
27
|
+
super(init);
|
|
28
|
+
const ctx = this._audioContext;
|
|
29
|
+
const now = ctx.currentTime;
|
|
30
|
+
this._frequency = init.frequency;
|
|
31
|
+
this._type = init.type;
|
|
32
|
+
this._detune = init.detune;
|
|
33
|
+
this._envelope = init.envelope;
|
|
34
|
+
this._envelopeGain = ctx.createGain();
|
|
35
|
+
this._envelopeGain.connect(this._output);
|
|
36
|
+
const oscillator = ctx.createOscillator();
|
|
37
|
+
oscillator.type = init.type;
|
|
38
|
+
oscillator.frequency.value = init.frequency;
|
|
39
|
+
oscillator.detune.value = init.detune;
|
|
40
|
+
oscillator.connect(this._envelopeGain);
|
|
41
|
+
oscillator.onended = () => this._finish();
|
|
42
|
+
if (this._envelope) {
|
|
43
|
+
this._envelope.trigger(this._envelopeGain.gain, now);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this._envelopeGain.gain.value = 1;
|
|
47
|
+
}
|
|
48
|
+
oscillator.start(now);
|
|
49
|
+
this._oscillator = oscillator;
|
|
50
|
+
}
|
|
51
|
+
// -------------------------------------------------------------------------
|
|
52
|
+
// Generator parameters
|
|
53
|
+
// -------------------------------------------------------------------------
|
|
54
|
+
get frequency() {
|
|
55
|
+
return this._frequency;
|
|
56
|
+
}
|
|
57
|
+
set frequency(value) {
|
|
58
|
+
this._frequency = value;
|
|
59
|
+
if (!this._ended) {
|
|
60
|
+
this._oscillator.frequency.setTargetAtTime(value, this._audioContext.currentTime, 0.01);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
get type() {
|
|
64
|
+
return this._type;
|
|
65
|
+
}
|
|
66
|
+
set type(value) {
|
|
67
|
+
this._type = value;
|
|
68
|
+
if (!this._ended) {
|
|
69
|
+
this._oscillator.type = value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// -------------------------------------------------------------------------
|
|
73
|
+
// RatePitched
|
|
74
|
+
// -------------------------------------------------------------------------
|
|
75
|
+
/**
|
|
76
|
+
* Stored but inert — an `OscillatorNode` has no playback rate. Retune via
|
|
77
|
+
* {@link AudioGeneratorVoice.frequency} or {@link AudioGeneratorVoice.detune}.
|
|
78
|
+
*/
|
|
79
|
+
get playbackRate() {
|
|
80
|
+
return this._playbackRate;
|
|
81
|
+
}
|
|
82
|
+
set playbackRate(value) {
|
|
83
|
+
this._playbackRate = value;
|
|
84
|
+
}
|
|
85
|
+
get detune() {
|
|
86
|
+
return this._detune;
|
|
87
|
+
}
|
|
88
|
+
set detune(value) {
|
|
89
|
+
this._detune = value;
|
|
90
|
+
if (!this._ended) {
|
|
91
|
+
this._oscillator.detune.setTargetAtTime(value, this._audioContext.currentTime, 0.01);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// -------------------------------------------------------------------------
|
|
95
|
+
// Stop (envelope-aware)
|
|
96
|
+
// -------------------------------------------------------------------------
|
|
97
|
+
stop(fadeMs) {
|
|
98
|
+
if (this._ended)
|
|
99
|
+
return;
|
|
100
|
+
if (fadeMs !== undefined && fadeMs > 0) {
|
|
101
|
+
super.stop(fadeMs);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (this._envelope) {
|
|
105
|
+
const now = this._audioContext.currentTime;
|
|
106
|
+
this._envelope.release(this._envelopeGain.gain, now);
|
|
107
|
+
const stopAt = now + this._envelope.releaseMs / 1000;
|
|
108
|
+
try {
|
|
109
|
+
this._oscillator.stop(stopAt);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// already stopped
|
|
113
|
+
}
|
|
114
|
+
// _finish runs on the oscillator's onended at stopAt.
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
super.stop();
|
|
118
|
+
}
|
|
119
|
+
// -------------------------------------------------------------------------
|
|
120
|
+
// BaseVoice hooks
|
|
121
|
+
// -------------------------------------------------------------------------
|
|
122
|
+
_routeThroughPanner(panner) {
|
|
123
|
+
this._envelopeGain.disconnect();
|
|
124
|
+
this._envelopeGain.connect(panner);
|
|
125
|
+
panner.connect(this._output);
|
|
126
|
+
}
|
|
127
|
+
_teardownSource() {
|
|
128
|
+
this._oscillator.onended = null;
|
|
129
|
+
try {
|
|
130
|
+
this._oscillator.stop(0);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// already stopped
|
|
134
|
+
}
|
|
135
|
+
this._oscillator.disconnect();
|
|
136
|
+
this._envelopeGain.disconnect();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export { AudioGeneratorVoice };
|
|
141
|
+
//# sourceMappingURL=AudioGeneratorVoice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioGeneratorVoice.js","sources":["../../../../src/audio/AudioGeneratorVoice.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|