x_ite 9.3.2 → 9.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/assets/components/Annotation.js +15 -15
  2. package/dist/assets/components/Annotation.min.js +1 -1
  3. package/dist/assets/components/CADGeometry.js +14 -14
  4. package/dist/assets/components/CADGeometry.min.js +1 -1
  5. package/dist/assets/components/CubeMapTexturing.js +25 -25
  6. package/dist/assets/components/CubeMapTexturing.min.js +1 -1
  7. package/dist/assets/components/DIS.js +13 -13
  8. package/dist/assets/components/DIS.min.js +1 -1
  9. package/dist/assets/components/EventUtilities.js +9 -9
  10. package/dist/assets/components/EventUtilities.min.js +1 -1
  11. package/dist/assets/components/Geometry2D.js +19 -19
  12. package/dist/assets/components/Geometry2D.min.js +1 -1
  13. package/dist/assets/components/Geospatial.js +33 -33
  14. package/dist/assets/components/Geospatial.min.js +1 -1
  15. package/dist/assets/components/HAnim.js +24 -24
  16. package/dist/assets/components/HAnim.min.js +1 -1
  17. package/dist/assets/components/KeyDeviceSensor.js +8 -8
  18. package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
  19. package/dist/assets/components/Layout.js +27 -27
  20. package/dist/assets/components/Layout.min.js +1 -1
  21. package/dist/assets/components/NURBS.js +23 -23
  22. package/dist/assets/components/NURBS.min.js +1 -1
  23. package/dist/assets/components/ParticleSystems.js +23 -23
  24. package/dist/assets/components/ParticleSystems.min.js +1 -1
  25. package/dist/assets/components/Picking.js +18 -18
  26. package/dist/assets/components/Picking.min.js +1 -1
  27. package/dist/assets/components/RigidBodyPhysics.js +18 -18
  28. package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
  29. package/dist/assets/components/Scripting.js +116 -121
  30. package/dist/assets/components/Scripting.min.js +1 -1
  31. package/dist/assets/components/Text.js +24 -24
  32. package/dist/assets/components/Text.min.js +1 -1
  33. package/dist/assets/components/TextureProjection.js +17 -17
  34. package/dist/assets/components/TextureProjection.min.js +1 -1
  35. package/dist/assets/components/Texturing3D.js +30 -30
  36. package/dist/assets/components/Texturing3D.min.js +1 -1
  37. package/dist/assets/components/VolumeRendering.js +26 -26
  38. package/dist/assets/components/VolumeRendering.min.js +1 -1
  39. package/dist/assets/components/X_ITE.js +8 -8
  40. package/dist/assets/components/X_ITE.min.js +1 -1
  41. package/dist/x_ite.css +1 -1
  42. package/dist/x_ite.d.ts +3 -0
  43. package/dist/x_ite.js +1403 -478
  44. package/dist/x_ite.min.js +1 -1
  45. package/dist/x_ite.min.mjs +1 -1
  46. package/dist/x_ite.mjs +1403 -478
  47. package/dist/x_ite.zip +0 -0
  48. package/package.json +4 -4
