@babylonjs/core 7.51.3 → 7.52.1

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 (166) hide show
  1. package/Audio/Interfaces/IAudioEngineOptions.d.ts +2 -0
  2. package/Audio/Interfaces/IAudioEngineOptions.js.map +1 -1
  3. package/AudioV2/abstractAudio/abstractAudioBus.d.ts +22 -0
  4. package/AudioV2/abstractAudio/abstractAudioBus.js +35 -0
  5. package/AudioV2/abstractAudio/abstractAudioBus.js.map +1 -0
  6. package/AudioV2/abstractAudio/abstractAudioNode.d.ts +99 -0
  7. package/AudioV2/abstractAudio/abstractAudioNode.js +149 -0
  8. package/AudioV2/abstractAudio/abstractAudioNode.js.map +1 -0
  9. package/AudioV2/abstractAudio/abstractSound.d.ts +152 -0
  10. package/AudioV2/abstractAudio/abstractSound.js +202 -0
  11. package/AudioV2/abstractAudio/abstractSound.js.map +1 -0
  12. package/AudioV2/abstractAudio/abstractSoundInstance.d.ts +34 -0
  13. package/AudioV2/abstractAudio/abstractSoundInstance.js +35 -0
  14. package/AudioV2/abstractAudio/abstractSoundInstance.js.map +1 -0
  15. package/AudioV2/abstractAudio/audioBus.d.ts +48 -0
  16. package/AudioV2/abstractAudio/audioBus.js +53 -0
  17. package/AudioV2/abstractAudio/audioBus.js.map +1 -0
  18. package/AudioV2/abstractAudio/audioEngineV2.d.ts +193 -0
  19. package/AudioV2/abstractAudio/audioEngineV2.js +155 -0
  20. package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -0
  21. package/AudioV2/abstractAudio/index.d.ts +10 -0
  22. package/AudioV2/abstractAudio/index.js +12 -0
  23. package/AudioV2/abstractAudio/index.js.map +1 -0
  24. package/AudioV2/abstractAudio/mainAudioBus.d.ts +22 -0
  25. package/AudioV2/abstractAudio/mainAudioBus.js +18 -0
  26. package/AudioV2/abstractAudio/mainAudioBus.js.map +1 -0
  27. package/AudioV2/abstractAudio/mainAudioOut.d.ts +13 -0
  28. package/AudioV2/abstractAudio/mainAudioOut.js +15 -0
  29. package/AudioV2/abstractAudio/mainAudioOut.js.map +1 -0
  30. package/AudioV2/abstractAudio/staticSound.d.ts +134 -0
  31. package/AudioV2/abstractAudio/staticSound.js +113 -0
  32. package/AudioV2/abstractAudio/staticSound.js.map +1 -0
  33. package/AudioV2/abstractAudio/staticSoundBuffer.d.ts +46 -0
  34. package/AudioV2/abstractAudio/staticSoundBuffer.js +17 -0
  35. package/AudioV2/abstractAudio/staticSoundBuffer.js.map +1 -0
  36. package/AudioV2/abstractAudio/staticSoundInstance.d.ts +15 -0
  37. package/AudioV2/abstractAudio/staticSoundInstance.js +5 -0
  38. package/AudioV2/abstractAudio/staticSoundInstance.js.map +1 -0
  39. package/AudioV2/abstractAudio/streamingSound.d.ts +77 -0
  40. package/AudioV2/abstractAudio/streamingSound.js +109 -0
  41. package/AudioV2/abstractAudio/streamingSound.js.map +1 -0
  42. package/AudioV2/abstractAudio/streamingSoundInstance.d.ts +25 -0
  43. package/AudioV2/abstractAudio/streamingSoundInstance.js +29 -0
  44. package/AudioV2/abstractAudio/streamingSoundInstance.js.map +1 -0
  45. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.d.ts +53 -0
  46. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js +97 -0
  47. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js.map +1 -0
  48. package/AudioV2/abstractAudio/subNodes/abstractAudioSubNode.d.ts +13 -0
  49. package/AudioV2/abstractAudio/subNodes/abstractAudioSubNode.js +33 -0
  50. package/AudioV2/abstractAudio/subNodes/abstractAudioSubNode.js.map +1 -0
  51. package/AudioV2/abstractAudio/subNodes/audioSubNode.d.ts +6 -0
  52. package/AudioV2/abstractAudio/subNodes/audioSubNode.js +8 -0
  53. package/AudioV2/abstractAudio/subNodes/audioSubNode.js.map +1 -0
  54. package/AudioV2/abstractAudio/subNodes/spatialAudioSubNode.d.ts +31 -0
  55. package/AudioV2/abstractAudio/subNodes/spatialAudioSubNode.js +46 -0
  56. package/AudioV2/abstractAudio/subNodes/spatialAudioSubNode.js.map +1 -0
  57. package/AudioV2/abstractAudio/subNodes/stereoAudioSubNode.d.ts +19 -0
  58. package/AudioV2/abstractAudio/subNodes/stereoAudioSubNode.js +27 -0
  59. package/AudioV2/abstractAudio/subNodes/stereoAudioSubNode.js.map +1 -0
  60. package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.d.ts +28 -0
  61. package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.js +24 -0
  62. package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.js.map +1 -0
  63. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.d.ts +187 -0
  64. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js +41 -0
  65. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js.map +1 -0
  66. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.d.ts +59 -0
  67. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js +21 -0
  68. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js.map +1 -0
  69. package/AudioV2/abstractAudio/subProperties/abstractStereoAudio.d.ts +38 -0
  70. package/AudioV2/abstractAudio/subProperties/abstractStereoAudio.js +18 -0
  71. package/AudioV2/abstractAudio/subProperties/abstractStereoAudio.js.map +1 -0
  72. package/AudioV2/abstractAudio/subProperties/index.d.ts +3 -0
  73. package/AudioV2/abstractAudio/subProperties/index.js +4 -0
  74. package/AudioV2/abstractAudio/subProperties/index.js.map +1 -0
  75. package/AudioV2/abstractAudio/subProperties/spatialAudio.d.ts +49 -0
  76. package/AudioV2/abstractAudio/subProperties/spatialAudio.js +129 -0
  77. package/AudioV2/abstractAudio/subProperties/spatialAudio.js.map +1 -0
  78. package/AudioV2/abstractAudio/subProperties/spatialAudioListener.d.ts +9 -0
  79. package/AudioV2/abstractAudio/subProperties/spatialAudioListener.js +22 -0
  80. package/AudioV2/abstractAudio/subProperties/spatialAudioListener.js.map +1 -0
  81. package/AudioV2/abstractAudio/subProperties/stereoAudio.d.ts +11 -0
  82. package/AudioV2/abstractAudio/subProperties/stereoAudio.js +18 -0
  83. package/AudioV2/abstractAudio/subProperties/stereoAudio.js.map +1 -0
  84. package/AudioV2/audioUtils.d.ts +3 -0
  85. package/AudioV2/audioUtils.js +6 -0
  86. package/AudioV2/audioUtils.js.map +1 -0
  87. package/AudioV2/index.d.ts +3 -0
  88. package/AudioV2/index.js +5 -0
  89. package/AudioV2/index.js.map +1 -0
  90. package/AudioV2/soundState.d.ts +29 -0
  91. package/AudioV2/soundState.js +31 -0
  92. package/AudioV2/soundState.js.map +1 -0
  93. package/AudioV2/webAudio/index.d.ts +5 -0
  94. package/AudioV2/webAudio/index.js +6 -0
  95. package/AudioV2/webAudio/index.js.map +1 -0
  96. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.d.ts +59 -0
  97. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +156 -0
  98. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -0
  99. package/AudioV2/webAudio/subNodes/stereoWebAudioSubNode.d.ts +24 -0
  100. package/AudioV2/webAudio/subNodes/stereoWebAudioSubNode.js +55 -0
  101. package/AudioV2/webAudio/subNodes/stereoWebAudioSubNode.js.map +1 -0
  102. package/AudioV2/webAudio/subNodes/volumeWebAudioSubNode.d.ts +24 -0
  103. package/AudioV2/webAudio/subNodes/volumeWebAudioSubNode.js +55 -0
  104. package/AudioV2/webAudio/subNodes/volumeWebAudioSubNode.js.map +1 -0
  105. package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.d.ts +26 -0
  106. package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.js +54 -0
  107. package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.js.map +1 -0
  108. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.d.ts +21 -0
  109. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js +112 -0
  110. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js.map +1 -0
  111. package/AudioV2/webAudio/subProperties/spatialWebAudio.d.ts +10 -0
  112. package/AudioV2/webAudio/subProperties/spatialWebAudio.js +26 -0
  113. package/AudioV2/webAudio/subProperties/spatialWebAudio.js.map +1 -0
  114. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.d.ts +4 -0
  115. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +108 -0
  116. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -0
  117. package/AudioV2/webAudio/webAudioBus.d.ts +35 -0
  118. package/AudioV2/webAudio/webAudioBus.js +63 -0
  119. package/AudioV2/webAudio/webAudioBus.js.map +1 -0
  120. package/AudioV2/webAudio/webAudioEngine.d.ts +110 -0
  121. package/AudioV2/webAudio/webAudioEngine.js +227 -0
  122. package/AudioV2/webAudio/webAudioEngine.js.map +1 -0
  123. package/AudioV2/webAudio/webAudioMainBus.d.ts +29 -0
  124. package/AudioV2/webAudio/webAudioMainBus.js +64 -0
  125. package/AudioV2/webAudio/webAudioMainBus.js.map +1 -0
  126. package/AudioV2/webAudio/webAudioMainOut.d.ts +20 -0
  127. package/AudioV2/webAudio/webAudioMainOut.js +35 -0
  128. package/AudioV2/webAudio/webAudioMainOut.js.map +1 -0
  129. package/AudioV2/webAudio/webAudioNode.d.ts +24 -0
  130. package/AudioV2/webAudio/webAudioNode.js +2 -0
  131. package/AudioV2/webAudio/webAudioNode.js.map +1 -0
  132. package/AudioV2/webAudio/webAudioStaticSound.d.ts +106 -0
  133. package/AudioV2/webAudio/webAudioStaticSound.js +368 -0
  134. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -0
  135. package/AudioV2/webAudio/webAudioStreamingSound.d.ts +94 -0
  136. package/AudioV2/webAudio/webAudioStreamingSound.js +358 -0
  137. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -0
  138. package/Engines/abstractEngine.d.ts +6 -1
  139. package/Engines/abstractEngine.js +8 -5
  140. package/Engines/abstractEngine.js.map +1 -1
  141. package/Engines/engine.common.js +0 -4
  142. package/Engines/engine.common.js.map +1 -1
  143. package/Engines/engine.d.ts +0 -1
  144. package/Engines/engine.js +0 -1
  145. package/Engines/engine.js.map +1 -1
  146. package/Lights/Shadows/cascadedShadowGenerator.js +33 -20
  147. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  148. package/Materials/Textures/hdrCubeTexture.js +4 -1
  149. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  150. package/Meshes/geometry.js +7 -15
  151. package/Meshes/geometry.js.map +1 -1
  152. package/Misc/fileTools.d.ts +3 -1
  153. package/Misc/fileTools.js +2 -2
  154. package/Misc/fileTools.js.map +1 -1
  155. package/Shaders/ShadersInclude/shadowMapFragment.js +1 -0
  156. package/Shaders/ShadersInclude/shadowMapFragment.js.map +1 -1
  157. package/Shaders/iblCdfDebug.fragment.js +2 -2
  158. package/Shaders/iblCdfDebug.fragment.js.map +1 -1
  159. package/ShadersWGSL/ShadersInclude/shadowMapFragment.js +1 -0
  160. package/ShadersWGSL/ShadersInclude/shadowMapFragment.js.map +1 -1
  161. package/ShadersWGSL/iblCdfDebug.fragment.js +2 -2
  162. package/ShadersWGSL/iblCdfDebug.fragment.js.map +1 -1
  163. package/index.d.ts +1 -0
  164. package/index.js +1 -0
  165. package/index.js.map +1 -1
  166. package/package.json +1 -1
