@needle-tools/engine 5.1.0-alpha.7 → 5.1.0-alpha.9

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 (115) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/components.needle.json +1 -1
  3. package/dist/{materialx-CE2sUv2B.umd.cjs → materialx-B47Bz-xs.umd.cjs} +1 -1
  4. package/dist/{materialx-u1EqYrhu.min.js → materialx-B85WjP7E.min.js} +1 -1
  5. package/dist/{materialx-vyB2Zbt4.js → materialx-jkHmVPez.js} +1 -1
  6. package/dist/{needle-engine.bundle-BNj2FJS7.min.js → needle-engine.bundle-BotdnwVF.min.js} +173 -173
  7. package/dist/{needle-engine.bundle-tHGdwr9a.umd.cjs → needle-engine.bundle-DagaNrZK.umd.cjs} +147 -147
  8. package/dist/{needle-engine.bundle-BwS5IsLn.js → needle-engine.bundle-mtqHZ45d.js} +7832 -7624
  9. package/dist/needle-engine.d.ts +301 -23
  10. package/dist/needle-engine.js +575 -565
  11. package/dist/needle-engine.min.js +1 -1
  12. package/dist/needle-engine.umd.cjs +1 -1
  13. package/dist/{vendor-ButPLzor.umd.cjs → vendor-1UvpPPSB.umd.cjs} +2 -2
  14. package/dist/{vendor-DqZC4Is7.min.js → vendor-BQ2Vuntm.min.js} +4 -4
  15. package/dist/{vendor-DkWSNjMV.js → vendor-BslSKZPo.js} +113 -106
  16. package/lib/engine/api.d.ts +1 -1
  17. package/lib/engine/api.js +1 -1
  18. package/lib/engine/api.js.map +1 -1
  19. package/lib/engine/engine_audio.d.ts +30 -1
  20. package/lib/engine/engine_audio.js +57 -13
  21. package/lib/engine/engine_audio.js.map +1 -1
  22. package/lib/engine/engine_init.js +2 -2
  23. package/lib/engine/engine_init.js.map +1 -1
  24. package/lib/engine/engine_instantiate_resolve.js +40 -10
  25. package/lib/engine/engine_instantiate_resolve.js.map +1 -1
  26. package/lib/engine/engine_license.d.ts +7 -7
  27. package/lib/engine/engine_license.js +72 -72
  28. package/lib/engine/engine_license.js.map +1 -1
  29. package/lib/engine/engine_math.d.ts +1 -1
  30. package/lib/engine/engine_math.js +10 -4
  31. package/lib/engine/engine_math.js.map +1 -1
  32. package/lib/engine/engine_networking_blob.js +3 -3
  33. package/lib/engine/engine_networking_blob.js.map +1 -1
  34. package/lib/engine/engine_scenedata.js +7 -0
  35. package/lib/engine/engine_scenedata.js.map +1 -1
  36. package/lib/engine/engine_serialization_core.js +7 -2
  37. package/lib/engine/engine_serialization_core.js.map +1 -1
  38. package/lib/engine/engine_time_utils.d.ts +10 -6
  39. package/lib/engine/engine_time_utils.js +10 -6
  40. package/lib/engine/engine_time_utils.js.map +1 -1
  41. package/lib/engine/engine_utils_qrcode.js +2 -2
  42. package/lib/engine/engine_utils_qrcode.js.map +1 -1
  43. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +2 -2
  44. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js.map +1 -1
  45. package/lib/engine/webcomponents/needle menu/needle-menu.js +5 -5
  46. package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
  47. package/lib/engine/webcomponents/needle-engine.js +2 -2
  48. package/lib/engine/webcomponents/needle-engine.js.map +1 -1
  49. package/lib/engine/webcomponents/needle-engine.loading.js +2 -2
  50. package/lib/engine/webcomponents/needle-engine.loading.js.map +1 -1
  51. package/lib/engine/xr/TempXRContext.js +2 -2
  52. package/lib/engine/xr/TempXRContext.js.map +1 -1
  53. package/lib/engine-components/AudioSource.d.ts +46 -2
  54. package/lib/engine-components/AudioSource.js +268 -60
  55. package/lib/engine-components/AudioSource.js.map +1 -1
  56. package/lib/engine-components/DragControls.js +2 -2
  57. package/lib/engine-components/DragControls.js.map +1 -1
  58. package/lib/engine-components/DragControlsConstraints.d.ts +0 -15
  59. package/lib/engine-components/DragControlsConstraints.js +14 -8
  60. package/lib/engine-components/DragControlsConstraints.js.map +1 -1
  61. package/lib/engine-components/EventList.js +1 -1
  62. package/lib/engine-components/EventList.js.map +1 -1
  63. package/lib/engine-components/SceneSwitcher.js +17 -2
  64. package/lib/engine-components/SceneSwitcher.js.map +1 -1
  65. package/lib/engine-components/codegen/components.d.ts +10 -0
  66. package/lib/engine-components/codegen/components.js +10 -0
  67. package/lib/engine-components/codegen/components.js.map +1 -1
  68. package/lib/engine-components/export/usdz/USDZExporter.js +4 -4
  69. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
  70. package/lib/engine-components/timeline/PlayableDirector.d.ts +6 -0
  71. package/lib/engine-components/timeline/PlayableDirector.js +25 -12
  72. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  73. package/lib/engine-components/web/ScrollFollow.d.ts +33 -0
  74. package/lib/engine-components/web/ScrollFollow.js +164 -22
  75. package/lib/engine-components/web/ScrollFollow.js.map +1 -1
  76. package/lib/needle-app.d.ts +18 -0
  77. package/lib/needle-app.js +19 -0
  78. package/lib/needle-app.js.map +1 -0
  79. package/package.json +3 -2
  80. package/plugins/common/license.js +25 -4
  81. package/plugins/common/needle-engine.js +5 -2
  82. package/plugins/types/userconfig.d.ts +22 -0
  83. package/plugins/vite/dts-generator.d.ts +24 -0
  84. package/plugins/vite/dts-generator.js +40 -7
  85. package/plugins/vite/index.d.ts +2 -0
  86. package/plugins/vite/index.js +17 -0
  87. package/plugins/vite/license.js +4 -4
  88. package/plugins/vite/needle-app.js +78 -5
  89. package/plugins/vite/remote.d.ts +28 -0
  90. package/plugins/vite/remote.js +124 -0
  91. package/src/engine/api.ts +1 -1
  92. package/src/engine/engine_audio.ts +68 -15
  93. package/src/engine/engine_init.ts +2 -2
  94. package/src/engine/engine_instantiate_resolve.ts +37 -10
  95. package/src/engine/engine_license.ts +69 -69
  96. package/src/engine/engine_math.ts +11 -4
  97. package/src/engine/engine_networking_blob.ts +3 -3
  98. package/src/engine/engine_scenedata.ts +7 -2
  99. package/src/engine/engine_serialization_core.ts +7 -2
  100. package/src/engine/engine_time_utils.ts +10 -6
  101. package/src/engine/engine_utils_qrcode.ts +2 -2
  102. package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +2 -2
  103. package/src/engine/webcomponents/needle menu/needle-menu.ts +5 -5
  104. package/src/engine/webcomponents/needle-engine.loading.ts +6 -6
  105. package/src/engine/webcomponents/needle-engine.ts +2 -2
  106. package/src/engine/xr/TempXRContext.ts +2 -2
  107. package/src/engine-components/AudioSource.ts +256 -55
  108. package/src/engine-components/DragControls.ts +3 -2
  109. package/src/engine-components/DragControlsConstraints.ts +16 -8
  110. package/src/engine-components/EventList.ts +1 -1
  111. package/src/engine-components/SceneSwitcher.ts +14 -2
  112. package/src/engine-components/codegen/components.ts +10 -0
  113. package/src/engine-components/export/usdz/USDZExporter.ts +4 -4
  114. package/src/engine-components/timeline/PlayableDirector.ts +23 -12
  115. package/src/engine-components/web/ScrollFollow.ts +168 -22
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { AudioLoader, PositionalAudio } from "three";
7
+ import { PositionalAudio } from "three";
8
8
  import { PositionalAudioHelper } from 'three/examples/jsm/helpers/PositionalAudioHelper.js';
