@babylonjs/core 7.52.2 → 7.52.3

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 (192) hide show
  1. package/AudioV2/abstractAudio/abstractAudioBus.d.ts +11 -0
  2. package/AudioV2/abstractAudio/abstractAudioBus.js +10 -0
  3. package/AudioV2/abstractAudio/abstractAudioBus.js.map +1 -1
  4. package/AudioV2/abstractAudio/abstractSound.d.ts +10 -3
  5. package/AudioV2/abstractAudio/abstractSound.js +10 -0
  6. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  7. package/AudioV2/abstractAudio/audioBus.d.ts +4 -4
  8. package/AudioV2/abstractAudio/audioBus.js.map +1 -1
  9. package/AudioV2/abstractAudio/mainAudioBus.d.ts +2 -2
  10. package/AudioV2/abstractAudio/mainAudioBus.js.map +1 -1
  11. package/AudioV2/abstractAudio/staticSound.d.ts +5 -5
  12. package/AudioV2/abstractAudio/staticSound.js +3 -3
  13. package/AudioV2/abstractAudio/staticSound.js.map +1 -1
  14. package/AudioV2/abstractAudio/streamingSound.d.ts +1 -1
  15. package/AudioV2/abstractAudio/streamingSound.js +1 -1
  16. package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
  17. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.d.ts +30 -6
  18. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js +44 -21
  19. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js.map +1 -1
  20. package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.d.ts +24 -0
  21. package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.js +30 -0
  22. package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.js.map +1 -0
  23. package/AudioV2/abstractAudio/subNodes/audioSubNode.d.ts +1 -0
  24. package/AudioV2/abstractAudio/subNodes/audioSubNode.js +1 -0
  25. package/AudioV2/abstractAudio/subNodes/audioSubNode.js.map +1 -1
  26. package/AudioV2/abstractAudio/subNodes/stereoAudioSubNode.js.map +1 -1
  27. package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.d.ts +86 -0
  28. package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js +29 -0
  29. package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js.map +1 -0
  30. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.d.ts +35 -0
  31. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js +96 -0
  32. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js.map +1 -0
  33. package/AudioV2/abstractAudio/subProperties/index.d.ts +1 -0
  34. package/AudioV2/abstractAudio/subProperties/index.js +1 -0
  35. package/AudioV2/abstractAudio/subProperties/index.js.map +1 -1
  36. package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.d.ts +37 -0
  37. package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js +85 -0
  38. package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js.map +1 -0
  39. package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.d.ts +5 -3
  40. package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.js +25 -2
  41. package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.js.map +1 -1
  42. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.d.ts +2 -1
  43. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js +32 -17
  44. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js.map +1 -1
  45. package/Engines/WebGPU/webgpuTextureManager.d.ts +0 -1
  46. package/Engines/WebGPU/webgpuTextureManager.js +2 -57
  47. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  48. package/Engines/abstractEngine.d.ts +6 -0
  49. package/Engines/abstractEngine.js +3 -3
  50. package/Engines/abstractEngine.js.map +1 -1
  51. package/Engines/engine.common.js +4 -0
  52. package/Engines/engine.common.js.map +1 -1
  53. package/Engines/nativeEngine.d.ts +1 -0
  54. package/Engines/nativeEngine.js +3 -0
  55. package/Engines/nativeEngine.js.map +1 -1
  56. package/Engines/nullEngine.d.ts +1 -0
  57. package/Engines/nullEngine.js +1 -0
  58. package/Engines/nullEngine.js.map +1 -1
  59. package/Engines/thinEngine.d.ts +1 -0
  60. package/Engines/thinEngine.js +7 -4
  61. package/Engines/thinEngine.js.map +1 -1
  62. package/Engines/webgpuEngine.d.ts +2 -1
  63. package/Engines/webgpuEngine.js +12 -9
  64. package/Engines/webgpuEngine.js.map +1 -1
  65. package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.d.ts +48 -0
  66. package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js +54 -0
  67. package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js.map +1 -0
  68. package/FlowGraph/Blocks/Data/index.d.ts +1 -0
  69. package/FlowGraph/Blocks/Data/index.js +1 -0
  70. package/FlowGraph/Blocks/Data/index.js.map +1 -1
  71. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.d.ts +1 -0
  72. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js +19 -13
  73. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
  74. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js +3 -5
  75. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js.map +1 -1
  76. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.js +1 -1
  77. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.js.map +1 -1
  78. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.js +2 -4
  79. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.js.map +1 -1
  80. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js +1 -1
  81. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js.map +1 -1
  82. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js +1 -2
  83. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js.map +1 -1
  84. package/FlowGraph/Blocks/flowGraphBlockFactory.js +2 -0
  85. package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
  86. package/FlowGraph/Blocks/flowGraphBlockNames.d.ts +2 -1
  87. package/FlowGraph/Blocks/flowGraphBlockNames.js +1 -0
  88. package/FlowGraph/Blocks/flowGraphBlockNames.js.map +1 -1
  89. package/FlowGraph/CustomTypes/flowGraphInteger.d.ts +1 -0
  90. package/FlowGraph/CustomTypes/flowGraphInteger.js +3 -0
  91. package/FlowGraph/CustomTypes/flowGraphInteger.js.map +1 -1
  92. package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +2 -0
  93. package/FlowGraph/CustomTypes/flowGraphMatrix.js +6 -0
  94. package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
  95. package/FlowGraph/flowGraphExecutionBlock.d.ts +1 -0
  96. package/FlowGraph/flowGraphExecutionBlock.js +4 -0
  97. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
  98. package/FlowGraph/utils.d.ts +2 -1
  99. package/FlowGraph/utils.js +7 -2
  100. package/FlowGraph/utils.js.map +1 -1
  101. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js +2 -2
  102. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
  103. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js +2 -2
  104. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js.map +1 -1
  105. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.d.ts +126 -0
  106. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js +497 -0
  107. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js.map +1 -0
  108. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +6 -0
  109. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +30 -4
  110. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  111. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  112. package/FrameGraph/Node/Blocks/index.js +1 -0
  113. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  114. package/FrameGraph/Node/nodeRenderGraph.js +1 -1
  115. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  116. package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +2 -3
  117. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +3 -4
  118. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  119. package/FrameGraph/Tasks/PostProcesses/blurTask.js +2 -2
  120. package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
  121. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.d.ts +2 -3
  122. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +4 -5
  123. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  124. package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +6 -0
  125. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +14 -0
  126. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  127. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.d.ts +11 -0
  128. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js +18 -0
  129. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -0
  130. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.d.ts +76 -0
  131. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +170 -0
  132. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -0
  133. package/FrameGraph/Tasks/PostProcesses/ssrTask.d.ts +16 -0
  134. package/FrameGraph/Tasks/PostProcesses/ssrTask.js +45 -0
  135. package/FrameGraph/Tasks/PostProcesses/ssrTask.js.map +1 -0
  136. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +10 -0
  137. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +29 -0
  138. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  139. package/FrameGraph/frameGraph.d.ts +7 -3
  140. package/FrameGraph/frameGraph.js +10 -4
  141. package/FrameGraph/frameGraph.js.map +1 -1
  142. package/FrameGraph/frameGraphTextureManager.d.ts +2 -1
  143. package/FrameGraph/frameGraphTextureManager.js +4 -3
  144. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  145. package/FrameGraph/index.d.ts +1 -0
  146. package/FrameGraph/index.js +1 -0
  147. package/FrameGraph/index.js.map +1 -1
  148. package/Materials/PBR/pbrBaseMaterial.js +1 -1
  149. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  150. package/Materials/effectRenderer.js +1 -1
  151. package/Materials/effectRenderer.js.map +1 -1
  152. package/Materials/material.js +5 -3
  153. package/Materials/material.js.map +1 -1
  154. package/Materials/materialHelper.geometryrendering.d.ts +7 -5
  155. package/Materials/materialHelper.geometryrendering.js +8 -3
  156. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  157. package/Materials/standardMaterial.js +1 -1
  158. package/Materials/standardMaterial.js.map +1 -1
  159. package/Meshes/geometry.js +4 -0
  160. package/Meshes/geometry.js.map +1 -1
  161. package/Particles/particleSystemComponent.d.ts +2 -1
  162. package/Particles/particleSystemComponent.js +2 -2
  163. package/Particles/particleSystemComponent.js.map +1 -1
  164. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +23 -30
  165. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +226 -411
  166. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  167. package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.d.ts +222 -0
  168. package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js +373 -0
  169. package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js.map +1 -0
  170. package/PostProcesses/thinDepthOfFieldEffect.d.ts +4 -4
  171. package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
  172. package/PostProcesses/thinSSRBlurCombinerPostProcess.d.ts +41 -0
  173. package/PostProcesses/thinSSRBlurCombinerPostProcess.js +185 -0
  174. package/PostProcesses/thinSSRBlurCombinerPostProcess.js.map +1 -0
  175. package/PostProcesses/thinSSRBlurPostProcess.d.ts +18 -0
  176. package/PostProcesses/thinSSRBlurPostProcess.js +47 -0
  177. package/PostProcesses/thinSSRBlurPostProcess.js.map +1 -0
  178. package/PostProcesses/thinSSRPostProcess.d.ts +94 -0
  179. package/PostProcesses/thinSSRPostProcess.js +416 -0
  180. package/PostProcesses/thinSSRPostProcess.js.map +1 -0
  181. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +2 -0
  182. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +2 -0
  183. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  184. package/Rendering/iblCdfGenerator.js +1 -1
  185. package/Rendering/iblCdfGenerator.js.map +1 -1
  186. package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js +13 -2
  187. package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js.map +1 -1
  188. package/ShadersWGSL/geometry.fragment.js +1 -1
  189. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  190. package/ShadersWGSL/screenSpaceReflection2BlurCombiner.fragment.js +13 -2
  191. package/ShadersWGSL/screenSpaceReflection2BlurCombiner.fragment.js.map +1 -1
  192. package/package.json +1 -1
