@codexo/exojs 0.6.11 → 0.7.11
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 +1356 -0
- package/dist/esm/audio/AbstractMedia.d.ts +18 -0
- package/dist/esm/audio/AbstractMedia.js +66 -0
- package/dist/esm/audio/AbstractMedia.js.map +1 -1
- package/dist/esm/audio/AudioAnalyser.d.ts +62 -23
- package/dist/esm/audio/AudioAnalyser.js +261 -57
- package/dist/esm/audio/AudioAnalyser.js.map +1 -1
- package/dist/esm/audio/AudioBus.d.ts +45 -0
- package/dist/esm/audio/AudioBus.js +219 -0
- package/dist/esm/audio/AudioBus.js.map +1 -0
- package/dist/esm/audio/AudioFilter.d.ts +9 -0
- package/dist/esm/audio/AudioFilter.js +7 -0
- package/dist/esm/audio/AudioFilter.js.map +1 -0
- package/dist/esm/audio/AudioListener.d.ts +20 -0
- package/dist/esm/audio/AudioListener.js +86 -0
- package/dist/esm/audio/AudioListener.js.map +1 -0
- package/dist/esm/audio/AudioManager.d.ts +31 -0
- package/dist/esm/audio/AudioManager.js +102 -0
- package/dist/esm/audio/AudioManager.js.map +1 -0
- package/dist/esm/audio/BeatDetector.d.ts +121 -0
- package/dist/esm/audio/BeatDetector.js +936 -0
- package/dist/esm/audio/BeatDetector.js.map +1 -0
- package/dist/esm/audio/Envelope.d.ts +44 -0
- package/dist/esm/audio/Envelope.js +60 -0
- package/dist/esm/audio/Envelope.js.map +1 -0
- package/dist/esm/audio/Music.d.ts +8 -0
- package/dist/esm/audio/Music.js +33 -4
- package/dist/esm/audio/Music.js.map +1 -1
- package/dist/esm/audio/OscillatorSound.d.ts +98 -0
- package/dist/esm/audio/OscillatorSound.js +342 -0
- package/dist/esm/audio/OscillatorSound.js.map +1 -0
- package/dist/esm/audio/Sound.d.ts +94 -9
- package/dist/esm/audio/Sound.js +283 -117
- package/dist/esm/audio/Sound.js.map +1 -1
- package/dist/esm/audio/crossFade.d.ts +19 -0
- package/dist/esm/audio/crossFade.js +26 -0
- package/dist/esm/audio/crossFade.js.map +1 -0
- package/dist/esm/audio/dsp/fft.d.ts +22 -0
- package/dist/esm/audio/dsp/mel.d.ts +43 -0
- package/dist/esm/audio/dsp/tempogram.d.ts +51 -0
- package/dist/esm/audio/filters/ChorusFilter.d.ts +47 -0
- package/dist/esm/audio/filters/ChorusFilter.js +139 -0
- package/dist/esm/audio/filters/ChorusFilter.js.map +1 -0
- package/dist/esm/audio/filters/CompressorFilter.d.ts +31 -0
- package/dist/esm/audio/filters/CompressorFilter.js +97 -0
- package/dist/esm/audio/filters/CompressorFilter.js.map +1 -0
- package/dist/esm/audio/filters/DelayFilter.d.ts +23 -0
- package/dist/esm/audio/filters/DelayFilter.js +100 -0
- package/dist/esm/audio/filters/DelayFilter.js.map +1 -0
- package/dist/esm/audio/filters/DuckingFilter.d.ts +31 -0
- package/dist/esm/audio/filters/DuckingFilter.js +152 -0
- package/dist/esm/audio/filters/DuckingFilter.js.map +1 -0
- package/dist/esm/audio/filters/EqualizerFilter.d.ts +29 -0
- package/dist/esm/audio/filters/EqualizerFilter.js +94 -0
- package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -0
- package/dist/esm/audio/filters/GranularFilter.d.ts +56 -0
- package/dist/esm/audio/filters/GranularFilter.js +170 -0
- package/dist/esm/audio/filters/GranularFilter.js.map +1 -0
- package/dist/esm/audio/filters/HighpassFilter.d.ts +19 -0
- package/dist/esm/audio/filters/HighpassFilter.js +62 -0
- package/dist/esm/audio/filters/HighpassFilter.js.map +1 -0
- package/dist/esm/audio/filters/LowpassFilter.d.ts +19 -0
- package/dist/esm/audio/filters/LowpassFilter.js +62 -0
- package/dist/esm/audio/filters/LowpassFilter.js.map +1 -0
- package/dist/esm/audio/filters/PitchShiftFilter.d.ts +42 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js +130 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -0
- package/dist/esm/audio/filters/ReverbFilter.d.ts +24 -0
- package/dist/esm/audio/filters/ReverbFilter.js +107 -0
- package/dist/esm/audio/filters/ReverbFilter.js.map +1 -0
- package/dist/esm/audio/filters/VocoderFilter.d.ts +38 -0
- package/dist/esm/audio/filters/VocoderFilter.js +163 -0
- package/dist/esm/audio/filters/VocoderFilter.js.map +1 -0
- package/dist/esm/audio/filters/WorkletFilter.d.ts +46 -0
- package/dist/esm/audio/filters/WorkletFilter.js +101 -0
- package/dist/esm/audio/filters/WorkletFilter.js.map +1 -0
- package/dist/esm/audio/filters/index.d.ts +12 -0
- package/dist/esm/audio/index.d.ts +15 -1
- package/dist/esm/audio/worklet/registerWorklet.d.ts +10 -0
- package/dist/esm/audio/worklet/registerWorklet.js +44 -0
- package/dist/esm/audio/worklet/registerWorklet.js.map +1 -0
- package/dist/esm/core/Application.d.ts +19 -0
- package/dist/esm/core/Application.js +76 -2
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +9 -1
- package/dist/esm/core/SceneNode.js +44 -6
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Time.js +1 -1
- package/dist/esm/core/index.d.ts +0 -1
- package/dist/esm/debug/BoundingBoxesLayer.d.ts +18 -0
- package/dist/esm/debug/BoundingBoxesLayer.js +128 -0
- package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -0
- package/dist/esm/debug/DebugLayer.d.ts +29 -0
- package/dist/esm/debug/DebugLayer.js +26 -0
- package/dist/esm/debug/DebugLayer.js.map +1 -0
- package/dist/esm/debug/DebugOverlay.d.ts +48 -0
- package/dist/esm/debug/DebugOverlay.js +117 -0
- package/dist/esm/debug/DebugOverlay.js.map +1 -0
- package/dist/esm/debug/HitTestLayer.d.ts +23 -0
- package/dist/esm/debug/HitTestLayer.js +109 -0
- package/dist/esm/debug/HitTestLayer.js.map +1 -0
- package/dist/esm/debug/PerformanceLayer.d.ts +21 -0
- package/dist/esm/debug/PerformanceLayer.js +175 -0
- package/dist/esm/debug/PerformanceLayer.js.map +1 -0
- package/dist/esm/debug/PointerStackLayer.d.ts +23 -0
- package/dist/esm/debug/PointerStackLayer.js +152 -0
- package/dist/esm/debug/PointerStackLayer.js.map +1 -0
- package/dist/esm/debug/index.d.ts +6 -0
- package/dist/esm/debug/index.js +7 -0
- package/dist/esm/debug/index.js.map +1 -0
- package/dist/esm/index.js +29 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts +10 -0
- package/dist/esm/input/InputManager.js +35 -5
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionEvent.d.ts +18 -0
- package/dist/esm/input/InteractionEvent.js +29 -0
- package/dist/esm/input/InteractionEvent.js.map +1 -0
- package/dist/esm/input/InteractionManager.d.ts +134 -0
- package/dist/esm/input/InteractionManager.js +546 -0
- package/dist/esm/input/InteractionManager.js.map +1 -0
- package/dist/esm/input/index.d.ts +2 -0
- package/dist/esm/input/interaction-hooks.d.ts +34 -0
- package/dist/esm/input/interaction-hooks.js +35 -0
- package/dist/esm/input/interaction-hooks.js.map +1 -0
- package/dist/esm/math/Circle.d.ts +12 -2
- package/dist/esm/math/Circle.js +82 -14
- package/dist/esm/math/Circle.js.map +1 -1
- package/dist/esm/math/Interval.js +1 -1
- package/dist/esm/math/ObservableVector.d.ts +2 -2
- package/dist/esm/math/ObservableVector.js +4 -2
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts +15 -1
- package/dist/esm/math/Polygon.js +58 -6
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/Quadtree.d.ts +47 -0
- package/dist/esm/math/Quadtree.js +168 -0
- package/dist/esm/math/Quadtree.js.map +1 -0
- package/dist/esm/math/Random.js +1 -1
- package/dist/esm/math/Size.js +1 -1
- package/dist/esm/math/Vector.js +1 -1
- package/dist/esm/math/collision-detection.js +4 -1
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/index.d.ts +2 -0
- package/dist/esm/math/swept-collision.d.ts +90 -0
- package/dist/esm/math/swept-collision.js +255 -0
- package/dist/esm/math/swept-collision.js.map +1 -0
- package/dist/esm/particles/ParticleSystem.js +1 -0
- package/dist/esm/particles/ParticleSystem.js.map +1 -1
- package/dist/esm/particles/affectors/TorqueAffector.js +1 -1
- package/dist/esm/rendering/Container.d.ts +1 -0
- package/dist/esm/rendering/Container.js +19 -0
- package/dist/esm/rendering/Container.js.map +1 -1
- package/dist/esm/rendering/RenderNode.d.ts +27 -0
- package/dist/esm/rendering/RenderNode.js +44 -0
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +6 -4
- package/dist/esm/rendering/View.js +12 -2
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.d.ts +109 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +268 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +111 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +397 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -0
- package/dist/esm/rendering/index.d.ts +3 -0
- package/dist/esm/rendering/mesh/Mesh.js +1 -0
- package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.d.ts +34 -0
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js +60 -0
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js.map +1 -0
- package/dist/esm/rendering/sprite/Sprite.d.ts +6 -1
- package/dist/esm/rendering/sprite/Sprite.js +41 -19
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +4 -0
- package/dist/esm/rendering/video/Video.js +32 -4
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +4 -4
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +7 -16
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +10 -8
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +30 -40
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/exo.esm.js +8021 -2459
- package/dist/exo.esm.js.map +1 -1
- package/package.json +14 -2
- package/dist/esm/core/Quadtree.d.ts +0 -20
- package/dist/esm/core/Quadtree.js +0 -86
- package/dist/esm/core/Quadtree.js.map +0 -1
package/dist/esm/audio/Sound.js
CHANGED
|
@@ -1,7 +1,30 @@
|
|
|
1
1
|
import { clamp } from '../math/utils.js';
|
|
2
|
+
import { Vector } from '../math/Vector.js';
|
|
2
3
|
import { AbstractMedia } from './AbstractMedia.js';
|
|
3
4
|
import { isAudioContextReady, getAudioContext, onAudioContextReady } from './audio-context.js';
|
|
5
|
+
import { getAudioManager } from './AudioManager.js';
|
|
4
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Eviction strategy used when the pool is full and a new play is requested.
|
|
9
|
+
*
|
|
10
|
+
* At the per-Sound level all pooled instances share the same priority, so
|
|
11
|
+
* `LowestPriority` degenerates to `FirstInFirstOut` in V1. The enum is
|
|
12
|
+
* forward-compatible with a future global voice manager that culls across
|
|
13
|
+
* multiple Sound instances.
|
|
14
|
+
*/
|
|
15
|
+
var SoundPoolStrategy;
|
|
16
|
+
(function (SoundPoolStrategy) {
|
|
17
|
+
/** Evict the oldest (first-started) source. Default. */
|
|
18
|
+
SoundPoolStrategy["FirstInFirstOut"] = "fifo";
|
|
19
|
+
/** Evict the source closest to its natural end (shortest remaining time). */
|
|
20
|
+
SoundPoolStrategy["LeastRecentlyUsed"] = "lru";
|
|
21
|
+
/**
|
|
22
|
+
* Evict the source with the lowest priority.
|
|
23
|
+
* Within a single Sound all instances share the same priority, so this
|
|
24
|
+
* degenerates to FirstInFirstOut in V1.
|
|
25
|
+
*/
|
|
26
|
+
SoundPoolStrategy["LowestPriority"] = "priority";
|
|
27
|
+
})(SoundPoolStrategy || (SoundPoolStrategy = {}));
|
|
5
28
|
class Sound extends AbstractMedia {
|
|
6
29
|
_audioBuffer;
|
|
7
30
|
_pooledSources = [];
|
|
@@ -9,10 +32,12 @@ class Sound extends AbstractMedia {
|
|
|
9
32
|
_sprites = new Map();
|
|
10
33
|
_audioSetup = null;
|
|
11
34
|
_paused = true;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
35
|
+
_poolSize = 8;
|
|
36
|
+
_poolStrategy = SoundPoolStrategy.FirstInFirstOut;
|
|
37
|
+
_priority = 0;
|
|
38
|
+
_position = null;
|
|
39
|
+
_velocity = null;
|
|
40
|
+
_pannerNode = null;
|
|
16
41
|
get paused() {
|
|
17
42
|
return this._paused;
|
|
18
43
|
}
|
|
@@ -33,6 +58,69 @@ class Sound extends AbstractMedia {
|
|
|
33
58
|
set poolSize(poolSize) {
|
|
34
59
|
this.setPoolSize(poolSize);
|
|
35
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* The eviction strategy used when the pool is at capacity.
|
|
63
|
+
* @default SoundPoolStrategy.FirstInFirstOut
|
|
64
|
+
*/
|
|
65
|
+
get poolStrategy() {
|
|
66
|
+
return this._poolStrategy;
|
|
67
|
+
}
|
|
68
|
+
set poolStrategy(strategy) {
|
|
69
|
+
this._poolStrategy = strategy;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Sound priority. Used by the `LowestPriority` pool strategy.
|
|
73
|
+
* Higher values indicate higher priority (less likely to be evicted).
|
|
74
|
+
* @default 0
|
|
75
|
+
*/
|
|
76
|
+
get priority() {
|
|
77
|
+
return this._priority;
|
|
78
|
+
}
|
|
79
|
+
set priority(value) {
|
|
80
|
+
this._priority = value;
|
|
81
|
+
}
|
|
82
|
+
get position() {
|
|
83
|
+
return this._position;
|
|
84
|
+
}
|
|
85
|
+
set position(value) {
|
|
86
|
+
if (value === null) {
|
|
87
|
+
if (this._position !== null) {
|
|
88
|
+
this._position.destroy();
|
|
89
|
+
this._position = null;
|
|
90
|
+
this._teardownSpatial();
|
|
91
|
+
getAudioManager()._unregisterSpatialSound(this);
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (this._position === null) {
|
|
96
|
+
// Becoming spatial
|
|
97
|
+
this._position = new Vector(value.x, value.y);
|
|
98
|
+
this._setupSpatial();
|
|
99
|
+
getAudioManager()._registerSpatialSound(this);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
this._position.set(value.x, value.y);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
get velocity() {
|
|
106
|
+
return this._velocity;
|
|
107
|
+
}
|
|
108
|
+
set velocity(value) {
|
|
109
|
+
if (value === null) {
|
|
110
|
+
if (this._velocity !== null) {
|
|
111
|
+
this._velocity.destroy();
|
|
112
|
+
this._velocity = null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
if (this._velocity === null) {
|
|
117
|
+
this._velocity = new Vector(value.x, value.y);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
this._velocity.set(value.x, value.y);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
36
124
|
constructor(audioBuffer, options = {}) {
|
|
37
125
|
super({
|
|
38
126
|
duration: audioBuffer.duration,
|
|
@@ -42,8 +130,14 @@ class Sound extends AbstractMedia {
|
|
|
42
130
|
muted: false,
|
|
43
131
|
});
|
|
44
132
|
this._audioBuffer = audioBuffer;
|
|
45
|
-
const { poolSize, sprites, ...playbackOptions } = options;
|
|
46
|
-
this._poolSize = Math.max(1, Math.floor(poolSize ??
|
|
133
|
+
const { poolSize, poolStrategy, priority, sprites, ...playbackOptions } = options;
|
|
134
|
+
this._poolSize = Math.max(1, Math.floor(poolSize ?? 8));
|
|
135
|
+
if (poolStrategy !== undefined) {
|
|
136
|
+
this._poolStrategy = poolStrategy;
|
|
137
|
+
}
|
|
138
|
+
if (priority !== undefined) {
|
|
139
|
+
this._priority = priority;
|
|
140
|
+
}
|
|
47
141
|
if (Object.keys(playbackOptions).length > 0) {
|
|
48
142
|
this.applyOptions(playbackOptions);
|
|
49
143
|
}
|
|
@@ -65,50 +159,29 @@ class Sound extends AbstractMedia {
|
|
|
65
159
|
this._volume = volume;
|
|
66
160
|
if (this._audioSetup) {
|
|
67
161
|
const { gainNode, audioContext } = this._audioSetup;
|
|
68
|
-
gainNode.gain.setTargetAtTime(this.muted ? 0 : volume, audioContext.currentTime,
|
|
162
|
+
gainNode.gain.setTargetAtTime(this.muted ? 0 : volume, audioContext.currentTime, 0.01);
|
|
69
163
|
}
|
|
70
164
|
return this;
|
|
71
165
|
}
|
|
72
166
|
setLoop(loop) {
|
|
73
167
|
this._loop = loop;
|
|
74
|
-
if (this._sourceNode) {
|
|
75
|
-
this._sourceNode.loop = loop;
|
|
76
|
-
if (loop) {
|
|
77
|
-
this._sourceNode.loopStart = 0;
|
|
78
|
-
this._sourceNode.loopEnd = this.duration;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
168
|
return this;
|
|
82
169
|
}
|
|
83
170
|
setPlaybackRate(value) {
|
|
84
171
|
this._playbackRate = clamp(value, 0.1, 20);
|
|
85
|
-
if (this._sourceNode) {
|
|
86
|
-
this._sourceNode.playbackRate.value = this._playbackRate;
|
|
87
|
-
}
|
|
88
172
|
return this;
|
|
89
173
|
}
|
|
90
174
|
getTime() {
|
|
91
|
-
|
|
92
|
-
return this._currentTime;
|
|
93
|
-
}
|
|
94
|
-
return this._currentTime + ((this._audioSetup.audioContext.currentTime - this._startTime) * this._playbackRate);
|
|
175
|
+
return 0;
|
|
95
176
|
}
|
|
96
177
|
setTime(currentTime) {
|
|
97
|
-
const time = Math.max(0, currentTime);
|
|
98
|
-
if (this.paused || !this._audioSetup) {
|
|
99
|
-
this._currentTime = time;
|
|
100
|
-
return this;
|
|
101
|
-
}
|
|
102
|
-
this.pause();
|
|
103
|
-
this._currentTime = time;
|
|
104
|
-
this.play();
|
|
105
178
|
return this;
|
|
106
179
|
}
|
|
107
180
|
setMuted(muted) {
|
|
108
181
|
this._muted = muted;
|
|
109
182
|
if (this._audioSetup) {
|
|
110
183
|
const { gainNode, audioContext } = this._audioSetup;
|
|
111
|
-
gainNode.gain.setTargetAtTime(muted ? 0 : this.volume, audioContext.currentTime,
|
|
184
|
+
gainNode.gain.setTargetAtTime(muted ? 0 : this.volume, audioContext.currentTime, 0.01);
|
|
112
185
|
}
|
|
113
186
|
return this;
|
|
114
187
|
}
|
|
@@ -157,30 +230,29 @@ class Sound extends AbstractMedia {
|
|
|
157
230
|
this._sprites.delete(name);
|
|
158
231
|
return this;
|
|
159
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* Play this sound. By default, creates a new pooled instance allowing
|
|
235
|
+
* multiple concurrent plays up to `poolSize`. Pass `{ replace: true }` to
|
|
236
|
+
* stop all prior instances of this sound before starting a new one
|
|
237
|
+
* (singleton-replace mode — useful for non-overlapping playback like UI
|
|
238
|
+
* confirmation chimes).
|
|
239
|
+
*/
|
|
160
240
|
play(options) {
|
|
161
|
-
if (options) {
|
|
162
|
-
this.
|
|
163
|
-
}
|
|
164
|
-
if (!this._paused) {
|
|
165
|
-
return this;
|
|
241
|
+
if (options?.bus !== undefined) {
|
|
242
|
+
this.bus = options.bus;
|
|
166
243
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
this.onStart.dispatch();
|
|
172
|
-
return this;
|
|
173
|
-
}
|
|
174
|
-
playPooled(options = {}) {
|
|
175
|
-
const playbackRate = clamp(options.playbackRate ?? this._playbackRate, 0.1, 20);
|
|
176
|
-
const offset = Math.max(0, options.time ?? 0);
|
|
177
|
-
const loop = options.loop ?? false;
|
|
178
|
-
if (options.volume !== undefined) {
|
|
244
|
+
const playbackRate = clamp(options?.playbackRate ?? this._playbackRate, 0.1, 20);
|
|
245
|
+
const offset = Math.max(0, options?.time ?? 0);
|
|
246
|
+
const loop = options?.loop ?? this._loop;
|
|
247
|
+
if (options?.volume !== undefined) {
|
|
179
248
|
this.setVolume(options.volume);
|
|
180
249
|
}
|
|
181
|
-
if (options
|
|
250
|
+
if (options?.muted !== undefined) {
|
|
182
251
|
this.setMuted(options.muted);
|
|
183
252
|
}
|
|
253
|
+
if (options?.replace) {
|
|
254
|
+
this._stopAllPooled();
|
|
255
|
+
}
|
|
184
256
|
if (offset >= this.duration) {
|
|
185
257
|
return this;
|
|
186
258
|
}
|
|
@@ -193,6 +265,7 @@ class Sound extends AbstractMedia {
|
|
|
193
265
|
loopEnd: this.duration,
|
|
194
266
|
playbackRate,
|
|
195
267
|
});
|
|
268
|
+
this._paused = false;
|
|
196
269
|
this.onStart.dispatch();
|
|
197
270
|
return this;
|
|
198
271
|
}
|
|
@@ -225,14 +298,6 @@ class Sound extends AbstractMedia {
|
|
|
225
298
|
this.onStart.dispatch();
|
|
226
299
|
return this;
|
|
227
300
|
}
|
|
228
|
-
stopPooled() {
|
|
229
|
-
if (this._pooledSources.length > 0) {
|
|
230
|
-
this._stopPooledSources();
|
|
231
|
-
this.onStop.dispatch();
|
|
232
|
-
}
|
|
233
|
-
this._queuedPooledPlays.length = 0;
|
|
234
|
-
return this;
|
|
235
|
-
}
|
|
236
301
|
pause(options) {
|
|
237
302
|
if (options) {
|
|
238
303
|
this.applyOptions(options);
|
|
@@ -240,65 +305,126 @@ class Sound extends AbstractMedia {
|
|
|
240
305
|
if (this._paused && this._pooledSources.length === 0) {
|
|
241
306
|
return this;
|
|
242
307
|
}
|
|
243
|
-
if (!this._paused && this._audioSetup) {
|
|
244
|
-
const duration = this.duration;
|
|
245
|
-
const currentTime = this.currentTime;
|
|
246
|
-
this._currentTime = duration > 0 ? (currentTime % duration) : 0;
|
|
247
|
-
}
|
|
248
308
|
const hadPooledSources = this._pooledSources.length > 0;
|
|
249
|
-
this._stopPrimarySource();
|
|
250
|
-
this._stopPooledSources();
|
|
251
|
-
this._queuedPooledPlays.length = 0;
|
|
252
309
|
const wasPlaying = !this._paused || hadPooledSources;
|
|
310
|
+
this._stopAllPooled();
|
|
311
|
+
this._queuedPooledPlays.length = 0;
|
|
253
312
|
this._paused = true;
|
|
254
313
|
if (wasPlaying) {
|
|
255
314
|
this.onStop.dispatch();
|
|
256
315
|
}
|
|
257
316
|
return this;
|
|
258
317
|
}
|
|
318
|
+
_getAudioSetup() {
|
|
319
|
+
return this._audioSetup;
|
|
320
|
+
}
|
|
321
|
+
_defaultBus() {
|
|
322
|
+
return getAudioManager().sound;
|
|
323
|
+
}
|
|
324
|
+
_disconnectFromBus() {
|
|
325
|
+
if (this._audioSetup) {
|
|
326
|
+
// Disconnect the upstream node (panner if spatial, else gainNode)
|
|
327
|
+
const upstream = this._pannerNode ?? this._audioSetup.gainNode;
|
|
328
|
+
upstream.disconnect();
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
_connectToBus() {
|
|
332
|
+
if (this._audioSetup) {
|
|
333
|
+
const upstream = this._pannerNode ?? this._audioSetup.gainNode;
|
|
334
|
+
const inputNode = this.bus._getInputNode();
|
|
335
|
+
if (inputNode) {
|
|
336
|
+
upstream.connect(inputNode);
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
upstream.connect(this._audioSetup.audioContext.destination);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
259
343
|
destroy() {
|
|
344
|
+
if (this._pannerNode !== null) {
|
|
345
|
+
this._pannerNode.disconnect();
|
|
346
|
+
this._pannerNode = null;
|
|
347
|
+
}
|
|
348
|
+
if (this._position !== null) {
|
|
349
|
+
this._position.destroy();
|
|
350
|
+
this._position = null;
|
|
351
|
+
getAudioManager()._unregisterSpatialSound(this);
|
|
352
|
+
}
|
|
353
|
+
if (this._velocity !== null) {
|
|
354
|
+
this._velocity.destroy();
|
|
355
|
+
this._velocity = null;
|
|
356
|
+
}
|
|
260
357
|
super.destroy();
|
|
261
358
|
onAudioContextReady.clearByContext(this);
|
|
262
359
|
this._audioSetup?.gainNode.disconnect();
|
|
263
|
-
this.
|
|
264
|
-
this._stopPooledSources();
|
|
360
|
+
this._stopAllPooled();
|
|
265
361
|
this._queuedPooledPlays.length = 0;
|
|
266
362
|
this._sprites.clear();
|
|
267
363
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
this.
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
364
|
+
/** Internal: called by AudioManager.update() once per frame for spatial sounds. */
|
|
365
|
+
_tickSpatial() {
|
|
366
|
+
if (this._pannerNode === null || this._position === null)
|
|
367
|
+
return;
|
|
368
|
+
const ctx = this._pannerNode.context;
|
|
369
|
+
const t = ctx.currentTime;
|
|
370
|
+
const panner = this._pannerNode;
|
|
371
|
+
if (panner.positionX) {
|
|
372
|
+
panner.positionX.setValueAtTime(this._position.x, t);
|
|
373
|
+
panner.positionY.setValueAtTime(this._position.y, t);
|
|
374
|
+
panner.positionZ.setValueAtTime(0, t);
|
|
375
|
+
}
|
|
376
|
+
else if (panner.setPosition) {
|
|
377
|
+
panner.setPosition(this._position.x, this._position.y, 0);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
_setupSpatial() {
|
|
381
|
+
if (!this._audioSetup || this._pannerNode !== null)
|
|
382
|
+
return;
|
|
383
|
+
const ctx = this._audioSetup.audioContext;
|
|
384
|
+
const panner = ctx.createPanner();
|
|
385
|
+
panner.panningModel = 'equalpower';
|
|
386
|
+
panner.distanceModel = 'linear';
|
|
387
|
+
panner.maxDistance = 1000;
|
|
388
|
+
panner.refDistance = 50;
|
|
389
|
+
panner.rolloffFactor = 1;
|
|
390
|
+
this._pannerNode = panner;
|
|
391
|
+
// Re-route: gainNode → pannerNode → bus.inputNode
|
|
392
|
+
this._audioSetup.gainNode.disconnect();
|
|
393
|
+
this._audioSetup.gainNode.connect(panner);
|
|
394
|
+
const busInput = this.bus._getInputNode();
|
|
395
|
+
if (busInput) {
|
|
396
|
+
panner.connect(busInput);
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
panner.connect(ctx.destination);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
_teardownSpatial() {
|
|
403
|
+
if (!this._audioSetup || this._pannerNode === null)
|
|
404
|
+
return;
|
|
405
|
+
this._audioSetup.gainNode.disconnect();
|
|
406
|
+
this._pannerNode.disconnect();
|
|
407
|
+
this._pannerNode = null;
|
|
408
|
+
// Restore: gainNode → bus.inputNode
|
|
409
|
+
const busInput = this.bus._getInputNode();
|
|
410
|
+
if (busInput) {
|
|
411
|
+
this._audioSetup.gainNode.connect(busInput);
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
this._audioSetup.gainNode.connect(this._audioSetup.audioContext.destination);
|
|
415
|
+
}
|
|
293
416
|
}
|
|
294
417
|
setupWithAudioContext(audioContext) {
|
|
295
418
|
const gainNode = audioContext.createGain();
|
|
296
|
-
gainNode.gain.setTargetAtTime(this.muted ? 0 : this.volume, audioContext.currentTime,
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
this.createSourceNode(this._audioSetup);
|
|
419
|
+
gainNode.gain.setTargetAtTime(this.muted ? 0 : this.volume, audioContext.currentTime, 0.01);
|
|
420
|
+
const inputNode = this.bus._getInputNode();
|
|
421
|
+
if (inputNode) {
|
|
422
|
+
gainNode.connect(inputNode);
|
|
301
423
|
}
|
|
424
|
+
else {
|
|
425
|
+
gainNode.connect(audioContext.destination);
|
|
426
|
+
}
|
|
427
|
+
this._audioSetup = { audioContext, gainNode };
|
|
302
428
|
this._flushQueuedPooledPlays();
|
|
303
429
|
}
|
|
304
430
|
_enqueuePooledPlay(play) {
|
|
@@ -322,40 +448,80 @@ class Sound extends AbstractMedia {
|
|
|
322
448
|
if (!this._audioSetup) {
|
|
323
449
|
return;
|
|
324
450
|
}
|
|
451
|
+
const { audioContext } = this._audioSetup;
|
|
325
452
|
const sourceNode = this._createBufferSourceNode(this._audioSetup, play);
|
|
453
|
+
const startedAt = audioContext.currentTime;
|
|
454
|
+
const effectiveDuration = play.loop ? Infinity : (play.duration ?? Infinity);
|
|
455
|
+
const pooledSource = { node: sourceNode, startedAt, effectiveDuration };
|
|
326
456
|
sourceNode.onended = () => {
|
|
327
|
-
const index = this._pooledSources.indexOf(
|
|
457
|
+
const index = this._pooledSources.indexOf(pooledSource);
|
|
328
458
|
if (index !== -1) {
|
|
329
459
|
this._pooledSources.splice(index, 1);
|
|
330
460
|
}
|
|
331
461
|
sourceNode.disconnect();
|
|
462
|
+
if (this._pooledSources.length === 0 && this._queuedPooledPlays.length === 0) {
|
|
463
|
+
this._paused = true;
|
|
464
|
+
}
|
|
332
465
|
};
|
|
333
|
-
this._pooledSources.push(
|
|
466
|
+
this._pooledSources.push(pooledSource);
|
|
334
467
|
this._trimPooledSources();
|
|
335
468
|
}
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
469
|
+
/**
|
|
470
|
+
* Pick the index within `_pooledSources` of the source to evict.
|
|
471
|
+
* The returned index is always valid (0 .. length-1).
|
|
472
|
+
*/
|
|
473
|
+
_pickEvictionVictim() {
|
|
474
|
+
switch (this._poolStrategy) {
|
|
475
|
+
case SoundPoolStrategy.LeastRecentlyUsed: {
|
|
476
|
+
return this._pickClosestToEnd();
|
|
477
|
+
}
|
|
478
|
+
case SoundPoolStrategy.LowestPriority:
|
|
479
|
+
// All pooled instances of this Sound share the same priority,
|
|
480
|
+
// so LowestPriority degenerates to FIFO within a single Sound (V1).
|
|
481
|
+
// falls through
|
|
482
|
+
case SoundPoolStrategy.FirstInFirstOut:
|
|
483
|
+
default:
|
|
484
|
+
return 0; // oldest
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Returns the index of the source with the smallest remaining playback
|
|
489
|
+
* time (i.e. closest to its natural end). Used for `LeastRecentlyUsed`.
|
|
490
|
+
*/
|
|
491
|
+
_pickClosestToEnd() {
|
|
492
|
+
if (!this._audioSetup)
|
|
493
|
+
return 0;
|
|
494
|
+
const now = this._audioSetup.audioContext.currentTime;
|
|
495
|
+
let minRemaining = Infinity;
|
|
496
|
+
let minIndex = 0;
|
|
497
|
+
for (let i = 0; i < this._pooledSources.length; i++) {
|
|
498
|
+
const src = this._pooledSources[i];
|
|
499
|
+
const elapsed = now - src.startedAt;
|
|
500
|
+
const remaining = src.effectiveDuration - elapsed;
|
|
501
|
+
if (remaining < minRemaining) {
|
|
502
|
+
minRemaining = remaining;
|
|
503
|
+
minIndex = i;
|
|
341
504
|
}
|
|
342
|
-
oldestSource.onended = null;
|
|
343
|
-
this._stopSourceNode(oldestSource);
|
|
344
505
|
}
|
|
506
|
+
return minIndex;
|
|
345
507
|
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
508
|
+
_trimPooledSources() {
|
|
509
|
+
while (this._pooledSources.length > this._poolSize) {
|
|
510
|
+
const victimIndex = this._pickEvictionVictim();
|
|
511
|
+
const victim = this._pooledSources[victimIndex];
|
|
512
|
+
if (!victim) {
|
|
513
|
+
break;
|
|
514
|
+
}
|
|
515
|
+
this._pooledSources.splice(victimIndex, 1);
|
|
516
|
+
victim.node.onended = null;
|
|
517
|
+
this._stopSourceNode(victim.node);
|
|
349
518
|
}
|
|
350
|
-
this._sourceNode.onended = null;
|
|
351
|
-
this._stopSourceNode(this._sourceNode);
|
|
352
|
-
this._sourceNode = null;
|
|
353
|
-
this._startTime = 0;
|
|
354
519
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
520
|
+
/** Stop all pooled sources immediately (used by `replace: true` and `pause()`). */
|
|
521
|
+
_stopAllPooled() {
|
|
522
|
+
for (const pooledSource of this._pooledSources) {
|
|
523
|
+
pooledSource.node.onended = null;
|
|
524
|
+
this._stopSourceNode(pooledSource.node);
|
|
359
525
|
}
|
|
360
526
|
this._pooledSources.length = 0;
|
|
361
527
|
}
|
|
@@ -390,5 +556,5 @@ class Sound extends AbstractMedia {
|
|
|
390
556
|
}
|
|
391
557
|
}
|
|
392
558
|
|
|
393
|
-
export { Sound };
|
|
559
|
+
export { Sound, SoundPoolStrategy };
|
|
394
560
|
//# sourceMappingURL=Sound.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sound.js","sources":["../../../../src/audio/Sound.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Sound.js","sources":["../../../../src/audio/Sound.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AbstractMedia } from './AbstractMedia';
|
|
2
|
+
export interface CrossFadeOptions {
|
|
3
|
+
/** Stop the `from` media after fade completes. Default true. */
|
|
4
|
+
stopAfterFade?: boolean;
|
|
5
|
+
/** Auto-play `to` if currently paused. Default true. */
|
|
6
|
+
autoPlayTarget?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Cross-fade from one media instance to another over `durationMs`.
|
|
10
|
+
*
|
|
11
|
+
* Calls `from.fadeOut(durationMs)` and `to.fadeIn(durationMs)` in parallel.
|
|
12
|
+
* If `to` is paused at call time and `autoPlayTarget !== false`, it will
|
|
13
|
+
* be played first (so the fade-in is audible).
|
|
14
|
+
*
|
|
15
|
+
* Returns a Promise that resolves after `durationMs` elapses (i.e., when
|
|
16
|
+
* the fade completes). Use `await crossFade(...)` for sequential music
|
|
17
|
+
* transitions, or fire-and-forget for non-blocking transitions.
|
|
18
|
+
*/
|
|
19
|
+
export declare function crossFade(from: AbstractMedia, to: AbstractMedia, durationMs: number, options?: CrossFadeOptions): Promise<void>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-fade from one media instance to another over `durationMs`.
|
|
3
|
+
*
|
|
4
|
+
* Calls `from.fadeOut(durationMs)` and `to.fadeIn(durationMs)` in parallel.
|
|
5
|
+
* If `to` is paused at call time and `autoPlayTarget !== false`, it will
|
|
6
|
+
* be played first (so the fade-in is audible).
|
|
7
|
+
*
|
|
8
|
+
* Returns a Promise that resolves after `durationMs` elapses (i.e., when
|
|
9
|
+
* the fade completes). Use `await crossFade(...)` for sequential music
|
|
10
|
+
* transitions, or fire-and-forget for non-blocking transitions.
|
|
11
|
+
*/
|
|
12
|
+
async function crossFade(from, to, durationMs, options = {}) {
|
|
13
|
+
const stopAfterFade = options.stopAfterFade ?? true;
|
|
14
|
+
const autoPlayTarget = options.autoPlayTarget ?? true;
|
|
15
|
+
if (autoPlayTarget && to.paused) {
|
|
16
|
+
to.play();
|
|
17
|
+
}
|
|
18
|
+
from.fadeOut(durationMs, { stopAfter: stopAfterFade });
|
|
19
|
+
to.fadeIn(durationMs);
|
|
20
|
+
return new Promise((resolve) => {
|
|
21
|
+
setTimeout(resolve, Math.max(0, durationMs));
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { crossFade };
|
|
26
|
+
//# sourceMappingURL=crossFade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crossFade.js","sources":["../../../../src/audio/crossFade.ts"],"sourcesContent":[null],"names":[],"mappings":"AASA;;;;;;;;;;AAUG;AACI,eAAe,SAAS,CAC3B,IAAmB,EACnB,EAAiB,EACjB,UAAkB,EAClB,OAAA,GAA4B,EAAE,EAAA;AAE9B,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI;AACnD,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI;AAErD,IAAA,IAAI,cAAc,IAAI,EAAE,CAAC,MAAM,EAAE;QAC7B,EAAE,CAAC,IAAI,EAAE;IACb;IAEA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AACtD,IAAA,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;AAErB,IAAA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AACjC,QAAA,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAChD,IAAA,CAAC,CAAC;AACN;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-place radix-2 Cooley-Tukey FFT.
|
|
3
|
+
*
|
|
4
|
+
* Operates on the supplied real/imag arrays (length must be a power of 2).
|
|
5
|
+
* After the call, real[i] and imag[i] hold the complex spectrum.
|
|
6
|
+
* A Hann window is applied to the input before the transform.
|
|
7
|
+
*
|
|
8
|
+
* These functions are duplicated (as plain JS) inside the beat-detector worklet
|
|
9
|
+
* source string because AudioWorklets cannot import modules.
|
|
10
|
+
*/
|
|
11
|
+
/** Apply a Hann window in-place to `real`. `imag` is zeroed. */
|
|
12
|
+
export declare function hannWindow(real: Float32Array, imag: Float32Array): void;
|
|
13
|
+
/**
|
|
14
|
+
* In-place FFT. `real` and `imag` must have the same length (power of 2).
|
|
15
|
+
* A Hann window is applied to `real` before the transform; `imag` is zeroed.
|
|
16
|
+
*/
|
|
17
|
+
export declare function fft(real: Float32Array, imag: Float32Array): void;
|
|
18
|
+
/**
|
|
19
|
+
* Compute magnitude spectrum from complex FFT output.
|
|
20
|
+
* Returns a Float32Array of length `n/2` (positive frequencies only).
|
|
21
|
+
*/
|
|
22
|
+
export declare function magnitudeSpectrum(real: Float32Array, imag: Float32Array): Float32Array;
|