@@ -0,0 +1,55 @@
1
+ import { _StereoAudioSubNode } from "../../abstractAudio/subNodes/stereoAudioSubNode.js";
2
+ /** @internal */
3
+ export async function _CreateStereoAudioSubNodeAsync(engine) {
4
+ return new _StereoWebAudioSubNode(engine);
5
+ }
6
+ /** @internal */
7
+ export class _StereoWebAudioSubNode extends _StereoAudioSubNode {
8
+ /** @internal */
9
+ constructor(engine) {
10
+ super(engine);
11
+ this.node = new StereoPannerNode(engine.audioContext);
12
+ }
13
+ /** @internal */
14
+ get pan() {
15
+ return this.node.pan.value;
16
+ }
17
+ /** @internal */
18
+ set pan(value) {
19
+ this.node.pan.value = value;
20
+ }
21
+ /** @internal */
22
+ get inNode() {
23
+ return this.node;
24
+ }
25
+ /** @internal */
26
+ get outNode() {
27
+ return this.node;
28
+ }
29
+ /** @internal */
30
+ getClassName() {
31
+ return "_StereoWebAudioSubNode";
32
+ }
33
+ _connect(node) {
34
+ const connected = super._connect(node);
35
+ if (!connected) {
36
+ return false;
37
+ }
38
+ // If the wrapped node is not available now, it will be connected later by the subgraph.
39
+ if (node.inNode) {
40
+ this.node.connect(node.inNode);
41
+ }
42
+ return true;
43
+ }
44
+ _disconnect(node) {
45
+ const disconnected = super._disconnect(node);
46
+ if (!disconnected) {
47
+ return false;
48
+ }
49
+ if (node.inNode) {
50
+ this.node.disconnect(node.inNode);
51
+ }
52
+ return true;
53
+ }
54
+ }
55
+ //# sourceMappingURL=stereoWebAudioSubNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stereoWebAudioSubNode.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/webAudio/subNodes/stereoWebAudioSubNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAItF,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,MAAuB;IACxE,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,gBAAgB;AAChB,MAAM,OAAO,sBAAuB,SAAQ,mBAAmB;IAI3D,gBAAgB;IAChB,YAAmB,MAAuB;QACtC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED,gBAAgB;IAChB,IAAW,GAAG;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,gBAAgB;IAChB,IAAW,GAAG,CAAC,KAAa;QACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,gBAAgB;IAChB,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,gBAAgB;IAChB,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,gBAAgB;IACT,YAAY;QACf,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAEkB,QAAQ,CAAC,IAAqB;QAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,wFAAwF;QACxF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEkB,WAAW,CAAC,IAAqB;QAChD,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import { _StereoAudioSubNode } from \"../../abstractAudio/subNodes/stereoAudioSubNode\";\nimport type { _WebAudioEngine } from \"../webAudioEngine\";\nimport type { IWebAudioInNode } from \"../webAudioNode\";\n\n/** @internal */\nexport async function _CreateStereoAudioSubNodeAsync(engine: _WebAudioEngine): Promise<_StereoAudioSubNode> {\n return new _StereoWebAudioSubNode(engine);\n}\n\n/** @internal */\nexport class _StereoWebAudioSubNode extends _StereoAudioSubNode {\n /** @internal */\n public readonly node: StereoPannerNode;\n\n /** @internal */\n public constructor(engine: _WebAudioEngine) {\n super(engine);\n\n this.node = new StereoPannerNode(engine.audioContext);\n }\n\n /** @internal */\n public get pan(): number {\n return this.node.pan.value;\n }\n\n /** @internal */\n public set pan(value: number) {\n this.node.pan.value = value;\n }\n\n /** @internal */\n public get inNode(): AudioNode {\n return this.node;\n }\n\n /** @internal */\n public get outNode(): AudioNode {\n return this.node;\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_StereoWebAudioSubNode\";\n }\n\n protected override _connect(node: IWebAudioInNode): boolean {\n const connected = super._connect(node);\n\n if (!connected) {\n return false;\n }\n\n // If the wrapped node is not available now, it will be connected later by the subgraph.\n if (node.inNode) {\n this.node.connect(node.inNode);\n }\n\n return true;\n }\n\n protected override _disconnect(node: IWebAudioInNode): boolean {\n const disconnected = super._disconnect(node);\n\n if (!disconnected) {\n return false;\n }\n\n if (node.inNode) {\n this.node.disconnect(node.inNode);\n }\n\n return true;\n }\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import { _VolumeAudioSubNode } from "../../abstractAudio/subNodes/volumeAudioSubNode";
2
+ import type { _WebAudioEngine } from "../webAudioEngine";
3
+ import type { IWebAudioInNode, IWebAudioSubNode } from "../webAudioNode";
4
+ /** @internal */
5
+ export declare function _CreateVolumeAudioSubNodeAsync(engine: _WebAudioEngine): Promise<_VolumeAudioSubNode>;
6
+ /** @internal */
7
+ export declare class _VolumeWebAudioSubNode extends _VolumeAudioSubNode implements IWebAudioSubNode {
8
+ /** @internal */
9
+ readonly node: GainNode;
10
+ /** @internal */
11
+ constructor(engine: _WebAudioEngine);
12
+ /** @internal */
13
+ get volume(): number;
14
+ /** @internal */
15
+ set volume(value: number);
16
+ /** @internal */
17
+ get inNode(): AudioNode;
18
+ /** @internal */
19
+ get outNode(): AudioNode;
20
+ protected _connect(node: IWebAudioInNode): boolean;
21
+ protected _disconnect(node: IWebAudioInNode): boolean;
22
+ /** @internal */
23
+ getClassName(): string;
24
+ }
@@ -0,0 +1,55 @@
1
+ import { _VolumeAudioSubNode } from "../../abstractAudio/subNodes/volumeAudioSubNode.js";
2
+ /** @internal */
3
+ export async function _CreateVolumeAudioSubNodeAsync(engine) {
4
+ return new _VolumeWebAudioSubNode(engine);
5
+ }
6
+ /** @internal */
7
+ export class _VolumeWebAudioSubNode extends _VolumeAudioSubNode {
8
+ /** @internal */
9
+ constructor(engine) {
10
+ super(engine);
11
+ this.node = new GainNode(engine.audioContext);
12
+ }
13
+ /** @internal */
14
+ get volume() {
15
+ return this.node.gain.value;
16
+ }
17
+ /** @internal */
18
+ set volume(value) {
19
+ this.node.gain.value = value;
20
+ }
21
+ /** @internal */
22
+ get inNode() {
23
+ return this.node;
24
+ }
25
+ /** @internal */
26
+ get outNode() {
27
+ return this.node;
28
+ }
29
+ _connect(node) {
30
+ const connected = super._connect(node);
31
+ if (!connected) {
32
+ return false;
33
+ }
34
+ // If the wrapped node is not available now, it will be connected later by the subgraph.
35
+ if (node.inNode) {
36
+ this.node.connect(node.inNode);
37
+ }
38
+ return true;
39
+ }
40
+ _disconnect(node) {
41
+ const disconnected = super._disconnect(node);
42
+ if (!disconnected) {
43
+ return false;
44
+ }
45
+ if (node.inNode) {
46
+ this.node.disconnect(node.inNode);
47
+ }
48
+ return true;
49
+ }
50
+ /** @internal */
51
+ getClassName() {
52
+ return "_VolumeWebAudioSubNode";
53
+ }
54
+ }
55
+ //# sourceMappingURL=volumeWebAudioSubNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volumeWebAudioSubNode.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/webAudio/subNodes/volumeWebAudioSubNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAItF,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,MAAuB;IACxE,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,gBAAgB;AAChB,MAAM,OAAO,sBAAuB,SAAQ,mBAAmB;IAI3D,gBAAgB;IAChB,YAAmB,MAAuB;QACtC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IAED,gBAAgB;IAChB,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC,CAAC;IAED,gBAAgB;IAChB,IAAW,MAAM,CAAC,KAAa;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,gBAAgB;IAChB,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,gBAAgB;IAChB,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEkB,QAAQ,CAAC,IAAqB;QAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,wFAAwF;QACxF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEkB,WAAW,CAAC,IAAqB;QAChD,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,gBAAgB;IACT,YAAY;QACf,OAAO,wBAAwB,CAAC;IACpC,CAAC;CACJ","sourcesContent":["import { _VolumeAudioSubNode } from \"../../abstractAudio/subNodes/volumeAudioSubNode\";\nimport type { _WebAudioEngine } from \"../webAudioEngine\";\nimport type { IWebAudioInNode, IWebAudioSubNode } from \"../webAudioNode\";\n\n/** @internal */\nexport async function _CreateVolumeAudioSubNodeAsync(engine: _WebAudioEngine): Promise<_VolumeAudioSubNode> {\n return new _VolumeWebAudioSubNode(engine);\n}\n\n/** @internal */\nexport class _VolumeWebAudioSubNode extends _VolumeAudioSubNode implements IWebAudioSubNode {\n /** @internal */\n public readonly node: GainNode;\n\n /** @internal */\n public constructor(engine: _WebAudioEngine) {\n super(engine);\n\n this.node = new GainNode(engine.audioContext);\n }\n\n /** @internal */\n public get volume(): number {\n return this.node.gain.value;\n }\n\n /** @internal */\n public set volume(value: number) {\n this.node.gain.value = value;\n }\n\n /** @internal */\n public get inNode(): AudioNode {\n return this.node;\n }\n\n /** @internal */\n public get outNode(): AudioNode {\n return this.node;\n }\n\n protected override _connect(node: IWebAudioInNode): boolean {\n const connected = super._connect(node);\n\n if (!connected) {\n return false;\n }\n\n // If the wrapped node is not available now, it will be connected later by the subgraph.\n if (node.inNode) {\n this.node.connect(node.inNode);\n }\n\n return true;\n }\n\n protected override _disconnect(node: IWebAudioInNode): boolean {\n const disconnected = super._disconnect(node);\n\n if (!disconnected) {\n return false;\n }\n\n if (node.inNode) {\n this.node.disconnect(node.inNode);\n }\n\n return true;\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_VolumeWebAudioSubNode\";\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import type { Nullable } from "../../../types.js";
2
+ import type { AbstractAudioNode } from "../../abstractAudio/abstractAudioNode";
3
+ import { _AbstractAudioSubGraph } from "../../abstractAudio/subNodes/abstractAudioSubGraph";
4
+ import type { _AbstractAudioSubNode } from "../../abstractAudio/subNodes/abstractAudioSubNode";
5
+ import type { IVolumeAudioOptions } from "../../abstractAudio/subNodes/volumeAudioSubNode";
6
+ import type { IWebAudioSuperNode } from "../webAudioNode";
7
+ /**
8
+ * Options for creating a WebAudioBaseSubGraph.
9
+ */
10
+ export interface IWebAudioBaseSubGraphOptions extends IVolumeAudioOptions {
11
+ }
12
+ /** @internal */
13
+ export declare abstract class _WebAudioBaseSubGraph extends _AbstractAudioSubGraph {
14
+ protected _owner: IWebAudioSuperNode;
15
+ protected _outNode: Nullable<AudioNode>;
16
+ /** @internal */
17
+ constructor(owner: IWebAudioSuperNode);
18
+ /** @internal */
19
+ init(options: Partial<IWebAudioBaseSubGraphOptions>): Promise<void>;
20
+ protected abstract readonly _downstreamNodes: Nullable<Set<AbstractAudioNode>>;
21
+ /** @internal */
22
+ get inNode(): Nullable<AudioNode>;
23
+ /** @internal */
24
+ get outNode(): Nullable<AudioNode>;
25
+ protected _createSubNode(name: string): Nullable<Promise<_AbstractAudioSubNode>>;
26
+ }
@@ -0,0 +1,54 @@
1
+ import { _AbstractAudioSubGraph } from "../../abstractAudio/subNodes/abstractAudioSubGraph.js";
2
+ import { _GetVolumeAudioSubNode } from "../../abstractAudio/subNodes/volumeAudioSubNode.js";
3
+ import { _CreateVolumeAudioSubNodeAsync } from "./volumeWebAudioSubNode.js";
4
+ /** @internal */
5
+ export class _WebAudioBaseSubGraph extends _AbstractAudioSubGraph {
6
+ /** @internal */
7
+ constructor(owner) {
8
+ super();
9
+ this._outNode = null;
10
+ this._owner = owner;
11
+ }
12
+ /** @internal */
13
+ async init(options) {
14
+ this._createAndAddSubNode("Volume" /* AudioSubNode.VOLUME */);
15
+ await this._createSubNodePromisesResolved();
16
+ const volumeNode = _GetVolumeAudioSubNode(this);
17
+ if (!volumeNode) {
18
+ throw new Error("No volume subnode.");
19
+ }
20
+ volumeNode.setOptions(options);
21
+ if (volumeNode.getClassName() !== "_VolumeWebAudioSubNode") {
22
+ throw new Error("Not a WebAudio subnode.");
23
+ }
24
+ this._outNode = volumeNode.node;
25
+ // Connect the new wrapped WebAudio node to the wrapped downstream WebAudio nodes.
26
+ // The wrapper nodes are unaware of this change.
27
+ if (this._outNode && this._downstreamNodes) {
28
+ const it = this._downstreamNodes.values();
29
+ for (let next = it.next(); !next.done; next = it.next()) {
30
+ const inNode = next.value.inNode;
31
+ if (inNode) {
32
+ this._outNode.connect(inNode);
33
+ }
34
+ }
35
+ }
36
+ }
37
+ /** @internal */
38
+ get inNode() {
39
+ return this._outNode;
40
+ }
41
+ /** @internal */
42
+ get outNode() {
43
+ return this._outNode;
44
+ }
45
+ _createSubNode(name) {
46
+ switch (name) {
47
+ case "Volume" /* AudioSubNode.VOLUME */:
48
+ return _CreateVolumeAudioSubNodeAsync(this._owner.engine);
49
+ default:
50
+ return null;
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=webAudioBaseSubGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webAudioBaseSubGraph.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAI5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAGzF,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAOzE,gBAAgB;AAChB,MAAM,OAAgB,qBAAsB,SAAQ,sBAAsB;IAItE,gBAAgB;IAChB,YAAmB,KAAyB;QACxC,KAAK,EAAE,CAAC;QAJF,aAAQ,GAAwB,IAAI,CAAC;QAM3C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,gBAAgB;IACT,KAAK,CAAC,IAAI,CAAC,OAA8C;QAC5D,IAAI,CAAC,oBAAoB,oCAAqB,CAAC;QAC/C,MAAM,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAE5C,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC;QAED,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE/B,IAAI,UAAU,CAAC,YAAY,EAAE,KAAK,wBAAwB,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,QAAQ,GAAI,UAAqC,CAAC,IAAI,CAAC;QAE5D,kFAAkF;QAClF,gDAAgD;QAChD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAC1C,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtD,MAAM,MAAM,GAAI,IAAI,CAAC,KAAyB,CAAC,MAAM,CAAC;gBACtD,IAAI,MAAM,EAAE,CAAC;oBACT,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClC,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAID,gBAAgB;IAChB,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,gBAAgB;IAChB,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAES,cAAc,CAAC,IAAY;QACjC,QAAQ,IAAI,EAAE,CAAC;YACX;gBACI,OAAO,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9D;gBACI,OAAO,IAAI,CAAC;QACpB,CAAC;IACL,CAAC;CACJ","sourcesContent":["import type { Nullable } from \"core/types\";\nimport type { AbstractAudioNode } from \"../../abstractAudio/abstractAudioNode\";\nimport { _AbstractAudioSubGraph } from \"../../abstractAudio/subNodes/abstractAudioSubGraph\";\nimport type { _AbstractAudioSubNode } from \"../../abstractAudio/subNodes/abstractAudioSubNode\";\nimport { AudioSubNode } from \"../../abstractAudio/subNodes/audioSubNode\";\nimport type { IVolumeAudioOptions } from \"../../abstractAudio/subNodes/volumeAudioSubNode\";\nimport { _GetVolumeAudioSubNode } from \"../../abstractAudio/subNodes/volumeAudioSubNode\";\nimport type { IWebAudioInNode, IWebAudioSuperNode } from \"../webAudioNode\";\nimport type { _VolumeWebAudioSubNode } from \"./volumeWebAudioSubNode\";\nimport { _CreateVolumeAudioSubNodeAsync } from \"./volumeWebAudioSubNode\";\n\n/**\n * Options for creating a WebAudioBaseSubGraph.\n */\nexport interface IWebAudioBaseSubGraphOptions extends IVolumeAudioOptions {}\n\n/** @internal */\nexport abstract class _WebAudioBaseSubGraph extends _AbstractAudioSubGraph {\n protected _owner: IWebAudioSuperNode;\n protected _outNode: Nullable<AudioNode> = null;\n\n /** @internal */\n public constructor(owner: IWebAudioSuperNode) {\n super();\n\n this._owner = owner;\n }\n\n /** @internal */\n public async init(options: Partial<IWebAudioBaseSubGraphOptions>): Promise<void> {\n this._createAndAddSubNode(AudioSubNode.VOLUME);\n await this._createSubNodePromisesResolved();\n\n const volumeNode = _GetVolumeAudioSubNode(this);\n if (!volumeNode) {\n throw new Error(\"No volume subnode.\");\n }\n\n volumeNode.setOptions(options);\n\n if (volumeNode.getClassName() !== \"_VolumeWebAudioSubNode\") {\n throw new Error(\"Not a WebAudio subnode.\");\n }\n\n this._outNode = (volumeNode as _VolumeWebAudioSubNode).node;\n\n // Connect the new wrapped WebAudio node to the wrapped downstream WebAudio nodes.\n // The wrapper nodes are unaware of this change.\n if (this._outNode && this._downstreamNodes) {\n const it = this._downstreamNodes.values();\n for (let next = it.next(); !next.done; next = it.next()) {\n const inNode = (next.value as IWebAudioInNode).inNode;\n if (inNode) {\n this._outNode.connect(inNode);\n }\n }\n }\n }\n\n protected abstract readonly _downstreamNodes: Nullable<Set<AbstractAudioNode>>;\n\n /** @internal */\n public get inNode(): Nullable<AudioNode> {\n return this._outNode;\n }\n\n /** @internal */\n public get outNode(): Nullable<AudioNode> {\n return this._outNode;\n }\n\n protected _createSubNode(name: string): Nullable<Promise<_AbstractAudioSubNode>> {\n switch (name) {\n case AudioSubNode.VOLUME:\n return _CreateVolumeAudioSubNodeAsync(this._owner.engine);\n default:\n return null;\n }\n }\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import type { Nullable } from "../../../types";
2
+ import type { AbstractAudioNode } from "../../abstractAudio/abstractAudioNode";
3
+ import type { _AbstractAudioSubNode } from "../../abstractAudio/subNodes/abstractAudioSubNode";
4
+ import type { IVolumeAudioOptions } from "../../abstractAudio/subNodes/volumeAudioSubNode";
5
+ import type { ISpatialAudioOptions } from "../../abstractAudio/subProperties/abstractSpatialAudio";
6
+ import type { IStereoAudioOptions } from "../../abstractAudio/subProperties/abstractStereoAudio";
7
+ import { _WebAudioBaseSubGraph } from "./webAudioBaseSubGraph";
8
+ /** @internal */
9
+ export interface IWebAudioBusAndSoundSubGraphOptions extends ISpatialAudioOptions, IStereoAudioOptions, IVolumeAudioOptions {
10
+ }
11
+ /** @internal */
12
+ export declare abstract class _WebAudioBusAndSoundSubGraph extends _WebAudioBaseSubGraph {
13
+ protected abstract readonly _upstreamNodes: Nullable<Set<AbstractAudioNode>>;
14
+ protected _inNode: Nullable<AudioNode>;
15
+ /** @internal */
16
+ init(options: Partial<IWebAudioBusAndSoundSubGraphOptions>): Promise<void>;
17
+ /** @internal */
18
+ get inNode(): Nullable<AudioNode>;
19
+ protected _createSubNode(name: string): Nullable<Promise<_AbstractAudioSubNode>>;
20
+ protected _onSubNodesChanged(): void;
21
+ }
@@ -0,0 +1,112 @@
1
+ import { _GetSpatialAudioSubNode } from "../../abstractAudio/subNodes/spatialAudioSubNode.js";
2
+ import { _GetStereoAudioSubNode } from "../../abstractAudio/subNodes/stereoAudioSubNode.js";
3
+ import { _GetVolumeAudioSubNode } from "../../abstractAudio/subNodes/volumeAudioSubNode.js";
4
+ import { _HasSpatialAudioOptions } from "../../abstractAudio/subProperties/abstractSpatialAudio.js";
5
+ import { _HasStereoAudioOptions } from "../../abstractAudio/subProperties/abstractStereoAudio.js";
6
+ import { _CreateSpatialAudioSubNodeAsync } from "./spatialWebAudioSubNode.js";
7
+ import { _CreateStereoAudioSubNodeAsync } from "./stereoWebAudioSubNode.js";
8
+ import { _WebAudioBaseSubGraph } from "./webAudioBaseSubGraph.js";
9
+ /** @internal */
10
+ export class _WebAudioBusAndSoundSubGraph extends _WebAudioBaseSubGraph {
11
+ constructor() {
12
+ super(...arguments);
13
+ this._inNode = null;
14
+ }
15
+ /** @internal */
16
+ async init(options) {
17
+ super.init(options);
18
+ let hasSpatialOptions = false;
19
+ let hasStereoOptions = false;
20
+ if ((hasSpatialOptions = _HasSpatialAudioOptions(options))) {
21
+ this._createAndAddSubNode("Spatial" /* AudioSubNode.SPATIAL */);
22
+ }
23
+ if ((hasStereoOptions = _HasStereoAudioOptions(options))) {
24
+ this._createAndAddSubNode("Stereo" /* AudioSubNode.STEREO */);
25
+ }
26
+ await this._createSubNodePromisesResolved();
27
+ if (hasSpatialOptions) {
28
+ _GetSpatialAudioSubNode(this)?.setOptions(options);
29
+ }
30
+ if (hasStereoOptions) {
31
+ _GetStereoAudioSubNode(this)?.setOptions(options);
32
+ }
33
+ }
34
+ /** @internal */
35
+ get inNode() {
36
+ return this._inNode;
37
+ }
38
+ _createSubNode(name) {
39
+ const node = super._createSubNode(name);
40
+ if (node) {
41
+ return node;
42
+ }
43
+ switch (name) {
44
+ case "Spatial" /* AudioSubNode.SPATIAL */:
45
+ return _CreateSpatialAudioSubNodeAsync(this._owner.engine);
46
+ case "Stereo" /* AudioSubNode.STEREO */:
47
+ return _CreateStereoAudioSubNodeAsync(this._owner.engine);
48
+ default:
49
+ return null;
50
+ }
51
+ }
52
+ _onSubNodesChanged() {
53
+ const spatialNode = _GetSpatialAudioSubNode(this);
54
+ const stereoNode = _GetStereoAudioSubNode(this);
55
+ const volumeNode = _GetVolumeAudioSubNode(this);
56
+ if (spatialNode && spatialNode.getClassName() !== "_SpatialWebAudioSubNode") {
57
+ throw new Error("Not a WebAudio subnode.");
58
+ }
59
+ if (stereoNode && stereoNode.getClassName() !== "_StereoWebAudioSubNode") {
60
+ throw new Error("Not a WebAudio subnode.");
61
+ }
62
+ if (volumeNode && volumeNode.getClassName() !== "_VolumeWebAudioSubNode") {
63
+ throw new Error("Not a WebAudio subnode.");
64
+ }
65
+ if (spatialNode) {
66
+ spatialNode.disconnectAll();
67
+ if (stereoNode) {
68
+ spatialNode.connect(stereoNode);
69
+ }
70
+ else if (volumeNode) {
71
+ spatialNode.connect(volumeNode);
72
+ }
73
+ }
74
+ if (stereoNode) {
75
+ stereoNode.disconnectAll();
76
+ if (volumeNode) {
77
+ stereoNode.connect(volumeNode);
78
+ }
79
+ }
80
+ let inSubNode = null;
81
+ if (spatialNode) {
82
+ inSubNode = spatialNode;
83
+ }
84
+ else if (stereoNode) {
85
+ inSubNode = stereoNode;
86
+ }
87
+ else if (volumeNode) {
88
+ inSubNode = volumeNode;
89
+ }
90
+ const inNode = inSubNode?.node ?? null;
91
+ if (this._inNode !== inNode) {
92
+ // Disconnect the wrapped upstream WebAudio nodes from the old wrapped WebAudio node.
93
+ // The wrapper nodes are unaware of this change.
94
+ if (this._inNode && this._upstreamNodes) {
95
+ const it = this._upstreamNodes.values();
96
+ for (let next = it.next(); !next.done; next = it.next()) {
97
+ next.value.outNode?.disconnect(this._inNode);
98
+ }
99
+ }
100
+ this._inNode = inNode;
101
+ // Connect the wrapped upstream WebAudio nodes to the new wrapped WebAudio node.
102
+ // The wrapper nodes are unaware of this change.
103
+ if (inNode && this._upstreamNodes) {
104
+ const it = this._upstreamNodes.values();
105
+ for (let next = it.next(); !next.done; next = it.next()) {
106
+ next.value.outNode?.connect(inNode);
107
+ }
108
+ }
109
+ }
110
+ }
111
+ }
112
+ //# sourceMappingURL=webAudioBusAndSoundSubGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webAudioBusAndSoundSubGraph.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../../types\";\nimport type { AbstractAudioNode } from \"../../abstractAudio/abstractAudioNode\";\nimport type { _AbstractAudioSubNode } from \"../../abstractAudio/subNodes/abstractAudioSubNode\";\nimport { AudioSubNode } from \"../../abstractAudio/subNodes/audioSubNode\";\nimport { _GetSpatialAudioSubNode } from \"../../abstractAudio/subNodes/spatialAudioSubNode\";\nimport { _GetStereoAudioSubNode } from \"../../abstractAudio/subNodes/stereoAudioSubNode\";\nimport type { IVolumeAudioOptions } from \"../../abstractAudio/subNodes/volumeAudioSubNode\";\nimport { _GetVolumeAudioSubNode } from \"../../abstractAudio/subNodes/volumeAudioSubNode\";\nimport type { ISpatialAudioOptions } from \"../../abstractAudio/subProperties/abstractSpatialAudio\";\nimport { _HasSpatialAudioOptions } from \"../../abstractAudio/subProperties/abstractSpatialAudio\";\nimport type { IStereoAudioOptions } from \"../../abstractAudio/subProperties/abstractStereoAudio\";\nimport { _HasStereoAudioOptions } from \"../../abstractAudio/subProperties/abstractStereoAudio\";\nimport type { IWebAudioOutNode, IWebAudioSubNode } from \"../webAudioNode\";\nimport type { _SpatialWebAudioSubNode } from \"./spatialWebAudioSubNode\";\nimport { _CreateSpatialAudioSubNodeAsync } from \"./spatialWebAudioSubNode\";\nimport type { _StereoWebAudioSubNode } from \"./stereoWebAudioSubNode\";\nimport { _CreateStereoAudioSubNodeAsync } from \"./stereoWebAudioSubNode\";\nimport type { _VolumeWebAudioSubNode } from \"./volumeWebAudioSubNode\";\nimport { _WebAudioBaseSubGraph } from \"./webAudioBaseSubGraph\";\n\n/** @internal */\nexport interface IWebAudioBusAndSoundSubGraphOptions extends ISpatialAudioOptions, IStereoAudioOptions, IVolumeAudioOptions {}\n\n/** @internal */\nexport abstract class _WebAudioBusAndSoundSubGraph extends _WebAudioBaseSubGraph {\n protected abstract readonly _upstreamNodes: Nullable<Set<AbstractAudioNode>>;\n\n protected _inNode: Nullable<AudioNode> = null;\n\n /** @internal */\n public override async init(options: Partial<IWebAudioBusAndSoundSubGraphOptions>): Promise<void> {\n super.init(options);\n\n let hasSpatialOptions = false;\n let hasStereoOptions = false;\n\n if ((hasSpatialOptions = _HasSpatialAudioOptions(options))) {\n this._createAndAddSubNode(AudioSubNode.SPATIAL);\n }\n if ((hasStereoOptions = _HasStereoAudioOptions(options))) {\n this._createAndAddSubNode(AudioSubNode.STEREO);\n }\n\n await this._createSubNodePromisesResolved();\n\n if (hasSpatialOptions) {\n _GetSpatialAudioSubNode(this)?.setOptions(options);\n }\n if (hasStereoOptions) {\n _GetStereoAudioSubNode(this)?.setOptions(options);\n }\n }\n\n /** @internal */\n public override get inNode(): Nullable<AudioNode> {\n return this._inNode;\n }\n\n protected override _createSubNode(name: string): Nullable<Promise<_AbstractAudioSubNode>> {\n const node = super._createSubNode(name);\n\n if (node) {\n return node;\n }\n\n switch (name) {\n case AudioSubNode.SPATIAL:\n return _CreateSpatialAudioSubNodeAsync(this._owner.engine);\n case AudioSubNode.STEREO:\n return _CreateStereoAudioSubNodeAsync(this._owner.engine);\n default:\n return null;\n }\n }\n\n protected override _onSubNodesChanged(): void {\n const spatialNode = _GetSpatialAudioSubNode(this);\n const stereoNode = _GetStereoAudioSubNode(this);\n const volumeNode = _GetVolumeAudioSubNode(this);\n\n if (spatialNode && spatialNode.getClassName() !== \"_SpatialWebAudioSubNode\") {\n throw new Error(\"Not a WebAudio subnode.\");\n }\n if (stereoNode && stereoNode.getClassName() !== \"_StereoWebAudioSubNode\") {\n throw new Error(\"Not a WebAudio subnode.\");\n }\n if (volumeNode && volumeNode.getClassName() !== \"_VolumeWebAudioSubNode\") {\n throw new Error(\"Not a WebAudio subnode.\");\n }\n\n if (spatialNode) {\n spatialNode.disconnectAll();\n\n if (stereoNode) {\n spatialNode.connect(stereoNode);\n } else if (volumeNode) {\n spatialNode.connect(volumeNode);\n }\n }\n\n if (stereoNode) {\n stereoNode.disconnectAll();\n\n if (volumeNode) {\n stereoNode.connect(volumeNode);\n }\n }\n\n let inSubNode: Nullable<IWebAudioSubNode> = null;\n\n if (spatialNode) {\n inSubNode = spatialNode as _SpatialWebAudioSubNode;\n } else if (stereoNode) {\n inSubNode = stereoNode as _StereoWebAudioSubNode;\n } else if (volumeNode) {\n inSubNode = volumeNode as _VolumeWebAudioSubNode;\n }\n\n const inNode = inSubNode?.node ?? null;\n\n if (this._inNode !== inNode) {\n // Disconnect the wrapped upstream WebAudio nodes from the old wrapped WebAudio node.\n // The wrapper nodes are unaware of this change.\n if (this._inNode && this._upstreamNodes) {\n const it = this._upstreamNodes.values();\n for (let next = it.next(); !next.done; next = it.next()) {\n (next.value as IWebAudioOutNode).outNode?.disconnect(this._inNode);\n }\n }\n\n this._inNode = inNode;\n\n // Connect the wrapped upstream WebAudio nodes to the new wrapped WebAudio node.\n // The wrapper nodes are unaware of this change.\n if (inNode && this._upstreamNodes) {\n const it = this._upstreamNodes.values();\n for (let next = it.next(); !next.done; next = it.next()) {\n (next.value as IWebAudioOutNode).outNode?.connect(inNode);\n }\n }\n }\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { _AbstractAudioSubGraph } from "../../abstractAudio/subNodes/abstractAudioSubGraph";
2
+ import { _SpatialAudio } from "../../abstractAudio/subProperties/spatialAudio";
3
+ /** @internal */
4
+ export declare class _SpatialWebAudio extends _SpatialAudio {
5
+ private _autoUpdate;
6
+ /** @internal */
7
+ constructor(subGraph: _AbstractAudioSubGraph, autoUpdate: boolean);
8
+ /** @internal */
9
+ dispose(): void;
10
+ }
@@ -0,0 +1,26 @@
1
+ import { _SpatialAudio } from "../../abstractAudio/subProperties/spatialAudio.js";
2
+ /** @internal */
3
+ export class _SpatialWebAudio extends _SpatialAudio {
4
+ /** @internal */
5
+ constructor(subGraph, autoUpdate) {
6
+ super(subGraph);
7
+ this._autoUpdate = false;
8
+ if (!autoUpdate) {
9
+ return;
10
+ }
11
+ this._autoUpdate = true;
12
+ const update = () => {
13
+ if (!this._autoUpdate) {
14
+ return;
15
+ }
16
+ this.update();
17
+ requestAnimationFrame(update);
18
+ };
19
+ requestAnimationFrame(update);
20
+ }
21
+ /** @internal */
22
+ dispose() {
23
+ this._autoUpdate = false;
24
+ }
25
+ }
26
+ //# sourceMappingURL=spatialWebAudio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spatialWebAudio.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/webAudio/subProperties/spatialWebAudio.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAE/E,gBAAgB;AAChB,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IAG/C,gBAAgB;IAChB,YAAmB,QAAgC,EAAE,UAAmB;QACpE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAJZ,gBAAW,GAAG,KAAK,CAAC;QAMxB,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO;QACX,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,MAAM,MAAM,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpB,OAAO;YACX,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,gBAAgB;IACT,OAAO;QACV,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;CACJ","sourcesContent":["import type { _AbstractAudioSubGraph } from \"../../abstractAudio/subNodes/abstractAudioSubGraph\";\nimport { _SpatialAudio } from \"../../abstractAudio/subProperties/spatialAudio\";\n\n/** @internal */\nexport class _SpatialWebAudio extends _SpatialAudio {\n private _autoUpdate = false;\n\n /** @internal */\n public constructor(subGraph: _AbstractAudioSubGraph, autoUpdate: boolean) {\n super(subGraph);\n\n if (!autoUpdate) {\n return;\n }\n\n this._autoUpdate = true;\n\n const update = () => {\n if (!this._autoUpdate) {\n return;\n }\n\n this.update();\n requestAnimationFrame(update);\n };\n\n requestAnimationFrame(update);\n }\n\n /** @internal */\n public dispose(): void {\n this._autoUpdate = false;\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import { _SpatialAudioListener } from "../../abstractAudio/subProperties/spatialAudioListener";
2
+ import type { _WebAudioEngine } from "../webAudioEngine";
3
+ /** @internal */
4
+ export declare function _CreateSpatialAudioListener(engine: _WebAudioEngine, autoUpdate: boolean): _SpatialAudioListener;
@@ -0,0 +1,108 @@
1
+ import { Matrix, Quaternion, Vector3 } from "../../../Maths/math.vector.js";
2
+ import { _SpatialAudioListener } from "../../abstractAudio/subProperties/spatialAudioListener.js";
3
+ const TmpMatrix = Matrix.Zero();
4
+ const TmpQuaternion = new Quaternion();
5
+ const TmpVector = Vector3.Zero();
6
+ /** @internal */
7
+ export function _CreateSpatialAudioListener(engine, autoUpdate) {
8
+ return new _SpatialWebAudioListener(engine, autoUpdate);
9
+ }
10
+ /**
11
+ * This sub property is not backed by a sub node and all properties are set directly on the audio context listener.
12
+ *
13
+ * @internal
14
+ */
15
+ class _SpatialWebAudioListener extends _SpatialAudioListener {
16
+ /** @internal */
17
+ constructor(engine, autoUpdate) {
18
+ super();
19
+ this._autoUpdate = false;
20
+ this._lastPosition = Vector3.Zero();
21
+ this._lastRotation = Vector3.Zero();
22
+ this._lastRotationQuaternion = new Quaternion();
23
+ this._position = Vector3.Zero();
24
+ this._rotation = Vector3.Zero();
25
+ this._rotationQuaternion = new Quaternion();
26
+ this._audioContext = engine.audioContext;
27
+ if (!autoUpdate) {
28
+ return;
29
+ }
30
+ this._autoUpdate = true;
31
+ const update = () => {
32
+ if (!this._autoUpdate) {
33
+ return;
34
+ }
35
+ this.update();
36
+ requestAnimationFrame(update);
37
+ };
38
+ requestAnimationFrame(update);
39
+ }
40
+ /** @internal */
41
+ get position() {
42
+ return this._position;
43
+ }
44
+ set position(value) {
45
+ this._position = value;
46
+ this._updatePosition();
47
+ }
48
+ /** @internal */
49
+ get rotation() {
50
+ return this._rotation;
51
+ }
52
+ set rotation(value) {
53
+ this._rotation = value;
54
+ this._updateRotation();
55
+ }
56
+ /** @internal */
57
+ get rotationQuaternion() {
58
+ return this._rotationQuaternion;
59
+ }
60
+ set rotationQuaternion(value) {
61
+ this._rotationQuaternion = value;
62
+ this._updateRotation();
63
+ }
64
+ /** @internal */
65
+ dispose() {
66
+ super.dispose();
67
+ this._autoUpdate = false;
68
+ }
69
+ /** @internal */
70
+ update() {
71
+ this._updatePosition();
72
+ this._updateRotation();
73
+ }
74
+ _updatePosition() {
75
+ if (this._lastPosition.equalsWithEpsilon(this._position)) {
76
+ return;
77
+ }
78
+ const listener = this._audioContext.listener;
79
+ listener.positionX.value = this._position.x;
80
+ listener.positionY.value = this._position.y;
81
+ listener.positionZ.value = this._position.z;
82
+ this._lastPosition.copyFrom(this._position);
83
+ }
84
+ _updateRotation() {
85
+ if (!this._lastRotationQuaternion.equalsWithEpsilon(this._rotationQuaternion)) {
86
+ TmpQuaternion.copyFrom(this._rotationQuaternion);
87
+ this._lastRotationQuaternion.copyFrom(this._rotationQuaternion);
88
+ }
89
+ else if (!this._lastRotation.equalsWithEpsilon(this._rotation)) {
90
+ Quaternion.FromEulerAnglesToRef(this._rotation.x, this._rotation.y, this._rotation.z, TmpQuaternion);
91
+ this._lastRotation.copyFrom(this._rotation);
92
+ }
93
+ else {
94
+ return;
95
+ }
96
+ Matrix.FromQuaternionToRef(TmpQuaternion, TmpMatrix);
97
+ const listener = this._audioContext.listener;
98
+ Vector3.TransformNormalToRef(Vector3.Forward(), TmpMatrix, TmpVector);
99
+ listener.forwardX.value = TmpVector.x;
100
+ listener.forwardY.value = TmpVector.y;
101
+ listener.forwardZ.value = TmpVector.z;
102
+ Vector3.TransformNormalToRef(Vector3.Up(), TmpMatrix, TmpVector);
103
+ listener.upX.value = TmpVector.x;
104
+ listener.upY.value = TmpVector.y;
105
+ listener.upZ.value = TmpVector.z;
106
+ }
107
+ }
108
+ //# sourceMappingURL=spatialWebAudioListener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spatialWebAudioListener.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/webAudio/subProperties/spatialWebAudioListener.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix, Quaternion, Vector3 } from \"../../../Maths/math.vector\";\nimport { _SpatialAudioListener } from \"../../abstractAudio/subProperties/spatialAudioListener\";\nimport type { _WebAudioEngine } from \"../webAudioEngine\";\n\nconst TmpMatrix = Matrix.Zero();\nconst TmpQuaternion = new Quaternion();\nconst TmpVector = Vector3.Zero();\n\n/** @internal */\nexport function _CreateSpatialAudioListener(engine: _WebAudioEngine, autoUpdate: boolean): _SpatialAudioListener {\n return new _SpatialWebAudioListener(engine, autoUpdate);\n}\n\n/**\n * This sub property is not backed by a sub node and all properties are set directly on the audio context listener.\n *\n * @internal\n */\nclass _SpatialWebAudioListener extends _SpatialAudioListener {\n private _audioContext: AudioContext;\n private _autoUpdate: boolean = false;\n private _lastPosition: Vector3 = Vector3.Zero();\n private _lastRotation: Vector3 = Vector3.Zero();\n private _lastRotationQuaternion: Quaternion = new Quaternion();\n private _position: Vector3 = Vector3.Zero();\n private _rotation: Vector3 = Vector3.Zero();\n private _rotationQuaternion: Quaternion = new Quaternion();\n\n /** @internal */\n public constructor(engine: _WebAudioEngine, autoUpdate: boolean) {\n super();\n\n this._audioContext = engine.audioContext;\n\n if (!autoUpdate) {\n return;\n }\n\n this._autoUpdate = true;\n\n const update = () => {\n if (!this._autoUpdate) {\n return;\n }\n\n this.update();\n requestAnimationFrame(update);\n };\n\n requestAnimationFrame(update);\n }\n\n /** @internal */\n public get position(): Vector3 {\n return this._position;\n }\n\n public set position(value: Vector3) {\n this._position = value;\n this._updatePosition();\n }\n\n /** @internal */\n public get rotation(): Vector3 {\n return this._rotation;\n }\n\n public set rotation(value: Vector3) {\n this._rotation = value;\n this._updateRotation();\n }\n\n /** @internal */\n public get rotationQuaternion(): Quaternion {\n return this._rotationQuaternion;\n }\n\n public set rotationQuaternion(value: Quaternion) {\n this._rotationQuaternion = value;\n this._updateRotation();\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this._autoUpdate = false;\n }\n\n /** @internal */\n public update(): void {\n this._updatePosition();\n this._updateRotation();\n }\n\n private _updatePosition(): void {\n if (this._lastPosition.equalsWithEpsilon(this._position)) {\n return;\n }\n\n const listener = this._audioContext.listener;\n listener.positionX.value = this._position.x;\n listener.positionY.value = this._position.y;\n listener.positionZ.value = this._position.z;\n\n this._lastPosition.copyFrom(this._position);\n }\n\n private _updateRotation(): void {\n if (!this._lastRotationQuaternion.equalsWithEpsilon(this._rotationQuaternion)) {\n TmpQuaternion.copyFrom(this._rotationQuaternion);\n this._lastRotationQuaternion.copyFrom(this._rotationQuaternion);\n } else if (!this._lastRotation.equalsWithEpsilon(this._rotation)) {\n Quaternion.FromEulerAnglesToRef(this._rotation.x, this._rotation.y, this._rotation.z, TmpQuaternion);\n this._lastRotation.copyFrom(this._rotation);\n } else {\n return;\n }\n\n Matrix.FromQuaternionToRef(TmpQuaternion, TmpMatrix);\n const listener = this._audioContext.listener;\n\n Vector3.TransformNormalToRef(Vector3.Forward(), TmpMatrix, TmpVector);\n listener.forwardX.value = TmpVector.x;\n listener.forwardY.value = TmpVector.y;\n listener.forwardZ.value = TmpVector.z;\n\n Vector3.TransformNormalToRef(Vector3.Up(), TmpMatrix, TmpVector);\n listener.upX.value = TmpVector.x;\n listener.upY.value = TmpVector.y;\n listener.upZ.value = TmpVector.z;\n }\n}\n"]}
@@ -0,0 +1,35 @@
1
+ import type { Nullable } from "../../types.js";
2
+ import type { IAudioBusOptions } from "../abstractAudio/audioBus";
3
+ import { AudioBus } from "../abstractAudio/audioBus";
4
+ import type { _SpatialAudio } from "../abstractAudio/subProperties/spatialAudio";
5
+ import { _StereoAudio } from "../abstractAudio/subProperties/stereoAudio";
6
+ import { _WebAudioBusAndSoundSubGraph } from "./subNodes/webAudioBusAndSoundSubGraph";
7
+ import type { _WebAudioEngine } from "./webAudioEngine";
8
+ import type { IWebAudioSuperNode } from "./webAudioNode";
9
+ /** @internal */
10
+ export declare class _WebAudioBus extends AudioBus implements IWebAudioSuperNode {
11
+ private _spatial;
12
+ private _stereo;
13
+ protected _subGraph: _WebAudioBusAndSoundSubGraph;
14
+ /** @internal */
15
+ readonly engine: _WebAudioEngine;
16
+ /** @internal */
17
+ readonly audioContext: AudioContext;
18
+ /** @internal */
19
+ constructor(name: string, engine: _WebAudioEngine, options: Partial<IAudioBusOptions>);
20
+ /** @internal */
21
+ init(options: Partial<IAudioBusOptions>): Promise<void>;
22
+ /** @internal */
23
+ dispose(): void;
24
+ /** @internal */
25
+ get inNode(): Nullable<AudioNode>;
26
+ /** @internal */
27
+ get outNode(): Nullable<AudioNode>;
28
+ /** @internal */
29
+ get spatial(): _SpatialAudio;
30
+ /** @internal */
31
+ get stereo(): _StereoAudio;
32
+ /** @internal */
33
+ getClassName(): string;
34
+ private static _SubGraph;
35
+ }