@@ -16,6 +16,7 @@
16
16
  export class _AbstractAudioSubGraph {
17
17
  constructor() {
18
18
  this._createSubNodePromises = {};
19
+ this._isDisposed = false;
19
20
  this._subNodes = {};
20
21
  this._onSubNodeDisposed = (node) => {
21
22
  const subNode = node;
@@ -31,6 +32,8 @@ export class _AbstractAudioSubGraph {
31
32
  *
32
33
  * @param name The name of the sub node
33
34
  * @param callback The function to call with the named sub node
35
+ *
36
+ * @internal
34
37
  */
35
38
  callOnSubNode(name, callback) {
36
39
  const node = this.getSubNode(name);
@@ -38,15 +41,34 @@ export class _AbstractAudioSubGraph {
38
41
  callback(node);
39
42
  return;
40
43
  }
41
- const promise = this._createSubNodePromises[name] ?? this._createAndAddSubNode(name);
44
+ const promise = this._createSubNodePromises[name] ?? this.createAndAddSubNode(name);
42
45
  promise.then((node) => {
43
46
  callback(node);
44
47
  });
45
48
  }
49
+ /**
50
+ * Creates the named subnode and adds it to the sub graph.
51
+ *
52
+ * @param name The name of the sub node.
53
+ * @returns A promise that resolves to the created sub node.
54
+ *
55
+ * @internal
56
+ */
57
+ createAndAddSubNode(name) {
58
+ var _a;
59
+ (_a = this._createSubNodePromises)[name] || (_a[name] = this._createSubNode(name).then((node) => {
60
+ this._addSubNode(node);
61
+ return node;
62
+ }));
63
+ return this._createSubNodePromises[name];
64
+ }
46
65
  /**
47
66
  * Releases associated resources.
67
+ *
68
+ * @internal
48
69
  */
49
70
  dispose() {
71
+ this._isDisposed = true;
50
72
  const subNodes = Object.values(this._subNodes);
51
73
  for (const subNode of subNodes) {
52
74
  subNode.dispose();
@@ -56,42 +78,43 @@ export class _AbstractAudioSubGraph {
56
78
  }
57
79
  /**
58
80
  * Gets a previously created sub node.
81
+ *
59
82
  * @param name - The name of the sub node
60
83
  * @returns The named sub node, or `null` if it has not been created, yet
84
+ *
61
85
  * @internal
62
86
  * */
63
87
  getSubNode(name) {
64
88
  return this._subNodes[name] ?? null;
65
89
  }
66
90
  /**
67
- * Called when sub-nodes are added or removed.
68
- * - Override this to connect and reconnect sub-nodes as needed.
91
+ * Removes a sub node from the sub graph.
92
+ *
93
+ * @param subNode - The sub node to remove
94
+ * @returns A promise that resolves when the sub node is removed
95
+ *
96
+ * @internal
69
97
  */
70
- _onSubNodesChanged() { }
98
+ async removeSubNode(subNode) {
99
+ await this._createSubNodePromisesResolved();
100
+ const name = subNode.name;
101
+ if (this._subNodes[name]) {
102
+ delete this._subNodes[name];
103
+ }
104
+ delete this._createSubNodePromises[name];
105
+ this._onSubNodesChanged();
106
+ }
71
107
  _createSubNodePromisesResolved() {
72
108
  return Promise.all(Object.values(this._createSubNodePromises));
73
109
  }
74
110
  _addSubNode(node) {
111
+ if (this._isDisposed) {
112
+ node.dispose();
113
+ return;
114
+ }
75
115
  this._subNodes[node.name] = node;
76
116
  node.onDisposeObservable.addOnce(this._onSubNodeDisposed);
77
117
  this._onSubNodesChanged();
78
118
  }
79
- _createAndAddSubNode(name) {
80
- const promise = this._createSubNode(name);
81
- if (!promise) {
82
- return Promise.reject(`Failed to create subnode "${name}"`);
83
- }
84
- this._createSubNodePromises[name] = new Promise((resolve, reject) => {
85
- promise
86
- .then((node) => {
87
- this._addSubNode(node);
88
- resolve(node);
89
- })
90
- .catch((error) => {
91
- reject(error);
92
- });
93
- });
94
- return promise;
95
- }
96
119
  }
97
120
  //# sourceMappingURL=abstractAudioSubGraph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"abstractAudioSubGraph.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAgB,sBAAsB;IAA5C;QACY,2BAAsB,GAAsD,EAAE,CAAC;QAC/E,cAAS,GAA8C,EAAE,CAAC;QAyF1D,uBAAkB,GAAG,CAAC,IAAuB,EAAE,EAAE;YACrD,MAAM,OAAO,GAAG,IAA8B,CAAC;YAE/C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEpC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC,CAAC;IACN,CAAC;IA9FG;;;;;;;;OAQG;IACI,aAAa,CAAkC,IAAY,EAAE,QAA2B;QAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,EAAE,CAAC;YACP,QAAQ,CAAC,IAAS,CAAC,CAAC;YACpB,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAErF,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YAClB,QAAQ,CAAC,IAAS,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,OAAO;QACV,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;IACrC,CAAC;IAED;;;;;SAKK;IACE,UAAU,CAAmC,IAAY;QAC5D,OAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAO,IAAI,IAAI,CAAC;IAC/C,CAAC;IAID;;;OAGG;IACO,kBAAkB,KAAU,CAAC;IAE7B,8BAA8B;QACpC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACnE,CAAC;IAEO,WAAW,CAAC,IAA4B;QAC5C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAEjC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE1D,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAES,oBAAoB,CAAC,IAAY;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,OAAO,CAAC,MAAM,CAAC,6BAA6B,IAAI,GAAG,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChE,OAAO;iBACF,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACX,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACb,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACnB,CAAC;CASJ","sourcesContent":["import type { Nullable } from \"../../../types\";\nimport type { AbstractAudioNode, AbstractNamedAudioNode } from \"../abstractAudioNode\";\nimport type { _AbstractAudioSubNode } from \"./abstractAudioSubNode\";\n\n/**\n * Adds common sub graph functionality to an audio node.\n *\n * Audio nodes such as static sounds, streaming sounds, and buses can use audio sub graphs to process audio internally\n * before sending it to connected downstream audio nodes. This is useful for applying effects, spatial audio, and other\n * audio processing tasks common to multiple audio node classes.\n *\n * A key feature of audio sub graphs is their audio sub nodes are created asynchronously on demand so the minimum set\n * of sub nodes are used at all times to save memory and CPU resources. The tradeoff is a small delay when first\n * setting a property backed by a sub node. This delay is avoided by using the appropriate options to initialize the\n * sub node on creation, e.g. `spatialEnabled` and `stereoEnabled`, or by setting any creation option backed by the\n * sub node, e.g. `spatialPosition` and `stereoPan`.\n *\n * @internal\n */\nexport abstract class _AbstractAudioSubGraph {\n private _createSubNodePromises: { [key: string]: Promise<_AbstractAudioSubNode> } = {};\n private _subNodes: { [key: string]: AbstractNamedAudioNode } = {};\n\n /**\n * Executes the given callback with the named sub node, creating the sub node if needed.\n *\n * Note that `callback` is executed synchronously if the sub node already exists, otherwise the sub node is created\n * asynchronously before `callback` is executed.\n *\n * @param name The name of the sub node\n * @param callback The function to call with the named sub node\n */\n public callOnSubNode<T extends _AbstractAudioSubNode>(name: string, callback: (node: T) => void): void {\n const node = this.getSubNode(name);\n if (node) {\n callback(node as T);\n return;\n }\n\n const promise = this._createSubNodePromises[name] ?? this._createAndAddSubNode(name);\n\n promise.then((node) => {\n callback(node as T);\n });\n }\n\n /**\n * Releases associated resources.\n */\n public dispose() {\n const subNodes = Object.values(this._subNodes);\n for (const subNode of subNodes) {\n subNode.dispose();\n }\n\n this._subNodes = {};\n this._createSubNodePromises = {};\n }\n\n /**\n * Gets a previously created sub node.\n * @param name - The name of the sub node\n * @returns The named sub node, or `null` if it has not been created, yet\n * @internal\n * */\n public getSubNode<T extends AbstractNamedAudioNode>(name: string): Nullable<T> {\n return (this._subNodes[name] as T) ?? null;\n }\n\n protected abstract _createSubNode(name: string): Nullable<Promise<_AbstractAudioSubNode>>;\n\n /**\n * Called when sub-nodes are added or removed.\n * - Override this to connect and reconnect sub-nodes as needed.\n */\n protected _onSubNodesChanged(): void {}\n\n protected _createSubNodePromisesResolved(): Promise<_AbstractAudioSubNode[]> {\n return Promise.all(Object.values(this._createSubNodePromises));\n }\n\n private _addSubNode(node: AbstractNamedAudioNode): void {\n this._subNodes[node.name] = node;\n\n node.onDisposeObservable.addOnce(this._onSubNodeDisposed);\n\n this._onSubNodesChanged();\n }\n\n protected _createAndAddSubNode(name: string): Promise<_AbstractAudioSubNode> {\n const promise = this._createSubNode(name);\n\n if (!promise) {\n return Promise.reject(`Failed to create subnode \"${name}\"`);\n }\n\n this._createSubNodePromises[name] = new Promise((resolve, reject) => {\n promise\n .then((node) => {\n this._addSubNode(node);\n resolve(node);\n })\n .catch((error) => {\n reject(error);\n });\n });\n\n return promise;\n }\n\n private _onSubNodeDisposed = (node: AbstractAudioNode) => {\n const subNode = node as AbstractNamedAudioNode;\n\n delete this._subNodes[subNode.name];\n\n this._onSubNodesChanged();\n };\n}\n"]}
1
+ {"version":3,"file":"abstractAudioSubGraph.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../../types\";\nimport type { AbstractAudioNode, AbstractNamedAudioNode } from \"../abstractAudioNode\";\nimport type { _AbstractAudioSubNode } from \"./abstractAudioSubNode\";\nimport type { AudioSubNode } from \"./audioSubNode\";\n\n/**\n * Adds common sub graph functionality to an audio node.\n *\n * Audio nodes such as static sounds, streaming sounds, and buses can use audio sub graphs to process audio internally\n * before sending it to connected downstream audio nodes. This is useful for applying effects, spatial audio, and other\n * audio processing tasks common to multiple audio node classes.\n *\n * A key feature of audio sub graphs is their audio sub nodes are created asynchronously on demand so the minimum set\n * of sub nodes are used at all times to save memory and CPU resources. The tradeoff is a small delay when first\n * setting a property backed by a sub node. This delay is avoided by using the appropriate options to initialize the\n * sub node on creation, e.g. `spatialEnabled` and `stereoEnabled`, or by setting any creation option backed by the\n * sub node, e.g. `spatialPosition` and `stereoPan`.\n *\n * @internal\n */\nexport abstract class _AbstractAudioSubGraph {\n private _createSubNodePromises: { [key: string]: Promise<_AbstractAudioSubNode> } = {};\n private _isDisposed = false;\n private _subNodes: { [key: string]: AbstractNamedAudioNode } = {};\n\n /**\n * Executes the given callback with the named sub node, creating the sub node if needed.\n *\n * Note that `callback` is executed synchronously if the sub node already exists, otherwise the sub node is created\n * asynchronously before `callback` is executed.\n *\n * @param name The name of the sub node\n * @param callback The function to call with the named sub node\n *\n * @internal\n */\n public callOnSubNode<T extends _AbstractAudioSubNode>(name: AudioSubNode, callback: (node: T) => void): void {\n const node = this.getSubNode(name);\n if (node) {\n callback(node as T);\n return;\n }\n\n const promise = this._createSubNodePromises[name] ?? this.createAndAddSubNode(name);\n\n promise.then((node) => {\n callback(node as T);\n });\n }\n\n /**\n * Creates the named subnode and adds it to the sub graph.\n *\n * @param name The name of the sub node.\n * @returns A promise that resolves to the created sub node.\n *\n * @internal\n */\n public createAndAddSubNode(name: AudioSubNode): Promise<_AbstractAudioSubNode> {\n this._createSubNodePromises[name] ||= this._createSubNode(name).then((node) => {\n this._addSubNode(node);\n return node;\n });\n\n return this._createSubNodePromises[name];\n }\n\n /**\n * Releases associated resources.\n *\n * @internal\n */\n public dispose() {\n this._isDisposed = true;\n\n const subNodes = Object.values(this._subNodes);\n for (const subNode of subNodes) {\n subNode.dispose();\n }\n\n this._subNodes = {};\n this._createSubNodePromises = {};\n }\n\n /**\n * Gets a previously created sub node.\n *\n * @param name - The name of the sub node\n * @returns The named sub node, or `null` if it has not been created, yet\n *\n * @internal\n * */\n public getSubNode<T extends _AbstractAudioSubNode>(name: string): Nullable<T> {\n return (this._subNodes[name] as T) ?? null;\n }\n\n /**\n * Removes a sub node from the sub graph.\n *\n * @param subNode - The sub node to remove\n * @returns A promise that resolves when the sub node is removed\n *\n * @internal\n */\n public async removeSubNode(subNode: _AbstractAudioSubNode): Promise<void> {\n await this._createSubNodePromisesResolved();\n\n const name = subNode.name;\n if (this._subNodes[name]) {\n delete this._subNodes[name];\n }\n\n delete this._createSubNodePromises[name];\n\n this._onSubNodesChanged();\n }\n\n protected abstract _createSubNode(name: string): Promise<_AbstractAudioSubNode>;\n\n /**\n * Called when sub-nodes are added or removed.\n * - Override this to connect and reconnect sub-nodes as needed.\n */\n protected abstract _onSubNodesChanged(): void;\n\n protected _createSubNodePromisesResolved(): Promise<_AbstractAudioSubNode[]> {\n return Promise.all(Object.values(this._createSubNodePromises));\n }\n\n private _addSubNode(node: AbstractNamedAudioNode): void {\n if (this._isDisposed) {\n node.dispose();\n return;\n }\n\n this._subNodes[node.name] = node;\n\n node.onDisposeObservable.addOnce(this._onSubNodeDisposed);\n\n this._onSubNodesChanged();\n }\n\n private _onSubNodeDisposed = (node: AbstractAudioNode) => {\n const subNode = node as AbstractNamedAudioNode;\n\n delete this._subNodes[subNode.name];\n\n this._onSubNodesChanged();\n };\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import type { Nullable } from "../../../types";
2
+ import type { AudioEngineV2 } from "../audioEngineV2";
3
+ import type { AudioAnalyzerFFTSizeType, IAudioAnalyzerOptions } from "../subProperties/abstractAudioAnalyzer";
4
+ import { _AudioAnalyzerDefaults } from "../subProperties/abstractAudioAnalyzer";
5
+ import type { _AbstractAudioSubGraph } from "./abstractAudioSubGraph";
6
+ import { _AbstractAudioSubNode } from "./abstractAudioSubNode";
7
+ /** @internal */
8
+ export declare abstract class _AudioAnalyzerSubNode extends _AbstractAudioSubNode {
9
+ protected constructor(engine: AudioEngineV2);
10
+ abstract fftSize: AudioAnalyzerFFTSizeType;
11
+ abstract minDecibels: number;
12
+ abstract maxDecibels: number;
13
+ abstract smoothing: number;
14
+ abstract getByteFrequencyData(): Uint8Array;
15
+ abstract getFloatFrequencyData(): Float32Array;
16
+ /** @internal */
17
+ setOptions(options: Partial<IAudioAnalyzerOptions>): void;
18
+ }
19
+ /** @internal */
20
+ export declare function _GetAudioAnalyzerSubNode(subGraph: _AbstractAudioSubGraph): Nullable<_AudioAnalyzerSubNode>;
21
+ /** @internal */
22
+ export declare function _GetAudioAnalyzerProperty<K extends keyof typeof _AudioAnalyzerDefaults>(subGraph: _AbstractAudioSubGraph, property: K): (typeof _AudioAnalyzerDefaults)[K];
23
+ /** @internal */
24
+ export declare function _SetAudioAnalyzerProperty<K extends keyof typeof _AudioAnalyzerDefaults>(subGraph: _AbstractAudioSubGraph, property: K, value: _AudioAnalyzerSubNode[K]): void;
@@ -0,0 +1,30 @@
1
+ import { _AudioAnalyzerDefaults } from "../subProperties/abstractAudioAnalyzer.js";
2
+ import { _AbstractAudioSubNode } from "./abstractAudioSubNode.js";
3
+ /** @internal */
4
+ export class _AudioAnalyzerSubNode extends _AbstractAudioSubNode {
5
+ constructor(engine) {
6
+ super("Analyzer" /* AudioSubNode.ANALYZER */, engine);
7
+ }
8
+ /** @internal */
9
+ setOptions(options) {
10
+ this.fftSize = options.analyzerFFTSize ?? _AudioAnalyzerDefaults.fftSize;
11
+ this.minDecibels = options.analyzerMinDecibels ?? _AudioAnalyzerDefaults.minDecibels;
12
+ this.maxDecibels = options.analyzerMaxDecibels ?? _AudioAnalyzerDefaults.maxDecibels;
13
+ this.smoothing = options.analyzerSmoothing ?? _AudioAnalyzerDefaults.smoothing;
14
+ }
15
+ }
16
+ /** @internal */
17
+ export function _GetAudioAnalyzerSubNode(subGraph) {
18
+ return subGraph.getSubNode("Analyzer" /* AudioSubNode.ANALYZER */);
19
+ }
20
+ /** @internal */
21
+ export function _GetAudioAnalyzerProperty(subGraph, property) {
22
+ return _GetAudioAnalyzerSubNode(subGraph)?.[property] ?? _AudioAnalyzerDefaults[property];
23
+ }
24
+ /** @internal */
25
+ export function _SetAudioAnalyzerProperty(subGraph, property, value) {
26
+ subGraph.callOnSubNode("Analyzer" /* AudioSubNode.ANALYZER */, (node) => {
27
+ node[property] = value;
28
+ });
29
+ }
30
+ //# sourceMappingURL=audioAnalyzerSubNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audioAnalyzerSubNode.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,gBAAgB;AAChB,MAAM,OAAgB,qBAAsB,SAAQ,qBAAqB;IACrE,YAAsB,MAAqB;QACvC,KAAK,yCAAwB,MAAM,CAAC,CAAC;IACzC,CAAC;IAUD,gBAAgB;IACT,UAAU,CAAC,OAAuC;QACrD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,eAAe,IAAI,sBAAsB,CAAC,OAAO,CAAC;QACzE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,mBAAmB,IAAI,sBAAsB,CAAC,WAAW,CAAC;QACrF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,mBAAmB,IAAI,sBAAsB,CAAC,WAAW,CAAC;QACrF,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,iBAAiB,IAAI,sBAAsB,CAAC,SAAS,CAAC;IACnF,CAAC;CACJ;AAED,gBAAgB;AAChB,MAAM,UAAU,wBAAwB,CAAC,QAAgC;IACrE,OAAO,QAAQ,CAAC,UAAU,wCAA8C,CAAC;AAC7E,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,yBAAyB,CAAgD,QAAgC,EAAE,QAAW;IAClI,OAAO,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AAC9F,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,yBAAyB,CAAgD,QAAgC,EAAE,QAAW,EAAE,KAA+B;IACnK,QAAQ,CAAC,aAAa,yCAA+C,CAAC,IAAI,EAAE,EAAE;QAC1E,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import type { Nullable } from \"../../../types\";\nimport type { AudioEngineV2 } from \"../audioEngineV2\";\nimport type { AudioAnalyzerFFTSizeType, IAudioAnalyzerOptions } from \"../subProperties/abstractAudioAnalyzer\";\nimport { _AudioAnalyzerDefaults } from \"../subProperties/abstractAudioAnalyzer\";\nimport type { _AbstractAudioSubGraph } from \"./abstractAudioSubGraph\";\nimport { _AbstractAudioSubNode } from \"./abstractAudioSubNode\";\nimport { AudioSubNode } from \"./audioSubNode\";\n\n/** @internal */\nexport abstract class _AudioAnalyzerSubNode extends _AbstractAudioSubNode {\n protected constructor(engine: AudioEngineV2) {\n super(AudioSubNode.ANALYZER, engine);\n }\n\n public abstract fftSize: AudioAnalyzerFFTSizeType;\n public abstract minDecibels: number;\n public abstract maxDecibels: number;\n public abstract smoothing: number;\n\n public abstract getByteFrequencyData(): Uint8Array;\n public abstract getFloatFrequencyData(): Float32Array;\n\n /** @internal */\n public setOptions(options: Partial<IAudioAnalyzerOptions>): void {\n this.fftSize = options.analyzerFFTSize ?? _AudioAnalyzerDefaults.fftSize;\n this.minDecibels = options.analyzerMinDecibels ?? _AudioAnalyzerDefaults.minDecibels;\n this.maxDecibels = options.analyzerMaxDecibels ?? _AudioAnalyzerDefaults.maxDecibels;\n this.smoothing = options.analyzerSmoothing ?? _AudioAnalyzerDefaults.smoothing;\n }\n}\n\n/** @internal */\nexport function _GetAudioAnalyzerSubNode(subGraph: _AbstractAudioSubGraph): Nullable<_AudioAnalyzerSubNode> {\n return subGraph.getSubNode<_AudioAnalyzerSubNode>(AudioSubNode.ANALYZER);\n}\n\n/** @internal */\nexport function _GetAudioAnalyzerProperty<K extends keyof typeof _AudioAnalyzerDefaults>(subGraph: _AbstractAudioSubGraph, property: K): (typeof _AudioAnalyzerDefaults)[K] {\n return _GetAudioAnalyzerSubNode(subGraph)?.[property] ?? _AudioAnalyzerDefaults[property];\n}\n\n/** @internal */\nexport function _SetAudioAnalyzerProperty<K extends keyof typeof _AudioAnalyzerDefaults>(subGraph: _AbstractAudioSubGraph, property: K, value: _AudioAnalyzerSubNode[K]): void {\n subGraph.callOnSubNode<_AudioAnalyzerSubNode>(AudioSubNode.ANALYZER, (node) => {\n node[property] = value;\n });\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  /** @internal */
2
2
  export declare enum AudioSubNode {
3
+ ANALYZER = "Analyzer",
3
4
  STEREO = "Stereo",
4
5
  SPATIAL = "Spatial",
5
6
  VOLUME = "Volume"
@@ -1,6 +1,7 @@
1
1
  /** @internal */
2
2
  export var AudioSubNode;
3
3
  (function (AudioSubNode) {
4
+ AudioSubNode["ANALYZER"] = "Analyzer";
4
5
  AudioSubNode["STEREO"] = "Stereo";
5
6
  AudioSubNode["SPATIAL"] = "Spatial";
6
7
  AudioSubNode["VOLUME"] = "Volume";
@@ -1 +1 @@
1
- {"version":3,"file":"audioSubNode.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/abstractAudio/subNodes/audioSubNode.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,MAAM,CAAN,IAAkB,YAIjB;AAJD,WAAkB,YAAY;IAC1B,iCAAiB,CAAA;IACjB,mCAAmB,CAAA;IACnB,iCAAiB,CAAA;AACrB,CAAC,EAJiB,YAAY,KAAZ,YAAY,QAI7B","sourcesContent":["/** @internal */\nexport const enum AudioSubNode {\n STEREO = \"Stereo\",\n SPATIAL = \"Spatial\",\n VOLUME = \"Volume\",\n}\n"]}
1
+ {"version":3,"file":"audioSubNode.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/abstractAudio/subNodes/audioSubNode.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,MAAM,CAAN,IAAkB,YAKjB;AALD,WAAkB,YAAY;IAC1B,qCAAqB,CAAA;IACrB,iCAAiB,CAAA;IACjB,mCAAmB,CAAA;IACnB,iCAAiB,CAAA;AACrB,CAAC,EALiB,YAAY,KAAZ,YAAY,QAK7B","sourcesContent":["/** @internal */\nexport const enum AudioSubNode {\n ANALYZER = \"Analyzer\",\n STEREO = \"Stereo\",\n SPATIAL = \"Spatial\",\n VOLUME = \"Volume\",\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"stereoAudioSubNode.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/abstractAudio/subNodes/stereoAudioSubNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAG1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;AAG7F,gBAAgB;AAChB,MAAM,OAAgB,mBAAoB,SAAQ,qBAAqB;IACnE,YAAsB,MAAqB;QACvC,KAAK,qCAAsB,MAAM,CAAC,CAAC;IACvC,CAAC;IAID,gBAAgB;IACT,UAAU,CAAC,OAAqC;QACnD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,IAAI,oBAAoB,CAAC,GAAG,CAAC;IAC7D,CAAC;CACJ;AAED,gBAAgB;AAChB,MAAM,UAAU,sBAAsB,CAAC,QAAgC;IACnE,OAAO,QAAQ,CAAC,UAAU,oCAA0C,CAAC;AACzE,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,uBAAuB,CAA8C,QAAgC,EAAE,QAAW;IAC9H,OAAO,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AAC1F,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,uBAAuB,CAA8C,QAAgC,EAAE,QAAW,EAAE,KAA6B;IAC7J,QAAQ,CAAC,aAAa,qCAA2C,CAAC,IAAI,EAAE,EAAE;QACtE,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import type { Nullable } from \"../../../types\";\nimport type { AudioEngineV2 } from \"../../abstractAudio/audioEngineV2\";\nimport { _AbstractAudioSubNode } from \"../../abstractAudio/subNodes/abstractAudioSubNode\";\nimport { AudioSubNode } from \"../../abstractAudio/subNodes/audioSubNode\";\nimport type { IStereoAudioOptions } from \"../../abstractAudio/subProperties/abstractStereoAudio\";\nimport { _StereoAudioDefaults } from \"../../abstractAudio/subProperties/abstractStereoAudio\";\nimport type { _AbstractAudioSubGraph } from \"./abstractAudioSubGraph\";\n\n/** @internal */\nexport abstract class _StereoAudioSubNode extends _AbstractAudioSubNode {\n protected constructor(engine: AudioEngineV2) {\n super(AudioSubNode.STEREO, engine);\n }\n\n abstract pan: number;\n\n /** @internal */\n public setOptions(options: Partial<IStereoAudioOptions>): void {\n this.pan = options.stereoPan ?? _StereoAudioDefaults.pan;\n }\n}\n\n/** @internal */\nexport function _GetStereoAudioSubNode(subGraph: _AbstractAudioSubGraph): Nullable<_StereoAudioSubNode> {\n return subGraph.getSubNode<_StereoAudioSubNode>(AudioSubNode.STEREO);\n}\n\n/** @internal */\nexport function _GetStereoAudioProperty<K extends keyof typeof _StereoAudioDefaults>(subGraph: _AbstractAudioSubGraph, property: K): (typeof _StereoAudioDefaults)[K] {\n return _GetStereoAudioSubNode(subGraph)?.[property] ?? _StereoAudioDefaults[property];\n}\n\n/** @internal */\nexport function _SetStereoAudioProperty<K extends keyof typeof _StereoAudioDefaults>(subGraph: _AbstractAudioSubGraph, property: K, value: _StereoAudioSubNode[K]): void {\n subGraph.callOnSubNode<_StereoAudioSubNode>(AudioSubNode.STEREO, (node) => {\n node[property] = value;\n });\n}\n"]}
1
+ {"version":3,"file":"stereoAudioSubNode.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/abstractAudio/subNodes/stereoAudioSubNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAG1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;AAG7F,gBAAgB;AAChB,MAAM,OAAgB,mBAAoB,SAAQ,qBAAqB;IACnE,YAAsB,MAAqB;QACvC,KAAK,qCAAsB,MAAM,CAAC,CAAC;IACvC,CAAC;IAID,gBAAgB;IACT,UAAU,CAAC,OAAqC;QACnD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,IAAI,oBAAoB,CAAC,GAAG,CAAC;IAC7D,CAAC;CACJ;AAED,gBAAgB;AAChB,MAAM,UAAU,sBAAsB,CAAC,QAAgC;IACnE,OAAO,QAAQ,CAAC,UAAU,oCAA0C,CAAC;AACzE,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,uBAAuB,CAA8C,QAAgC,EAAE,QAAW;IAC9H,OAAO,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AAC1F,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,uBAAuB,CAA8C,QAAgC,EAAE,QAAW,EAAE,KAA6B;IAC7J,QAAQ,CAAC,aAAa,qCAA2C,CAAC,IAAI,EAAE,EAAE;QACtE,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import type { Nullable } from \"../../../types\";\nimport type { AudioEngineV2 } from \"../../abstractAudio/audioEngineV2\";\nimport { _AbstractAudioSubNode } from \"../../abstractAudio/subNodes/abstractAudioSubNode\";\nimport { AudioSubNode } from \"../../abstractAudio/subNodes/audioSubNode\";\nimport type { IStereoAudioOptions } from \"../../abstractAudio/subProperties/abstractStereoAudio\";\nimport { _StereoAudioDefaults } from \"../../abstractAudio/subProperties/abstractStereoAudio\";\nimport type { _AbstractAudioSubGraph } from \"./abstractAudioSubGraph\";\n\n/** @internal */\nexport abstract class _StereoAudioSubNode extends _AbstractAudioSubNode {\n protected constructor(engine: AudioEngineV2) {\n super(AudioSubNode.STEREO, engine);\n }\n\n public abstract pan: number;\n\n /** @internal */\n public setOptions(options: Partial<IStereoAudioOptions>): void {\n this.pan = options.stereoPan ?? _StereoAudioDefaults.pan;\n }\n}\n\n/** @internal */\nexport function _GetStereoAudioSubNode(subGraph: _AbstractAudioSubGraph): Nullable<_StereoAudioSubNode> {\n return subGraph.getSubNode<_StereoAudioSubNode>(AudioSubNode.STEREO);\n}\n\n/** @internal */\nexport function _GetStereoAudioProperty<K extends keyof typeof _StereoAudioDefaults>(subGraph: _AbstractAudioSubGraph, property: K): (typeof _StereoAudioDefaults)[K] {\n return _GetStereoAudioSubNode(subGraph)?.[property] ?? _StereoAudioDefaults[property];\n}\n\n/** @internal */\nexport function _SetStereoAudioProperty<K extends keyof typeof _StereoAudioDefaults>(subGraph: _AbstractAudioSubGraph, property: K, value: _StereoAudioSubNode[K]): void {\n subGraph.callOnSubNode<_StereoAudioSubNode>(AudioSubNode.STEREO, (node) => {\n node[property] = value;\n });\n}\n"]}
@@ -0,0 +1,86 @@
1
+ export type AudioAnalyzerFFTSizeType = 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768;
2
+ export declare const _AudioAnalyzerDefaults: {
3
+ readonly fftSize: AudioAnalyzerFFTSizeType;
4
+ readonly minDecibels: number;
5
+ readonly maxDecibels: number;
6
+ readonly smoothing: number;
7
+ };
8
+ /**
9
+ * Options for the AudioAnalyzer
10
+ */
11
+ export interface IAudioAnalyzerOptions {
12
+ /**
13
+ * Enable the audio analyzer. Defaults to false.
14
+ */
15
+ analyzerEnabled: boolean;
16
+ /**
17
+ * The size of the FFT (fast fourier transform) to use when converting time-domain data to frequency-domain data. Default is 2048.
18
+ */
19
+ analyzerFFTSize: AudioAnalyzerFFTSizeType;
20
+ /**
21
+ * The minimum decibel value for the range of the analyzer. Default is -100.
22
+ */
23
+ analyzerMinDecibels: number;
24
+ /**
25
+ * The maximum decibel value for the range of the analyzer. Default is -30.
26
+ */
27
+ analyzerMaxDecibels: number;
28
+ /**
29
+ * A number between 0 and 1 that determines how quickly the analyzer's value changes. Default is 0.8.
30
+ */
31
+ analyzerSmoothing: number;
32
+ }
33
+ /**
34
+ * @param options The audio analyzer options to check.
35
+ * @returns `true` if audio analyzer options are defined, otherwise `false`.
36
+ */
37
+ export declare function _HasAudioAnalyzerOptions(options: Partial<IAudioAnalyzerOptions>): boolean;
38
+ /**
39
+ * An AudioAnalyzer converts time-domain audio data into the frequency-domain.
40
+ */
41
+ export declare abstract class AbstractAudioAnalyzer {
42
+ /**
43
+ * The size of the FFT (fast fourier transform) to use when converting time-domain data to frequency-domain data. Default is 2048.
44
+ */
45
+ abstract fftSize: AudioAnalyzerFFTSizeType;
46
+ /**
47
+ * The number of data values that will be returned when calling getByteFrequencyData() or getFloatFrequencyData(). This is always half the `fftSize`.
48
+ */
49
+ get frequencyBinCount(): number;
50
+ /**
51
+ * Whether the analyzer is enabled or not.
52
+ * - The `getByteFrequencyData` and `getFloatFrequencyData` functions return `null` if the analyzer is not enabled.
53
+ * @see {@link enable}
54
+ */
55
+ abstract isEnabled: boolean;
56
+ /**
57
+ * The minimum decibel value for the range of the analyzer. Default is -100.
58
+ */
59
+ abstract minDecibels: number;
60
+ /**
61
+ * The maximum decibel value for the range of the analyzer. Default is -30.
62
+ */
63
+ abstract maxDecibels: number;
64
+ /**
65
+ * A number between 0 and 1 that determines how quickly the analyzer's value changes. Default is 0.8.
66
+ */
67
+ abstract smoothing: number;
68
+ /**
69
+ * Releases associated resources.
70
+ */
71
+ abstract dispose(): void;
72
+ /**
73
+ * Enables the analyzer
74
+ */
75
+ abstract enable(): Promise<void>;
76
+ /**
77
+ * Gets the current frequency data as a byte array
78
+ * @returns a Uint8Array if the analyzer is enabled, otherwise `null`
79
+ */
80
+ abstract getByteFrequencyData(): Uint8Array;
81
+ /**
82
+ * Gets the current frequency data as a float array
83
+ * @returns a Float32Array if the analyzer is enabled, otherwise `null`
84
+ */
85
+ abstract getFloatFrequencyData(): Float32Array;
86
+ }
@@ -0,0 +1,29 @@
1
+ export const _AudioAnalyzerDefaults = {
2
+ fftSize: 2048,
3
+ minDecibels: -100,
4
+ maxDecibels: -30,
5
+ smoothing: 0.8,
6
+ };
7
+ /**
8
+ * @param options The audio analyzer options to check.
9
+ * @returns `true` if audio analyzer options are defined, otherwise `false`.
10
+ */
11
+ export function _HasAudioAnalyzerOptions(options) {
12
+ return (options.analyzerEnabled ||
13
+ options.analyzerFFTSize !== undefined ||
14
+ options.analyzerMinDecibels !== undefined ||
15
+ options.analyzerMaxDecibels !== undefined ||
16
+ options.analyzerSmoothing !== undefined);
17
+ }
18
+ /**
19
+ * An AudioAnalyzer converts time-domain audio data into the frequency-domain.
20
+ */
21
+ export class AbstractAudioAnalyzer {
22
+ /**
23
+ * The number of data values that will be returned when calling getByteFrequencyData() or getFloatFrequencyData(). This is always half the `fftSize`.
24
+ */
25
+ get frequencyBinCount() {
26
+ return this.fftSize / 2;
27
+ }
28
+ }
29
+ //# sourceMappingURL=abstractAudioAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstractAudioAnalyzer.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,OAAO,EAAE,IAAgC;IACzC,WAAW,EAAE,CAAC,GAAa;IAC3B,WAAW,EAAE,CAAC,EAAY;IAC1B,SAAS,EAAE,GAAa;CAClB,CAAC;AA+BX;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAuC;IAC5E,OAAO,CACH,OAAO,CAAC,eAAe;QACvB,OAAO,CAAC,eAAe,KAAK,SAAS;QACrC,OAAO,CAAC,mBAAmB,KAAK,SAAS;QACzC,OAAO,CAAC,mBAAmB,KAAK,SAAS;QACzC,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAC1C,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,OAAgB,qBAAqB;IAMvC;;OAEG;IACH,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;CA6CJ","sourcesContent":["export type AudioAnalyzerFFTSizeType = 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768;\n\nexport const _AudioAnalyzerDefaults = {\n fftSize: 2048 as AudioAnalyzerFFTSizeType,\n minDecibels: -100 as number,\n maxDecibels: -30 as number,\n smoothing: 0.8 as number,\n} as const;\n\n/**\n * Options for the AudioAnalyzer\n */\nexport interface IAudioAnalyzerOptions {\n /**\n * Enable the audio analyzer. Defaults to false.\n */\n analyzerEnabled: boolean;\n /**\n * The size of the FFT (fast fourier transform) to use when converting time-domain data to frequency-domain data. Default is 2048.\n */\n analyzerFFTSize: AudioAnalyzerFFTSizeType;\n\n /**\n * The minimum decibel value for the range of the analyzer. Default is -100.\n */\n analyzerMinDecibels: number;\n\n /**\n * The maximum decibel value for the range of the analyzer. Default is -30.\n */\n analyzerMaxDecibels: number;\n\n /**\n * A number between 0 and 1 that determines how quickly the analyzer's value changes. Default is 0.8.\n */\n analyzerSmoothing: number;\n}\n\n/**\n * @param options The audio analyzer options to check.\n * @returns `true` if audio analyzer options are defined, otherwise `false`.\n */\nexport function _HasAudioAnalyzerOptions(options: Partial<IAudioAnalyzerOptions>): boolean {\n return (\n options.analyzerEnabled ||\n options.analyzerFFTSize !== undefined ||\n options.analyzerMinDecibels !== undefined ||\n options.analyzerMaxDecibels !== undefined ||\n options.analyzerSmoothing !== undefined\n );\n}\n\n/**\n * An AudioAnalyzer converts time-domain audio data into the frequency-domain.\n */\nexport abstract class AbstractAudioAnalyzer {\n /**\n * The size of the FFT (fast fourier transform) to use when converting time-domain data to frequency-domain data. Default is 2048.\n */\n public abstract fftSize: AudioAnalyzerFFTSizeType;\n\n /**\n * The number of data values that will be returned when calling getByteFrequencyData() or getFloatFrequencyData(). This is always half the `fftSize`.\n */\n public get frequencyBinCount(): number {\n return this.fftSize / 2;\n }\n\n /**\n * Whether the analyzer is enabled or not.\n * - The `getByteFrequencyData` and `getFloatFrequencyData` functions return `null` if the analyzer is not enabled.\n * @see {@link enable}\n */\n public abstract isEnabled: boolean;\n\n /**\n * The minimum decibel value for the range of the analyzer. Default is -100.\n */\n public abstract minDecibels: number;\n\n /**\n * The maximum decibel value for the range of the analyzer. Default is -30.\n */\n public abstract maxDecibels: number;\n\n /**\n * A number between 0 and 1 that determines how quickly the analyzer's value changes. Default is 0.8.\n */\n public abstract smoothing: number;\n\n /**\n * Releases associated resources.\n */\n public abstract dispose(): void;\n\n /**\n * Enables the analyzer\n */\n public abstract enable(): Promise<void>;\n\n /**\n * Gets the current frequency data as a byte array\n * @returns a Uint8Array if the analyzer is enabled, otherwise `null`\n */\n public abstract getByteFrequencyData(): Uint8Array;\n\n /**\n * Gets the current frequency data as a float array\n * @returns a Float32Array if the analyzer is enabled, otherwise `null`\n */\n public abstract getFloatFrequencyData(): Float32Array;\n}\n"]}
@@ -0,0 +1,35 @@
1
+ import type { AudioAnalyzerFFTSizeType } from "../../abstractAudio/subProperties/abstractAudioAnalyzer";
2
+ import { AbstractAudioAnalyzer } from "../../abstractAudio/subProperties/abstractAudioAnalyzer";
3
+ import type { _AbstractAudioSubGraph } from "../subNodes/abstractAudioSubGraph";
4
+ /** @internal */
5
+ export declare function _GetEmptyByteFrequencyData(): Uint8Array;
6
+ /** @internal */
7
+ export declare function _GetEmptyFloatFrequencyData(): Float32Array;
8
+ /** @internal */
9
+ export declare class _AudioAnalyzer extends AbstractAudioAnalyzer {
10
+ private _subGraph;
11
+ /** @internal */
12
+ constructor(subGraph: _AbstractAudioSubGraph);
13
+ /** @internal */
14
+ get fftSize(): AudioAnalyzerFFTSizeType;
15
+ set fftSize(value: AudioAnalyzerFFTSizeType);
16
+ /** @internal */
17
+ get isEnabled(): boolean;
18
+ /** @internal */
19
+ get minDecibels(): number;
20
+ set minDecibels(value: number);
21
+ /** @internal */
22
+ get maxDecibels(): number;
23
+ set maxDecibels(value: number);
24
+ /** @internal */
25
+ get smoothing(): number;
26
+ set smoothing(value: number);
27
+ /** @internal */
28
+ dispose(): void;
29
+ /** @internal */
30
+ enable(): Promise<void>;
31
+ /** @internal */
32
+ getByteFrequencyData(): Uint8Array;
33
+ /** @internal */
34
+ getFloatFrequencyData(): Float32Array;
35
+ }
@@ -0,0 +1,96 @@
1
+ import { Logger } from "../../../Misc/logger.js";
2
+ import { AbstractAudioAnalyzer } from "../../abstractAudio/subProperties/abstractAudioAnalyzer.js";
3
+ import { _GetAudioAnalyzerProperty, _GetAudioAnalyzerSubNode, _SetAudioAnalyzerProperty } from "../subNodes/audioAnalyzerSubNode.js";
4
+ let _emptyByteFrequencyData = null;
5
+ let _emptyFloatFrequencyData = null;
6
+ /** @internal */
7
+ export function _GetEmptyByteFrequencyData() {
8
+ if (!_emptyByteFrequencyData) {
9
+ _emptyByteFrequencyData = new Uint8Array();
10
+ }
11
+ return _emptyByteFrequencyData;
12
+ }
13
+ /** @internal */
14
+ export function _GetEmptyFloatFrequencyData() {
15
+ if (!_emptyFloatFrequencyData) {
16
+ _emptyFloatFrequencyData = new Float32Array();
17
+ }
18
+ return _emptyFloatFrequencyData;
19
+ }
20
+ /** @internal */
21
+ export class _AudioAnalyzer extends AbstractAudioAnalyzer {
22
+ /** @internal */
23
+ constructor(subGraph) {
24
+ super();
25
+ this._subGraph = subGraph;
26
+ }
27
+ /** @internal */
28
+ get fftSize() {
29
+ return _GetAudioAnalyzerProperty(this._subGraph, "fftSize");
30
+ }
31
+ set fftSize(value) {
32
+ _SetAudioAnalyzerProperty(this._subGraph, "fftSize", value);
33
+ }
34
+ /** @internal */
35
+ get isEnabled() {
36
+ return _GetAudioAnalyzerSubNode(this._subGraph) !== null;
37
+ }
38
+ /** @internal */
39
+ get minDecibels() {
40
+ return _GetAudioAnalyzerProperty(this._subGraph, "minDecibels");
41
+ }
42
+ set minDecibels(value) {
43
+ _SetAudioAnalyzerProperty(this._subGraph, "minDecibels", value);
44
+ }
45
+ /** @internal */
46
+ get maxDecibels() {
47
+ return _GetAudioAnalyzerProperty(this._subGraph, "maxDecibels");
48
+ }
49
+ set maxDecibels(value) {
50
+ _SetAudioAnalyzerProperty(this._subGraph, "maxDecibels", value);
51
+ }
52
+ /** @internal */
53
+ get smoothing() {
54
+ return _GetAudioAnalyzerProperty(this._subGraph, "smoothing");
55
+ }
56
+ set smoothing(value) {
57
+ _SetAudioAnalyzerProperty(this._subGraph, "smoothing", value);
58
+ }
59
+ /** @internal */
60
+ dispose() {
61
+ const subNode = _GetAudioAnalyzerSubNode(this._subGraph);
62
+ if (subNode) {
63
+ this._subGraph.removeSubNode(subNode);
64
+ subNode.dispose();
65
+ }
66
+ }
67
+ /** @internal */
68
+ async enable() {
69
+ const subNode = _GetAudioAnalyzerSubNode(this._subGraph);
70
+ if (!subNode) {
71
+ await this._subGraph.createAndAddSubNode("Analyzer" /* AudioSubNode.ANALYZER */);
72
+ }
73
+ return Promise.resolve();
74
+ }
75
+ /** @internal */
76
+ getByteFrequencyData() {
77
+ const subNode = _GetAudioAnalyzerSubNode(this._subGraph);
78
+ if (!subNode) {
79
+ Logger.Warn("AudioAnalyzer not enabled");
80
+ this.enable();
81
+ return _GetEmptyByteFrequencyData();
82
+ }
83
+ return subNode.getByteFrequencyData();
84
+ }
85
+ /** @internal */
86
+ getFloatFrequencyData() {
87
+ const subNode = _GetAudioAnalyzerSubNode(this._subGraph);
88
+ if (!subNode) {
89
+ Logger.Warn("AudioAnalyzer not enabled");
90
+ this.enable();
91
+ return _GetEmptyFloatFrequencyData();
92
+ }
93
+ return subNode.getFloatFrequencyData();
94
+ }
95
+ }
96
+ //# sourceMappingURL=audioAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audioAnalyzer.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/abstractAudio/subProperties/audioAnalyzer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../../Misc/logger\";\nimport type { Nullable } from \"../../../types\";\nimport type { AudioAnalyzerFFTSizeType } from \"../../abstractAudio/subProperties/abstractAudioAnalyzer\";\nimport { AbstractAudioAnalyzer } from \"../../abstractAudio/subProperties/abstractAudioAnalyzer\";\nimport type { _AbstractAudioSubGraph } from \"../subNodes/abstractAudioSubGraph\";\nimport { _GetAudioAnalyzerProperty, _GetAudioAnalyzerSubNode, _SetAudioAnalyzerProperty } from \"../subNodes/audioAnalyzerSubNode\";\nimport { AudioSubNode } from \"../subNodes/audioSubNode\";\n\nlet _emptyByteFrequencyData: Nullable<Uint8Array> = null;\nlet _emptyFloatFrequencyData: Nullable<Float32Array> = null;\n\n/** @internal */\nexport function _GetEmptyByteFrequencyData(): Uint8Array {\n if (!_emptyByteFrequencyData) {\n _emptyByteFrequencyData = new Uint8Array();\n }\n return _emptyByteFrequencyData;\n}\n\n/** @internal */\nexport function _GetEmptyFloatFrequencyData(): Float32Array {\n if (!_emptyFloatFrequencyData) {\n _emptyFloatFrequencyData = new Float32Array();\n }\n return _emptyFloatFrequencyData;\n}\n\n/** @internal */\nexport class _AudioAnalyzer extends AbstractAudioAnalyzer {\n private _subGraph: _AbstractAudioSubGraph;\n\n /** @internal */\n public constructor(subGraph: _AbstractAudioSubGraph) {\n super();\n this._subGraph = subGraph;\n }\n\n /** @internal */\n public get fftSize(): AudioAnalyzerFFTSizeType {\n return _GetAudioAnalyzerProperty(this._subGraph, \"fftSize\");\n }\n\n public set fftSize(value: AudioAnalyzerFFTSizeType) {\n _SetAudioAnalyzerProperty(this._subGraph, \"fftSize\", value);\n }\n\n /** @internal */\n public get isEnabled(): boolean {\n return _GetAudioAnalyzerSubNode(this._subGraph) !== null;\n }\n\n /** @internal */\n public get minDecibels(): number {\n return _GetAudioAnalyzerProperty(this._subGraph, \"minDecibels\");\n }\n\n public set minDecibels(value: number) {\n _SetAudioAnalyzerProperty(this._subGraph, \"minDecibels\", value);\n }\n\n /** @internal */\n public get maxDecibels(): number {\n return _GetAudioAnalyzerProperty(this._subGraph, \"maxDecibels\");\n }\n\n public set maxDecibels(value: number) {\n _SetAudioAnalyzerProperty(this._subGraph, \"maxDecibels\", value);\n }\n\n /** @internal */\n public get smoothing(): number {\n return _GetAudioAnalyzerProperty(this._subGraph, \"smoothing\");\n }\n\n public set smoothing(value: number) {\n _SetAudioAnalyzerProperty(this._subGraph, \"smoothing\", value);\n }\n\n /** @internal */\n public dispose(): void {\n const subNode = _GetAudioAnalyzerSubNode(this._subGraph);\n if (subNode) {\n this._subGraph.removeSubNode(subNode);\n subNode.dispose();\n }\n }\n\n /** @internal */\n public async enable(): Promise<void> {\n const subNode = _GetAudioAnalyzerSubNode(this._subGraph);\n if (!subNode) {\n await this._subGraph.createAndAddSubNode(AudioSubNode.ANALYZER);\n }\n return Promise.resolve();\n }\n\n /** @internal */\n public getByteFrequencyData(): Uint8Array {\n const subNode = _GetAudioAnalyzerSubNode(this._subGraph);\n if (!subNode) {\n Logger.Warn(\"AudioAnalyzer not enabled\");\n this.enable();\n return _GetEmptyByteFrequencyData();\n }\n return subNode.getByteFrequencyData();\n }\n\n /** @internal */\n public getFloatFrequencyData(): Float32Array {\n const subNode = _GetAudioAnalyzerSubNode(this._subGraph);\n if (!subNode) {\n Logger.Warn(\"AudioAnalyzer not enabled\");\n this.enable();\n return _GetEmptyFloatFrequencyData();\n }\n return subNode.getFloatFrequencyData();\n }\n}\n"]}
@@ -1,3 +1,4 @@
1
+ export * from "./abstractAudioAnalyzer";
1
2
  export * from "./abstractSpatialAudio";
2
3
  export * from "./abstractSpatialAudioListener";
3
4
  export * from "./abstractStereoAudio";
@@ -1,3 +1,4 @@
1
+ export * from "./abstractAudioAnalyzer.js";
1
2
  export * from "./abstractSpatialAudio.js";
2
3
  export * from "./abstractSpatialAudioListener.js";
3
4
  export * from "./abstractStereoAudio.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/abstractAudio/subProperties/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC","sourcesContent":["export * from \"./abstractSpatialAudio\";\nexport * from \"./abstractSpatialAudioListener\";\nexport * from \"./abstractStereoAudio\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/abstractAudio/subProperties/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC","sourcesContent":["export * from \"./abstractAudioAnalyzer\";\nexport * from \"./abstractSpatialAudio\";\nexport * from \"./abstractSpatialAudioListener\";\nexport * from \"./abstractStereoAudio\";\n"]}
@@ -0,0 +1,37 @@
1
+ import { _AudioAnalyzerSubNode } from "../../abstractAudio/subNodes/audioAnalyzerSubNode";
2
+ import type { AudioAnalyzerFFTSizeType } from "../../abstractAudio/subProperties/abstractAudioAnalyzer";
3
+ import type { _WebAudioEngine } from "../webAudioEngine";
4
+ import type { IWebAudioInNode } from "../webAudioNode";
5
+ /** @internal */
6
+ export declare function _CreateAudioAnalyzerSubNodeAsync(engine: _WebAudioEngine): Promise<_AudioAnalyzerSubNode>;
7
+ /** @internal */
8
+ export declare class _WebAudioAnalyzerSubNode extends _AudioAnalyzerSubNode implements IWebAudioInNode {
9
+ private readonly _analyzerNode;
10
+ private _byteFrequencyData;
11
+ private _floatFrequencyData;
12
+ /** @internal */
13
+ constructor(engine: _WebAudioEngine);
14
+ /** @internal */
15
+ get fftSize(): AudioAnalyzerFFTSizeType;
16
+ set fftSize(value: AudioAnalyzerFFTSizeType);
17
+ /** @internal */
18
+ get inNode(): AudioNode;
19
+ /** @internal */
20
+ get minDecibels(): number;
21
+ set minDecibels(value: number);
22
+ /** @internal */
23
+ get maxDecibels(): number;
24
+ set maxDecibels(value: number);
25
+ /** @internal */
26
+ get smoothing(): number;
27
+ set smoothing(value: number);
28
+ /** @internal */
29
+ dispose(): void;
30
+ /** @internal */
31
+ getClassName(): string;
32
+ /** @internal */
33
+ getByteFrequencyData(): Uint8Array;
34
+ /** @internal */
35
+ getFloatFrequencyData(): Float32Array;
36
+ private _clearArrays;
37
+ }