9
9
  import { isDevEnvironment } from "../engine/debug/index.js";
10
10
  import { Application, ApplicationEvents } from "../engine/engine_application.js";
@@ -124,7 +124,14 @@ export class AudioSource extends Behaviour {
124
124
  *
125
125
  * @returns True if the audio is playing, false otherwise
126
126
  */
127
- get isPlaying() { return this.sound?.isPlaying ?? false; }
127
+ get isPlaying() {
128
+ // For the media-element path (string clips and MediaStreams) three.js does NOT maintain
129
+ // sound.isPlaying (hasPlaybackControl is false once a media/stream source is set), so the
130
+ // <audio> element is the source of truth.
131
+ if (this._audioElement)
132
+ return !this._audioElement.paused && !this._audioElement.ended;
133
+ return this.sound?.isPlaying ?? false;
134
+ }
128
135
  /**
129
136
  * The total duration of the currently loaded audio clip in seconds.
130
137
  *
@@ -132,11 +139,14 @@ export class AudioSource extends Behaviour {
132
139
  * @remarks For MediaStream clips, duration is not directly available and will return undefined. If the audio clip has not started loading or is still loading, duration may also be undefined until the audio buffer is ready.
133
140
  */
134
141
  get duration() {
135
- if (this.sound?.buffer?.duration) {
136
- return this.sound.buffer.duration;
142
+ // Media-element path is the primary source of truth for string clips.
143
+ // (NaN/Infinity for MediaStream or before metadata is loaded → treated as "unknown".)
144
+ const elDuration = this._usesMediaElementSource ? this._audioElement?.duration : undefined;
145
+ if (elDuration && isFinite(elDuration)) {
146
+ return elDuration;
137
147
  }
138
- else if (this._audioElement?.duration) {
139
- return this._audioElement.duration;
148
+ else if (this.sound?.buffer?.duration) {
149
+ return this.sound.buffer.duration;
140
150
  }
141
151
  else if (this._loadedClip instanceof MediaStream) {
142
152
  // MediaStream duration is not directly available; return undefined or estimate if possible
@@ -150,14 +160,14 @@ export class AudioSource extends Behaviour {
150
160
  */
151
161
  get time01() {
152
162
  const duration = this.duration;
153
- if (duration && this.sound) {
154
- return this.sound?.context.currentTime / duration;
163
+ if (duration) {
164
+ return this.time / duration;
155
165
  }
156
166
  return 0;
157
167
  }
158
168
  set time01(val) {
159
169
  const duration = this.duration;
160
- if (duration && this.sound) {
170
+ if (duration) {
161
171
  this.time = val * duration;
162
172
  }
163
173
  }
@@ -165,8 +175,18 @@ export class AudioSource extends Behaviour {
165
175
  * The current playback position in seconds.
166
176
  * Can be set to seek to a specific time in the audio.
167
177
  */
168
- get time() { return this.sound?.source ? (this.sound.source?.context.currentTime - this._lastContextTime + this.sound.offset) : 0; }
178
+ get time() {
179
+ // Media-element path: the element's currentTime is authoritative.
180
+ if (this._usesMediaElementSource && this._audioElement)
181
+ return this._audioElement.currentTime;
182
+ return this.sound?.source ? (this.sound.source?.context.currentTime - this._lastContextTime + this.sound.offset) : 0;
183
+ }
169
184
  set time(val) {
185
+ // Media-element path: seek directly on the element (sound.offset is not used for media nodes).
186
+ if (this._usesMediaElementSource && this._audioElement) {
187
+ this._audioElement.currentTime = val;
188
+ return;
189
+ }
170
190
  if (this.sound) {
171
191
  if (val === this.sound.offset)
172
192
  return;
@@ -183,13 +203,21 @@ export class AudioSource extends Behaviour {
183
203
  * @default false
184
204
  */
185
205
  get loop() {
206
+ // Media-element path: the element holds the authoritative loop flag (sound.getLoop()
207
+ // warns and returns false once hasPlaybackControl is false).
208
+ if (this._usesMediaElementSource && this._audioElement) {
209
+ this._loop = this._audioElement.loop;
210
+ return this._loop;
211
+ }
186
212
  if (this.sound)
187
213
  this._loop = this.sound.getLoop();
188
214
  return this._loop;
189
215
  }
190
216
  set loop(val) {
191
217
  this._loop = val;
192
- if (this.sound)
218
+ if (this._usesMediaElementSource && this._audioElement)
219
+ this._audioElement.loop = val;
220
+ else if (this.sound)
193
221
  this.sound.setLoop(val);
194
222
  }
195
223
  /**
@@ -258,10 +286,16 @@ export class AudioSource extends Behaviour {
258
286
  * @default 1
259
287
  */
260
288
  set pitch(val) {
261
- if (this.sound)
289
+ // Media-element path: playbackRate on the element (sound.setPlaybackRate warns and is a
290
+ // no-op once hasPlaybackControl is false).
291
+ if (this._usesMediaElementSource && this._audioElement)
292
+ this._audioElement.playbackRate = val;
293
+ else if (this.sound)
262
294
  this.sound.setPlaybackRate(val);
263
295
  }
264
296
  get pitch() {
297
+ if (this._usesMediaElementSource && this._audioElement)
298
+ return this._audioElement.playbackRate;
265
299
  return this.sound ? this.sound.getPlaybackRate() : 1;
266
300
  }
267
301
  /**
@@ -274,13 +308,20 @@ export class AudioSource extends Behaviour {
274
308
  sound = null;
275
309
  helper = null;
276
310
  wasPlaying = false;
277
- audioLoader = null;
278
311
  shouldPlay = false;
279
312
  // set this from audio context time, used to set clip offset when setting "time" property
280
313
  // there is maybe a better way to set a audio clip current time?!
281
- _lastClipStartedLoading = null;
282
314
  _loadedClip = null;
283
315
  _audioElement = null;
316
+ /**
317
+ * True when {@link _audioElement} is a file-URL element routed through
318
+ * `sound.setMediaElementSource()` (the iOS-survivable string-clip path). For this path ALL
319
+ * playback control (play/pause/stop/loop/pitch/time/isPlaying) goes through the element,
320
+ * because three.js sets `hasPlaybackControl = false` once a media source is attached.
321
+ * It is `false` for the distinct MediaStream path (which uses an element with `srcObject`
322
+ * plus `setMediaStreamSource()` and is controlled differently).
323
+ */
324
+ _usesMediaElementSource = false;
284
325
  // Spatial blend dual-path audio nodes
285
326
  _entryNode = null;
286
327
  _spatialGain = null;
@@ -323,18 +364,53 @@ export class AudioSource extends Behaviour {
323
364
  get audioContext() {
324
365
  return this.sound?.context;
325
366
  }
367
+ /**
368
+ * Resumes the shared AudioContext if it is currently suspended/interrupted and the
369
+ * page is visible. Uses the same policy as the global resume handler so this never
370
+ * triggers the iOS `InvalidStateError: Failed to start the audio device` (which
371
+ * happens when resuming while the page is hidden). No-op when the context is already
372
+ * running or when resuming is not currently allowed.
373
+ */
374
+ ensureContextResumed() {
375
+ const ctx = this.audioContext;
376
+ if (!ctx)
377
+ return;
378
+ const visibility = typeof document !== "undefined" ? document.visibilityState : "visible";
379
+ // Only skip while hidden — resuming a hidden context throws iOS InvalidStateError.
380
+ if (visibility !== "visible")
381
+ return;
382
+ // Resume even when ctx.state already reports "running". On iOS an auto-resume that
383
+ // happened OUTSIDE a user gesture (e.g. our visibilitychange retry) can leave the
384
+ // context reporting "running" while the audio HARDWARE stays off ("zombie" context).
385
+ // play() is user-initiated, so this resume() runs inside the gesture and re-enables
386
+ // actual output. It is a harmless no-op on an already-healthy context.
387
+ // (The global handler in engine_audio.ts still uses shouldResumeAudioContext, because
388
+ // it fires on timers/events with no gesture and must not spam resume on a running ctx.)
389
+ ctx.resume().catch(e => { if (debug)
390
+ console.warn("[AudioSource] Failed to resume AudioContext:", e); });
391
+ }
326
392
  /** @internal */
327
393
  awake() {
328
394
  if (debug)
329
395
  console.log("[AudioSource]", this);
330
- this.audioLoader = new AudioLoader();
331
396
  if (this.playOnAwake)
332
397
  this.shouldPlay = true;
333
398
  if (this.preload) {
334
399
  if (typeof this.clip === "string" && this.clip.length > 0) {
335
- this.audioLoader.load(this.clip, this.createAudio, () => { }, e => {
336
- console.error(`[AudioSource] Error preloading audio clip "${this.clip}":`, e);
337
- });
400
+ // Preload = create the <audio> element and wire it into the Web Audio graph, but do
401
+ // NOT play. Wiring needs the PositionalAudio (Sound), which in turn needs an
402
+ // AudioListener that only exists after a user gesture — so defer when not ready.
403
+ if (this.Sound) {
404
+ this.createAudioFromElement();
405
+ }
406
+ else {
407
+ AudioSource.registerWaitForAllowAudio(() => {
408
+ if (this.destroyed || this.enabled === false)
409
+ return;
410
+ if (typeof this.clip === "string" && this.clip.length > 0)
411
+ this.createAudioFromElement();
412
+ });
413
+ }
338
414
  }
339
415
  }
340
416
  }
@@ -364,16 +440,24 @@ export class AudioSource extends Behaviour {
364
440
  switch (document.visibilityState) {
365
441
  case "hidden":
366
442
  if (this.playInBackground === false || DeviceUtilities.isMobileDevice()) {
367
- this.wasPlaying = this.isPlaying;
368
- if (this.isPlaying) {
443
+ const wasPlaying = this.isPlaying;
444
+ if (wasPlaying) {
369
445
  this.pause();
370
446
  }
447
+ // pause() clears wasPlaying so a *user-initiated* pause is not auto-resumed on
448
+ // the next foreground. This pause is automatic (page hidden / device locked), so
449
+ // re-assert the resume intent AFTER pause() — otherwise we never resume on unlock.
450
+ this.wasPlaying = wasPlaying;
371
451
  }
372
452
  break;
373
453
  case "visible":
374
454
  if (debug)
375
455
  console.log("visible", this.enabled, this.playOnAwake, !this.isPlaying, AudioSource.userInteractionRegistered, this.wasPlaying);
376
- if (this.enabled && this.playOnAwake && !this.isPlaying && AudioSource.userInteractionRegistered && this.wasPlaying) {
456
+ // Resume anything that was actively playing when the page was hidden — not
457
+ // just playOnAwake sources. `wasPlaying` is the correct signal: it is only
458
+ // set when this source was playing at hide time, so script-started clips
459
+ // resume too (previously they stayed silent until a manual play()).
460
+ if (this.enabled && !this.isPlaying && AudioSource.userInteractionRegistered && this.wasPlaying) {
377
461
  this.play();
378
462
  }
379
463
  break;
@@ -385,35 +469,103 @@ export class AudioSource extends Behaviour {
385
469
  else
386
470
  this.sound?.setVolume(this.volume);
387
471
  };
388
- createAudio = (buffer) => {
472
+ /**
473
+ * Sets up playback of a string (file URL) clip through an `HTMLAudioElement` routed into the
474
+ * Web Audio graph via `sound.setMediaElementSource()`.
475
+ *
476
+ * Why a media element instead of a decoded `AudioBuffer`: on iOS Safari an
477
+ * `AudioBufferSourceNode` has its output torn down after a device lock / audio-session
478
+ * interruption and cannot be reliably revived. A `MediaElementAudioSourceNode` survives the
479
+ * lock because the playing `<audio>` element keeps iOS's media session alive, so the shared
480
+ * AudioContext is never torn down and resumes cleanly. This is the same approach three.js's own
481
+ * `webaudio_orientation` example uses.
482
+ *
483
+ * This does NOT start playback — it only creates/wires the element so a later `.play()` (driven
484
+ * by a user gesture) is cheap.
485
+ */
486
+ createAudioFromElement() {
487
+ if (this.destroyed) {
488
+ if (debug)
489
+ console.warn("AudioSource destroyed, not creating audio", this.name);
490
+ return;
491
+ }
492
+ const sound = this.Sound;
493
+ if (!sound) {
494
+ if (debug)
495
+ console.warn("Failed getting sound?", this.name);
496
+ return;
497
+ }
498
+ // If the element is already wired for the CURRENT clip, there is nothing to (re)create —
499
+ // re-running setMediaElementSource on the same element throws InvalidStateError
500
+ // ("already connected to a MediaElementSourceNode"), so bail out early.
501
+ if (this._audioElement && this._usesMediaElementSource && this._loadedClip === this.clip) {
502
+ // keep volume/mute in sync, then we're done
503
+ if (this.context.application.muted)
504
+ sound.setVolume(0);
505
+ else
506
+ sound.setVolume(this.volume);
507
+ return;
508
+ }
509
+ // (re)create the element when the clip changed since the element was wired.
510
+ if (this._audioElement && this._loadedClip !== this.clip) {
511
+ this._audioElement.pause();
512
+ this._audioElement = null;
513
+ this._usesMediaElementSource = false;
514
+ }
515
+ const created = !this._audioElement;
516
+ if (created) {
517
+ const el = new Audio();
518
+ el.crossOrigin = "anonymous";
519
+ el.preload = "auto";
520
+ el.src = this.clip;
521
+ this._audioElement = el;
522
+ }
523
+ this._audioElement.loop = this._loop;
524
+ // IMPORTANT: build the spatial-blend graph FIRST so getOutput() returns the entry node,
525
+ // THEN route the media element source into it. setMediaElementSource() immediately calls
526
+ // sound.connect() (source → getOutput()), so the entry node and the getOutput override
527
+ // must already exist. Order matters.
528
+ this.setupSpatialBlendNodes();
529
+ // Only connect once per element — createMediaElementSource() throws if the same
530
+ // HTMLMediaElement is passed to it twice.
531
+ if (!this._usesMediaElementSource) {
532
+ sound.setMediaElementSource(this._audioElement);
533
+ this._usesMediaElementSource = true;
534
+ }
535
+ this._loadedClip = this.clip;
536
+ if (this.context.application.muted)
537
+ sound.setVolume(0);
538
+ else
539
+ sound.setVolume(this.volume);
540
+ this.applySpatialDistanceSettings();
541
+ // Playback is started explicitly by onNewClip()/play()/onEnable — do NOT auto-play here.
542
+ // Registering __onAllowAudioCallback would (once the user has interacted) fire immediately
543
+ // and call play() a SECOND time, restarting the element → audible "clipping repeat".
544
+ }
545
+ /**
546
+ * Sets up the {@link PositionalAudio} graph for a MediaStream clip (used for the MediaStream
547
+ * path only — string clips go through {@link createAudioFromElement}). The actual stream node
548
+ * is attached in {@link play} via `setMediaStreamSource`.
549
+ */
550
+ createAudio = () => {
389
551
  if (this.destroyed) {
390
552
  if (debug)
391
553
  console.warn("AudioSource destroyed, not creating audio", this.name);
392
554
  return;
393
555
  }
394
- if (debug)
395
- console.log("AudioBuffer finished loading", buffer);
396
556
  const sound = this.Sound;
397
557
  if (!sound) {
398
558
  if (debug)
399
559
  console.warn("Failed getting sound?", this.name);
400
560
  return;
401
561
  }
402
- if (sound.isPlaying)
403
- sound.stop();
404
- if (buffer)
405
- sound.setBuffer(buffer);
406
562
  this._loadedClip = this.clip;
407
- sound.loop = this._loop;
408
563
  if (this.context.application.muted)
409
564
  sound.setVolume(0);
410
565
  else
411
566
  sound.setVolume(this.volume);
412
- sound.autoplay = this.shouldPlay && AudioSource.userInteractionRegistered;
413
567
  this.setupSpatialBlendNodes();
414
568
  this.applySpatialDistanceSettings();
415
- if (sound.isPlaying)
416
- sound.stop();
417
569
  // make sure we only play the sound if the user has interacted with the page
418
570
  AudioSource.registerWaitForAllowAudio(this.__onAllowAudioCallback);
419
571
  };
@@ -528,27 +680,22 @@ export class AudioSource extends Behaviour {
528
680
  if (debug)
529
681
  console.log(clip);
530
682
  if (clip.endsWith(".mp3") || clip.endsWith(".wav") || clip.endsWith(".ogg") || clip.endsWith(".opus") || clip.endsWith(".flac") || clip.endsWith(".aac") || clip.endsWith(".webm")) {
531
- if (!this.audioLoader)
532
- this.audioLoader = new AudioLoader();
533
683
  this.shouldPlay = true;
534
- if (this._lastClipStartedLoading === clip) {
535
- if (debug)
536
- console.log("Is currently loading:", this._lastClipStartedLoading, this);
537
- return;
684
+ // Route the file URL through an <audio> element (survives iOS lock — see
685
+ // createAudioFromElement). This creates/wires the element without playing.
686
+ this.createAudioFromElement();
687
+ // Start playback through the element (NOT this.sound — hasPlaybackControl is false
688
+ // for a media-element source). __onAllowAudioCallback would also play once
689
+ // interaction is registered; this covers the already-interacted case directly.
690
+ if (this.shouldPlay && AudioSource.userInteractionRegistered) {
691
+ this.ensureContextResumed();
692
+ this._hasEnded = false;
693
+ this._audioElement?.play().catch(e => {
694
+ if (debug)
695
+ console.warn(`[AudioSource] Failed to play audio clip "${clip}":`, e);
696
+ });
697
+ this.fadeEntryGain(1); // fade in (no-op on first play; undoes a prior pause() fade)
538
698
  }
539
- this._lastClipStartedLoading = clip;
540
- if (debug)
541
- console.log("load audio", clip);
542
- const buffer = await this.audioLoader.loadAsync(clip).catch(e => {
543
- console.error(`[AudioSource] Error loading audio clip "${clip}":`, e);
544
- return null;
545
- });
546
- if (this.destroyed)
547
- return;
548
- if (this._lastClipStartedLoading === clip)
549
- this._lastClipStartedLoading = null;
550
- if (buffer)
551
- this.createAudio(buffer);
552
699
  }
553
700
  else
554
701
  console.warn("Unsupported audio clip type", clip);
@@ -579,7 +726,9 @@ export class AudioSource extends Behaviour {
579
726
  }
580
727
  // Load if the sound hasn't been created yet or if the clip changed since last load
581
728
  let needsLoading = !this.sound || (clip && clip !== this._loadedClip);
582
- if (typeof clip === "string" && !this.audioLoader)
729
+ // For string clips the <audio> element must additionally be wired (createAudioFromElement);
730
+ // if it isn't yet (e.g. preload was off, or the element was torn down), force a (re)load.
731
+ if (typeof clip === "string" && (!this._audioElement || !this._usesMediaElementSource))
583
732
  needsLoading = true;
584
733
  if (clip instanceof MediaStream || typeof clip === "string")
585
734
  this.clip = clip;
@@ -592,15 +741,22 @@ export class AudioSource extends Behaviour {
592
741
  if (debug)
593
742
  console.log("[AudioSource] play", this.sound?.getVolume(), this.sound);
594
743
  // If a different clip was passed in, needsLoading above would be true and onNewClip handles it.
595
- // This guard prevents double-playing the same already-playing sound (which would throw in three.js).
596
- if (this.sound && !this.sound.isPlaying) {
744
+ // This guard prevents double-playing the same already-playing sound.
745
+ if (this.sound && !this.isPlaying) {
746
+ // On iOS the shared context can be suspended/interrupted (device locked, app
747
+ // backgrounded, audio session interrupted by a call) — starting playback on it produces
748
+ // no sound until it is resumed. Resume it here (we are inside a user gesture) so playback
749
+ // does not silently depend on the global resume handler running first. See engine_audio.ts.
750
+ this.ensureContextResumed();
597
751
  const muted = this.context.application.muted;
598
752
  if (muted)
599
753
  this.sound.setVolume(0);
600
754
  this.gameObject?.add(this.sound);
601
755
  if (this.clip instanceof MediaStream) {
602
- // We have to set the audio element source to the mediastream as well
603
- // otherwise it will not play for some reason...
756
+ // Distinct from the file-URL media-element path: a MediaStream uses
757
+ // setMediaStreamSource + an element holding srcObject (the element is only needed
758
+ // so the stream actually plays — playback is not controlled through it here).
759
+ this._usesMediaElementSource = false;
604
760
  this.sound.setMediaStreamSource(this.clip);
605
761
  if (!this._audioElement) {
606
762
  this._audioElement = document.createElement('audio');
@@ -613,14 +769,38 @@ export class AudioSource extends Behaviour {
613
769
  return true;
614
770
  }
615
771
  else {
616
- if (this._audioElement)
617
- this._audioElement.remove();
618
- this.sound.play(muted ? .1 : 0);
772
+ // File-URL media-element path: playback control is on the element, not this.sound
773
+ // (hasPlaybackControl is false once setMediaElementSource was called). Volume/mute
774
+ // is still applied via sound.setVolume() above (the gain node still works).
775
+ // Resume the element from its (frozen) position, then fade the entry gain back in so
776
+ // the resume is click-free. No seek, no graph reconnect — both caused the stutter.
777
+ this._audioElement?.play().catch(e => {
778
+ if (debug)
779
+ console.warn("[AudioSource] Failed to play audio element:", e);
780
+ });
781
+ this.fadeEntryGain(1);
619
782
  return true;
620
783
  }
621
784
  }
622
785
  return false;
623
786
  }
787
+ /**
788
+ * Smoothly ramp the spatial-graph entry-gain node to `target` (1 = audible, 0 = silent) over a
789
+ * few ms. A short *fade* — not a hard 0/1 gain change and not a connect/disconnect — is what
790
+ * avoids the click on pause/resume (an instant change or a graph (dis)connect steps the waveform
791
+ * → audible click). On iOS the MediaElementAudioSourceNode keeps feeding the graph after
792
+ * element.pause() following an interruption, so fading this gain to 0 is what actually silences a
793
+ * "paused" media clip; element.pause() only freezes its playback position.
794
+ */
795
+ fadeEntryGain(target, seconds = 0.02) {
796
+ if (!this._entryNode || !this.sound)
797
+ return;
798
+ const ctx = this.sound.context;
799
+ const g = this._entryNode.gain;
800
+ g.cancelScheduledValues(ctx.currentTime);
801
+ g.setValueAtTime(g.value, ctx.currentTime);
802
+ g.linearRampToValueAtTime(target, ctx.currentTime + seconds);
803
+ }
624
804
  /**
625
805
  * Pauses audio playback while maintaining the current position.
626
806
  * Use play() to resume from the paused position.
@@ -630,10 +810,24 @@ export class AudioSource extends Behaviour {
630
810
  console.log("[AudioSource] pause", this);
631
811
  this._hasEnded = true;
632
812
  this.shouldPlay = false;
813
+ // A user-initiated pause must not be revived by the visibility handler on the next
814
+ // foreground (it replays sources whose `wasPlaying` is set).
815
+ this.wasPlaying = false;
816
+ if (this._usesMediaElementSource) {
817
+ // File-URL media-element path. On iOS the MediaElementAudioSourceNode keeps emitting into
818
+ // the Web Audio graph after element.pause() once the audio session has been interrupted
819
+ // (lock/unlock) — pausing the element does NOT silence it (confirmed on-device). So we
820
+ // fade the entry gain to 0 (click-free silence — the fade is what actually silences it),
821
+ // then freeze the element's position. play() fades it back in.
822
+ this.fadeEntryGain(0);
823
+ this._audioElement?.pause();
824
+ return;
825
+ }
633
826
  if (this.sound && this.sound.isPlaying && this.sound.source) {
634
827
  this._lastContextTime = this.sound?.context.currentTime;
635
828
  this.sound.pause();
636
829
  }
830
+ // MediaStream / legacy path: drop the stream element as before.
637
831
  this._audioElement?.remove();
638
832
  }
639
833
  /**
@@ -645,12 +839,23 @@ export class AudioSource extends Behaviour {
645
839
  console.log("[AudioSource] stop", this);
646
840
  this._hasEnded = true;
647
841
  this.shouldPlay = false;
842
+ this.wasPlaying = false;
843
+ if (this._usesMediaElementSource) {
844
+ // True stop: detach the source from the graph (see pause() — element.pause() alone does
845
+ // not silence it on iOS after an interruption), pause, and rewind to the start.
846
+ this.fadeEntryGain(0);
847
+ this._audioElement?.pause();
848
+ if (this._audioElement)
849
+ this._audioElement.currentTime = 0;
850
+ return;
851
+ }
648
852
  if (this.sound && this.sound.source) {
649
853
  this._lastContextTime = this.sound?.context.currentTime;
650
854
  if (debug)
651
855
  console.log("[AudioSource] lastContextTime", this._lastContextTime);
652
856
  this.sound.stop();
653
857
  }
858
+ // MediaStream / legacy path: drop the stream element as before.
654
859
  this._audioElement?.remove();
655
860
  }
656
861
  _lastContextTime = 0;
@@ -666,7 +871,10 @@ export class AudioSource extends Behaviour {
666
871
  if (this._needUpdateSpatialDistanceSettings) {
667
872
  this.applySpatialDistanceSettings();
668
873
  }
669
- if (this.sound && !this.sound.isPlaying && this.shouldPlay && !this._hasEnded) {
874
+ // Use the element-aware `isPlaying` getter, NOT `sound.isPlaying`: for a media-element
875
+ // source three.js leaves `sound.isPlaying` permanently false (hasPlaybackControl=false),
876
+ // which would otherwise fire "ended" every frame during playback.
877
+ if (this.sound && !this.isPlaying && this.shouldPlay && !this._hasEnded) {
670
878
  this._hasEnded = true;
671
879
  if (debug)
672
880
  console.log("[AudioSource] Audio clip ended", this.clip);
@@ -1 +1 @@
1
- {"version":3,"file":"AudioSource.js","sourceRoot":"","sources":["../../src/engine-components/AudioSource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AudioSource.js","sourceRoot":"","sources":["../../src/engine-components/AudioSource.ts"],"names":[],"mappings":"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"}
@@ -728,8 +728,8 @@ class MultiTouchDragHandler {
728
728
  _currentScaleRatio = 1;
729
729
  /** World-scale of the dragged object captured at drag start. Used to apply scale directly. */
730
730
  _initialWorldScale = new Vector3(1, 1, 1);
731
- /** Clamps the dragged object's world scale during two-pointer scaling. Defaults to [0.01, 10000] relative to initial scale. */
732
- _scaleLimitConstraint = new ScaleLimitConstraint(0.01, 10000, true);
731
+ /** Clamps the dragged object's world scale during two-pointer scaling. */
732
+ _scaleLimitConstraint = new ScaleLimitConstraint(0.0001, 1_000_000, true);
733
733
  _tempVec1 = new Vector3();
734
734
  _tempVec2 = new Vector3();
735
735
  _tempVec3 = new Vector3();