@codexo/exojs 0.6.12 → 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.
Files changed (186) hide show
  1. package/CHANGELOG.md +1316 -0
  2. package/dist/esm/audio/AbstractMedia.d.ts +18 -0
  3. package/dist/esm/audio/AbstractMedia.js +66 -0
  4. package/dist/esm/audio/AbstractMedia.js.map +1 -1
  5. package/dist/esm/audio/AudioAnalyser.d.ts +62 -23
  6. package/dist/esm/audio/AudioAnalyser.js +261 -57
  7. package/dist/esm/audio/AudioAnalyser.js.map +1 -1
  8. package/dist/esm/audio/AudioBus.d.ts +45 -0
  9. package/dist/esm/audio/AudioBus.js +219 -0
  10. package/dist/esm/audio/AudioBus.js.map +1 -0
  11. package/dist/esm/audio/AudioFilter.d.ts +9 -0
  12. package/dist/esm/audio/AudioFilter.js +7 -0
  13. package/dist/esm/audio/AudioFilter.js.map +1 -0
  14. package/dist/esm/audio/AudioListener.d.ts +20 -0
  15. package/dist/esm/audio/AudioListener.js +86 -0
  16. package/dist/esm/audio/AudioListener.js.map +1 -0
  17. package/dist/esm/audio/AudioManager.d.ts +31 -0
  18. package/dist/esm/audio/AudioManager.js +102 -0
  19. package/dist/esm/audio/AudioManager.js.map +1 -0
  20. package/dist/esm/audio/BeatDetector.d.ts +121 -0
  21. package/dist/esm/audio/BeatDetector.js +936 -0
  22. package/dist/esm/audio/BeatDetector.js.map +1 -0
  23. package/dist/esm/audio/Envelope.d.ts +44 -0
  24. package/dist/esm/audio/Envelope.js +60 -0
  25. package/dist/esm/audio/Envelope.js.map +1 -0
  26. package/dist/esm/audio/Music.d.ts +8 -0
  27. package/dist/esm/audio/Music.js +33 -4
  28. package/dist/esm/audio/Music.js.map +1 -1
  29. package/dist/esm/audio/OscillatorSound.d.ts +98 -0
  30. package/dist/esm/audio/OscillatorSound.js +342 -0
  31. package/dist/esm/audio/OscillatorSound.js.map +1 -0
  32. package/dist/esm/audio/Sound.d.ts +94 -9
  33. package/dist/esm/audio/Sound.js +283 -117
  34. package/dist/esm/audio/Sound.js.map +1 -1
  35. package/dist/esm/audio/crossFade.d.ts +19 -0
  36. package/dist/esm/audio/crossFade.js +26 -0
  37. package/dist/esm/audio/crossFade.js.map +1 -0
  38. package/dist/esm/audio/dsp/fft.d.ts +22 -0
  39. package/dist/esm/audio/dsp/mel.d.ts +43 -0
  40. package/dist/esm/audio/dsp/tempogram.d.ts +51 -0
  41. package/dist/esm/audio/filters/ChorusFilter.d.ts +47 -0
  42. package/dist/esm/audio/filters/ChorusFilter.js +139 -0
  43. package/dist/esm/audio/filters/ChorusFilter.js.map +1 -0
  44. package/dist/esm/audio/filters/CompressorFilter.d.ts +31 -0
  45. package/dist/esm/audio/filters/CompressorFilter.js +97 -0
  46. package/dist/esm/audio/filters/CompressorFilter.js.map +1 -0
  47. package/dist/esm/audio/filters/DelayFilter.d.ts +23 -0
  48. package/dist/esm/audio/filters/DelayFilter.js +100 -0
  49. package/dist/esm/audio/filters/DelayFilter.js.map +1 -0
  50. package/dist/esm/audio/filters/DuckingFilter.d.ts +31 -0
  51. package/dist/esm/audio/filters/DuckingFilter.js +152 -0
  52. package/dist/esm/audio/filters/DuckingFilter.js.map +1 -0
  53. package/dist/esm/audio/filters/EqualizerFilter.d.ts +29 -0
  54. package/dist/esm/audio/filters/EqualizerFilter.js +94 -0
  55. package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -0
  56. package/dist/esm/audio/filters/GranularFilter.d.ts +56 -0
  57. package/dist/esm/audio/filters/GranularFilter.js +170 -0
  58. package/dist/esm/audio/filters/GranularFilter.js.map +1 -0
  59. package/dist/esm/audio/filters/HighpassFilter.d.ts +19 -0
  60. package/dist/esm/audio/filters/HighpassFilter.js +62 -0
  61. package/dist/esm/audio/filters/HighpassFilter.js.map +1 -0
  62. package/dist/esm/audio/filters/LowpassFilter.d.ts +19 -0
  63. package/dist/esm/audio/filters/LowpassFilter.js +62 -0
  64. package/dist/esm/audio/filters/LowpassFilter.js.map +1 -0
  65. package/dist/esm/audio/filters/PitchShiftFilter.d.ts +42 -0
  66. package/dist/esm/audio/filters/PitchShiftFilter.js +130 -0
  67. package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -0
  68. package/dist/esm/audio/filters/ReverbFilter.d.ts +24 -0
  69. package/dist/esm/audio/filters/ReverbFilter.js +107 -0
  70. package/dist/esm/audio/filters/ReverbFilter.js.map +1 -0
  71. package/dist/esm/audio/filters/VocoderFilter.d.ts +38 -0
  72. package/dist/esm/audio/filters/VocoderFilter.js +163 -0
  73. package/dist/esm/audio/filters/VocoderFilter.js.map +1 -0
  74. package/dist/esm/audio/filters/WorkletFilter.d.ts +46 -0
  75. package/dist/esm/audio/filters/WorkletFilter.js +101 -0
  76. package/dist/esm/audio/filters/WorkletFilter.js.map +1 -0
  77. package/dist/esm/audio/filters/index.d.ts +12 -0
  78. package/dist/esm/audio/index.d.ts +15 -1
  79. package/dist/esm/audio/worklet/registerWorklet.d.ts +10 -0
  80. package/dist/esm/audio/worklet/registerWorklet.js +44 -0
  81. package/dist/esm/audio/worklet/registerWorklet.js.map +1 -0
  82. package/dist/esm/core/Application.d.ts +19 -0
  83. package/dist/esm/core/Application.js +76 -2
  84. package/dist/esm/core/Application.js.map +1 -1
  85. package/dist/esm/core/SceneNode.d.ts +9 -1
  86. package/dist/esm/core/SceneNode.js +44 -6
  87. package/dist/esm/core/SceneNode.js.map +1 -1
  88. package/dist/esm/core/Time.js +1 -1
  89. package/dist/esm/core/index.d.ts +0 -1
  90. package/dist/esm/debug/BoundingBoxesLayer.d.ts +18 -0
  91. package/dist/esm/debug/BoundingBoxesLayer.js +128 -0
  92. package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -0
  93. package/dist/esm/debug/DebugLayer.d.ts +29 -0
  94. package/dist/esm/debug/DebugLayer.js +26 -0
  95. package/dist/esm/debug/DebugLayer.js.map +1 -0
  96. package/dist/esm/debug/DebugOverlay.d.ts +48 -0
  97. package/dist/esm/debug/DebugOverlay.js +117 -0
  98. package/dist/esm/debug/DebugOverlay.js.map +1 -0
  99. package/dist/esm/debug/HitTestLayer.d.ts +23 -0
  100. package/dist/esm/debug/HitTestLayer.js +109 -0
  101. package/dist/esm/debug/HitTestLayer.js.map +1 -0
  102. package/dist/esm/debug/PerformanceLayer.d.ts +21 -0
  103. package/dist/esm/debug/PerformanceLayer.js +175 -0
  104. package/dist/esm/debug/PerformanceLayer.js.map +1 -0
  105. package/dist/esm/debug/PointerStackLayer.d.ts +23 -0
  106. package/dist/esm/debug/PointerStackLayer.js +152 -0
  107. package/dist/esm/debug/PointerStackLayer.js.map +1 -0
  108. package/dist/esm/debug/index.d.ts +6 -0
  109. package/dist/esm/debug/index.js +7 -0
  110. package/dist/esm/debug/index.js.map +1 -0
  111. package/dist/esm/index.js +28 -2
  112. package/dist/esm/index.js.map +1 -1
  113. package/dist/esm/input/InputManager.d.ts +10 -0
  114. package/dist/esm/input/InputManager.js +35 -5
  115. package/dist/esm/input/InputManager.js.map +1 -1
  116. package/dist/esm/input/InteractionEvent.d.ts +18 -0
  117. package/dist/esm/input/InteractionEvent.js +29 -0
  118. package/dist/esm/input/InteractionEvent.js.map +1 -0
  119. package/dist/esm/input/InteractionManager.d.ts +134 -0
  120. package/dist/esm/input/InteractionManager.js +546 -0
  121. package/dist/esm/input/InteractionManager.js.map +1 -0
  122. package/dist/esm/input/index.d.ts +2 -0
  123. package/dist/esm/input/interaction-hooks.d.ts +34 -0
  124. package/dist/esm/input/interaction-hooks.js +35 -0
  125. package/dist/esm/input/interaction-hooks.js.map +1 -0
  126. package/dist/esm/math/Circle.d.ts +12 -2
  127. package/dist/esm/math/Circle.js +82 -14
  128. package/dist/esm/math/Circle.js.map +1 -1
  129. package/dist/esm/math/Interval.js +1 -1
  130. package/dist/esm/math/ObservableVector.d.ts +2 -2
  131. package/dist/esm/math/ObservableVector.js +4 -2
  132. package/dist/esm/math/ObservableVector.js.map +1 -1
  133. package/dist/esm/math/Polygon.d.ts +15 -1
  134. package/dist/esm/math/Polygon.js +58 -6
  135. package/dist/esm/math/Polygon.js.map +1 -1
  136. package/dist/esm/math/Quadtree.d.ts +47 -0
  137. package/dist/esm/math/Quadtree.js +168 -0
  138. package/dist/esm/math/Quadtree.js.map +1 -0
  139. package/dist/esm/math/Random.js +1 -1
  140. package/dist/esm/math/Size.js +1 -1
  141. package/dist/esm/math/Vector.js +1 -1
  142. package/dist/esm/math/collision-detection.js +4 -1
  143. package/dist/esm/math/collision-detection.js.map +1 -1
  144. package/dist/esm/math/index.d.ts +1 -0
  145. package/dist/esm/particles/ParticleSystem.js +1 -0
  146. package/dist/esm/particles/ParticleSystem.js.map +1 -1
  147. package/dist/esm/particles/affectors/TorqueAffector.js +1 -1
  148. package/dist/esm/rendering/Container.d.ts +1 -0
  149. package/dist/esm/rendering/Container.js +19 -0
  150. package/dist/esm/rendering/Container.js.map +1 -1
  151. package/dist/esm/rendering/RenderNode.d.ts +27 -0
  152. package/dist/esm/rendering/RenderNode.js +44 -0
  153. package/dist/esm/rendering/RenderNode.js.map +1 -1
  154. package/dist/esm/rendering/View.d.ts +6 -4
  155. package/dist/esm/rendering/View.js +12 -2
  156. package/dist/esm/rendering/View.js.map +1 -1
  157. package/dist/esm/rendering/filters/WebGl2ShaderFilter.d.ts +109 -0
  158. package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +268 -0
  159. package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -0
  160. package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +111 -0
  161. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +397 -0
  162. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -0
  163. package/dist/esm/rendering/index.d.ts +3 -0
  164. package/dist/esm/rendering/mesh/Mesh.js +1 -0
  165. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  166. package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.d.ts +34 -0
  167. package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js +60 -0
  168. package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js.map +1 -0
  169. package/dist/esm/rendering/sprite/Sprite.d.ts +6 -1
  170. package/dist/esm/rendering/sprite/Sprite.js +41 -19
  171. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  172. package/dist/esm/rendering/video/Video.d.ts +4 -0
  173. package/dist/esm/rendering/video/Video.js +32 -4
  174. package/dist/esm/rendering/video/Video.js.map +1 -1
  175. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +4 -4
  176. package/dist/esm/rendering/webgl2/WebGl2Backend.js +7 -16
  177. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  178. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +10 -8
  179. package/dist/esm/rendering/webgpu/WebGpuBackend.js +30 -40
  180. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  181. package/dist/exo.esm.js +7764 -2453
  182. package/dist/exo.esm.js.map +1 -1
  183. package/package.json +14 -2
  184. package/dist/esm/core/Quadtree.d.ts +0 -20
  185. package/dist/esm/core/Quadtree.js +0 -86
  186. package/dist/esm/core/Quadtree.js.map +0 -1