package/dist/x_ite.js CHANGED
@@ -1,4 +1,4 @@
1
- /* X_ITE v9.3.2 */(function webpackUniversalModuleDefinition(root, factory) {
1
+ /* X_ITE v9.4.0 */(function webpackUniversalModuleDefinition(root, factory) {
2
2
  if(typeof exports === 'object' && typeof module === 'object')
3
3
  module.exports = factory();
4
4
  else if(typeof define === 'function' && define.amd)
@@ -11,10 +11,10 @@
11
11
  return /******/ (() => { // webpackBootstrap
12
12
  /******/ var __webpack_modules__ = ({
13
13
 
14
- /***/ 403:
14
+ /***/ 412:
15
15
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16
16
 
17
- /* provided dependency */ var jQuery = __webpack_require__(183);
17
+ /* provided dependency */ var jQuery = __webpack_require__(440);
18
18
  /**
19
19
  * @preserve jquery.fullscreen 1.1.5
20
20
  * https://github.com/code-lts/jquery-fullscreen-plugin
@@ -210,7 +210,7 @@ installFullScreenHandlers();
210
210
 
211
211
  /***/ }),
212
212
 
213
- /***/ 287:
213
+ /***/ 838:
214
214
  /***/ ((module, exports, __webpack_require__) => {
215
215
 
216
216
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
@@ -224,7 +224,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
224
224
  (function (factory) {
225
225
  if ( true ) {
226
226
  // AMD. Register as an anonymous module.
227
- !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(183)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
227
+ !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(440)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
228
228
  __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
229
229
  (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
230
230
  __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
@@ -435,7 +435,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
435
435
 
436
436
  /***/ }),
437
437
 
438
- /***/ 183:
438
+ /***/ 440:
439
439
  /***/ (function(module, exports) {
440
440
 
441
441
  var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
@@ -11159,7 +11159,7 @@ return jQuery;
11159
11159
 
11160
11160
  /***/ }),
11161
11161
 
11162
- /***/ 972:
11162
+ /***/ 149:
11163
11163
  /***/ ((module) => {
11164
11164
 
11165
11165
  /**
@@ -15938,7 +15938,7 @@ if (true) {
15938
15938
 
15939
15939
  /***/ }),
15940
15940
 
15941
- /***/ 935:
15941
+ /***/ 284:
15942
15942
  /***/ (function(__unused_webpack_module, exports) {
15943
15943
 
15944
15944
 
@@ -19183,7 +19183,7 @@ if (true) {
19183
19183
 
19184
19184
  /***/ }),
19185
19185
 
19186
- /***/ 432:
19186
+ /***/ 27:
19187
19187
  /***/ (function(module, exports) {
19188
19188
 
19189
19189
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*
@@ -19692,7 +19692,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
19692
19692
  tmpCanvas.height = h;
19693
19693
  tmpCanvas.style.width = w + 'px';
19694
19694
  tmpCanvas.style.height = h + 'px';
19695
- tmpCanvas.getContext('2d').setTransform(1, 0, 0, 1, 0, 0);
19695
+ tmpCanvas.getContext('2d', { willReadFrequently: true }).setTransform(1, 0, 0, 1, 0, 0);
19696
19696
  };
19697
19697
 
19698
19698
  var setFrameOffset = function(frame, offset) {
@@ -19793,7 +19793,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
19793
19793
  };
19794
19794
 
19795
19795
  var doImg = function (img) {
19796
- if (!frame) frame = tmpCanvas.getContext('2d');
19796
+ if (!frame) frame = tmpCanvas.getContext('2d', { willReadFrequently: true });
19797
19797
 
19798
19798
  var currIdx = frames.length;
19799
19799
 
@@ -19946,7 +19946,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
19946
19946
 
19947
19947
  offset = frameOffsets[i];
19948
19948
 
19949
- tmpCanvas.getContext("2d").putImageData(frames[i].data, offset.x, offset.y);
19949
+ tmpCanvas.getContext("2d", { willReadFrequently: true }).putImageData(frames[i].data, offset.x, offset.y);
19950
19950
  ctx.globalCompositeOperation = "copy";
19951
19951
  ctx.drawImage(tmpCanvas, 0, 0);
19952
19952
  };
@@ -20041,7 +20041,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
20041
20041
 
20042
20042
  var div = document.createElement('div');
20043
20043
  canvas = document.createElement('canvas');
20044
- ctx = canvas.getContext('2d');
20044
+ ctx = canvas.getContext('2d', { willReadFrequently: true });
20045
20045
  toolbar = document.createElement('div');
20046
20046
 
20047
20047
  tmpCanvas = document.createElement('canvas');
@@ -20311,7 +20311,7 @@ Object .defineProperty (Namespace, "add",
20311
20311
  }
20312
20312
  else
20313
20313
  {
20314
- const X3D = window [Symbol .for ("X_ITE.X3D-9.3.2")];
20314
+ const X3D = window [Symbol .for ("X_ITE.X3D-9.4.0")];
20315
20315
 
20316
20316
  if (X3D)
20317
20317
  X3D [name] = module;
@@ -34246,7 +34246,7 @@ const X3DBaseNode_default_ = X3DBaseNode;
34246
34246
  x_ite_Namespace .add ("X3DBaseNode", "x_ite/Base/X3DBaseNode", X3DBaseNode_default_);
34247
34247
  /* harmony default export */ const Base_X3DBaseNode = (X3DBaseNode_default_);
34248
34248
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Legacy.js
34249
- /* provided dependency */ var $ = __webpack_require__(183);
34249
+ /* provided dependency */ var $ = __webpack_require__(440);
34250
34250
  /*******************************************************************************
34251
34251
  *
34252
34252
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -34383,7 +34383,7 @@ x_ite_Namespace .add ("Legacy", "x_ite/Browser/Legacy", Legacy_default_);
34383
34383
  *
34384
34384
  ******************************************************************************/
34385
34385
 
34386
- const BROWSER_VERSION_default_ = "9.3.2";
34386
+ const BROWSER_VERSION_default_ = "9.4.0";
34387
34387
  ;
34388
34388
 
34389
34389
  x_ite_Namespace .add ("BROWSER_VERSION", "x_ite/BROWSER_VERSION", BROWSER_VERSION_default_);
@@ -38964,7 +38964,7 @@ const X3DProtoDeclaration_default_ = X3DProtoDeclaration;
38964
38964
  x_ite_Namespace .add ("X3DProtoDeclaration", "x_ite/Prototype/X3DProtoDeclaration", X3DProtoDeclaration_default_);
38965
38965
  /* harmony default export */ const Prototype_X3DProtoDeclaration = (X3DProtoDeclaration_default_);
38966
38966
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/X3DParser.js
38967
- /* provided dependency */ var X3DParser_$ = __webpack_require__(183);
38967
+ /* provided dependency */ var X3DParser_$ = __webpack_require__(440);
38968
38968
  /*******************************************************************************
38969
38969
  *
38970
38970
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -39226,7 +39226,7 @@ const Expressions_default_ = Expressions;
39226
39226
  x_ite_Namespace .add ("Expressions", "x_ite/Parser/Expressions", Expressions_default_);
39227
39227
  /* harmony default export */ const Parser_Expressions = (Expressions_default_);
39228
39228
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/VRMLParser.js
39229
- /* provided dependency */ var VRMLParser_$ = __webpack_require__(183);
39229
+ /* provided dependency */ var VRMLParser_$ = __webpack_require__(440);
39230
39230
  /*******************************************************************************
39231
39231
  *
39232
39232
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -41912,7 +41912,7 @@ const VRMLParser_default_ = VRMLParser;
41912
41912
  x_ite_Namespace .add ("VRMLParser", "x_ite/Parser/VRMLParser", VRMLParser_default_);
41913
41913
  /* harmony default export */ const Parser_VRMLParser = (VRMLParser_default_);
41914
41914
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/XMLParser.js
41915
- /* provided dependency */ var XMLParser_$ = __webpack_require__(183);
41915
+ /* provided dependency */ var XMLParser_$ = __webpack_require__(440);
41916
41916
  /*******************************************************************************
41917
41917
  *
41918
41918
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -44021,7 +44021,7 @@ const URLs_default_ = URLs;
44021
44021
  x_ite_Namespace .add ("URLs", "x_ite/Browser/Networking/URLs", URLs_default_);
44022
44022
  /* harmony default export */ const Networking_URLs = (URLs_default_);
44023
44023
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/GLTF2Parser.js
44024
- /* provided dependency */ var GLTF2Parser_$ = __webpack_require__(183);
44024
+ /* provided dependency */ var GLTF2Parser_$ = __webpack_require__(440);
44025
44025
  /*******************************************************************************
44026
44026
  *
44027
44027
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -47322,7 +47322,7 @@ const GLTF2Parser_default_ = GLTF2Parser;
47322
47322
  x_ite_Namespace .add ("GLTF2Parser", "x_ite/Parser/GLTF2Parser", GLTF2Parser_default_);
47323
47323
  /* harmony default export */ const Parser_GLTF2Parser = (GLTF2Parser_default_);
47324
47324
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/GLB2Parser.js
47325
- /* provided dependency */ var GLB2Parser_$ = __webpack_require__(183);
47325
+ /* provided dependency */ var GLB2Parser_$ = __webpack_require__(440);
47326
47326
  /*******************************************************************************
47327
47327
  *
47328
47328
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -47474,7 +47474,7 @@ const GLB2Parser_default_ = GLB2Parser;
47474
47474
  x_ite_Namespace .add ("GLB2Parser", "x_ite/Parser/GLB2Parser", GLB2Parser_default_);
47475
47475
  /* harmony default export */ const Parser_GLB2Parser = (GLB2Parser_default_);
47476
47476
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/OBJParser.js
47477
- /* provided dependency */ var OBJParser_$ = __webpack_require__(183);
47477
+ /* provided dependency */ var OBJParser_$ = __webpack_require__(440);
47478
47478
  /*******************************************************************************
47479
47479
  *
47480
47480
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -50829,8 +50829,8 @@ const MatrixStack_default_ = MatrixStack;
50829
50829
  x_ite_Namespace .add ("MatrixStack", "standard/Math/Utility/MatrixStack", MatrixStack_default_);
50830
50830
  /* harmony default export */ const Utility_MatrixStack = (MatrixStack_default_);
50831
50831
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/SVGParser.js
50832
- /* provided dependency */ var SVGParser_$ = __webpack_require__(183);
50833
- /* provided dependency */ var libtess = __webpack_require__(972);
50832
+ /* provided dependency */ var SVGParser_$ = __webpack_require__(440);
50833
+ /* provided dependency */ var libtess = __webpack_require__(149);
50834
50834
  /*******************************************************************************
50835
50835
  *
50836
50836
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -53598,7 +53598,7 @@ const SVGParser_default_ = SVGParser;
53598
53598
  x_ite_Namespace .add ("SVGParser", "x_ite/Parser/SVGParser", SVGParser_default_);
53599
53599
  /* harmony default export */ const Parser_SVGParser = (SVGParser_default_);
53600
53600
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/GoldenGate.js
53601
- /* provided dependency */ var GoldenGate_$ = __webpack_require__(183);
53601
+ /* provided dependency */ var GoldenGate_$ = __webpack_require__(440);
53602
53602
  /*******************************************************************************
53603
53603
  *
53604
53604
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -53948,7 +53948,7 @@ const Plane3_default_ = Plane3;
53948
53948
  x_ite_Namespace .add ("Plane3", "standard/Math/Geometry/Plane3", Plane3_default_);
53949
53949
  /* harmony default export */ const Geometry_Plane3 = (Plane3_default_);
53950
53950
  ;// CONCATENATED MODULE: ./src/standard/Math/Geometry/Triangle3.js
53951
- /* provided dependency */ var Triangle3_libtess = __webpack_require__(972);
53951
+ /* provided dependency */ var Triangle3_libtess = __webpack_require__(149);
53952
53952
  /*******************************************************************************
53953
53953
  *
53954
53954
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -58362,6 +58362,7 @@ Object .assign (Object .setPrototypeOf (X3DGroupingNode .prototype, Core_X3DChil
58362
58362
  this .addPickableSensorNode (childNode);
58363
58363
  break;
58364
58364
  }
58365
+ case Base_X3DConstants .ListenerPointSource:
58365
58366
  case Base_X3DConstants .Sound:
58366
58367
  case Base_X3DConstants .SpatialSound:
58367
58368
  case Base_X3DConstants .X3DBackgroundNode:
@@ -58393,7 +58394,6 @@ Object .assign (Object .setPrototypeOf (X3DGroupingNode .prototype, Core_X3DChil
58393
58394
  case Base_X3DConstants .NurbsPositionInterpolator:
58394
58395
  case Base_X3DConstants .NurbsSurfaceInterpolator:
58395
58396
  case Base_X3DConstants .RigidBodyCollection:
58396
- case Base_X3DConstants .TimeSensor:
58397
58397
  case Base_X3DConstants .X3DFollowerNode:
58398
58398
  case Base_X3DConstants .X3DInfoNode:
58399
58399
  case Base_X3DConstants .X3DInterpolatorNode:
@@ -58402,6 +58402,7 @@ Object .assign (Object .setPrototypeOf (X3DGroupingNode .prototype, Core_X3DChil
58402
58402
  case Base_X3DConstants .X3DScriptNode:
58403
58403
  case Base_X3DConstants .X3DSequencerNode:
58404
58404
  case Base_X3DConstants .X3DSoundNode:
58405
+ case Base_X3DConstants .X3DTimeDependentNode:
58405
58406
  case Base_X3DConstants .X3DTriggerNode:
58406
58407
  break;
58407
58408
  default:
@@ -58471,6 +58472,7 @@ Object .assign (Object .setPrototypeOf (X3DGroupingNode .prototype, Core_X3DChil
58471
58472
  this .pickableSensorNodes .delete (childNode);
58472
58473
  break;
58473
58474
  }
58475
+ case Base_X3DConstants .ListenerPointSource:
58474
58476
  case Base_X3DConstants .Sound:
58475
58477
  case Base_X3DConstants .SpatialSound:
58476
58478
  case Base_X3DConstants .X3DBackgroundNode:
@@ -58501,7 +58503,6 @@ Object .assign (Object .setPrototypeOf (X3DGroupingNode .prototype, Core_X3DChil
58501
58503
  case Base_X3DConstants .NurbsPositionInterpolator:
58502
58504
  case Base_X3DConstants .NurbsSurfaceInterpolator:
58503
58505
  case Base_X3DConstants .RigidBodyCollection:
58504
- case Base_X3DConstants .TimeSensor:
58505
58506
  case Base_X3DConstants .X3DFollowerNode:
58506
58507
  case Base_X3DConstants .X3DInfoNode:
58507
58508
  case Base_X3DConstants .X3DInterpolatorNode:
@@ -58510,6 +58511,7 @@ Object .assign (Object .setPrototypeOf (X3DGroupingNode .prototype, Core_X3DChil
58510
58511
  case Base_X3DConstants .X3DScriptNode:
58511
58512
  case Base_X3DConstants .X3DSequencerNode:
58512
58513
  case Base_X3DConstants .X3DSoundNode:
58514
+ case Base_X3DConstants .X3DTimeDependentNode:
58513
58515
  case Base_X3DConstants .X3DTriggerNode:
58514
58516
  break;
58515
58517
  default:
@@ -62439,7 +62441,7 @@ const X3DTexture2DNode_default_ = X3DTexture2DNode;
62439
62441
  x_ite_Namespace .add ("X3DTexture2DNode", "x_ite/Components/Texturing/X3DTexture2DNode", X3DTexture2DNode_default_);
62440
62442
  /* harmony default export */ const Texturing_X3DTexture2DNode = (X3DTexture2DNode_default_);
62441
62443
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Texturing/ImageTexture.js
62442
- /* provided dependency */ var ImageTexture_$ = __webpack_require__(183);
62444
+ /* provided dependency */ var ImageTexture_$ = __webpack_require__(440);
62443
62445
  /*******************************************************************************
62444
62446
  *
62445
62447
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -63677,9 +63679,6 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
63677
63679
  {
63678
63680
  this ._isPaused = true;
63679
63681
 
63680
- if (this .pauseTimeValue !== this .getBrowser () .getCurrentTime ())
63681
- this .pauseTimeValue = this .getBrowser () .getCurrentTime ();
63682
-
63683
63682
  if (this .getLive () .getValue ())
63684
63683
  this .real_pause ();
63685
63684
  }
@@ -63698,9 +63697,6 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
63698
63697
  {
63699
63698
  this ._isPaused = false;
63700
63699
 
63701
- if (this .resumeTimeValue !== this .getBrowser () .getCurrentTime ())
63702
- this .resumeTimeValue = this .getBrowser () .getCurrentTime ();
63703
-
63704
63700
  if (this .getLive () .getValue ())
63705
63701
  this .real_resume ();
63706
63702
  }
@@ -64818,7 +64814,7 @@ Object .assign (Object .setPrototypeOf (X3DViewpointNode .prototype, Core_X3DBin
64818
64814
  this .timeSensor .setup ();
64819
64815
 
64820
64816
  this .easeInEaseOut ._key = new x_ite_Fields .MFFloat (0, 1);
64821
- this .easeInEaseOut ._easeInEaseOut = new x_ite_Fields .MFVec2f (new x_ite_Fields .SFVec2f (0, 0), new x_ite_Fields .SFVec2f (0, 0));
64817
+ this .easeInEaseOut ._easeInEaseOut = new x_ite_Fields .MFVec2f (new x_ite_Fields .SFVec2f (), new x_ite_Fields .SFVec2f ());
64822
64818
  this .easeInEaseOut .setup ();
64823
64819
 
64824
64820
  this .positionInterpolator ._key = new x_ite_Fields .MFFloat (0, 1);
@@ -65053,7 +65049,7 @@ Object .assign (Object .setPrototypeOf (X3DViewpointNode .prototype, Core_X3DBin
65053
65049
  default:
65054
65050
  {
65055
65051
  // LINEAR
65056
- this .easeInEaseOut ._easeInEaseOut = new x_ite_Fields .MFVec2f (new x_ite_Fields .SFVec2f (0, 0), new x_ite_Fields .SFVec2f (0, 0));
65052
+ this .easeInEaseOut ._easeInEaseOut = new x_ite_Fields .MFVec2f (new x_ite_Fields .SFVec2f (), new x_ite_Fields .SFVec2f ());
65057
65053
  break;
65058
65054
  }
65059
65055
  }
@@ -66040,7 +66036,7 @@ const X3DWorld_default_ = X3DWorld;
66040
66036
  x_ite_Namespace .add ("X3DWorld", "x_ite/Execution/X3DWorld", X3DWorld_default_);
66041
66037
  /* harmony default export */ const Execution_X3DWorld = (X3DWorld_default_);
66042
66038
  ;// CONCATENATED MODULE: ./src/x_ite/InputOutput/FileLoader.js
66043
- /* provided dependency */ var FileLoader_$ = __webpack_require__(183);
66039
+ /* provided dependency */ var FileLoader_$ = __webpack_require__(440);
66044
66040
  /*******************************************************************************
66045
66041
  *
66046
66042
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -66105,8 +66101,7 @@ function FileLoader (node)
66105
66101
 
66106
66102
  this .node = node;
66107
66103
  this .browser = node .getBrowser ();
66108
- this .external = this .browser .isExternal ();
66109
- this .executionContext = this .external ? node .getExecutionContext () : this .browser .currentScene;
66104
+ this .executionContext = node .getExecutionContext ();
66110
66105
  this .target = "";
66111
66106
  this .url = [ ];
66112
66107
  this .URL = new URL (this .getBaseURL ());
@@ -66128,10 +66123,7 @@ Object .assign (Object .setPrototypeOf (FileLoader .prototype, Base_X3DObject .p
66128
66123
  getBaseURL ()
66129
66124
  {
66130
66125
  if (this .node instanceof Execution_X3DWorld)
66131
- {
66132
- if (this .external)
66133
- return this .browser .getBaseURL ();
66134
- }
66126
+ return this .browser .getBaseURL ();
66135
66127
 
66136
66128
  return this .executionContext .getBaseURL ();
66137
66129
  },
@@ -66967,7 +66959,7 @@ const ProtoDeclarationArray_default_ = ProtoDeclarationArray;
66967
66959
  x_ite_Namespace .add ("ProtoDeclarationArray", "x_ite/Prototype/ProtoDeclarationArray", ProtoDeclarationArray_default_);
66968
66960
  /* harmony default export */ const Prototype_ProtoDeclarationArray = (ProtoDeclarationArray_default_);
66969
66961
  ;// CONCATENATED MODULE: ./src/x_ite/Routing/X3DRoute.js
66970
- /* provided dependency */ var X3DRoute_$ = __webpack_require__(183);
66962
+ /* provided dependency */ var X3DRoute_$ = __webpack_require__(440);
66971
66963
  /*******************************************************************************
66972
66964
  *
66973
66965
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -68374,9 +68366,14 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
68374
68366
  },
68375
68367
  dispose ()
68376
68368
  {
68377
- for (const route of [... this [X3DExecutionContext_routes]])
68369
+ for (const route of Array .from (this [X3DExecutionContext_routes]))
68378
68370
  this .deleteRoute (route);
68379
68371
 
68372
+ this .externprotos .clear ();
68373
+ this .protos .clear ();
68374
+ this .importedNodes .clear ();
68375
+ this .routes .clear ();
68376
+
68380
68377
  Base_X3DBaseNode .prototype .dispose .call (this);
68381
68378
  },
68382
68379
  });
@@ -89853,7 +89850,7 @@ const X3DShaderNode_default_ = X3DShaderNode;
89853
89850
  x_ite_Namespace .add ("X3DShaderNode", "x_ite/Components/Shaders/X3DShaderNode", X3DShaderNode_default_);
89854
89851
  /* harmony default export */ const Shaders_X3DShaderNode = (X3DShaderNode_default_);
89855
89852
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js
89856
- /* provided dependency */ var X3DProgrammableShaderObject_$ = __webpack_require__(183);
89853
+ /* provided dependency */ var X3DProgrammableShaderObject_$ = __webpack_require__(440);
89857
89854
  /*******************************************************************************
89858
89855
  *
89859
89856
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -95494,7 +95491,7 @@ const ShaderCompiler_default_ = ShaderCompiler;
95494
95491
  x_ite_Namespace .add ("ShaderCompiler", "x_ite/Browser/Shaders/ShaderCompiler", ShaderCompiler_default_);
95495
95492
  /* harmony default export */ const Shaders_ShaderCompiler = (ShaderCompiler_default_);
95496
95493
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Shaders/ShaderPart.js
95497
- /* provided dependency */ var ShaderPart_$ = __webpack_require__(183);
95494
+ /* provided dependency */ var ShaderPart_$ = __webpack_require__(440);
95498
95495
  /*******************************************************************************
95499
95496
  *
95500
95497
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -96151,7 +96148,7 @@ const X3DAppearanceNode_default_ = X3DAppearanceNode;
96151
96148
  x_ite_Namespace .add ("X3DAppearanceNode", "x_ite/Components/Shape/X3DAppearanceNode", X3DAppearanceNode_default_);
96152
96149
  /* harmony default export */ const Shape_X3DAppearanceNode = (X3DAppearanceNode_default_);
96153
96150
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Shape/Appearance.js
96154
- /* provided dependency */ var Appearance_$ = __webpack_require__(183);
96151
+ /* provided dependency */ var Appearance_$ = __webpack_require__(440);
96155
96152
  /*******************************************************************************
96156
96153
  *
96157
96154
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -99570,6 +99567,85 @@ const Components_Shape_default_ = {
99570
99567
 
99571
99568
  x_ite_Namespace .add ("Shape", "x_ite/Components/Shape", Components_Shape_default_);
99572
99569
  /* harmony default export */ const Components_Shape = (Components_Shape_default_);
99570
+ ;// CONCATENATED MODULE: ./src/x_ite/Components/Sound/X3DSoundNode.js
99571
+ /*******************************************************************************
99572
+ *
99573
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
99574
+ *
99575
+ * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011 - 2022.
99576
+ *
99577
+ * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
99578
+ *
99579
+ * The copyright notice above does not evidence any actual of intended
99580
+ * publication of such source code, and is an unpublished work by create3000.
99581
+ * This material contains CONFIDENTIAL INFORMATION that is the property of
99582
+ * create3000.
99583
+ *
99584
+ * No permission is granted to copy, distribute, or create derivative works from
99585
+ * the contents of this software, in whole or in part, without the prior written
99586
+ * permission of create3000.
99587
+ *
99588
+ * NON-MILITARY USE ONLY
99589
+ *
99590
+ * All create3000 software are effectively free software with a non-military use
99591
+ * restriction. It is free. Well commented source is provided. You may reuse the
99592
+ * source in any way you please with the exception anything that uses it must be
99593
+ * marked to indicate is contains 'non-military use only' components.
99594
+ *
99595
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
99596
+ *
99597
+ * Copyright 2011 - 2022, Holger Seelig <holger.seelig@yahoo.de>.
99598
+ *
99599
+ * This file is part of the X_ITE Project.
99600
+ *
99601
+ * X_ITE is free software: you can redistribute it and/or modify it under the
99602
+ * terms of the GNU General Public License version 3 only, as published by the
99603
+ * Free Software Foundation.
99604
+ *
99605
+ * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
99606
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
99607
+ * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
99608
+ * details (a copy is included in the LICENSE file that accompanied this code).
99609
+ *
99610
+ * You should have received a copy of the GNU General Public License version 3
99611
+ * along with X_ITE. If not, see <https://www.gnu.org/licenses/gpl.html> for a
99612
+ * copy of the GPLv3 License.
99613
+ *
99614
+ * For Silvio, Joy and Adi.
99615
+ *
99616
+ ******************************************************************************/
99617
+
99618
+
99619
+
99620
+
99621
+ function X3DSoundNode (executionContext)
99622
+ {
99623
+ Core_X3DChildNode .call (this, executionContext);
99624
+
99625
+ this .addType (Base_X3DConstants .X3DSoundNode);
99626
+ }
99627
+
99628
+ Object .setPrototypeOf (X3DSoundNode .prototype, Core_X3DChildNode .prototype);
99629
+
99630
+ Object .defineProperties (X3DSoundNode,
99631
+ {
99632
+ typeName:
99633
+ {
99634
+ value: "X3DSoundNode",
99635
+ enumerable: true,
99636
+ },
99637
+ componentInfo:
99638
+ {
99639
+ value: Object .freeze ({ name: "Sound", level: 1 }),
99640
+ enumerable: true,
99641
+ },
99642
+ });
99643
+
99644
+ const X3DSoundNode_default_ = X3DSoundNode;
99645
+ ;
99646
+
99647
+ x_ite_Namespace .add ("X3DSoundNode", "x_ite/Components/Sound/X3DSoundNode", X3DSoundNode_default_);
99648
+ /* harmony default export */ const Sound_X3DSoundNode = (X3DSoundNode_default_);
99573
99649
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Sound/X3DSoundProcessingNode.js
99574
99650
  /*******************************************************************************
99575
99651
  *
@@ -99627,12 +99703,12 @@ x_ite_Namespace .add ("Shape", "x_ite/Components/Shape", Components_Shape_defaul
99627
99703
 
99628
99704
  function X3DSoundProcessingNode (executionContext)
99629
99705
  {
99630
- Core_X3DChildNode .call (this, executionContext);
99706
+ Sound_X3DSoundNode .call (this, executionContext);
99631
99707
  Time_X3DTimeDependentNode .call (this, executionContext);
99632
99708
 
99633
99709
  this .addType (Base_X3DConstants .X3DSoundProcessingNode);
99634
99710
 
99635
- this .addChildObjects (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool (true));
99711
+ this .addChildObjects (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ());
99636
99712
 
99637
99713
  const audioContext = this .getBrowser () .getAudioContext ();
99638
99714
 
@@ -99641,15 +99717,14 @@ function X3DSoundProcessingNode (executionContext)
99641
99717
  this .audioSource = new GainNode (audioContext, { gain: 1 });
99642
99718
  }
99643
99719
 
99644
- Object .assign (Object .setPrototypeOf (X3DSoundProcessingNode .prototype, Core_X3DChildNode .prototype),
99720
+ Object .assign (Object .setPrototypeOf (X3DSoundProcessingNode .prototype, Sound_X3DSoundNode .prototype),
99645
99721
  Time_X3DTimeDependentNode .prototype,
99646
99722
  {
99647
99723
  initialize ()
99648
99724
  {
99649
- Core_X3DChildNode .prototype .initialize .call (this);
99725
+ Sound_X3DSoundNode .prototype .initialize .call (this);
99650
99726
  Time_X3DTimeDependentNode .prototype .initialize .call (this);
99651
99727
 
99652
- this ._enabled .addInterest ("set_enabled__", this);
99653
99728
  this ._gain .addInterest ("set_gain__", this);
99654
99729
  this ._channelCount .addInterest ("set_channelCount__", this);
99655
99730
  this ._channelCountMode .addInterest ("set_channelCountMode__", this);
@@ -99695,6 +99770,8 @@ Object .assign (Object .setPrototypeOf (X3DSoundProcessingNode .prototype, Core_
99695
99770
 
99696
99771
  this .audioDestination .connect (this .audioSource);
99697
99772
  }
99773
+
99774
+ Time_X3DTimeDependentNode .prototype .set_enabled__ .call (this);
99698
99775
  },
99699
99776
  set_gain__ ()
99700
99777
  {
@@ -99709,30 +99786,33 @@ Object .assign (Object .setPrototypeOf (X3DSoundProcessingNode .prototype, Core_
99709
99786
  },
99710
99787
  set_channelCountMode__: (function ()
99711
99788
  {
99712
- const channelCountModes = new Set (["max", "clamped-max", "explicit"]);
99789
+ const channelCountModes = new Map ([
99790
+ ["MAX", "max"],
99791
+ ["CLAMPED-MAX", "clamped-max"],
99792
+ ["EXPLICIT", "explicit"],
99793
+ ]);
99713
99794
 
99714
99795
  return function ()
99715
99796
  {
99716
99797
  if (!this ._enabled .getValue ())
99717
99798
  return;
99718
99799
 
99719
- const channelCountMode = this ._channelCountMode .getValue () .toLowerCase () .replaceAll ("_", "-");
99720
-
99721
- this .audioDestination .channelCountMode = channelCountModes .has (channelCountMode) ? channelCountMode : "max";
99800
+ this .audioDestination .channelCountMode = channelCountModes .get (this ._channelCountMode .getValue ()) ?? "max";
99722
99801
  };
99723
99802
  })(),
99724
99803
  set_channelInterpretation__: (function ()
99725
99804
  {
99726
- const channelInterpretations = new Set (["speakers", "discrete"]);
99805
+ const channelInterpretations = new Map ([
99806
+ ["SPEAKERS", "speakers"],
99807
+ ["DISCRETE", "discrete"],
99808
+ ]);
99727
99809
 
99728
99810
  return function ()
99729
99811
  {
99730
99812
  if (!this ._enabled .getValue ())
99731
99813
  return;
99732
99814
 
99733
- const channelInterpretation = this ._channelInterpretation .getValue () .toLowerCase ();
99734
-
99735
- this .audioDestination .channelInterpretation = channelInterpretations .has (channelInterpretation) ? channelInterpretation : "speakers";
99815
+ this .audioDestination .channelInterpretation = channelInterpretations .get (this ._channelInterpretation .getValue ()) ?? "speakers";
99736
99816
  };
99737
99817
  })(),
99738
99818
  set_children__ ()
@@ -99744,7 +99824,7 @@ Object .assign (Object .setPrototypeOf (X3DSoundProcessingNode .prototype, Core_
99744
99824
 
99745
99825
  for (const child of this ._children)
99746
99826
  {
99747
- const childNode = Base_X3DCast (Base_X3DConstants .X3DChildNode, child);
99827
+ const childNode = Base_X3DCast (Base_X3DConstants .X3DSoundNode, child);
99748
99828
 
99749
99829
  if (!childNode)
99750
99830
  continue;
@@ -99778,7 +99858,7 @@ Object .assign (Object .setPrototypeOf (X3DSoundProcessingNode .prototype, Core_
99778
99858
  dispose ()
99779
99859
  {
99780
99860
  Time_X3DTimeDependentNode .prototype .dispose .call (this);
99781
- Core_X3DChildNode .prototype .dispose .call (this);
99861
+ Sound_X3DSoundNode .prototype .dispose .call (this);
99782
99862
  },
99783
99863
  });
99784
99864
 
@@ -99868,7 +99948,6 @@ function Analyser (executionContext)
99868
99948
  this .byteFrequencyData = new Uint8Array (this .analyserNode .frequencyBinCount);
99869
99949
  this .byteTimeDomainData = new Uint8Array (this .analyserNode .frequencyBinCount);
99870
99950
 
99871
- this .getAudioDestination () .connect (this .analyserNode);
99872
99951
  this .analyserNode .connect (this .getAudioSource ());
99873
99952
  }
99874
99953
 
@@ -99970,22 +100049,22 @@ Object .defineProperties (Analyser,
99970
100049
  fieldDefinitions:
99971
100050
  {
99972
100051
  value: new Base_FieldDefinitionArray ([
99973
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
99974
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
99975
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
100052
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
100053
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
100054
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
99976
100055
 
99977
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
99978
100056
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "fftSize", new x_ite_Fields .SFInt32 (2048)),
99979
100057
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "minDecibels", new x_ite_Fields .SFFloat (-100)),
99980
100058
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "maxDecibels", new x_ite_Fields .SFFloat (-30)),
99981
100059
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "smoothingTimeConstant", new x_ite_Fields .SFFloat (0.8)),
99982
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "tailTime", new x_ite_Fields .SFTime ()),
99983
100060
  new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "frequencyBinCount", new x_ite_Fields .SFInt32 ()), // skip test
99984
100061
  new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "byteFrequencyData", new x_ite_Fields .MFInt32 ()), // experimental
99985
100062
  new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "byteTimeDomainData", new x_ite_Fields .MFInt32 ()), // experimental
99986
100063
  new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "floatFrequencyData", new x_ite_Fields .MFFloat ()), // experimental
99987
100064
  new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "floatTimeDomainData", new x_ite_Fields .MFFloat ()), // experimental
99988
100065
 
100066
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
100067
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "tailTime", new x_ite_Fields .SFTime ()),
99989
100068
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
99990
100069
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
99991
100070
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelInterpretation", new x_ite_Fields .SFString ("SPEAKERS")),
@@ -100063,7 +100142,7 @@ x_ite_Namespace .add ("Analyser", "x_ite/Components/Sound/Analyser", Analyser_de
100063
100142
 
100064
100143
  function X3DSoundSourceNode (executionContext)
100065
100144
  {
100066
- Core_X3DChildNode .call (this, executionContext);
100145
+ Sound_X3DSoundNode .call (this, executionContext);
100067
100146
  Time_X3DTimeDependentNode .call (this, executionContext);
100068
100147
 
100069
100148
  this .addType (Base_X3DConstants .X3DSoundSourceNode);
@@ -100074,12 +100153,12 @@ function X3DSoundSourceNode (executionContext)
100074
100153
  this .mediaElement = null;
100075
100154
  }
100076
100155
 
100077
- Object .assign (Object .setPrototypeOf (X3DSoundSourceNode .prototype, Core_X3DChildNode .prototype),
100156
+ Object .assign (Object .setPrototypeOf (X3DSoundSourceNode .prototype, Sound_X3DSoundNode .prototype),
100078
100157
  Time_X3DTimeDependentNode .prototype,
100079
100158
  {
100080
100159
  initialize ()
100081
100160
  {
100082
- Core_X3DChildNode .prototype .initialize .call (this);
100161
+ Sound_X3DSoundNode .prototype .initialize .call (this);
100083
100162
  Time_X3DTimeDependentNode .prototype .initialize .call (this);
100084
100163
 
100085
100164
  this ._gain .addInterest ("set_gain__", this);
@@ -100090,43 +100169,45 @@ Object .assign (Object .setPrototypeOf (X3DSoundSourceNode .prototype, Core_X3DC
100090
100169
  {
100091
100170
  return this .audioSource;
100092
100171
  },
100172
+ getMediaElement ()
100173
+ {
100174
+ return this .mediaElement;
100175
+ },
100093
100176
  setMediaElement (value)
100094
100177
  {
100095
100178
  this .mediaElement ?.pause ();
100096
100179
 
100097
100180
  this .mediaElement = value;
100098
100181
 
100099
- if (value)
100100
- {
100101
- // Init mediaElement.
100182
+ if (!value)
100183
+ return;
100102
100184
 
100103
- this .set_loop ();
100185
+ // Init mediaElement.
100104
100186
 
100105
- // Handle events.
100187
+ this .set_loop ();
100106
100188
 
100107
- this ._duration_changed = this .mediaElement .duration;
100189
+ // Handle events.
100108
100190
 
100109
- this .resetElapsedTime ();
100191
+ this .resetElapsedTime ();
100110
100192
 
100111
- if (this ._isActive .getValue ())
100193
+ if (this ._isActive .getValue ())
100194
+ {
100195
+ if (this ._isPaused .getValue ())
100112
100196
  {
100113
- if (this ._isPaused .getValue ())
100114
- {
100115
- this .set_pause ();
100116
- }
100117
- else
100118
- {
100119
- if (this .getLiveState ())
100120
- this .set_start ();
100121
- else
100122
- this .set_pause ();
100123
- }
100197
+ this .set_pause ();
100124
100198
  }
100125
100199
  else
100126
100200
  {
100127
- this .set_stop ();
100201
+ if (this .getLiveState ())
100202
+ this .set_start ();
100203
+ else
100204
+ this .set_pause ();
100128
100205
  }
100129
100206
  }
100207
+ else
100208
+ {
100209
+ this .set_stop ();
100210
+ }
100130
100211
  },
100131
100212
  set_gain__ ()
100132
100213
  {
@@ -100136,16 +100217,19 @@ Object .assign (Object .setPrototypeOf (X3DSoundSourceNode .prototype, Core_X3DC
100136
100217
  { },
100137
100218
  set_loop ()
100138
100219
  {
100139
- if (this .mediaElement)
100140
- this .mediaElement .loop = this ._loop .getValue ();
100220
+ if (!this .mediaElement)
100221
+ return;
100222
+
100223
+ this .mediaElement .loop = this ._loop .getValue ();
100141
100224
  },
100142
100225
  set_start ()
100143
100226
  {
100144
- if (this .mediaElement)
100145
- {
100146
- this .mediaElement .currentTime = 0;
100147
- this .getBrowser () .startAudioElement (this .mediaElement);
100148
- }
100227
+ if (!this .mediaElement)
100228
+ return;
100229
+
100230
+ this .mediaElement .currentTime = 0;
100231
+
100232
+ this .getBrowser () .startAudioElement (this .mediaElement);
100149
100233
  },
100150
100234
  set_pause ()
100151
100235
  {
@@ -100153,7 +100237,7 @@ Object .assign (Object .setPrototypeOf (X3DSoundSourceNode .prototype, Core_X3DC
100153
100237
  },
100154
100238
  set_resume ()
100155
100239
  {
100156
- this .mediaElement ?.play () .catch (Function .prototype);
100240
+ this .getBrowser () .startAudioElement (this .mediaElement);
100157
100241
  },
100158
100242
  set_stop ()
100159
100243
  {
@@ -100168,11 +100252,11 @@ Object .assign (Object .setPrototypeOf (X3DSoundSourceNode .prototype, Core_X3DC
100168
100252
  },
100169
100253
  set_time ()
100170
100254
  {
100171
- this ._elapsedTime = this .getElapsedTime ();
100172
-
100173
100255
  if (!this .mediaElement)
100174
100256
  return;
100175
100257
 
100258
+ this ._elapsedTime = this .getElapsedTime ();
100259
+
100176
100260
  if (this .mediaElement .currentTime < this .mediaElement .duration)
100177
100261
  return;
100178
100262
 
@@ -100181,7 +100265,7 @@ Object .assign (Object .setPrototypeOf (X3DSoundSourceNode .prototype, Core_X3DC
100181
100265
  dispose ()
100182
100266
  {
100183
100267
  Time_X3DTimeDependentNode .prototype .dispose .call (this);
100184
- Core_X3DChildNode .prototype .dispose .call (this);
100268
+ Sound_X3DSoundNode .prototype .dispose .call (this);
100185
100269
  },
100186
100270
  });
100187
100271
 
@@ -100204,8 +100288,223 @@ const X3DSoundSourceNode_default_ = X3DSoundSourceNode;
100204
100288
 
100205
100289
  x_ite_Namespace .add ("X3DSoundSourceNode", "x_ite/Components/Sound/X3DSoundSourceNode", X3DSoundSourceNode_default_);
100206
100290
  /* harmony default export */ const Sound_X3DSoundSourceNode = (X3DSoundSourceNode_default_);
100291
+ ;// CONCATENATED MODULE: ./src/x_ite/Browser/Sound/AudioElement.js
100292
+
100293
+ /*******************************************************************************
100294
+ *
100295
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
100296
+ *
100297
+ * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011 - 2022.
100298
+ *
100299
+ * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
100300
+ *
100301
+ * The copyright notice above does not evidence any actual of intended
100302
+ * publication of such source code, and is an unpublished work by create3000.
100303
+ * This material contains CONFIDENTIAL INFORMATION that is the property of
100304
+ * create3000.
100305
+ *
100306
+ * No permission is granted to copy, distribute, or create derivative works from
100307
+ * the contents of this software, in whole or in part, without the prior written
100308
+ * permission of create3000.
100309
+ *
100310
+ * NON-MILITARY USE ONLY
100311
+ *
100312
+ * All create3000 software are effectively free software with a non-military use
100313
+ * restriction. It is free. Well commented source is provided. You may reuse the
100314
+ * source in any way you please with the exception anything that uses it must be
100315
+ * marked to indicate is contains 'non-military use only' components.
100316
+ *
100317
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
100318
+ *
100319
+ * Copyright 2011 - 2022, Holger Seelig <holger.seelig@yahoo.de>.
100320
+ *
100321
+ * This file is part of the X_ITE Project.
100322
+ *
100323
+ * X_ITE is free software: you can redistribute it and/or modify it under the
100324
+ * terms of the GNU General Public License version 3 only, as published by the
100325
+ * Free Software Foundation.
100326
+ *
100327
+ * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
100328
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
100329
+ * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
100330
+ * details (a copy is included in the LICENSE file that accompanied this code).
100331
+ *
100332
+ * You should have received a copy of the GNU General Public License version 3
100333
+ * along with X_ITE. If not, see <https://www.gnu.org/licenses/gpl.html> for a
100334
+ * copy of the GPLv3 License.
100335
+ *
100336
+ * For Silvio, Joy and Adi.
100337
+ *
100338
+ ******************************************************************************/
100339
+
100340
+ const AudioElement_default_ = {
100341
+ create (audioContext, audioSource, audioBuffer)
100342
+ {
100343
+ let
100344
+ audioBufferSource = new AudioBufferSourceNode (audioContext),
100345
+ detune = 0,
100346
+ playbackRate = 1,
100347
+ loopStart = 0,
100348
+ loopEnd = 0,
100349
+ loop = false,
100350
+ startTime = 0,
100351
+ currentTime = 0,
100352
+ active = false;
100353
+
100354
+ return Object .defineProperties ({ },
100355
+ {
100356
+ detune:
100357
+ {
100358
+ get ()
100359
+ {
100360
+ return detune;
100361
+ },
100362
+ set (value)
100363
+ {
100364
+ detune = value;
100365
+ audioBufferSource .detune .value = value;
100366
+ },
100367
+ },
100368
+ playbackRate:
100369
+ {
100370
+ get ()
100371
+ {
100372
+ return playbackRate;
100373
+ },
100374
+ set (value)
100375
+ {
100376
+ playbackRate = value;
100377
+ audioBufferSource .playbackRate .value = value;
100378
+ },
100379
+ },
100380
+ loopStart:
100381
+ {
100382
+ get ()
100383
+ {
100384
+ return loopStart;
100385
+ },
100386
+ set (value)
100387
+ {
100388
+ loopStart = value;
100389
+ audioBufferSource .loopStart = value;
100390
+ },
100391
+ },
100392
+ loopEnd:
100393
+ {
100394
+ get ()
100395
+ {
100396
+ return loopEnd;
100397
+ },
100398
+ set (value)
100399
+ {
100400
+ loopEnd = value;
100401
+ audioBufferSource .loopEnd = value;
100402
+ },
100403
+ },
100404
+ loop:
100405
+ {
100406
+ get ()
100407
+ {
100408
+ return loop;
100409
+ },
100410
+ set (value)
100411
+ {
100412
+ if (!value)
100413
+ startTime = audioContext .currentTime - this .currentTime;
100414
+
100415
+ loop = value;
100416
+ audioBufferSource .loop = value;
100417
+ },
100418
+ },
100419
+ currentTime:
100420
+ {
100421
+ get ()
100422
+ {
100423
+ if (active)
100424
+ {
100425
+ if (this .duration)
100426
+ {
100427
+ if (this .loop)
100428
+ return (audioContext .currentTime - startTime) % this .duration;
100429
+
100430
+ return audioContext .currentTime - startTime;
100431
+ }
100432
+
100433
+ return 0;
100434
+ }
100435
+
100436
+ return currentTime;
100437
+ },
100438
+ set (value)
100439
+ {
100440
+ currentTime = value;
100441
+ startTime = audioContext .currentTime - currentTime;
100442
+
100443
+ if (!active)
100444
+ return;
100445
+
100446
+ this .pause ();
100447
+ this .play ();
100448
+ },
100449
+ },
100450
+ duration:
100451
+ {
100452
+ value: audioBuffer ?.duration ?? 0,
100453
+ },
100454
+ play:
100455
+ {
100456
+ value ()
100457
+ {
100458
+ if (active)
100459
+ return Promise .resolve ();
100460
+
100461
+ audioBufferSource = new AudioBufferSourceNode (audioContext);
100462
+
100463
+ audioBufferSource .buffer = audioBuffer;
100464
+ audioBufferSource .loopStart = loopStart;
100465
+ audioBufferSource .loopEnd = loopEnd;
100466
+ audioBufferSource .loop = loop;
100467
+ audioBufferSource .playbackRate .value = playbackRate;
100468
+
100469
+ audioBufferSource .connect (audioSource);
100470
+ audioBufferSource .start (0, currentTime);
100471
+
100472
+ startTime = audioContext .currentTime - currentTime;
100473
+ active = true;
100474
+
100475
+ return Promise .resolve ();
100476
+ },
100477
+ },
100478
+ pause:
100479
+ {
100480
+ value ()
100481
+ {
100482
+ if (!active)
100483
+ return;
100484
+
100485
+ audioBufferSource .stop ();
100486
+ audioBufferSource .disconnect ();
100487
+
100488
+ currentTime = this .currentTime;
100489
+ active = false;
100490
+
100491
+ // Create 1s silence to clear channels.
100492
+
100493
+ const silence = new AudioBufferSourceNode (audioContext);
100494
+
100495
+ silence .connect (audioSource);
100496
+ silence .start ();
100497
+ silence .stop (audioContext .currentTime + 1);
100498
+ },
100499
+ },
100500
+ });
100501
+ },
100502
+ };
100503
+ ;
100504
+
100505
+ x_ite_Namespace .add ("AudioElement", "x_ite/Browser/Sound/AudioElement", AudioElement_default_);
100506
+ /* harmony default export */ const AudioElement = (AudioElement_default_);
100207
100507
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Sound/AudioClip.js
100208
- /* provided dependency */ var AudioClip_$ = __webpack_require__(183);
100209
100508
  /*******************************************************************************
100210
100509
  *
100211
100510
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -100261,20 +100560,14 @@ x_ite_Namespace .add ("X3DSoundSourceNode", "x_ite/Components/Sound/X3DSoundSour
100261
100560
 
100262
100561
 
100263
100562
 
100563
+
100564
+
100264
100565
  function AudioClip (executionContext)
100265
100566
  {
100266
100567
  Sound_X3DSoundSourceNode .call (this, executionContext);
100267
100568
  Networking_X3DUrlObject .call (this, executionContext);
100268
100569
 
100269
100570
  this .addType (Base_X3DConstants .AudioClip);
100270
-
100271
- const audioContext = this .getBrowser () .getAudioContext ();
100272
-
100273
- this .urlStack = new x_ite_Fields .MFString ();
100274
- this .audio = AudioClip_$("<audio></audio>");
100275
- this .sourceNode = audioContext .createMediaElementSource (this .audio [0]);
100276
-
100277
- this .sourceNode .connect (this .getAudioSource ());
100278
100571
  }
100279
100572
 
100280
100573
  Object .assign (Object .setPrototypeOf (AudioClip .prototype, Sound_X3DSoundSourceNode .prototype),
@@ -100285,12 +100578,6 @@ Object .assign (Object .setPrototypeOf (AudioClip .prototype, Sound_X3DSoundSour
100285
100578
  Sound_X3DSoundSourceNode .prototype .initialize .call (this);
100286
100579
  Networking_X3DUrlObject .prototype .initialize .call (this);
100287
100580
 
100288
- this .audio
100289
- .on ("abort error", this .setError .bind (this))
100290
- .on ("suspend stalled", this .setTimeout .bind (this))
100291
- .prop ("crossOrigin", "Anonymous")
100292
- .prop ("preload", "auto");
100293
-
100294
100581
  this .requestImmediateLoad () .catch (Function .prototype);
100295
100582
  },
100296
100583
  set_live__ ()
@@ -100304,68 +100591,39 @@ Object .assign (Object .setPrototypeOf (AudioClip .prototype, Sound_X3DSoundSour
100304
100591
  },
100305
100592
  loadData ()
100306
100593
  {
100307
- this .setMediaElement (null);
100308
- this .urlStack .setValue (this ._url);
100309
- this .audio .on ("loadeddata", this .setAudio .bind (this));
100310
- this .loadNext ();
100311
- },
100312
- loadNext ()
100313
- {
100314
- if (this .urlStack .length === 0)
100315
- {
100316
- this .audio .off ("loadeddata");
100317
- this ._duration_changed = -1;
100318
- this .setLoadState (Base_X3DConstants .FAILED_STATE);
100319
- return;
100320
- }
100321
-
100322
- // Get URL.
100323
-
100324
- this .URL = new URL (this .urlStack .shift (), this .getExecutionContext () .getBaseURL ());
100594
+ this .unloadData ();
100325
100595
 
100326
- if (this .URL .protocol !== "data:")
100596
+ new InputOutput_FileLoader (this) .loadDocument (this ._url, async (data, URL) =>
100327
100597
  {
100328
- if (!this .getCache ())
100329
- this .URL .searchParams .set ("_", Date .now ());
100330
- }
100598
+ if (data === null)
100599
+ {
100600
+ this .unloadData ();
100601
+ this .setLoadState (Base_X3DConstants .FAILED_STATE);
100602
+ }
100603
+ else if (data instanceof ArrayBuffer)
100604
+ {
100605
+ await this .setArrayBuffer (data);
100331
100606
 
100332
- this .audio .attr ("src", this .URL .href);
100333
- this .audio .get (0) .load ();
100334
- },
100335
- setTimeout (event)
100336
- {
100337
- setTimeout (() =>
100338
- {
100339
- if (this .checkLoadState () === Base_X3DConstants .IN_PROGRESS_STATE)
100340
- this .setError (event);
100341
- },
100342
- 30_000);
100343
- },
100344
- setError (event)
100345
- {
100346
- if (this .URL .protocol !== "data:")
100347
- console .warn (`Error loading audio '${decodeURI (this .URL .href)}'`, event .type);
100607
+ this .setLoadState (Base_X3DConstants .COMPLETE_STATE);
100348
100608
 
100349
- this .loadNext ();
100609
+ if (DEVELOPMENT)
100610
+ {
100611
+ if (URL .protocol !== "data:")
100612
+ console .info (`Done loading audio '${decodeURI (URL .href)}'`);
100613
+ }
100614
+ }
100615
+ });
100350
100616
  },
100351
- setAudio ()
100617
+ async setArrayBuffer (arrayBuffer)
100352
100618
  {
100353
- try
100354
- {
100355
- if (DEVELOPMENT)
100356
- {
100357
- if (this .URL .protocol !== "data:")
100358
- console .info (`Done loading audio '${decodeURI (this .URL .href)}'`);
100359
- }
100619
+ const
100620
+ audioContext = this .getBrowser () .getAudioContext (),
100621
+ audioBuffer = await audioContext .decodeAudioData (arrayBuffer),
100622
+ media = AudioElement .create (audioContext, this .getAudioSource (), audioBuffer);
100360
100623
 
100361
- this .audio .off ("loadeddata");
100362
- this .setMediaElement (this .audio [0]);
100363
- this .setLoadState (Base_X3DConstants .COMPLETE_STATE);
100364
- }
100365
- catch (error)
100366
- {
100367
- this .setError ({ type: error .message });
100368
- }
100624
+ this ._duration_changed = media .duration;
100625
+
100626
+ this .setMediaElement (media);
100369
100627
  },
100370
100628
  dispose ()
100371
100629
  {
@@ -100427,85 +100685,6 @@ const AudioClip_default_ = AudioClip;
100427
100685
 
100428
100686
  x_ite_Namespace .add ("AudioClip", "x_ite/Components/Sound/AudioClip", AudioClip_default_);
100429
100687
  /* harmony default export */ const Sound_AudioClip = (AudioClip_default_);
100430
- ;// CONCATENATED MODULE: ./src/x_ite/Components/Sound/X3DSoundNode.js
100431
- /*******************************************************************************
100432
- *
100433
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
100434
- *
100435
- * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011 - 2022.
100436
- *
100437
- * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
100438
- *
100439
- * The copyright notice above does not evidence any actual of intended
100440
- * publication of such source code, and is an unpublished work by create3000.
100441
- * This material contains CONFIDENTIAL INFORMATION that is the property of
100442
- * create3000.
100443
- *
100444
- * No permission is granted to copy, distribute, or create derivative works from
100445
- * the contents of this software, in whole or in part, without the prior written
100446
- * permission of create3000.
100447
- *
100448
- * NON-MILITARY USE ONLY
100449
- *
100450
- * All create3000 software are effectively free software with a non-military use
100451
- * restriction. It is free. Well commented source is provided. You may reuse the
100452
- * source in any way you please with the exception anything that uses it must be
100453
- * marked to indicate is contains 'non-military use only' components.
100454
- *
100455
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
100456
- *
100457
- * Copyright 2011 - 2022, Holger Seelig <holger.seelig@yahoo.de>.
100458
- *
100459
- * This file is part of the X_ITE Project.
100460
- *
100461
- * X_ITE is free software: you can redistribute it and/or modify it under the
100462
- * terms of the GNU General Public License version 3 only, as published by the
100463
- * Free Software Foundation.
100464
- *
100465
- * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
100466
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
100467
- * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
100468
- * details (a copy is included in the LICENSE file that accompanied this code).
100469
- *
100470
- * You should have received a copy of the GNU General Public License version 3
100471
- * along with X_ITE. If not, see <https://www.gnu.org/licenses/gpl.html> for a
100472
- * copy of the GPLv3 License.
100473
- *
100474
- * For Silvio, Joy and Adi.
100475
- *
100476
- ******************************************************************************/
100477
-
100478
-
100479
-
100480
-
100481
- function X3DSoundNode (executionContext)
100482
- {
100483
- Core_X3DChildNode .call (this, executionContext);
100484
-
100485
- this .addType (Base_X3DConstants .X3DSoundNode);
100486
- }
100487
-
100488
- Object .setPrototypeOf (X3DSoundNode .prototype, Core_X3DChildNode .prototype);
100489
-
100490
- Object .defineProperties (X3DSoundNode,
100491
- {
100492
- typeName:
100493
- {
100494
- value: "X3DSoundNode",
100495
- enumerable: true,
100496
- },
100497
- componentInfo:
100498
- {
100499
- value: Object .freeze ({ name: "Sound", level: 1 }),
100500
- enumerable: true,
100501
- },
100502
- });
100503
-
100504
- const X3DSoundNode_default_ = X3DSoundNode;
100505
- ;
100506
-
100507
- x_ite_Namespace .add ("X3DSoundNode", "x_ite/Components/Sound/X3DSoundNode", X3DSoundNode_default_);
100508
- /* harmony default export */ const Sound_X3DSoundNode = (X3DSoundNode_default_);
100509
100688
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Sound/X3DSoundDestinationNode.js
100510
100689
  /*******************************************************************************
100511
100690
  *
@@ -100616,24 +100795,33 @@ Object .assign (Object .setPrototypeOf (X3DSoundDestinationNode .prototype, Soun
100616
100795
  },
100617
100796
  set_channelCountMode__: (function ()
100618
100797
  {
100619
- const channelCountModes = new Set (["max", "clamped-max", "explicit"]);
100798
+ const channelCountModes = new Map ([
100799
+ ["MAX", "max"],
100800
+ ["CLAMPED-MAX", "clamped-max"],
100801
+ ["EXPLICIT", "explicit"],
100802
+ ]);
100620
100803
 
100621
100804
  return function ()
100622
100805
  {
100623
- const channelCountMode = this ._channelCountMode .getValue () .toLowerCase () .replaceAll ("_", "-");
100806
+ if (!this ._enabled .getValue ())
100807
+ return;
100624
100808
 
100625
- this .audioDestination .channelCountMode = channelCountModes .has (channelCountMode) ? channelCountMode : "max";
100809
+ this .audioDestination .channelCountMode = channelCountModes .get (this ._channelCountMode .getValue ()) ?? "max";
100626
100810
  };
100627
100811
  })(),
100628
100812
  set_channelInterpretation__: (function ()
100629
100813
  {
100630
- const channelInterpretations = new Set (["speakers", "discrete"]);
100814
+ const channelInterpretations = new Map ([
100815
+ ["SPEAKERS", "speakers"],
100816
+ ["DISCRETE", "discrete"],
100817
+ ]);
100631
100818
 
100632
100819
  return function ()
100633
100820
  {
100634
- const channelInterpretation = this ._channelInterpretation .getValue () .toLowerCase ();
100821
+ if (!this ._enabled .getValue ())
100822
+ return;
100635
100823
 
100636
- this .audioDestination .channelInterpretation = channelInterpretations .has (channelInterpretation) ? channelInterpretation : "speakers";
100824
+ this .audioDestination .channelInterpretation = channelInterpretations .get (this ._channelInterpretation .getValue ()) ?? "speakers";
100637
100825
  };
100638
100826
  })(),
100639
100827
  set_children__ ()
@@ -100772,21 +100960,21 @@ Object .assign (Object .setPrototypeOf (AudioDestination .prototype, Sound_X3DSo
100772
100960
  },
100773
100961
  getSoundDestination ()
100774
100962
  {
100775
- return this .mediaStreamDestination;
100963
+ return this .mediaStreamAudioDestinationNode;
100776
100964
  },
100777
100965
  set_enabled__ ()
100778
100966
  {
100779
100967
  const active = this ._enabled .getValue () && this .getLive () .getValue ();
100780
100968
 
100781
- if (!!this .mediaStreamDestination === active)
100969
+ if (!!this .mediaStreamAudioDestinationNode === active)
100782
100970
  return;
100783
100971
 
100784
100972
  if (active)
100785
100973
  {
100786
100974
  const audioContext = this .getBrowser () .getAudioContext ();
100787
100975
 
100788
- this .mediaStreamDestination = audioContext .createMediaStreamDestination ();
100789
- this .audioElement .srcObject = this .mediaStreamDestination .stream;
100976
+ this .mediaStreamAudioDestinationNode = new MediaStreamAudioDestinationNode (audioContext);
100977
+ this .audioElement .srcObject = this .mediaStreamAudioDestinationNode .stream;
100790
100978
 
100791
100979
  this .getBrowser () .startAudioElement (this .audioElement);
100792
100980
  }
@@ -100794,24 +100982,22 @@ Object .assign (Object .setPrototypeOf (AudioDestination .prototype, Sound_X3DSo
100794
100982
  {
100795
100983
  this .audioElement .pause ();
100796
100984
 
100797
- for (const track of this .mediaStreamDestination .stream .getAudioTracks ())
100985
+ for (const track of this .mediaStreamAudioDestinationNode .stream .getAudioTracks ())
100798
100986
  track .stop ();
100799
100987
 
100800
- for (const track of this .mediaStreamDestination .stream .getVideoTracks ())
100988
+ for (const track of this .mediaStreamAudioDestinationNode .stream .getVideoTracks ())
100801
100989
  track .stop ();
100802
100990
 
100803
- this .mediaStreamDestination = null;
100991
+ this .mediaStreamAudioDestinationNode = null;
100804
100992
  }
100805
100993
 
100806
100994
  Sound_X3DSoundDestinationNode .prototype .set_enabled__ .call (this);
100807
100995
  },
100808
100996
  set_mediaDeviceID__ ()
100809
100997
  {
100810
- // Safari has no support yet, as of Aug 2023.
100811
- if (!this .audioElement .setSinkId)
100812
- return;
100998
+ // Safari has no support for `setSinkId` yet, as of Aug 2023.
100813
100999
 
100814
- this .audioElement .setSinkId (this ._mediaDeviceID .getValue ()) .catch (error =>
101000
+ this .audioElement .setSinkId ?.(this ._mediaDeviceID .getValue ()) .catch (error =>
100815
101001
  {
100816
101002
  console .error (error .message);
100817
101003
 
@@ -100850,7 +101036,7 @@ Object .defineProperties (AudioDestination,
100850
101036
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
100851
101037
 
100852
101038
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
100853
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "mediaDeviceID", new x_ite_Fields .SFString ()), // skip test
101039
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "mediaDeviceID", new x_ite_Fields .SFString ()),
100854
101040
 
100855
101041
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
100856
101042
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
@@ -100923,14 +101109,71 @@ x_ite_Namespace .add ("AudioDestination", "x_ite/Components/Sound/AudioDestinati
100923
101109
 
100924
101110
 
100925
101111
 
101112
+
100926
101113
  function BiquadFilter (executionContext)
100927
101114
  {
100928
101115
  Sound_X3DSoundProcessingNode .call (this, executionContext);
100929
101116
 
100930
101117
  this .addType (Base_X3DConstants .BiquadFilter);
101118
+
101119
+ const audioContext = this .getBrowser () .getAudioContext ();
101120
+
101121
+ this .biquadFilterNode = new BiquadFilterNode (audioContext);
101122
+
101123
+ this .biquadFilterNode .connect (this .getAudioSource ());
100931
101124
  }
100932
101125
 
100933
- Object .setPrototypeOf (BiquadFilter .prototype, Sound_X3DSoundProcessingNode .prototype);
101126
+ Object .assign (Object .setPrototypeOf (BiquadFilter .prototype, Sound_X3DSoundProcessingNode .prototype),
101127
+ {
101128
+ initialize ()
101129
+ {
101130
+ Sound_X3DSoundProcessingNode .prototype .initialize .call (this);
101131
+
101132
+ this ._detune .addInterest ("set_detune__", this);
101133
+ this ._type .addInterest ("set_type__", this);
101134
+ this ._frequency .addInterest ("set_frequency__", this);
101135
+ this ._qualityFactor .addInterest ("set_qualityFactor__", this);
101136
+
101137
+ this .set_detune__ ();
101138
+ this .set_type__ ();
101139
+ this .set_frequency__ ();
101140
+ this .set_qualityFactor__ ();
101141
+ },
101142
+ getSoundProcessor ()
101143
+ {
101144
+ return this .biquadFilterNode;
101145
+ },
101146
+ set_detune__ ()
101147
+ {
101148
+ this .biquadFilterNode .detune .value = this ._detune .getValue ();
101149
+ },
101150
+ set_type__: (function ()
101151
+ {
101152
+ const types = new Map ([
101153
+ ["LOWPASS", "lowpass"],
101154
+ ["HIGHPASS", "highpass"],
101155
+ ["BANDPASS", "bandpass"],
101156
+ ["LOWSHELF", "lowshelf"],
101157
+ ["HIGHSHELF", "highshelf"],
101158
+ ["PEAKING", "peaking"],
101159
+ ["NOTCH", "notch"],
101160
+ ["ALLPASS", "allpass"],
101161
+ ]);
101162
+
101163
+ return function ()
101164
+ {
101165
+ this .biquadFilterNode .type = types .get (this ._type .getValue ()) ?? "lowpass";
101166
+ };
101167
+ })(),
101168
+ set_frequency__ ()
101169
+ {
101170
+ this .biquadFilterNode .frequency .value = Math .max (this ._frequency .getValue (), 0);
101171
+ },
101172
+ set_qualityFactor__ ()
101173
+ {
101174
+ this .biquadFilterNode .Q .value = Math_Algorithm .clamp (this ._qualityFactor .getValue (), 0.0001, 1000);
101175
+ },
101176
+ });
100934
101177
 
100935
101178
  Object .defineProperties (BiquadFilter,
100936
101179
  {
@@ -100957,16 +101200,16 @@ Object .defineProperties (BiquadFilter,
100957
101200
  fieldDefinitions:
100958
101201
  {
100959
101202
  value: new Base_FieldDefinitionArray ([
100960
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
100961
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
100962
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
101203
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
101204
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
101205
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
100963
101206
 
100964
101207
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
100965
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "frequency", new x_ite_Fields .SFFloat (350)),
100966
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "detune", new x_ite_Fields .SFFloat (0)),
101208
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "tailTime", new x_ite_Fields .SFTime ()),
101209
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "detune", new x_ite_Fields .SFFloat ()),
100967
101210
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "type", new x_ite_Fields .SFString ("LOWPASS")),
101211
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "frequency", new x_ite_Fields .SFFloat (350)),
100968
101212
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "qualityFactor", new x_ite_Fields .SFFloat (1)),
100969
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "tailTime", new x_ite_Fields .SFTime ()),
100970
101213
 
100971
101214
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
100972
101215
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
@@ -101046,6 +101289,10 @@ x_ite_Namespace .add ("BiquadFilter", "x_ite/Components/Sound/BiquadFilter", Biq
101046
101289
 
101047
101290
 
101048
101291
 
101292
+
101293
+
101294
+
101295
+
101049
101296
  function BufferAudioSource (executionContext)
101050
101297
  {
101051
101298
  Sound_X3DSoundSourceNode .call (this, executionContext);
@@ -101061,6 +101308,148 @@ Object .assign (Object .setPrototypeOf (BufferAudioSource .prototype, Sound_X3DS
101061
101308
  {
101062
101309
  Sound_X3DSoundSourceNode .prototype .initialize .call (this);
101063
101310
  Networking_X3DUrlObject .prototype .initialize .call (this);
101311
+
101312
+ this ._numberOfChannels .addInterest ("set_buffer__", this);
101313
+ this ._sampleRate .addInterest ("set_buffer__", this);
101314
+ this ._bufferLength .addInterest ("set_buffer__", this);
101315
+ this ._buffer .addInterest ("set_buffer__", this);
101316
+ this ._detune .addInterest ("set_detune__", this);
101317
+ this ._playbackRate .addInterest ("set_playbackRate__", this);
101318
+ this ._loopStart .addInterest ("set_loopStart__", this);
101319
+ this ._loopEnd .addInterest ("set_loopEnd__", this);
101320
+
101321
+ this .set_buffer__ ();
101322
+
101323
+ this .requestImmediateLoad () .catch (Function .prototype);
101324
+ },
101325
+ set_live__ ()
101326
+ {
101327
+ Sound_X3DSoundSourceNode .prototype .set_live__ .call (this);
101328
+ Networking_X3DUrlObject .prototype .set_live__ .call (this);
101329
+ },
101330
+ set_buffer__ ()
101331
+ {
101332
+ if (this ._load .getValue ())
101333
+ return;
101334
+
101335
+ const
101336
+ audioContext = this .getBrowser () .getAudioContext (),
101337
+ numberOfChannels = Math_Algorithm .clamp (this ._numberOfChannels .getValue (), 1, 32),
101338
+ sampleRate = Math_Algorithm .clamp (this ._sampleRate .getValue (), 3000, 768000),
101339
+ bufferLength = Math .max (this ._bufferLength .getValue (), 0);
101340
+
101341
+ if (bufferLength)
101342
+ {
101343
+ const
101344
+ audioBuffer = audioContext .createBuffer (numberOfChannels, bufferLength, sampleRate),
101345
+ buffer = this ._buffer .getValue ();
101346
+
101347
+ this ._bufferDuration = bufferLength / sampleRate;
101348
+
101349
+ if (this ._buffer .length >= bufferLength * numberOfChannels)
101350
+ {
101351
+ for (let i = 0; i < numberOfChannels; ++ i)
101352
+ {
101353
+ const channelData = audioBuffer .getChannelData (i);
101354
+
101355
+ channelData .set (buffer .subarray (i * bufferLength, (i + 1) * bufferLength));
101356
+ }
101357
+ }
101358
+
101359
+ this .setMediaElement (AudioElement .create (audioContext, this .getAudioSource (), audioBuffer));
101360
+
101361
+ this .set_detune__ ();
101362
+ this .set_playbackRate__ ();
101363
+ this .set_loopStart__ ();
101364
+ this .set_loopEnd__ ();
101365
+ }
101366
+ else
101367
+ {
101368
+ this ._bufferDuration = 0;
101369
+
101370
+ this .setMediaElement (null);
101371
+ }
101372
+ },
101373
+ set_detune__ ()
101374
+ {
101375
+ const media = this .getMediaElement ();
101376
+
101377
+ if (media)
101378
+ media .detune = this ._detune .getValue ();
101379
+ },
101380
+ set_playbackRate__ ()
101381
+ {
101382
+ const media = this .getMediaElement ();
101383
+
101384
+ if (media)
101385
+ media .playbackRate = this ._playbackRate .getValue ();
101386
+ },
101387
+ set_loopStart__ ()
101388
+ {
101389
+ const media = this .getMediaElement ();
101390
+
101391
+ if (media)
101392
+ media .loopStart = Math .max (this ._loopStart .getValue (), 0);
101393
+ },
101394
+ set_loopEnd__ ()
101395
+ {
101396
+ const media = this .getMediaElement ();
101397
+
101398
+ if (media)
101399
+ media .loopEnd = Math .max (this ._loopEnd .getValue (), 0);
101400
+ },
101401
+ unloadData ()
101402
+ {
101403
+ this .set_buffer__ ();
101404
+ },
101405
+ loadData ()
101406
+ {
101407
+ this .unloadData ();
101408
+
101409
+ new InputOutput_FileLoader (this) .loadDocument (this ._url, async (data, URL) =>
101410
+ {
101411
+ if (data === null)
101412
+ {
101413
+ // No URL could be loaded.
101414
+ this .unloadData ();
101415
+ this .setLoadState (Base_X3DConstants .FAILED_STATE);
101416
+ }
101417
+ else if (data instanceof ArrayBuffer)
101418
+ {
101419
+ await this .setArrayBuffer (data);
101420
+
101421
+ this .setLoadState (Base_X3DConstants .COMPLETE_STATE);
101422
+
101423
+ if (DEVELOPMENT)
101424
+ {
101425
+ if (URL .protocol !== "data:")
101426
+ console .info (`Done loading audio '${decodeURI (URL .href)}'`);
101427
+ }
101428
+ }
101429
+ });
101430
+ },
101431
+ async setArrayBuffer (arrayBuffer)
101432
+ {
101433
+ const
101434
+ audioContext = this .getBrowser () .getAudioContext (),
101435
+ audioBuffer = await audioContext .decodeAudioData (arrayBuffer),
101436
+ bufferData = new Float32Array (audioBuffer .length * audioBuffer .numberOfChannels);
101437
+
101438
+ for (let i = 0; i < audioBuffer .numberOfChannels; ++ i)
101439
+ bufferData .set (audioBuffer .getChannelData (i), i * audioBuffer .length);
101440
+
101441
+ this ._numberOfChannels = audioBuffer .numberOfChannels;
101442
+ this ._sampleRate = audioBuffer .sampleRate;
101443
+ this ._bufferLength = audioBuffer .length;
101444
+ this ._buffer = bufferData;
101445
+ this ._bufferDuration = audioBuffer .duration;
101446
+
101447
+ this .setMediaElement (AudioElement .create (audioContext, this .getAudioSource (), audioBuffer));
101448
+
101449
+ this .set_detune__ ();
101450
+ this .set_playbackRate__ ();
101451
+ this .set_loopStart__ ();
101452
+ this .set_loopEnd__ ();
101064
101453
  },
101065
101454
  dispose ()
101066
101455
  {
@@ -101103,17 +101492,17 @@ Object .defineProperties (BufferAudioSource,
101103
101492
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "autoRefresh", new x_ite_Fields .SFTime ()),
101104
101493
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "autoRefreshTimeLimit", new x_ite_Fields .SFTime (3600)),
101105
101494
 
101106
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
101107
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "detune", new x_ite_Fields .SFFloat (0)),
101108
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "buffer", new x_ite_Fields .MFFloat ()),
101109
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "bufferDuration", new x_ite_Fields .SFTime ()),
101110
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "bufferLength", new x_ite_Fields .SFInt32 ()),
101111
101495
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "numberOfChannels", new x_ite_Fields .SFInt32 ()),
101112
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "sampleRate", new x_ite_Fields .SFFloat (0)),
101496
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "sampleRate", new x_ite_Fields .SFFloat ()),
101497
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "bufferLength", new x_ite_Fields .SFInt32 ()), // skip test
101498
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "buffer", new x_ite_Fields .MFFloat ()),
101499
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "bufferDuration", new x_ite_Fields .SFTime ()), // skip test
101500
+
101501
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
101502
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "detune", new x_ite_Fields .SFFloat ()),
101113
101503
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "playbackRate", new x_ite_Fields .SFFloat (1)),
101114
101504
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopStart", new x_ite_Fields .SFTime ()),
101115
101505
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopEnd", new x_ite_Fields .SFTime ()),
101116
-
101117
101506
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
101118
101507
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
101119
101508
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelInterpretation", new x_ite_Fields .SFString ("SPEAKERS")),
@@ -101268,30 +101657,33 @@ Object .assign (Object .setPrototypeOf (X3DSoundChannelNode .prototype, Sound_X3
101268
101657
  },
101269
101658
  set_channelCountMode__: (function ()
101270
101659
  {
101271
- const channelCountModes = new Set (["max", "clamped-max", "explicit"]);
101660
+ const channelCountModes = new Map ([
101661
+ ["MAX", "max"],
101662
+ ["CLAMPED-MAX", "clamped-max"],
101663
+ ["EXPLICIT", "explicit"],
101664
+ ]);
101272
101665
 
101273
101666
  return function ()
101274
101667
  {
101275
101668
  if (!this ._enabled .getValue ())
101276
101669
  return;
101277
101670
 
101278
- const channelCountMode = this ._channelCountMode .getValue () .toLowerCase () .replaceAll ("_", "-");
101279
-
101280
- this .audioDestination .channelCountMode = channelCountModes .has (channelCountMode) ? channelCountMode : "max";
101671
+ this .audioDestination .channelCountMode = channelCountModes .get (this ._channelCountMode .getValue ()) ?? "max";
101281
101672
  };
101282
101673
  })(),
101283
101674
  set_channelInterpretation__: (function ()
101284
101675
  {
101285
- const channelInterpretations = new Set (["speakers", "discrete"]);
101676
+ const channelInterpretations = new Map ([
101677
+ ["SPEAKERS", "speakers"],
101678
+ ["DISCRETE", "discrete"],
101679
+ ]);
101286
101680
 
101287
101681
  return function ()
101288
101682
  {
101289
101683
  if (!this ._enabled .getValue ())
101290
101684
  return;
101291
101685
 
101292
- const channelInterpretation = this ._channelInterpretation .getValue () .toLowerCase ();
101293
-
101294
- this .audioDestination .channelInterpretation = channelInterpretations .has (channelInterpretation) ? channelInterpretation : "speakers";
101686
+ this .audioDestination .channelInterpretation = channelInterpretations .get (this ._channelInterpretation .getValue ()) ?? "speakers";
101295
101687
  };
101296
101688
  })(),
101297
101689
  set_children__ ()
@@ -101653,7 +102045,7 @@ Object .defineProperties (ChannelSelector,
101653
102045
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
101654
102046
 
101655
102047
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
101656
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelSelection", new x_ite_Fields .SFInt32 (0)),
102048
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelSelection", new x_ite_Fields .SFInt32 ()),
101657
102049
 
101658
102050
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
101659
102051
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
@@ -101774,7 +102166,6 @@ Object .assign (Object .setPrototypeOf (ChannelSplitter .prototype, Sound_X3DSou
101774
102166
  switch (type [t])
101775
102167
  {
101776
102168
  case Base_X3DConstants .X3DSoundChannelNode:
101777
- case Base_X3DConstants .X3DSoundDestinationNode:
101778
102169
  case Base_X3DConstants .X3DSoundProcessingNode:
101779
102170
  this .outputNodes .push (outputNode);
101780
102171
  break;
@@ -101921,14 +102312,64 @@ x_ite_Namespace .add ("ChannelSplitter", "x_ite/Components/Sound/ChannelSplitter
101921
102312
 
101922
102313
 
101923
102314
 
102315
+
101924
102316
  function Convolver (executionContext)
101925
102317
  {
101926
102318
  Sound_X3DSoundProcessingNode .call (this, executionContext);
101927
102319
 
101928
102320
  this .addType (Base_X3DConstants .Convolver);
102321
+
102322
+ const audioContext = this .getBrowser () .getAudioContext ();
102323
+
102324
+ this .convolverNode = new ConvolverNode (audioContext);
102325
+
102326
+ this .convolverNode .connect (this .getAudioSource ());
101929
102327
  }
101930
102328
 
101931
- Object .setPrototypeOf (Convolver .prototype, Sound_X3DSoundProcessingNode .prototype);
102329
+ Object .assign (Object .setPrototypeOf (Convolver .prototype, Sound_X3DSoundProcessingNode .prototype),
102330
+ {
102331
+ initialize ()
102332
+ {
102333
+ Sound_X3DSoundProcessingNode .prototype .initialize .call (this);
102334
+
102335
+ this ._numberOfChannels .addInterest ("set_buffer__", this);
102336
+ this ._buffer .addInterest ("set_buffer__", this);
102337
+ this ._normalize .addInterest ("set_normalize__", this);
102338
+
102339
+ this .set_buffer__ ();
102340
+ this .set_normalize__ ();
102341
+ },
102342
+ getSoundProcessor ()
102343
+ {
102344
+ return this .convolverNode;
102345
+ },
102346
+ set_buffer__ ()
102347
+ {
102348
+ const
102349
+ audioContext = this .getBrowser () .getAudioContext (),
102350
+ numberOfChannels = Math_Algorithm .clamp (this ._numberOfChannels .getValue (), 1, 32),
102351
+ sampleRate = audioContext .sampleRate,
102352
+ bufferLength = Math .max (Math .floor (this ._buffer .length / numberOfChannels), 1),
102353
+ audioBuffer = audioContext .createBuffer (numberOfChannels, bufferLength, sampleRate),
102354
+ buffer = this ._buffer .getValue ();
102355
+
102356
+ if (this ._buffer .length >= bufferLength * numberOfChannels)
102357
+ {
102358
+ for (let i = 0; i < numberOfChannels; ++ i)
102359
+ {
102360
+ const channelData = audioBuffer .getChannelData (i);
102361
+
102362
+ channelData .set (buffer .subarray (i * bufferLength, (i + 1) * bufferLength));
102363
+ }
102364
+ }
102365
+
102366
+ this .convolverNode .buffer = audioBuffer;
102367
+ },
102368
+ set_normalize__ ()
102369
+ {
102370
+ this .convolverNode .normalize = this ._normalize .getValue ();
102371
+ },
102372
+ });
101932
102373
 
101933
102374
  Object .defineProperties (Convolver,
101934
102375
  {
@@ -101955,14 +102396,16 @@ Object .defineProperties (Convolver,
101955
102396
  fieldDefinitions:
101956
102397
  {
101957
102398
  value: new Base_FieldDefinitionArray ([
101958
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
101959
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
101960
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
102399
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
102400
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
102401
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
101961
102402
 
101962
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
102403
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "numberOfChannels", new x_ite_Fields .SFInt32 ()), // skip test
101963
102404
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "buffer", new x_ite_Fields .MFFloat ()),
101964
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "normalize", new x_ite_Fields .SFBool ()),
102405
+
102406
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
101965
102407
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "tailTime", new x_ite_Fields .SFTime ()),
102408
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "normalize", new x_ite_Fields .SFBool ()),
101966
102409
 
101967
102410
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
101968
102411
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
@@ -102041,14 +102484,42 @@ x_ite_Namespace .add ("Convolver", "x_ite/Components/Sound/Convolver", Convolver
102041
102484
 
102042
102485
 
102043
102486
 
102487
+
102044
102488
  function Delay (executionContext)
102045
102489
  {
102046
102490
  Sound_X3DSoundProcessingNode .call (this, executionContext);
102047
102491
 
102048
102492
  this .addType (Base_X3DConstants .Delay);
102493
+
102494
+ const audioContext = this .getBrowser () .getAudioContext ();
102495
+
102496
+ this .delayNode = new DelayNode (audioContext);
102497
+
102498
+ this .delayNode .connect (this .getAudioSource ());
102049
102499
  }
102050
102500
 
102051
- Object .setPrototypeOf (Delay .prototype, Sound_X3DSoundProcessingNode .prototype);
102501
+ Object .assign (Object .setPrototypeOf (Delay .prototype, Sound_X3DSoundProcessingNode .prototype),
102502
+ {
102503
+ initialize ()
102504
+ {
102505
+ Sound_X3DSoundProcessingNode .prototype .initialize .call (this);
102506
+
102507
+ this ._delayTime .addInterest ("set_delayTime__", this);
102508
+ this ._maxDelayTime .addInterest ("set_delayTime__", this);
102509
+
102510
+ this .set_delayTime__ ();
102511
+ },
102512
+ getSoundProcessor ()
102513
+ {
102514
+ return this .delayNode;
102515
+ },
102516
+ set_delayTime__ ()
102517
+ {
102518
+ const maxDelayTime = Math .max (this ._maxDelayTime .getValue (), 0);
102519
+
102520
+ this .delayNode .delayTime .value = Math_Algorithm .clamp (this ._delayTime .getValue (), 0, maxDelayTime);
102521
+ },
102522
+ });
102052
102523
 
102053
102524
  Object .defineProperties (Delay,
102054
102525
  {
@@ -102075,14 +102546,14 @@ Object .defineProperties (Delay,
102075
102546
  fieldDefinitions:
102076
102547
  {
102077
102548
  value: new Base_FieldDefinitionArray ([
102078
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
102079
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
102080
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
102549
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
102550
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
102551
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
102081
102552
 
102082
102553
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
102554
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "tailTime", new x_ite_Fields .SFTime ()),
102083
102555
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "delayTime", new x_ite_Fields .SFTime ()),
102084
102556
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "maxDelayTime", new x_ite_Fields .SFTime (1)),
102085
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "tailTime", new x_ite_Fields .SFTime ()),
102086
102557
 
102087
102558
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
102088
102559
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
@@ -102161,14 +102632,69 @@ x_ite_Namespace .add ("Delay", "x_ite/Components/Sound/Delay", Delay_default_);
102161
102632
 
102162
102633
 
102163
102634
 
102635
+
102164
102636
  function DynamicsCompressor (executionContext)
102165
102637
  {
102166
102638
  Sound_X3DSoundProcessingNode .call (this, executionContext);
102167
102639
 
102168
102640
  this .addType (Base_X3DConstants .DynamicsCompressor);
102641
+
102642
+ const audioContext = this .getBrowser () .getAudioContext ();
102643
+
102644
+ this .dynamicsCompressorNode = new DynamicsCompressorNode (audioContext);
102645
+
102646
+ this .dynamicsCompressorNode .connect (this .getAudioSource ());
102169
102647
  }
102170
102648
 
102171
- Object .setPrototypeOf (DynamicsCompressor .prototype, Sound_X3DSoundProcessingNode .prototype);
102649
+ Object .assign (Object .setPrototypeOf (DynamicsCompressor .prototype, Sound_X3DSoundProcessingNode .prototype),
102650
+ {
102651
+ initialize ()
102652
+ {
102653
+ Sound_X3DSoundProcessingNode .prototype .initialize .call (this);
102654
+
102655
+ this ._attack .addInterest ("set_attack__", this);
102656
+ this ._knee .addInterest ("set_knee__", this);
102657
+ this ._ratio .addInterest ("set_ratio__", this);
102658
+ this ._release .addInterest ("set_release__", this);
102659
+ this ._threshold .addInterest ("set_threshold__", this);
102660
+
102661
+ this .set_attack__ ();
102662
+ this .set_knee__ ();
102663
+ this .set_ratio__ ();
102664
+ this .set_release__ ();
102665
+ this .set_threshold__ ();
102666
+ },
102667
+ getSoundProcessor ()
102668
+ {
102669
+ return this .dynamicsCompressorNode;
102670
+ },
102671
+ set_attack__ ()
102672
+ {
102673
+ this .dynamicsCompressorNode .attack .value = Math_Algorithm .clamp (this ._attack .getValue (), 0, 1);
102674
+ },
102675
+ set_knee__ ()
102676
+ {
102677
+ this .dynamicsCompressorNode .knee .value = Math_Algorithm .clamp (this ._knee .getValue (), 0, 40);
102678
+ },
102679
+ set_ratio__ ()
102680
+ {
102681
+ this .dynamicsCompressorNode .ratio .value = Math_Algorithm .clamp (this ._ratio .getValue (), 1, 20);
102682
+ },
102683
+ set_release__ ()
102684
+ {
102685
+ this .dynamicsCompressorNode .release .value = Math_Algorithm .clamp (this ._release .getValue (), 0, 1);
102686
+ },
102687
+ set_threshold__ ()
102688
+ {
102689
+ this .dynamicsCompressorNode .threshold .value = Math_Algorithm .clamp (this ._threshold .getValue (), -100, 0);
102690
+ },
102691
+ set_time ()
102692
+ {
102693
+ this ._reduction = this .dynamicsCompressorNode .reduction;
102694
+
102695
+ Sound_X3DSoundProcessingNode .prototype .set_time .call (this);
102696
+ },
102697
+ });
102172
102698
 
102173
102699
  Object .defineProperties (DynamicsCompressor,
102174
102700
  {
@@ -102200,13 +102726,13 @@ Object .defineProperties (DynamicsCompressor,
102200
102726
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
102201
102727
 
102202
102728
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
102203
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "attack", new x_ite_Fields .SFFloat (0.003)), // TODO: SFTime
102729
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "tailTime", new x_ite_Fields .SFTime ()),
102730
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "attack", new x_ite_Fields .SFTime (0.003)),
102204
102731
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "knee", new x_ite_Fields .SFFloat (30)),
102205
102732
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "ratio", new x_ite_Fields .SFFloat (12)),
102206
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "reduction", new x_ite_Fields .SFFloat ()),
102207
102733
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "release", new x_ite_Fields .SFTime (0.25)),
102208
102734
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "threshold", new x_ite_Fields .SFFloat (-24)),
102209
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "tailTime", new x_ite_Fields .SFTime ()),
102735
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "reduction", new x_ite_Fields .SFFloat ()),
102210
102736
 
102211
102737
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
102212
102738
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
@@ -102403,18 +102929,101 @@ x_ite_Namespace .add ("Gain", "x_ite/Components/Sound/Gain", Gain_default_);
102403
102929
 
102404
102930
 
102405
102931
 
102932
+
102933
+
102934
+
102935
+
102406
102936
  function ListenerPointSource (executionContext)
102407
102937
  {
102408
- Sound_X3DSoundSourceNode .call (this, executionContext);
102938
+ Sound_X3DSoundNode .call (this, executionContext);
102409
102939
 
102410
102940
  this .addType (Base_X3DConstants .ListenerPointSource);
102411
102941
 
102412
- this .addChildObjects (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ());
102413
-
102414
102942
  this ._position .setUnit ("length");
102415
102943
  }
102416
102944
 
102417
- Object .setPrototypeOf (ListenerPointSource .prototype, Sound_X3DSoundSourceNode .prototype);
102945
+ Object .assign (Object .setPrototypeOf (ListenerPointSource .prototype, Sound_X3DSoundNode .prototype),
102946
+ {
102947
+ initialize ()
102948
+ {
102949
+ Sound_X3DSoundNode .prototype .initialize .call (this);
102950
+
102951
+ this ._enabled .addInterest ("set_trackCurrentView__", this)
102952
+ this ._trackCurrentView .addInterest ("set_trackCurrentView__", this);
102953
+
102954
+ this .set_trackCurrentView__ ();
102955
+ },
102956
+ set_trackCurrentView__ ()
102957
+ {
102958
+ if (!this ._enabled .getValue ())
102959
+ return;
102960
+
102961
+ if (!this ._trackCurrentView .getValue ())
102962
+ return;
102963
+
102964
+ const
102965
+ audioContext = this .getBrowser () .getAudioContext (),
102966
+ listener = audioContext .listener;
102967
+
102968
+ listener .positionX .value = 0;
102969
+ listener .positionY .value = 0;
102970
+ listener .positionZ .value = 0;
102971
+
102972
+ listener .forwardX .value = 0;
102973
+ listener .forwardY .value = 0;
102974
+ listener .forwardZ .value = -1;
102975
+
102976
+ listener .upX .value = 0;
102977
+ listener .upY .value = 1;
102978
+ listener .upZ .value = 0;
102979
+ },
102980
+ traverse: (() =>
102981
+ {
102982
+ const
102983
+ position = new Numbers_Vector3 (0, 0, 0),
102984
+ orientation = new Numbers_Rotation4 (),
102985
+ modelViewMatrix = new Numbers_Matrix4 (),
102986
+ forwardVector = new Numbers_Vector3 (0, 0, 0),
102987
+ upVector = new Numbers_Vector3 (0, 0, 0);
102988
+
102989
+ return function (type, renderObject)
102990
+ {
102991
+ if (type !== Rendering_TraverseType .DISPLAY)
102992
+ return;
102993
+
102994
+ if (!this ._enabled .getValue ())
102995
+ return;
102996
+
102997
+ if (this ._trackCurrentView .getValue ())
102998
+ return;
102999
+
103000
+ const
103001
+ audioContext = this .getBrowser () .getAudioContext (),
103002
+ listener = audioContext .listener;
103003
+
103004
+ modelViewMatrix
103005
+ .assign (renderObject .getModelViewMatrix () .get ())
103006
+ .translate (this ._position .getValue ())
103007
+ .rotate (this ._orientation .getValue ())
103008
+ .get (position, orientation);
103009
+
103010
+ orientation .multVecRot (forwardVector .assign (Numbers_Vector3 .zAxis) .negate ()) .normalize ();
103011
+ orientation .multVecRot (upVector .assign (Numbers_Vector3 .yAxis)) .normalize ();
103012
+
103013
+ listener .positionX .value = position .x;
103014
+ listener .positionY .value = position .y;
103015
+ listener .positionZ .value = position .z;
103016
+
103017
+ listener .forwardX .value = forwardVector .x;
103018
+ listener .forwardY .value = forwardVector .y;
103019
+ listener .forwardZ .value = forwardVector .z;
103020
+
103021
+ listener .upX .value = upVector .x;
103022
+ listener .upY .value = upVector .y;
103023
+ listener .upZ .value = upVector .z;
103024
+ };
103025
+ })(),
103026
+ });
102418
103027
 
102419
103028
  Object .defineProperties (ListenerPointSource,
102420
103029
  {
@@ -102445,20 +103054,12 @@ Object .defineProperties (ListenerPointSource,
102445
103054
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
102446
103055
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
102447
103056
 
103057
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "trackCurrentView", new x_ite_Fields .SFBool ()),
102448
103058
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "position", new x_ite_Fields .SFVec3f ()),
102449
103059
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "orientation", new x_ite_Fields .SFRotation ()),
102450
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
102451
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "dopplerEnabled", new x_ite_Fields .SFBool ()),
102452
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "interauralDistance", new x_ite_Fields .SFFloat ()),
102453
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "trackCurrentView", new x_ite_Fields .SFBool ()),
102454
103060
 
102455
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "startTime", new x_ite_Fields .SFTime ()),
102456
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "resumeTime", new x_ite_Fields .SFTime ()),
102457
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "pauseTime", new x_ite_Fields .SFTime ()),
102458
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "stopTime", new x_ite_Fields .SFTime ()),
102459
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isPaused", new x_ite_Fields .SFBool ()),
102460
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isActive", new x_ite_Fields .SFBool ()),
102461
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "elapsedTime", new x_ite_Fields .SFTime ()),
103061
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "interauralDistance", new x_ite_Fields .SFFloat ()),
103062
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "dopplerEnabled", new x_ite_Fields .SFBool ()),
102462
103063
  ]),
102463
103064
  enumerable: true,
102464
103065
  },
@@ -102470,7 +103071,6 @@ const ListenerPointSource_default_ = ListenerPointSource;
102470
103071
  x_ite_Namespace .add ("ListenerPointSource", "x_ite/Components/Sound/ListenerPointSource", ListenerPointSource_default_);
102471
103072
  /* harmony default export */ const Sound_ListenerPointSource = (ListenerPointSource_default_);
102472
103073
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Sound/MicrophoneSource.js
102473
- /* provided dependency */ var MicrophoneSource_$ = __webpack_require__(183);
102474
103074
  /*******************************************************************************
102475
103075
  *
102476
103076
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -102530,7 +103130,7 @@ function MicrophoneSource (executionContext)
102530
103130
 
102531
103131
  this .addType (Base_X3DConstants .MicrophoneSource);
102532
103132
 
102533
- this .addChildObjects (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool (true));
103133
+ this .addChildObjects (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ());
102534
103134
  }
102535
103135
 
102536
103136
  Object .assign (Object .setPrototypeOf (MicrophoneSource .prototype, Sound_X3DSoundSourceNode .prototype),
@@ -102561,11 +103161,11 @@ Object .assign (Object .setPrototypeOf (MicrophoneSource .prototype, Sound_X3DSo
102561
103161
  deviceId: this ._mediaDeviceID .getValue (),
102562
103162
  },
102563
103163
  })
102564
- .then (stream =>
103164
+ .then (mediaStream =>
102565
103165
  {
102566
103166
  const audioContext = this .getBrowser () .getAudioContext ();
102567
103167
 
102568
- this .mediaStreamSource = audioContext .createMediaStreamSource (stream);
103168
+ this .mediaStreamAudioSourceNode = new MediaStreamAudioSourceNode (audioContext, { mediaStream });
102569
103169
 
102570
103170
  if (this ._isActive .getValue ())
102571
103171
  {
@@ -102586,17 +103186,17 @@ Object .assign (Object .setPrototypeOf (MicrophoneSource .prototype, Sound_X3DSo
102586
103186
  },
102587
103187
  set_pause ()
102588
103188
  {
102589
- if (!this .mediaStreamSource)
103189
+ if (!this .mediaStreamAudioSourceNode)
102590
103190
  return;
102591
103191
 
102592
103192
  if (this .getLive () .getValue ())
102593
103193
  {
102594
- MicrophoneSource_$.try (() => this .mediaStreamSource .disconnect (this .getAudioSource ()));
103194
+ this .mediaStreamAudioSourceNode .disconnect ();
102595
103195
 
102596
- for (const track of this .mediaStreamSource .mediaStream .getAudioTracks ())
103196
+ for (const track of this .mediaStreamAudioSourceNode .mediaStream .getAudioTracks ())
102597
103197
  track .enabled = false;
102598
103198
 
102599
- for (const track of this .mediaStreamSource .mediaStream .getVideoTracks ())
103199
+ for (const track of this .mediaStreamAudioSourceNode .mediaStream .getVideoTracks ())
102600
103200
  track .enabled = false;
102601
103201
  }
102602
103202
  else
@@ -102609,32 +103209,32 @@ Object .assign (Object .setPrototypeOf (MicrophoneSource .prototype, Sound_X3DSo
102609
103209
  if (this .restore)
102610
103210
  return this .set_start ();
102611
103211
 
102612
- if (!this .mediaStreamSource)
103212
+ if (!this .mediaStreamAudioSourceNode)
102613
103213
  return;
102614
103214
 
102615
- this .mediaStreamSource .connect (this .getAudioSource ());
103215
+ this .mediaStreamAudioSourceNode .connect (this .getAudioSource ());
102616
103216
 
102617
- for (const track of this .mediaStreamSource .mediaStream .getAudioTracks ())
103217
+ for (const track of this .mediaStreamAudioSourceNode .mediaStream .getAudioTracks ())
102618
103218
  track .enabled = true;
102619
103219
 
102620
- for (const track of this .mediaStreamSource .mediaStream .getVideoTracks ())
103220
+ for (const track of this .mediaStreamAudioSourceNode .mediaStream .getVideoTracks ())
102621
103221
  track .enabled = true;
102622
103222
  },
102623
103223
  set_stop (restore = false)
102624
103224
  {
102625
- if (!this .mediaStreamSource)
103225
+ if (!this .mediaStreamAudioSourceNode)
102626
103226
  return;
102627
103227
 
102628
- MicrophoneSource_$.try (() => this .mediaStreamSource .disconnect (this .getAudioSource ()));
103228
+ this .mediaStreamAudioSourceNode .disconnect ();
102629
103229
 
102630
- for (const track of this .mediaStreamSource .mediaStream .getAudioTracks ())
103230
+ for (const track of this .mediaStreamAudioSourceNode .mediaStream .getAudioTracks ())
102631
103231
  track .stop ();
102632
103232
 
102633
- for (const track of this .mediaStreamSource .mediaStream .getVideoTracks ())
103233
+ for (const track of this .mediaStreamAudioSourceNode .mediaStream .getVideoTracks ())
102634
103234
  track .stop ();
102635
103235
 
102636
- this .mediaStreamSource = null;
102637
- this .restore = restore;
103236
+ this .mediaStreamAudioSourceNode = null;
103237
+ this .restore = restore;
102638
103238
  },
102639
103239
  });
102640
103240
 
@@ -102769,11 +103369,12 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
102769
103369
  },
102770
103370
  set_type__: (function ()
102771
103371
  {
102772
- const types = new Set ([
102773
- "sine",
102774
- "square",
102775
- "sawtooth",
102776
- "triangle",
103372
+ const types = new Map ([
103373
+ ["SINE", "sine"],
103374
+ ["SQUARE", "square"],
103375
+ ["SAWTOOTH", "sawtooth"],
103376
+ ["TRIANGLE", "triangle"],
103377
+ ["CUSTOM", "custom"],
102777
103378
  ]);
102778
103379
 
102779
103380
  return function ()
@@ -102781,7 +103382,7 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
102781
103382
  this .periodicWaveNode ._optionsReal .removeInterest ("set_periodicWaveOptions__", this);
102782
103383
  this .periodicWaveNode ._optionsImag .removeInterest ("set_periodicWaveOptions__", this);
102783
103384
 
102784
- const type = this .periodicWaveNode ._type .getValue () .toLowerCase ();
103385
+ const type = types .get (this .periodicWaveNode ._type .getValue ()) ?? "square";
102785
103386
 
102786
103387
  if (type === "custom")
102787
103388
  {
@@ -102792,21 +103393,23 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
102792
103393
  }
102793
103394
  else
102794
103395
  {
102795
- this .oscillatorNode .type = types .has (type) ? type : "square";
103396
+ this .oscillatorNode .type = type;
102796
103397
  }
102797
103398
  };
102798
103399
  })(),
102799
- set_frequency__ ()
102800
- {
102801
- this .oscillatorNode .frequency .value = Math .max (this ._frequency .getValue (), 0);
102802
- },
102803
103400
  set_detune__ ()
102804
103401
  {
102805
103402
  this .oscillatorNode .detune .value = Math .max (this ._detune .getValue (), 0);
102806
103403
  },
103404
+ set_frequency__ ()
103405
+ {
103406
+ this .oscillatorNode .frequency .value = Math .max (this ._frequency .getValue (), 0);
103407
+ },
102807
103408
  set_periodicWave__ ()
102808
103409
  {
102809
- this .periodicWaveNode ?._type .removeInterest ("set_type__", this);
103410
+ this .periodicWaveNode ?._type .removeInterest ("set_type__", this);
103411
+ this .periodicWaveNode ?._optionsReal .removeInterest ("set_periodicWaveOptions__", this);
103412
+ this .periodicWaveNode ?._optionsImag .removeInterest ("set_periodicWaveOptions__", this);
102810
103413
 
102811
103414
  this .periodicWaveNode = Base_X3DCast (Base_X3DConstants .PeriodicWave, this ._periodicWave)
102812
103415
  ?? this .getBrowser () .getDefaultPeriodicWave ();
@@ -102877,8 +103480,8 @@ Object .defineProperties (OscillatorSource,
102877
103480
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
102878
103481
 
102879
103482
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
102880
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "frequency", new x_ite_Fields .SFFloat ()),
102881
103483
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "detune", new x_ite_Fields .SFFloat ()),
103484
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "frequency", new x_ite_Fields .SFFloat ()),
102882
103485
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "periodicWave", new x_ite_Fields .SFNode ()),
102883
103486
 
102884
103487
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "startTime", new x_ite_Fields .SFTime ()),
@@ -103113,28 +103716,37 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
103113
103716
  Sound_X3DSoundNode .prototype .initialize .call (this);
103114
103717
 
103115
103718
  const
103116
- audioContext = this .getBrowser () .getAudioContext (),
103117
- gainNode = new GainNode (audioContext, { gain: 0 }),
103118
- splitterNode = new ChannelSplitterNode (audioContext, { numberOfOutputs: 2 }),
103119
- mergerNode = new ChannelMergerNode (audioContext, { numberOfInputs: 2 }),
103120
- gainLeftNode = new GainNode (audioContext, { gain: 0 }),
103121
- gainRightNode = new GainNode (audioContext, { gain: 0 });
103719
+ audioContext = this .getBrowser () .getAudioContext (),
103720
+ gainNode = new GainNode (audioContext, { gain: 0 }),
103721
+ splitterNode = new ChannelSplitterNode (audioContext, { numberOfOutputs: 2 }),
103722
+ mergerNode = new ChannelMergerNode (audioContext, { numberOfInputs: 2 }),
103723
+ gainFrontLeftNode = new GainNode (audioContext, { gain: 0 }),
103724
+ gainFrontRightNode = new GainNode (audioContext, { gain: 0 }),
103725
+ gainBackLeftNode = new GainNode (audioContext, { gain: 0 }),
103726
+ gainBackRightNode = new GainNode (audioContext, { gain: 0 });
103122
103727
 
103123
103728
  gainNode .channelCount = 2;
103124
103729
  gainNode .channelCountMode = "explicit";
103125
103730
  gainNode .channelInterpretation = "speakers";
103126
103731
 
103127
- gainNode .connect (splitterNode);
103128
- splitterNode .connect (gainLeftNode, 0);
103129
- splitterNode .connect (gainRightNode, 1);
103130
- gainLeftNode .connect (mergerNode, 0, 0);
103131
- gainRightNode .connect (mergerNode, 0, 1);
103132
- mergerNode .connect (audioContext .destination);
103133
-
103134
- this .gainNode = gainNode;
103135
- this .splitterNode = splitterNode;
103136
- this .gainLeftNode = gainLeftNode;
103137
- this .gainRightNode = gainRightNode;
103732
+ gainNode .connect (splitterNode);
103733
+ splitterNode .connect (gainFrontLeftNode, 0);
103734
+ splitterNode .connect (gainFrontRightNode, 1);
103735
+ splitterNode .connect (gainBackRightNode, 0);
103736
+ splitterNode .connect (gainBackLeftNode, 1);
103737
+ gainFrontLeftNode .connect (mergerNode, 0, 0);
103738
+ gainFrontRightNode .connect (mergerNode, 0, 1);
103739
+ gainBackLeftNode .connect (mergerNode, 0, 0);
103740
+ gainBackRightNode .connect (mergerNode, 0, 1);
103741
+ mergerNode .connect (audioContext .destination);
103742
+
103743
+ this .gainNode = gainNode;
103744
+ this .splitterNode = splitterNode;
103745
+ this .gainFrontLeftNode = gainFrontLeftNode;
103746
+ this .gainFrontRightNode = gainFrontRightNode;
103747
+ this .gainBackLeftNode = gainBackLeftNode;
103748
+ this .gainBackRightNode = gainBackRightNode;
103749
+ this .mergerNode = mergerNode;
103138
103750
 
103139
103751
  this .getLive () .addInterest ("set_live__", this);
103140
103752
  this ._traversed .addInterest ("set_live__", this);
@@ -103166,21 +103778,34 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
103166
103778
  {
103167
103779
  return this .currentTraversed;
103168
103780
  },
103169
- setGain (gain, pan = 0.5)
103781
+ setGain (gain, pan = 0.5, rotation = 0)
103170
103782
  {
103171
- this .gainLeftNode .gain .value = gain * (1 - pan ** 2);
103172
- this .gainRightNode .gain .value = gain * (1 - (1 - pan) ** 2);
103783
+ const
103784
+ panLeft = 1 - pan ** 2,
103785
+ panRight = 1 - (1 - pan) ** 2,
103786
+ rotationFront = 1 - rotation,
103787
+ rotationBack = rotation;
103788
+
103789
+ this .gainFrontLeftNode .gain .value = gain * rotationFront * panLeft;
103790
+ this .gainFrontRightNode .gain .value = gain * rotationFront * panRight;
103791
+ this .gainBackLeftNode .gain .value = gain * rotationBack * panLeft;
103792
+ this .gainBackRightNode .gain .value = gain * rotationBack * panRight;
103173
103793
  },
103174
103794
  set_live__ ()
103175
103795
  {
103796
+ this .mergerNode .disconnect ();
103797
+
103176
103798
  if (this .getLive () .getValue () && this ._traversed .getValue ())
103177
103799
  {
103800
+ const audioContext = this .getBrowser () .getAudioContext ();
103801
+
103178
103802
  this .getBrowser () .sensorEvents () .addInterest ("update", this);
103803
+
103804
+ this .mergerNode .connect (audioContext .destination);
103179
103805
  }
103180
103806
  else
103181
103807
  {
103182
103808
  this .getBrowser () .sensorEvents () .removeInterest ("update", this);
103183
- this .setGain (0);
103184
103809
  }
103185
103810
  },
103186
103811
  set_intensity__ ()
@@ -103230,9 +103855,6 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
103230
103855
  },
103231
103856
  update ()
103232
103857
  {
103233
- if (!this .getTraversed ())
103234
- this .setGain (0);
103235
-
103236
103858
  this .setTraversed (false);
103237
103859
  },
103238
103860
  traverse: (() =>
@@ -103249,9 +103871,6 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
103249
103871
  if (!this .childNodes .length)
103250
103872
  return;
103251
103873
 
103252
- // if (!this .sourceNode ._isActive .getValue () || this .sourceNode ._isPaused .getValue ())
103253
- // return;
103254
-
103255
103874
  this .setTraversed (true);
103256
103875
 
103257
103876
  const modelViewMatrix = renderObject .getModelViewMatrix () .get ();
@@ -103268,11 +103887,11 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
103268
103887
  Math .max (this ._minFront .getValue (), 0),
103269
103888
  min);
103270
103889
 
103271
- const pan = this .getPan (modelViewMatrix);
103890
+ const { pan, rotation } = this .getPan (modelViewMatrix);
103272
103891
 
103273
103892
  if (min .distance < 1) // Radius of normalized sphere is 1.
103274
103893
  {
103275
- this .setGain (1, pan);
103894
+ this .setGain (1, pan, rotation);
103276
103895
  }
103277
103896
  else
103278
103897
  {
@@ -103281,7 +103900,7 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
103281
103900
  d2 = max .intersection .distance (min .intersection),
103282
103901
  d = Math .min (d1 / d2, 1);
103283
103902
 
103284
- this .setGain (d, pan);
103903
+ this .setGain (d, pan, rotation);
103285
103904
  }
103286
103905
  }
103287
103906
  else
@@ -103353,18 +103972,34 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
103353
103972
  })(),
103354
103973
  getPan: (function ()
103355
103974
  {
103356
- const location = new Numbers_Vector3 (0, 0, 0);
103975
+ const
103976
+ rotation = new Numbers_Rotation4 (),
103977
+ location = new Numbers_Vector3 (0, 0, 0),
103978
+ direction = new Numbers_Vector3 (0, 0, 0),
103979
+ xAxis = new Numbers_Vector3 (0, 0, 0),
103980
+ result = { };
103357
103981
 
103358
103982
  return function (modelViewMatrix)
103359
103983
  {
103360
103984
  if (!this ._spatialize .getValue ())
103361
- return 0.5;
103985
+ {
103986
+ result .pan = 0.5;
103987
+ result .rotation = 0;
103988
+ return result;
103989
+ }
103362
103990
 
103363
- const
103364
- direction = modelViewMatrix .multVecMatrix (location .assign (this ._location .getValue ())) .normalize (),
103365
- pan = Math .acos (Math_Algorithm .clamp (-direction .dot (Numbers_Vector3 .xAxis), -1, 1)) / Math .PI;
103991
+ location .assign (this ._location .getValue ());
103992
+ direction .assign (this ._direction .getValue ());
103993
+ rotation .setFromToVec (Numbers_Vector3 .zAxis, direction) .straighten ();
103994
+ rotation .multVecRot (xAxis .assign (Numbers_Vector3 .xAxis));
103366
103995
 
103367
- return pan;
103996
+ modelViewMatrix .multVecMatrix (location) .normalize ();
103997
+ modelViewMatrix .multDirMatrix (xAxis) .normalize ();
103998
+
103999
+ result .pan = 1 - Math .acos (Math_Algorithm .clamp (location .dot (Numbers_Vector3 .xAxis), -1, 1)) / Math .PI;
104000
+ result .rotation = Math .acos (Math_Algorithm .clamp (xAxis .dot (Numbers_Vector3 .xAxis), -1, 1)) / Math .PI;
104001
+
104002
+ return result;
103368
104003
  };
103369
104004
  })(),
103370
104005
  });
@@ -103472,16 +104107,247 @@ x_ite_Namespace .add ("Sound", "x_ite/Components/Sound/Sound", Sound_default_);
103472
104107
 
103473
104108
 
103474
104109
 
104110
+
104111
+
104112
+
104113
+
103475
104114
  function SpatialSound (executionContext)
103476
104115
  {
103477
104116
  Sound_X3DSoundNode .call (this, executionContext);
103478
104117
 
103479
104118
  this .addType (Base_X3DConstants .SpatialSound);
103480
104119
 
103481
- this ._location .setUnit ("length");
104120
+ this .addChildObjects (Base_X3DConstants .outputOnly, "traversed", new x_ite_Fields .SFBool (true));
104121
+
104122
+ this ._location .setUnit ("length");
104123
+ this ._coneInnerAngle .setUnit ("angle");
104124
+ this ._coneOuterAngle .setUnit ("angle");
104125
+
104126
+ this .childNodes = [ ];
104127
+ this .currentTraversed = true;
103482
104128
  }
103483
104129
 
103484
- Object .setPrototypeOf (SpatialSound .prototype, Sound_X3DSoundNode .prototype);
104130
+ Object .assign (Object .setPrototypeOf (SpatialSound .prototype, Sound_X3DSoundNode .prototype),
104131
+ {
104132
+ initialize ()
104133
+ {
104134
+ Sound_X3DSoundNode .prototype .initialize .call (this);
104135
+
104136
+ const
104137
+ audioContext = this .getBrowser () .getAudioContext (),
104138
+ gainNode = new GainNode (audioContext, { gain: 0 }),
104139
+ pannerNode = new PannerNode (audioContext);
104140
+
104141
+ gainNode .channelCount = 2;
104142
+ gainNode .channelCountMode = "explicit";
104143
+ gainNode .channelInterpretation = "speakers";
104144
+
104145
+ gainNode .connect (pannerNode);
104146
+ pannerNode .connect (audioContext .destination);
104147
+
104148
+ this .gainNode = gainNode;
104149
+ this .pannerNode = pannerNode;
104150
+
104151
+ this .getLive () .addInterest ("set_live__", this);
104152
+ this ._traversed .addInterest ("set_live__", this);
104153
+
104154
+ this ._spatialize .addInterest ("set_spatialize__", this);
104155
+ this ._intensity .addInterest ("set_intensity__", this);
104156
+ this ._gain .addInterest ("set_intensity__", this);
104157
+ this ._enableHRTF .addInterest ("set_enableHRTF__", this);
104158
+ this ._dopplerEnabled .addInterest ("set_dopplerEnabled__", this);
104159
+ this ._coneOuterGain .addInterest ("set_coneOuterGain__", this);
104160
+ this ._coneInnerAngle .addInterest ("set_coneInnerAngle__", this);
104161
+ this ._coneOuterAngle .addInterest ("set_coneOuterAngle__", this);
104162
+ this ._distanceModel .addInterest ("set_distanceModel__", this);
104163
+ this ._maxDistance .addInterest ("set_maxDistance__", this);
104164
+ this ._referenceDistance .addInterest ("set_referenceDistance__", this);
104165
+ this ._rolloffFactor .addInterest ("set_distanceModel__", this);
104166
+ this ._children .addInterest ("set_children__", this);
104167
+
104168
+ this .set_live__ ();
104169
+ this .set_spatialize__ ();
104170
+ this .set_intensity__ ();
104171
+ this .set_enableHRTF__ ();
104172
+ this .set_dopplerEnabled__ ();
104173
+ this .set_coneOuterGain__ ();
104174
+ this .set_coneInnerAngle__ ();
104175
+ this .set_coneOuterAngle__ ();
104176
+ this .set_distanceModel__ ();
104177
+ this .set_maxDistance__ ();
104178
+ this .set_referenceDistance__ ();
104179
+ this .set_children__ ();
104180
+ },
104181
+ setTraversed (value)
104182
+ {
104183
+ if (value)
104184
+ {
104185
+ if (this ._traversed .getValue () === false)
104186
+ this ._traversed = true;
104187
+ }
104188
+ else
104189
+ {
104190
+ if (this .currentTraversed !== this ._traversed .getValue ())
104191
+ this ._traversed = this .currentTraversed;
104192
+ }
104193
+
104194
+ this .currentTraversed = value;
104195
+ },
104196
+ getTraversed ()
104197
+ {
104198
+ return this .currentTraversed;
104199
+ },
104200
+ set_live__ ()
104201
+ {
104202
+ this .pannerNode .disconnect ();
104203
+
104204
+ if (this .getLive () .getValue () && this ._traversed .getValue ())
104205
+ {
104206
+ const audioContext = this .getBrowser () .getAudioContext ();
104207
+
104208
+ this .getBrowser () .sensorEvents () .addInterest ("update", this);
104209
+
104210
+ this .pannerNode .connect (audioContext .destination);
104211
+ }
104212
+ else
104213
+ {
104214
+ this .getBrowser () .sensorEvents () .removeInterest ("update", this);
104215
+ }
104216
+ },
104217
+ set_spatialize__ ()
104218
+ {
104219
+ const audioContext = this .getBrowser () .getAudioContext ();
104220
+
104221
+ this .gainNode .disconnect ();
104222
+
104223
+ if (this ._spatialize .getValue ())
104224
+ this .gainNode .connect (this .pannerNode);
104225
+ else
104226
+ this .gainNode .connect (audioContext .destination);
104227
+ },
104228
+ set_intensity__ ()
104229
+ {
104230
+ this .gainNode .gain .value = Math_Algorithm .clamp (this ._intensity .getValue (), 0, 1) * this ._gain .getValue ();
104231
+ },
104232
+ set_enableHRTF__ ()
104233
+ {
104234
+ if (this ._enableHRTF .getValue ())
104235
+ this .pannerNode .panningModel = "HRTF";
104236
+ else
104237
+ this .pannerNode .panningModel = "equalpower";
104238
+ },
104239
+ set_dopplerEnabled__ ()
104240
+ {
104241
+ // Depreciated: https://github.com/WebAudio/web-audio-api/issues/372.
104242
+ },
104243
+ set_coneOuterGain__ ()
104244
+ {
104245
+ this .pannerNode .coneOuterGain = Math_Algorithm .clamp (this ._coneOuterGain .getValue (), 0, 1);
104246
+ },
104247
+ set_coneInnerAngle__ ()
104248
+ {
104249
+ this .pannerNode .coneInnerAngle = Math_Algorithm .clamp (Math_Algorithm .degrees (this ._coneInnerAngle .getValue ()), 0, 360);
104250
+ },
104251
+ set_coneOuterAngle__ ()
104252
+ {
104253
+ this .pannerNode .coneOuterAngle = Math_Algorithm .clamp (Math_Algorithm .degrees (this ._coneOuterAngle .getValue ()), 0, 360);
104254
+ },
104255
+ set_distanceModel__: (function ()
104256
+ {
104257
+ const distanceModels = new Map ([
104258
+ ["LINEAR", "linear"],
104259
+ ["INVERSE", "inverse"],
104260
+ ["EXPONENTIAL", "exponential"],
104261
+ ]);
104262
+
104263
+ return function ()
104264
+ {
104265
+ this .pannerNode .distanceModel = distanceModels .get (this ._distanceModel .getValue ()) ?? "inverse";
104266
+
104267
+ let rolloffFactor = Math .max (this ._rolloffFactor .getValue (), 0);
104268
+
104269
+ if (this .pannerNode .distanceModel === "linear")
104270
+ rolloffFactor = Math .min (rolloffFactor, 1);
104271
+
104272
+ this .pannerNode .rolloffFactor = rolloffFactor;
104273
+ };
104274
+ })(),
104275
+ set_maxDistance__ ()
104276
+ {
104277
+ this .pannerNode .maxDistance = Math .max (this ._maxDistance .getValue (), 0);
104278
+ },
104279
+ set_referenceDistance__ ()
104280
+ {
104281
+ this .pannerNode .refDistance = Math .max (this ._referenceDistance .getValue (), 0);
104282
+ },
104283
+ set_children__ ()
104284
+ {
104285
+ for (const childNode of this .childNodes)
104286
+ childNode .getAudioSource () .disconnect (this .gainNode);
104287
+
104288
+ this .childNodes .length = 0;
104289
+
104290
+ for (const child of this ._children)
104291
+ {
104292
+ const childNode = Base_X3DCast (Base_X3DConstants .X3DChildNode, child);
104293
+
104294
+ if (!childNode)
104295
+ continue;
104296
+
104297
+ const type = childNode .getType ();
104298
+
104299
+ for (let t = type .length - 1; t >= 0; -- t)
104300
+ {
104301
+ switch (type [t])
104302
+ {
104303
+ case Base_X3DConstants .X3DSoundChannelNode:
104304
+ case Base_X3DConstants .X3DSoundProcessingNode:
104305
+ case Base_X3DConstants .X3DSoundSourceNode:
104306
+ this .childNodes .push (childNode);
104307
+ break;
104308
+ default:
104309
+ continue;
104310
+ }
104311
+
104312
+ break;
104313
+ }
104314
+ }
104315
+
104316
+ for (const childNode of this .childNodes)
104317
+ childNode .getAudioSource () .connect (this .gainNode);
104318
+ },
104319
+ update ()
104320
+ {
104321
+ this .setTraversed (false);
104322
+ },
104323
+ traverse: (() =>
104324
+ {
104325
+ const
104326
+ location = new Numbers_Vector3 (0, 0, 0),
104327
+ direction = new Numbers_Vector3 (0, 0, 0);
104328
+
104329
+ return function (type, renderObject)
104330
+ {
104331
+ if (type !== Rendering_TraverseType .DISPLAY)
104332
+ return;
104333
+
104334
+ this .setTraversed (true);
104335
+
104336
+ const modelViewMatrix = renderObject .getModelViewMatrix () .get ();
104337
+
104338
+ modelViewMatrix .multVecMatrix (location .assign (this ._location .getValue ()));
104339
+ modelViewMatrix .multDirMatrix (direction .assign (this ._direction .getValue ())) .normalize ();
104340
+
104341
+ this .pannerNode .positionX .value = location .x;
104342
+ this .pannerNode .positionY .value = location .y;
104343
+ this .pannerNode .positionZ .value = location .z;
104344
+
104345
+ this .pannerNode .orientationX .value = direction .x;
104346
+ this .pannerNode .orientationY .value = direction .y;
104347
+ this .pannerNode .orientationZ .value = direction .z;
104348
+ };
104349
+ })(),
104350
+ });
103485
104351
 
103486
104352
  Object .defineProperties (SpatialSound,
103487
104353
  {
@@ -103508,27 +104374,27 @@ Object .defineProperties (SpatialSound,
103508
104374
  fieldDefinitions:
103509
104375
  {
103510
104376
  value: new Base_FieldDefinitionArray ([
103511
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
103512
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
103513
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
104377
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
104378
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
104379
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
103514
104380
 
103515
104381
  new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "spatialize", new x_ite_Fields .SFBool (true)),
104382
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "intensity", new x_ite_Fields .SFFloat (1)),
104383
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "location", new x_ite_Fields .SFVec3f ()),
104384
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "direction", new x_ite_Fields .SFVec3f (0, 0, 1)),
104385
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
104386
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enableHRTF", new x_ite_Fields .SFBool ()),
104387
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "dopplerEnabled", new x_ite_Fields .SFBool ()),
104388
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "coneOuterGain", new x_ite_Fields .SFFloat ()),
103516
104389
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "coneInnerAngle", new x_ite_Fields .SFFloat (6.2832)),
103517
104390
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "coneOuterAngle", new x_ite_Fields .SFFloat (6.2832)),
103518
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "coneOuterGain", new x_ite_Fields .SFFloat (0)),
103519
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "direction", new x_ite_Fields .SFVec3f (0, 0, 1)),
103520
104391
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "distanceModel", new x_ite_Fields .SFString ("INVERSE")),
103521
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "dopplerEnabled", new x_ite_Fields .SFBool ()),
103522
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enableHRTF", new x_ite_Fields .SFBool ()),
103523
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
103524
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "intensity", new x_ite_Fields .SFFloat (1)),
103525
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "location", new x_ite_Fields .SFVec3f ()),
103526
104392
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "maxDistance", new x_ite_Fields .SFFloat (10000)),
103527
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "priority", new x_ite_Fields .SFFloat ()),
103528
104393
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "referenceDistance", new x_ite_Fields .SFFloat (1)),
103529
104394
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "rolloffFactor", new x_ite_Fields .SFFloat (1)),
104395
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "priority", new x_ite_Fields .SFFloat ()),
103530
104396
 
103531
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "children", new x_ite_Fields .MFNode ()),
104397
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "children", new x_ite_Fields .MFNode ()),
103532
104398
  ]),
103533
104399
  enumerable: true,
103534
104400
  },
@@ -103598,10 +104464,6 @@ function StreamAudioDestination (executionContext)
103598
104464
  Sound_X3DSoundDestinationNode .call (this, executionContext);
103599
104465
 
103600
104466
  this .addType (Base_X3DConstants .StreamAudioDestination);
103601
-
103602
- const audioContext = this .getBrowser () .getAudioContext ();
103603
-
103604
- this .mediaStreamDestination = audioContext .createMediaStreamDestination ();
103605
104467
  }
103606
104468
 
103607
104469
  Object .assign (Object .setPrototypeOf (StreamAudioDestination .prototype, Sound_X3DSoundDestinationNode .prototype),
@@ -103610,11 +104472,18 @@ Object .assign (Object .setPrototypeOf (StreamAudioDestination .prototype, Sound
103610
104472
  {
103611
104473
  Sound_X3DSoundDestinationNode .prototype .initialize .call (this);
103612
104474
 
103613
- this ._streamIdentifier [0] = this .mediaStreamDestination .stream .id;
104475
+ this ._mediaDeviceID .addInterest ("set_mediaDeviceID__", this);
104476
+
104477
+ this .set_mediaDeviceID__ ();
103614
104478
  },
103615
104479
  getSoundDestination ()
103616
104480
  {
103617
- return this .mediaStreamDestination;
104481
+ return;
104482
+ },
104483
+ set_enabled__ () { /* remove this function if implemented */ },
104484
+ set_mediaDeviceID__ ()
104485
+ {
104486
+
103618
104487
  },
103619
104488
  });
103620
104489
 
@@ -103648,14 +104517,14 @@ Object .defineProperties (StreamAudioDestination,
103648
104517
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
103649
104518
 
103650
104519
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
103651
- // new X3DFieldDefinition (X3DConstants .inputOutput, "mediaDeviceID", new Fields .SFString ()), // skip test
104520
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "mediaDeviceID", new x_ite_Fields .SFString ()),
104521
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "streamIdentifier", new x_ite_Fields .MFString ()),
103652
104522
 
103653
104523
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
103654
104524
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
103655
104525
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelInterpretation", new x_ite_Fields .SFString ("SPEAKERS")),
103656
104526
 
103657
104527
  new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isActive", new x_ite_Fields .SFBool ()),
103658
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "streamIdentifier", new x_ite_Fields .MFString ()), // skip test
103659
104528
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "children", new x_ite_Fields .MFNode ()),
103660
104529
  ]),
103661
104530
  enumerable: true,
@@ -103730,7 +104599,14 @@ function StreamAudioSource (executionContext)
103730
104599
  this .addChildObjects (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ());
103731
104600
  }
103732
104601
 
103733
- Object .setPrototypeOf (StreamAudioSource .prototype, Sound_X3DSoundSourceNode .prototype);
104602
+ Object .assign (Object .setPrototypeOf (StreamAudioSource .prototype, Sound_X3DSoundSourceNode .prototype),
104603
+ {
104604
+ initialize ()
104605
+ {
104606
+ Sound_X3DSoundSourceNode .prototype .initialize .call (this);
104607
+ },
104608
+ });
104609
+
103734
104610
 
103735
104611
  Object .defineProperties (StreamAudioSource,
103736
104612
  {
@@ -103840,9 +104716,51 @@ function WaveShaper (executionContext)
103840
104716
  Sound_X3DSoundProcessingNode .call (this, executionContext);
103841
104717
 
103842
104718
  this .addType (Base_X3DConstants .WaveShaper);
104719
+
104720
+ const audioContext = this .getBrowser () .getAudioContext ();
104721
+
104722
+ this .waveShaperNode = new WaveShaperNode (audioContext);
104723
+
104724
+ this .waveShaperNode .connect (this .getAudioSource ());
103843
104725
  }
103844
104726
 
103845
- Object .setPrototypeOf (WaveShaper .prototype, Sound_X3DSoundProcessingNode .prototype);
104727
+ Object .assign (Object .setPrototypeOf (WaveShaper .prototype, Sound_X3DSoundProcessingNode .prototype),
104728
+ {
104729
+ initialize ()
104730
+ {
104731
+ Sound_X3DSoundProcessingNode .prototype .initialize .call (this);
104732
+
104733
+ this ._curve .addInterest ("set_curve__", this);
104734
+ this ._oversample .addInterest ("set_oversample__", this);
104735
+
104736
+ this .set_curve__ ();
104737
+ this .set_oversample__ ();
104738
+ },
104739
+ getSoundProcessor ()
104740
+ {
104741
+ return this .waveShaperNode;
104742
+ },
104743
+ set_curve__ ()
104744
+ {
104745
+ if (this ._curve .length < 2)
104746
+ this ._curve .length = 2;
104747
+
104748
+ this .waveShaperNode .curve = this ._curve .shrinkToFit ();
104749
+ },
104750
+ set_oversample__: (function ()
104751
+ {
104752
+ const oversampleTypes = new Map ([
104753
+ ["NONE", "none"],
104754
+ ["2X", "2x"],
104755
+ ["4X", "4x"],
104756
+ ]);
104757
+
104758
+ return function ()
104759
+ {
104760
+ this .waveShaperNode .oversample = oversampleTypes .get (this ._oversample .getValue ()) ?? "none";
104761
+ };
104762
+ })(),
104763
+ });
103846
104764
 
103847
104765
  Object .defineProperties (WaveShaper,
103848
104766
  {
@@ -103869,14 +104787,14 @@ Object .defineProperties (WaveShaper,
103869
104787
  fieldDefinitions:
103870
104788
  {
103871
104789
  value: new Base_FieldDefinitionArray ([
103872
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
103873
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
103874
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
104790
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
104791
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
104792
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
103875
104793
 
103876
104794
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
104795
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "tailTime", new x_ite_Fields .SFTime ()),
103877
104796
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "curve", new x_ite_Fields .MFFloat ()),
103878
104797
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "oversample", new x_ite_Fields .SFString ("NONE")),
103879
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "tailTime", new x_ite_Fields .SFTime ()),
103880
104798
 
103881
104799
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
103882
104800
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
@@ -104138,6 +105056,8 @@ function GifMedia (gif, movieTexture)
104138
105056
  },
104139
105057
  },
104140
105058
  });
105059
+
105060
+ gif .pause ();
104141
105061
  }
104142
105062
 
104143
105063
  const GifMedia_default_ = GifMedia;
@@ -104146,8 +105066,8 @@ const GifMedia_default_ = GifMedia;
104146
105066
  x_ite_Namespace .add ("GifMedia", "x_ite/Browser/Texturing/GifMedia", GifMedia_default_);
104147
105067
  /* harmony default export */ const Texturing_GifMedia = (GifMedia_default_);
104148
105068
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Texturing/MovieTexture.js
104149
- /* provided dependency */ var MovieTexture_$ = __webpack_require__(183);
104150
- /* provided dependency */ var SuperGif = __webpack_require__(432);
105069
+ /* provided dependency */ var MovieTexture_$ = __webpack_require__(440);
105070
+ /* provided dependency */ var SuperGif = __webpack_require__(27);
104151
105071
  /*******************************************************************************
104152
105072
  *
104153
105073
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -104258,10 +105178,10 @@ Object .assign (Object .setPrototypeOf (MovieTexture .prototype, Texturing_X3DTe
104258
105178
  unloadData ()
104259
105179
  {
104260
105180
  this .clearTexture ();
105181
+ this .setMediaElement (null);
104261
105182
  },
104262
105183
  loadData ()
104263
105184
  {
104264
- delete this .gif;
104265
105185
  this .setMediaElement (null);
104266
105186
  this .urlStack .setValue (this ._url);
104267
105187
  this .video .on ("loadeddata", this .setVideo .bind (this));
@@ -104341,7 +105261,9 @@ Object .assign (Object .setPrototypeOf (MovieTexture .prototype, Texturing_X3DTe
104341
105261
  if (gl .getVersion () === 1 && !(Math_Algorithm .isPowerOfTwo (width) && Math_Algorithm .isPowerOfTwo (height)))
104342
105262
  throw new Error ("The movie texture is a non power-of-two texture.");
104343
105263
 
104344
- this .setMediaElement (this .video [0]);
105264
+ this ._duration_changed = video .duration;
105265
+
105266
+ this .setMediaElement (video);
104345
105267
  this .setTextureFromData (width, height, true, false, video);
104346
105268
  this .setLoadState (Base_X3DConstants .COMPLETE_STATE);
104347
105269
 
@@ -104357,11 +105279,9 @@ Object .assign (Object .setPrototypeOf (MovieTexture .prototype, Texturing_X3DTe
104357
105279
  {
104358
105280
  try
104359
105281
  {
104360
- this .gif = gif;
104361
-
104362
105282
  Texturing_GifMedia (gif, this);
104363
105283
 
104364
- gif .pause ();
105284
+ this ._duration_changed = gif .duration;
104365
105285
 
104366
105286
  this .setMediaElement (gif);
104367
105287
  this .setTextureFromData (gif .get_canvas () .width, gif .get_canvas () .height, true, false, gif .get_frames () [0] .data);
@@ -104377,10 +105297,10 @@ Object .assign (Object .setPrototypeOf (MovieTexture .prototype, Texturing_X3DTe
104377
105297
  },
104378
105298
  set_speed__ ()
104379
105299
  {
104380
- if (this .gif)
104381
- this .gif .playbackRate = this ._speed .getValue ();
105300
+ const media = this .getMediaElement ();
104382
105301
 
104383
- this .video [0] .playbackRate = this ._speed .getValue ();
105302
+ if (media)
105303
+ media .playbackRate = this ._speed .getValue ();
104384
105304
  },
104385
105305
  set_time ()
104386
105306
  {
@@ -104389,7 +105309,10 @@ Object .assign (Object .setPrototypeOf (MovieTexture .prototype, Texturing_X3DTe
104389
105309
  if (this .checkLoadState () !== Base_X3DConstants .COMPLETE_STATE)
104390
105310
  return;
104391
105311
 
104392
- this .updateTextureFromData (this .gif ?.currentFrame .data ?? this .video [0]);
105312
+ const media = this .getMediaElement ();
105313
+
105314
+ if (media)
105315
+ this .updateTextureFromData (media .currentFrame ?.data ?? media);
104393
105316
  },
104394
105317
  traverse: Texturing_X3DTexture2DNode .prototype .traverse,
104395
105318
  dispose ()
@@ -107426,7 +108349,7 @@ const gettext_default_ = gettext;
107426
108349
  x_ite_Namespace .add ("gettext", "locale/gettext", gettext_default_);
107427
108350
  /* harmony default export */ const locale_gettext = (gettext_default_);
107428
108351
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/BrowserTimings.js
107429
- /* provided dependency */ var BrowserTimings_$ = __webpack_require__(183);
108352
+ /* provided dependency */ var BrowserTimings_$ = __webpack_require__(440);
107430
108353
  /*******************************************************************************
107431
108354
  *
107432
108355
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -107856,7 +108779,7 @@ const TextureQuality_default_ = TextureQuality;
107856
108779
  x_ite_Namespace .add ("TextureQuality", "x_ite/Browser/Core/TextureQuality", TextureQuality_default_);
107857
108780
  /* harmony default export */ const Core_TextureQuality = (TextureQuality_default_);
107858
108781
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/BrowserOptions.js
107859
- /* provided dependency */ var BrowserOptions_$ = __webpack_require__(183);
108782
+ /* provided dependency */ var BrowserOptions_$ = __webpack_require__(440);
107860
108783
  /*******************************************************************************
107861
108784
  *
107862
108785
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -108450,7 +109373,7 @@ const RenderingProperties_default_ = RenderingProperties;
108450
109373
  x_ite_Namespace .add ("RenderingProperties", "x_ite/Browser/Core/RenderingProperties", RenderingProperties_default_);
108451
109374
  /* harmony default export */ const Core_RenderingProperties = (RenderingProperties_default_);
108452
109375
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/Notification.js
108453
- /* provided dependency */ var Notification_$ = __webpack_require__(183);
109376
+ /* provided dependency */ var Notification_$ = __webpack_require__(440);
108454
109377
  /*******************************************************************************
108455
109378
  *
108456
109379
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -108573,8 +109496,8 @@ const Notification_default_ = Notification;
108573
109496
  x_ite_Namespace .add ("Notification", "x_ite/Browser/Core/Notification", Notification_default_);
108574
109497
  /* harmony default export */ const Core_Notification = (Notification_default_);
108575
109498
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/ContextMenu.js
108576
- /* provided dependency */ var jquery_fullscreen = __webpack_require__(403);
108577
- /* provided dependency */ var ContextMenu_$ = __webpack_require__(183);
109499
+ /* provided dependency */ var jquery_fullscreen = __webpack_require__(412);
109500
+ /* provided dependency */ var ContextMenu_$ = __webpack_require__(440);
108578
109501
  /*******************************************************************************
108579
109502
  *
108580
109503
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -111040,6 +111963,12 @@ Object .assign (Object .setPrototypeOf (X3DScene .prototype, Execution_X3DExecut
111040
111963
  generator .string += '}';
111041
111964
  generator .string += generator .TidyBreak ();
111042
111965
  },
111966
+ dispose ()
111967
+ {
111968
+ this .exportedNodes .clear ();
111969
+
111970
+ Execution_X3DExecutionContext .prototype .dispose .call (this);
111971
+ },
111043
111972
  },
111044
111973
  {
111045
111974
  setExecutionContext (executionContext)
@@ -111329,7 +112258,7 @@ const DataStorage_default_ = DataStorage;
111329
112258
  x_ite_Namespace .add ("DataStorage", "standard/Utility/DataStorage", DataStorage_default_);
111330
112259
  /* harmony default export */ const Utility_DataStorage = (DataStorage_default_);
111331
112260
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/X3DCoreContext.js
111332
- /* provided dependency */ var X3DCoreContext_$ = __webpack_require__(183);
112261
+ /* provided dependency */ var X3DCoreContext_$ = __webpack_require__(440);
111333
112262
  /*******************************************************************************
111334
112263
  *
111335
112264
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -113852,8 +114781,8 @@ const X3DViewer_default_ = X3DViewer;
113852
114781
  x_ite_Namespace .add ("X3DViewer", "x_ite/Browser/Navigation/X3DViewer", X3DViewer_default_);
113853
114782
  /* harmony default export */ const Navigation_X3DViewer = (X3DViewer_default_);
113854
114783
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/ExamineViewer.js
113855
- /* provided dependency */ var jquery_mousewheel = __webpack_require__(287);
113856
- /* provided dependency */ var ExamineViewer_$ = __webpack_require__(183);
114784
+ /* provided dependency */ var jquery_mousewheel = __webpack_require__(838);
114785
+ /* provided dependency */ var ExamineViewer_$ = __webpack_require__(440);
113857
114786
  /*******************************************************************************
113858
114787
  *
113859
114788
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -114725,8 +115654,8 @@ const ExamineViewer_default_ = ExamineViewer;
114725
115654
  x_ite_Namespace .add ("ExamineViewer", "x_ite/Browser/Navigation/ExamineViewer", ExamineViewer_default_);
114726
115655
  /* harmony default export */ const Navigation_ExamineViewer = (ExamineViewer_default_);
114727
115656
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/X3DFlyViewer.js
114728
- /* provided dependency */ var X3DFlyViewer_jquery_mousewheel = __webpack_require__(287);
114729
- /* provided dependency */ var X3DFlyViewer_$ = __webpack_require__(183);
115657
+ /* provided dependency */ var X3DFlyViewer_jquery_mousewheel = __webpack_require__(838);
115658
+ /* provided dependency */ var X3DFlyViewer_$ = __webpack_require__(440);
114730
115659
  /*******************************************************************************
114731
115660
  *
114732
115661
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -115735,8 +116664,8 @@ const FlyViewer_default_ = FlyViewer;
115735
116664
  x_ite_Namespace .add ("FlyViewer", "x_ite/Browser/Navigation/FlyViewer", FlyViewer_default_);
115736
116665
  /* harmony default export */ const Navigation_FlyViewer = (FlyViewer_default_);
115737
116666
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/PlaneViewer.js
115738
- /* provided dependency */ var PlaneViewer_jquery_mousewheel = __webpack_require__(287);
115739
- /* provided dependency */ var PlaneViewer_$ = __webpack_require__(183);
116667
+ /* provided dependency */ var PlaneViewer_jquery_mousewheel = __webpack_require__(838);
116668
+ /* provided dependency */ var PlaneViewer_$ = __webpack_require__(440);
115740
116669
  /*******************************************************************************
115741
116670
  *
115742
116671
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -116067,8 +116996,8 @@ const NoneViewer_default_ = NoneViewer;
116067
116996
  x_ite_Namespace .add ("NoneViewer", "x_ite/Browser/Navigation/NoneViewer", NoneViewer_default_);
116068
116997
  /* harmony default export */ const Navigation_NoneViewer = (NoneViewer_default_);
116069
116998
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/LookAtViewer.js
116070
- /* provided dependency */ var LookAtViewer_jquery_mousewheel = __webpack_require__(287);
116071
- /* provided dependency */ var LookAtViewer_$ = __webpack_require__(183);
116999
+ /* provided dependency */ var LookAtViewer_jquery_mousewheel = __webpack_require__(838);
117000
+ /* provided dependency */ var LookAtViewer_$ = __webpack_require__(440);
116072
117001
  /*******************************************************************************
116073
117002
  *
116074
117003
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -117207,8 +118136,8 @@ const X3DPickingContext_default_ = X3DPickingContext;
117207
118136
  x_ite_Namespace .add ("X3DPickingContext", "x_ite/Browser/Picking/X3DPickingContext", X3DPickingContext_default_);
117208
118137
  /* harmony default export */ const Picking_X3DPickingContext = (X3DPickingContext_default_);
117209
118138
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js
117210
- /* provided dependency */ var PointingDevice_jquery_mousewheel = __webpack_require__(287);
117211
- /* provided dependency */ var PointingDevice_$ = __webpack_require__(183);
118139
+ /* provided dependency */ var PointingDevice_jquery_mousewheel = __webpack_require__(838);
118140
+ /* provided dependency */ var PointingDevice_$ = __webpack_require__(440);
117212
118141
  /*******************************************************************************
117213
118142
  *
117214
118143
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -118499,7 +119428,7 @@ const MultiSampleFrameBuffer_default_ = MultiSampleFrameBuffer;
118499
119428
  x_ite_Namespace .add ("MultiSampleFrameBuffer", "x_ite/Rendering/MultiSampleFrameBuffer", MultiSampleFrameBuffer_default_);
118500
119429
  /* harmony default export */ const Rendering_MultiSampleFrameBuffer = (MultiSampleFrameBuffer_default_);
118501
119430
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Rendering/X3DRenderingContext.js
118502
- /* provided dependency */ var X3DRenderingContext_$ = __webpack_require__(183);
119431
+ /* provided dependency */ var X3DRenderingContext_$ = __webpack_require__(440);
118503
119432
  /*******************************************************************************
118504
119433
  *
118505
119434
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -118848,22 +119777,17 @@ x_ite_Namespace .add ("X3DRenderingContext", "x_ite/Browser/Rendering/X3DRenderi
118848
119777
  *
118849
119778
  ******************************************************************************/
118850
119779
 
118851
- const _scripts = Symbol ();
118852
-
118853
- function X3DScriptingContext ()
118854
- {
118855
- this [_scripts] = [this];
118856
- }
119780
+ function X3DScriptingContext () { }
118857
119781
 
118858
119782
  Object .assign (X3DScriptingContext .prototype,
118859
119783
  {
118860
119784
  isExternal ()
118861
119785
  {
118862
- return this [_scripts] .length === 1;
119786
+ return !this .getScriptNode ();
118863
119787
  },
118864
- getScriptStack ()
119788
+ getScriptNode ()
118865
119789
  {
118866
- return this [_scripts];
119790
+ return null;
118867
119791
  },
118868
119792
  });
118869
119793
 
@@ -119366,7 +120290,7 @@ Object .assign (X3DSoundContext .prototype,
119366
120290
  },
119367
120291
  startAudioElement (audioElement, functionName = "play")
119368
120292
  {
119369
- audioElement [functionName] () .catch (() =>
120293
+ audioElement ?.[functionName] () .catch (() =>
119370
120294
  {
119371
120295
  const id = `X3DSoundContext-${Base_X3DObject .getId (audioElement)}`;
119372
120296
 
@@ -119385,7 +120309,7 @@ Object .assign (X3DSoundContext .prototype,
119385
120309
  ]
119386
120310
  .map (event => `${event}.${id}`);
119387
120311
 
119388
- this .getElement () .on (events .join (" "), event =>
120312
+ this .getCanvas () .on (events .join (" "), event =>
119389
120313
  {
119390
120314
  audioElement [functionName] ()
119391
120315
  .then (() => this .getElement () .off (`.${id}`))
@@ -119401,7 +120325,7 @@ const X3DSoundContext_default_ = X3DSoundContext;
119401
120325
  x_ite_Namespace .add ("X3DSoundContext", "x_ite/Browser/Sound/X3DSoundContext", X3DSoundContext_default_);
119402
120326
  /* harmony default export */ const Sound_X3DSoundContext = (X3DSoundContext_default_);
119403
120327
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Texturing/KTXDecoder.js
119404
- /* provided dependency */ var KTXDecoder_$ = __webpack_require__(183);
120328
+ /* provided dependency */ var KTXDecoder_$ = __webpack_require__(440);
119405
120329
  const KTXDecoder_default_ = class KTXDecoder
119406
120330
  {
119407
120331
  constructor (gl, externalKtxlib, scriptDir)
@@ -119976,15 +120900,16 @@ Object .assign (X3DTimeContext .prototype,
119976
120900
  return function ()
119977
120901
  {
119978
120902
  const
119979
- time = Date .now () / 1000,
119980
- interval = time - this [_currentTime];
120903
+ time = Date .now () / 1000,
120904
+ interval = time - this [_currentTime],
120905
+ activeLayer = this .getActiveLayer ();
119981
120906
 
119982
120907
  this [_currentTime] = time;
119983
120908
  this [_currentFrameRate] = interval ? 1 / interval : 60;
119984
120909
 
119985
- if (this .getWorld () && this .getActiveLayer ())
120910
+ if (activeLayer)
119986
120911
  {
119987
- const cameraSpaceMatrix = this .getActiveLayer () .getViewpoint () .getCameraSpaceMatrix ();
120912
+ const cameraSpaceMatrix = activeLayer .getViewpoint () .getCameraSpaceMatrix ();
119988
120913
 
119989
120914
  lastPosition .assign (this [_currentPosition]);
119990
120915
  this [_currentPosition] .set (cameraSpaceMatrix [12], cameraSpaceMatrix [13], cameraSpaceMatrix [14]);
@@ -120954,7 +121879,7 @@ const Components_default_ = Components;
120954
121879
  x_ite_Namespace .add ("Components", "x_ite/Components", Components_default_);
120955
121880
  /* harmony default export */ const x_ite_Components = ((/* unused pure expression or super */ null && (Components_default_)));
120956
121881
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/DOMIntegration.js
120957
- /* provided dependency */ var DOMIntegration_$ = __webpack_require__(183);
121882
+ /* provided dependency */ var DOMIntegration_$ = __webpack_require__(440);
120958
121883
  /*******************************************************************************
120959
121884
  * MIT License
120960
121885
  *
@@ -122085,7 +123010,7 @@ const SupportedProfiles_default_ = SupportedProfiles;
122085
123010
  x_ite_Namespace .add ("SupportedProfiles", "x_ite/Configuration/SupportedProfiles", SupportedProfiles_default_);
122086
123011
  /* harmony default export */ const Configuration_SupportedProfiles = (SupportedProfiles_default_);
122087
123012
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/X3DBrowser.js
122088
- /* provided dependency */ var X3DBrowser_$ = __webpack_require__(183);
123013
+ /* provided dependency */ var X3DBrowser_$ = __webpack_require__(440);
122089
123014
  /*******************************************************************************
122090
123015
  *
122091
123016
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -122552,7 +123477,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
122552
123477
  external = this .isExternal (),
122553
123478
  currentScene = this .currentScene,
122554
123479
  worldURL = external ? this .getBaseURL () : currentScene .getWorldURL (),
122555
- fileLoader = new InputOutput_FileLoader (this .getWorld ()),
123480
+ fileLoader = new InputOutput_FileLoader (this .getScriptNode () ?? this .getWorld ()),
122556
123481
  scene = fileLoader .createX3DFromString (worldURL, `#VRML V2.0 utf8\n\n${vrmlSyntax}`);
122557
123482
 
122558
123483
  if (!external)
@@ -122571,7 +123496,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
122571
123496
  external = this .isExternal (),
122572
123497
  currentScene = this .currentScene,
122573
123498
  worldURL = external ? this .getBaseURL () : currentScene .getWorldURL (),
122574
- fileLoader = new InputOutput_FileLoader (this .getWorld ());
123499
+ fileLoader = new InputOutput_FileLoader (this .getScriptNode () ?? this .getWorld ());
122575
123500
 
122576
123501
  const scene = await new Promise ((resolve, reject) =>
122577
123502
  {
@@ -122608,7 +123533,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
122608
123533
  const
122609
123534
  currentScene = this .currentScene,
122610
123535
  external = this .isExternal (),
122611
- fileLoader = new InputOutput_FileLoader (this .getWorld ());
123536
+ fileLoader = new InputOutput_FileLoader (this .getScriptNode () ?? this .getWorld ());
122612
123537
 
122613
123538
  this .addLoadingObject (fileLoader);
122614
123539
 
@@ -122646,7 +123571,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
122646
123571
  const
122647
123572
  currentScene = this .currentScene,
122648
123573
  external = this .isExternal (),
122649
- fileLoader = new InputOutput_FileLoader (this .getWorld ());
123574
+ fileLoader = new InputOutput_FileLoader (this .getScriptNode () ?? this .getWorld ());
122650
123575
 
122651
123576
  this .addLoadingObject (fileLoader);
122652
123577
 
@@ -122683,7 +123608,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
122683
123608
 
122684
123609
  // Start loading.
122685
123610
 
122686
- const fileLoader = new InputOutput_FileLoader (this .getWorld ());
123611
+ const fileLoader = new InputOutput_FileLoader (this .getScriptNode () ?? this .getWorld ());
122687
123612
 
122688
123613
  fileLoader .createX3DFromURL (url, parameter, scene =>
122689
123614
  {
@@ -123114,7 +124039,7 @@ Object .defineProperties (X3DBrowser .prototype,
123114
124039
  {
123115
124040
  get ()
123116
124041
  {
123117
- return this .getScriptStack () .at (-1) .getExecutionContext ();
124042
+ return this .getScriptNode () ?.getExecutionContext () ?? this .getExecutionContext ();
123118
124043
  },
123119
124044
  enumerable: true,
123120
124045
  },
@@ -123177,7 +124102,7 @@ const X3DBrowser_default_ = X3DBrowser;
123177
124102
  x_ite_Namespace .add ("X3DBrowser", "x_ite/Browser/X3DBrowser", X3DBrowser_default_);
123178
124103
  /* harmony default export */ const Browser_X3DBrowser = (X3DBrowser_default_);
123179
124104
  ;// CONCATENATED MODULE: ./src/x_ite/X3DCanvasElement.js
123180
- /* provided dependency */ var X3DCanvasElement_$ = __webpack_require__(183);
124105
+ /* provided dependency */ var X3DCanvasElement_$ = __webpack_require__(440);
123181
124106
  /*******************************************************************************
123182
124107
  *
123183
124108
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -123314,8 +124239,8 @@ const X3DCanvasElement_default_ = X3DCanvasElement;
123314
124239
  x_ite_Namespace .add ("X3DCanvasElement", "x_ite/X3DCanvasElement", X3DCanvasElement_default_);
123315
124240
  /* harmony default export */ const x_ite_X3DCanvasElement = (X3DCanvasElement_default_);
123316
124241
  ;// CONCATENATED MODULE: ./src/lib/jquery.js
123317
- /* provided dependency */ var jquery_$ = __webpack_require__(183);
123318
- /* provided dependency */ var pako = __webpack_require__(935);
124242
+ /* provided dependency */ var jquery_$ = __webpack_require__(440);
124243
+ /* provided dependency */ var pako = __webpack_require__(284);
123319
124244
  Object .assign (jquery_$,
123320
124245
  {
123321
124246
  decodeText (input)
@@ -123392,14 +124317,14 @@ const jquery_default_ = jquery_$;
123392
124317
  x_ite_Namespace .add ("jquery", "lib/jquery", jquery_default_);
123393
124318
  /* harmony default export */ const jquery = ((/* unused pure expression or super */ null && (jquery_default_)));
123394
124319
  ;// CONCATENATED MODULE: ./src/lib/libtess.js
123395
- /* provided dependency */ var libtess_libtess = __webpack_require__(972);
124320
+ /* provided dependency */ var libtess_libtess = __webpack_require__(149);
123396
124321
  const libtess_default_ = libtess_libtess;
123397
124322
  ;
123398
124323
 
123399
124324
  x_ite_Namespace .add ("libtess", "lib/libtess", libtess_default_);
123400
124325
  /* harmony default export */ const lib_libtess = ((/* unused pure expression or super */ null && (libtess_default_)));
123401
124326
  ;// CONCATENATED MODULE: ./src/x_ite/X3D.js
123402
- /* provided dependency */ var X3D_$ = __webpack_require__(183);
124327
+ /* provided dependency */ var X3D_$ = __webpack_require__(440);
123403
124328
  /*******************************************************************************
123404
124329
  *
123405
124330
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -123707,7 +124632,7 @@ Object .assign (X3D,
123707
124632
 
123708
124633
  // Assign X3D to global namespace.
123709
124634
 
123710
- window [Symbol .for ("X_ITE.X3D-9.3.2")] = x_ite_X3D;
124635
+ window [Symbol .for ("X_ITE.X3D-9.4.0")] = x_ite_X3D;
123711
124636
 
123712
124637
  customElements .define ("x3d-canvas", x_ite_X3DCanvasElement);
123713
124638