@@ -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
- _startTime = 0;
13
- _currentTime = 0;
14
- _sourceNode = null;
15
- _poolSize = 1;
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 ?? 1));
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, 10);
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
- if (!this._audioSetup || this._paused || !this._sourceNode) {
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, 10);
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.applyOptions(options);
163
- }
164
- if (!this._paused) {
165
- return this;
241
+ if (options?.bus !== undefined) {
242
+ this.bus = options.bus;
166
243
  }
167
- if (this._audioSetup) {
168
- this.createSourceNode(this._audioSetup);
169
- }
170
- this._paused = false;
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.muted !== undefined) {
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._stopPrimarySource();
264
- this._stopPooledSources();
360
+ this._stopAllPooled();
265
361
  this._queuedPooledPlays.length = 0;
266
362
  this._sprites.clear();
267
363
  }
268
- createSourceNode(setup) {
269
- const { audioContext } = setup;
270
- this._stopPrimarySource();
271
- const sourceNode = this._createBufferSourceNode(setup, {
272
- offset: Math.min(Math.max(0, this._currentTime), Math.max(0, this.duration)),
273
- duration: undefined,
274
- loop: this._loop,
275
- loopStart: 0,
276
- loopEnd: this.duration,
277
- playbackRate: this._playbackRate,
278
- });
279
- sourceNode.onended = () => {
280
- if (this._sourceNode !== sourceNode) {
281
- return;
282
- }
283
- this._sourceNode = null;
284
- this._startTime = 0;
285
- this._currentTime = 0;
286
- if (!this._paused) {
287
- this._paused = true;
288
- this.onStop.dispatch();
289
- }
290
- };
291
- this._sourceNode = sourceNode;
292
- this._startTime = audioContext.currentTime;
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, 10);
297
- gainNode.connect(audioContext.destination);
298
- this._audioSetup = { audioContext, gainNode };
299
- if (!this._paused) {
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(sourceNode);
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(sourceNode);
466
+ this._pooledSources.push(pooledSource);
334
467
  this._trimPooledSources();
335
468
  }
336
- _trimPooledSources() {
337
- while (this._pooledSources.length > this._poolSize) {
338
- const oldestSource = this._pooledSources.shift();
339
- if (!oldestSource) {
340
- continue;
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
- _stopPrimarySource() {
347
- if (!this._sourceNode) {
348
- return;
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
- _stopPooledSources() {
356
- for (const sourceNode of this._pooledSources) {
357
- sourceNode.onended = null;
358
- this._stopSourceNode(sourceNode);
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":";;;;AAoCM,MAAO,KAAM,SAAQ,aAAa,CAAA;AACnB,IAAA,YAAY;IACZ,cAAc,GAAiC,EAAE;IACjD,kBAAkB,GAA4B,EAAE;AAChD,IAAA,QAAQ,GAAG,IAAI,GAAG,EAAqC;IAEhE,WAAW,GAA2B,IAAI;IAC1C,OAAO,GAAG,IAAI;IACd,UAAU,GAAG,CAAC;IACd,YAAY,GAAG,CAAC;IAChB,WAAW,GAAiC,IAAI;IAChD,SAAS,GAAG,CAAC;AAErB,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO;IACvB;IAEA,IAAW,MAAM,CAAC,MAAe,EAAA;QAC7B,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,KAAK,EAAE;QAChB;aAAO;YACH,IAAI,CAAC,IAAI,EAAE;QACf;IACJ;AAEA,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,QAAQ,IAAI,IAAI;IAC7C;AAEA,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAW,QAAQ,CAAC,QAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC9B;IAEA,WAAA,CAAmB,WAAwB,EAAE,OAAA,GAAwB,EAAE,EAAA;AACnE,QAAA,KAAK,CAAC;YACF,QAAQ,EAAE,WAAW,CAAC,QAAQ;AAC9B,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,KAAK,EAAE,KAAK;AACf,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW;QAE/B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO;AAEzD,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;QAEvD,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;QACtC;QAEA,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC5B;QAEA,IAAI,mBAAmB,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,CAAC;QACjD;aAAO;YACH,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC9D;IACJ;AAEO,IAAA,SAAS,CAAC,KAAa,EAAA;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAEjC,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;AACzB,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AAErB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,WAAW;YACnD,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;QACxF;AAEA,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,OAAO,CAAC,IAAa,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAEjB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI;YAE5B,IAAI,IAAI,EAAE;AACN,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC;gBAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ;YAC5C;QACJ;AAEA,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,eAAe,CAAC,KAAa,EAAA;QAChC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;AAE1C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa;QAC5D;AAEA,QAAA,OAAO,IAAI;IACf;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACxD,OAAO,IAAI,CAAC,YAAY;QAC5B;QAEA,OAAO,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC;IACnH;AAEO,IAAA,OAAO,CAAC,WAAmB,EAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC;QAErC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAExB,YAAA,OAAO,IAAI;QACf;QAEA,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,IAAI,EAAE;AAEX,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,QAAQ,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AAEnB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,WAAW;YACnD,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;QACxF;AAEA,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,WAAW,CAAC,QAAgB,EAAA;AAC/B,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,EAAE;AACvC,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,kBAAkB;QACnC,IAAI,CAAC,kBAAkB,EAAE;AAEzB,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,UAAU,CAAC,OAAkD,EAAA;AAChE,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AAErB,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;QACjC;AAEA,QAAA,OAAO,IAAI;IACf;IAEO,YAAY,CAAC,IAAY,EAAE,IAAqB,EAAA;QACnD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;QACpE;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AAEpB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,CAAA,cAAA,EAAiB,IAAI,CAAA,6BAAA,EAAgC,KAAK,CAAA,EAAA,CAAI,CAAC;QACnF;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,CAAA,cAAA,EAAiB,IAAI,CAAA,2BAAA,EAA8B,GAAG,CAAA,EAAA,CAAI,CAAC;QAC/E;AAEA,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,cAAA,EAAiB,IAAI,CAAA,UAAA,EAAa,GAAG,CAAA,gCAAA,EAAmC,IAAI,CAAC,QAAQ,CAAA,EAAA,CAAI,CAAC;QAC9G;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;YACpB,KAAK;YACL,GAAG;AACH,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK;AAC3B,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,SAAS,CAAC,IAAY,EAAA;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IAClC;AAEO,IAAA,YAAY,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAE1B,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,IAAI,CAAC,OAAkC,EAAA;QAC1C,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;QAC9B;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;QAC3C;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAEvB,QAAA,OAAO,IAAI;IACf;IAEO,UAAU,CAAC,UAAoC,EAAE,EAAA;AACpD,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;AAC/E,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AAC7C,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK;AAElC,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QAClC;AAEA,QAAA,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC;AAEA,QAAA,IAAI,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;QAE5D,IAAI,CAAC,kBAAkB,CAAC;YACpB,MAAM;YACN,QAAQ;YACR,IAAI;AACJ,YAAA,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,YAAY;AACf,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAEvB,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,UAAU,CAAC,IAAY,EAAE,OAAA,GAAoC,EAAE,EAAA;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAEpC,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAA,iBAAA,CAAmB,CAAC;QAC7D;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AACjD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU;AAEtC,QAAA,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CACX,CAAA,cAAA,EAAiB,IAAI,aAAa,UAAU,CAAA,0BAAA,EAA6B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAA,GAAA,CAAK,CACtG;QACL;QAEA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;AACtC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;AAE/E,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QAClC;AAEA,QAAA,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC;QAEA,IAAI,CAAC,kBAAkB,CAAC;YACpB,MAAM;AACN,YAAA,QAAQ,EAAE,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;YAChD,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,OAAO,EAAE,IAAI,CAAC,GAAG;YACjB,YAAY;AACf,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAEvB,QAAA,OAAO,IAAI;IACf;IAEO,UAAU,GAAA;QACb,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAChC,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC1B;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;AAElC,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,KAAK,CAAC,OAAkC,EAAA;QAC3C,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;QAC9B;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD,YAAA,OAAO,IAAI;QACf;QAEA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;AACnC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW;AAEpC,YAAA,IAAI,CAAC,YAAY,GAAG,QAAQ,GAAG,CAAC,IAAI,WAAW,GAAG,QAAQ,IAAI,CAAC;QACnE;QAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;QAEvD,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;QAElC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,gBAAgB;AAEpD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QAEnB,IAAI,UAAU,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC1B;AAEA,QAAA,OAAO,IAAI;IACf;IAEgB,OAAO,GAAA;QACnB,KAAK,CAAC,OAAO,EAAE;AAEf,QAAA,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC;AAExC,QAAA,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE;QACvC,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,kBAAkB,EAAE;AAEzB,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACzB;AAEQ,IAAA,gBAAgB,CAAC,KAAsB,EAAA;AAC3C,QAAA,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK;QAE9B,IAAI,CAAC,kBAAkB,EAAE;AAEzB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE;YACnD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5E,YAAA,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,IAAI,CAAC,KAAK;AAChB,YAAA,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,YAAY,EAAE,IAAI,CAAC,aAAa;AACnC,SAAA,CAAC;AAEF,QAAA,UAAU,CAAC,OAAO,GAAG,MAAW;AAC5B,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE;gBACjC;YACJ;AAEA,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AAErB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC1B;AACJ,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,WAAW;IAC9C;AAEQ,IAAA,qBAAqB,CAAC,YAA0B,EAAA;AACpD,QAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,EAAE;QAC1C,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;AACzF,QAAA,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;QAE1C,IAAI,CAAC,WAAW,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE;AAE7C,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;QAC3C;QAEA,IAAI,CAAC,uBAAuB,EAAE;IAClC;AAEQ,IAAA,kBAAkB,CAAC,IAAsB,EAAA;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;YAElC;QACJ;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAC7B;IAEQ,uBAAuB,GAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3D;QACJ;QAEA,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAE3C,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;AAElC,QAAA,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAC7B;IACJ;AAEQ,IAAA,cAAc,CAAC,IAAsB,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB;QACJ;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;AAEvE,QAAA,UAAU,CAAC,OAAO,GAAG,MAAW;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC;AAErD,YAAA,IAAI,KAAK,KAAK,EAAE,EAAE;gBACd,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC;YAEA,UAAU,CAAC,UAAU,EAAE;AAC3B,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,kBAAkB,EAAE;IAC7B;IAEQ,kBAAkB,GAAA;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YAEhD,IAAI,CAAC,YAAY,EAAE;gBACf;YACJ;AAEA,YAAA,YAAY,CAAC,OAAO,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;QACtC;IACJ;IAEQ,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB;QACJ;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;AAEtC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;IACvB;IAEQ,kBAAkB,GAAA;AACtB,QAAA,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE;AAC1C,YAAA,UAAU,CAAC,OAAO,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;QACpC;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;IAClC;AAEQ,IAAA,eAAe,CAAC,UAAiC,EAAA;AACrD,QAAA,IAAI;AACA,YAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACtB;AAAE,QAAA,MAAM;;QAER;QAEA,UAAU,CAAC,UAAU,EAAE;IAC3B;IAEQ,uBAAuB,CAAC,KAAsB,EAAE,IAAsB,EAAA;AAC1E,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK;QAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,EAAE;AAE1D,QAAA,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY;AACrC,QAAA,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC3B,UAAU,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY;AAEjD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC;YAC1C,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ;QACtD;AAEA,QAAA,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;AAE5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,CAAC,EAAE;YACtD,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC9C;aAAO;YACH,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;QACpC;AAEA,QAAA,OAAO,UAAU;IACrB;AACH;;;;"}
1
+ {"version":3,"file":"Sound.js","sources":["../../../../src/audio/Sound.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAQA;;;;;;;AAOG;IACS;AAAZ,CAAA,UAAY,iBAAiB,EAAA;;AAEzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,GAAA,MAAwB;;AAExB,IAAA,iBAAA,CAAA,mBAAA,CAAA,GAAA,KAAyB;AACzB;;;;AAIG;AACH,IAAA,iBAAA,CAAA,gBAAA,CAAA,GAAA,UAA2B;AAC/B,CAAC,EAXW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;AAmEvB,MAAO,KAAM,SAAQ,aAAa,CAAA;AACnB,IAAA,YAAY;IACZ,cAAc,GAAwB,EAAE;IACxC,kBAAkB,GAA4B,EAAE;AAChD,IAAA,QAAQ,GAAG,IAAI,GAAG,EAAqC;IAEhE,WAAW,GAA2B,IAAI;IAC1C,OAAO,GAAG,IAAI;IACd,SAAS,GAAG,CAAC;AACb,IAAA,aAAa,GAAsB,iBAAiB,CAAC,eAAe;IACpE,SAAS,GAAW,CAAC;IACrB,SAAS,GAAkB,IAAI;IAC/B,SAAS,GAAkB,IAAI;IAC/B,WAAW,GAAsB,IAAI;AAE7C,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO;IACvB;IAEA,IAAW,MAAM,CAAC,MAAe,EAAA;QAC7B,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,KAAK,EAAE;QAChB;aAAO;YACH,IAAI,CAAC,IAAI,EAAE;QACf;IACJ;AAEA,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,QAAQ,IAAI,IAAI;IAC7C;AAEA,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAW,QAAQ,CAAC,QAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC9B;AAEA;;;AAGG;AACH,IAAA,IAAW,YAAY,GAAA;QACnB,OAAO,IAAI,CAAC,aAAa;IAC7B;IAEA,IAAW,YAAY,CAAC,QAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;IACjC;AAEA;;;;AAIG;AACH,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAW,QAAQ,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IAC1B;AAEA,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAW,QAAQ,CAAC,KAA+C,EAAA;AAC/D,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACxB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;gBACrB,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,eAAe,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC;YACnD;YACA;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;;AAEzB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,eAAe,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;QACjD;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACxC;IACJ;AAEA,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAW,QAAQ,CAAC,KAA+C,EAAA;AAC/D,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACxB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACzB;QACJ;aAAO;AACH,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACjD;iBAAO;AACH,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACxC;QACJ;IACJ;IAEA,WAAA,CAAmB,WAAwB,EAAE,OAAA,GAAwB,EAAE,EAAA;AACnE,QAAA,KAAK,CAAC;YACF,QAAQ,EAAE,WAAW,CAAC,QAAQ;AAC9B,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,KAAK,EAAE,KAAK;AACf,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW;AAE/B,QAAA,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO;AAEjF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AAEvD,QAAA,IAAI,YAAY,KAAK,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,aAAa,GAAG,YAAY;QACrC;AAEA,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QAC7B;QAEA,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;QACtC;QAEA,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC5B;QAEA,IAAI,mBAAmB,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,CAAC;QACjD;aAAO;YACH,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC9D;IACJ;AAEO,IAAA,SAAS,CAAC,KAAa,EAAA;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAEjC,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;AACzB,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AAErB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,WAAW;YACnD,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC;QAC1F;AAEA,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,OAAO,CAAC,IAAa,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAEjB,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,eAAe,CAAC,KAAa,EAAA;QAChC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;AAE1C,QAAA,OAAO,IAAI;IACf;IAEO,OAAO,GAAA;AACV,QAAA,OAAO,CAAC;IACZ;AAEO,IAAA,OAAO,CAAC,WAAmB,EAAA;AAE9B,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,QAAQ,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AAEnB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,WAAW;YACnD,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC;QAC1F;AAEA,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,WAAW,CAAC,QAAgB,EAAA;AAC/B,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,EAAE;AACvC,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,kBAAkB;QACnC,IAAI,CAAC,kBAAkB,EAAE;AAEzB,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,UAAU,CAAC,OAAkD,EAAA;AAChE,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AAErB,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;QACjC;AAEA,QAAA,OAAO,IAAI;IACf;IAEO,YAAY,CAAC,IAAY,EAAE,IAAqB,EAAA;QACnD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;QACpE;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AAEpB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,CAAA,cAAA,EAAiB,IAAI,CAAA,6BAAA,EAAgC,KAAK,CAAA,EAAA,CAAI,CAAC;QACnF;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,CAAA,cAAA,EAAiB,IAAI,CAAA,2BAAA,EAA8B,GAAG,CAAA,EAAA,CAAI,CAAC;QAC/E;AAEA,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,cAAA,EAAiB,IAAI,CAAA,UAAA,EAAa,GAAG,CAAA,gCAAA,EAAmC,IAAI,CAAC,QAAQ,CAAA,EAAA,CAAI,CAAC;QAC9G;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;YACpB,KAAK;YACL,GAAG;AACH,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK;AAC3B,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,SAAS,CAAC,IAAY,EAAA;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IAClC;AAEO,IAAA,YAAY,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAE1B,QAAA,OAAO,IAAI;IACf;AAEA;;;;;;AAMG;AACI,IAAA,IAAI,CAAC,OAAqB,EAAA;AAC7B,QAAA,IAAI,OAAO,EAAE,GAAG,KAAK,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;QAC1B;AAEA,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;AAChF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK;AAExC,QAAA,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QAClC;AAEA,QAAA,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC;AAEA,QAAA,IAAI,OAAO,EAAE,OAAO,EAAE;YAClB,IAAI,CAAC,cAAc,EAAE;QACzB;AAEA,QAAA,IAAI,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;QAE5D,IAAI,CAAC,kBAAkB,CAAC;YACpB,MAAM;YACN,QAAQ;YACR,IAAI;AACJ,YAAA,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,YAAY;AACf,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAEvB,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,UAAU,CAAC,IAAY,EAAE,OAAA,GAAoC,EAAE,EAAA;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAEpC,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAA,iBAAA,CAAmB,CAAC;QAC7D;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AACjD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU;AAEtC,QAAA,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CACX,CAAA,cAAA,EAAiB,IAAI,aAAa,UAAU,CAAA,0BAAA,EAA6B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAA,GAAA,CAAK,CACtG;QACL;QAEA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;AACtC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;AAE/E,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QAClC;AAEA,QAAA,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC;QAEA,IAAI,CAAC,kBAAkB,CAAC;YACpB,MAAM;AACN,YAAA,QAAQ,EAAE,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;YAChD,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,OAAO,EAAE,IAAI,CAAC,GAAG;YACjB,YAAY;AACf,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAEvB,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,KAAK,CAAC,OAAkC,EAAA;QAC3C,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;QAC9B;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD,YAAA,OAAO,IAAI;QACf;QAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;QACvD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,gBAAgB;QAEpD,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;AAElC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QAEnB,IAAI,UAAU,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC1B;AAEA,QAAA,OAAO,IAAI;IACf;IAEmB,cAAc,GAAA;QAC7B,OAAO,IAAI,CAAC,WAAW;IAC3B;IAEmB,WAAW,GAAA;AAC1B,QAAA,OAAO,eAAe,EAAE,CAAC,KAAK;IAClC;IAEmB,kBAAkB,GAAA;AACjC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;;YAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ;YAC9D,QAAQ,CAAC,UAAU,EAAE;QACzB;IACJ;IAEmB,aAAa,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ;YAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YAC1C,IAAI,SAAS,EAAE;AACX,gBAAA,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;YAC/B;iBAAO;gBACH,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC;YAC/D;QACJ;IACJ;IAEgB,OAAO,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QAC3B;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,eAAe,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC;QACnD;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACzB;QAEA,KAAK,CAAC,OAAO,EAAE;AAEf,QAAA,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC;AAExC,QAAA,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE;QACvC,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACzB;;IAGO,YAAY,GAAA;QACf,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;YAAE;AAC1D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO;AACpC,QAAA,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAKlB;AACF,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AAClB,YAAA,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACpD,YAAA,MAAM,CAAC,SAAU,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,SAAU,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1C;AAAO,aAAA,IAAI,MAAM,CAAC,WAAW,EAAE;AAC3B,YAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7D;IACJ;IAEQ,aAAa,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;YAAE;AACpD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY;AACzC,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE;AACjC,QAAA,MAAM,CAAC,YAAY,GAAG,YAAY;AAClC,QAAA,MAAM,CAAC,aAAa,GAAG,QAAQ;AAC/B,QAAA,MAAM,CAAC,WAAW,GAAG,IAAI;AACzB,QAAA,MAAM,CAAC,WAAW,GAAG,EAAE;AACvB,QAAA,MAAM,CAAC,aAAa,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM;;AAGzB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE;QACtC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACzC,IAAI,QAAQ,EAAE;AACV,YAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC5B;aAAO;AACH,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACnC;IACJ;IAEQ,gBAAgB,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;YAAE;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE;AACtC,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;QAGvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACzC,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC/C;aAAO;AACH,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC;QAChF;IACJ;AAEQ,IAAA,qBAAqB,CAAC,YAA0B,EAAA;AACpD,QAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,EAAE;QAC1C,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC;QAE3F,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC1C,IAAI,SAAS,EAAE;AACX,YAAA,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;QAC/B;aAAO;AACH,YAAA,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;QAC9C;QAEA,IAAI,CAAC,WAAW,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE;QAE7C,IAAI,CAAC,uBAAuB,EAAE;IAClC;AAEQ,IAAA,kBAAkB,CAAC,IAAsB,EAAA;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;YAElC;QACJ;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAC7B;IAEQ,uBAAuB,GAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3D;QACJ;QAEA,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAE3C,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;AAElC,QAAA,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAC7B;IACJ;AAEQ,IAAA,cAAc,CAAC,IAAsB,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB;QACJ;AAEA,QAAA,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,WAAW;AACzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;AACvE,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW;AAC1C,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;QAE5E,MAAM,YAAY,GAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE;AAErF,QAAA,UAAU,CAAC,OAAO,GAAG,MAAW;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC;AAEvD,YAAA,IAAI,KAAK,KAAK,EAAE,EAAE;gBACd,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC;YAEA,UAAU,CAAC,UAAU,EAAE;AAEvB,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1E,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACvB;AACJ,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,kBAAkB,EAAE;IAC7B;AAEA;;;AAGG;IACK,mBAAmB,GAAA;AACvB,QAAA,QAAQ,IAAI,CAAC,aAAa;AACtB,YAAA,KAAK,iBAAiB,CAAC,iBAAiB,EAAE;AACtC,gBAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;YACnC;YACA,KAAK,iBAAiB,CAAC,cAAc;;;;YAIrC,KAAK,iBAAiB,CAAC,eAAe;AACtC,YAAA;gBACI,OAAO,CAAC,CAAC;;IAErB;AAEA;;;AAGG;IACK,iBAAiB,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,CAAC;QAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW;QACrD,IAAI,YAAY,GAAG,QAAQ;QAC3B,IAAI,QAAQ,GAAG,CAAC;AAEhB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AAClC,YAAA,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,SAAS;AACnC,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC,iBAAiB,GAAG,OAAO;AAEjD,YAAA,IAAI,SAAS,GAAG,YAAY,EAAE;gBAC1B,YAAY,GAAG,SAAS;gBACxB,QAAQ,GAAG,CAAC;YAChB;QACJ;AAEA,QAAA,OAAO,QAAQ;IACnB;IAEQ,kBAAkB,GAAA;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAChD,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;YAE/C,IAAI,CAAC,MAAM,EAAE;gBACT;YACJ;YAEA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AAC1C,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;QACrC;IACJ;;IAGQ,cAAc,GAAA;AAClB,QAAA,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,YAAY,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI;AAChC,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC;QAC3C;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;IAClC;AAEQ,IAAA,eAAe,CAAC,UAAiC,EAAA;AACrD,QAAA,IAAI;AACA,YAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACtB;AAAE,QAAA,MAAM;;QAER;QAEA,UAAU,CAAC,UAAU,EAAE;IAC3B;IAEQ,uBAAuB,CAAC,KAAsB,EAAE,IAAsB,EAAA;AAC1E,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK;QAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,EAAE;AAE1D,QAAA,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY;AACrC,QAAA,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC3B,UAAU,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY;AAEjD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC;YAC1C,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ;QACtD;AAEA,QAAA,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;AAE5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,CAAC,EAAE;YACtD,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC9C;aAAO;YACH,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;QACpC;AAEA,QAAA,OAAO,UAAU;IACrB;AACH;;;;"}
@@ -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;