@babylonjs/core 7.52.1 → 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.
- package/AudioV2/abstractAudio/abstractAudioBus.d.ts +11 -0
- package/AudioV2/abstractAudio/abstractAudioBus.js +10 -0
- package/AudioV2/abstractAudio/abstractAudioBus.js.map +1 -1
- package/AudioV2/abstractAudio/abstractSound.d.ts +11 -5
- package/AudioV2/abstractAudio/abstractSound.js +11 -5
- package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
- package/AudioV2/abstractAudio/audioBus.d.ts +5 -6
- package/AudioV2/abstractAudio/audioBus.js +1 -5
- package/AudioV2/abstractAudio/audioBus.js.map +1 -1
- package/AudioV2/abstractAudio/audioEngineV2.d.ts +1 -2
- package/AudioV2/abstractAudio/audioEngineV2.js +1 -5
- package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
- package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.d.ts +43 -0
- package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js +71 -0
- package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js.map +1 -0
- package/AudioV2/abstractAudio/mainAudioBus.d.ts +2 -2
- package/AudioV2/abstractAudio/mainAudioBus.js.map +1 -1
- package/AudioV2/abstractAudio/staticSound.d.ts +6 -6
- package/AudioV2/abstractAudio/staticSound.js +5 -5
- package/AudioV2/abstractAudio/staticSound.js.map +1 -1
- package/AudioV2/abstractAudio/streamingSound.d.ts +2 -2
- package/AudioV2/abstractAudio/streamingSound.js +3 -3
- package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
- package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.d.ts +30 -6
- package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js +44 -21
- package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js.map +1 -1
- package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.d.ts +24 -0
- package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.js +30 -0
- package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.js.map +1 -0
- package/AudioV2/abstractAudio/subNodes/audioSubNode.d.ts +1 -0
- package/AudioV2/abstractAudio/subNodes/audioSubNode.js +1 -0
- package/AudioV2/abstractAudio/subNodes/audioSubNode.js.map +1 -1
- package/AudioV2/abstractAudio/subNodes/spatialAudioSubNode.d.ts +15 -0
- package/AudioV2/abstractAudio/subNodes/spatialAudioSubNode.js +38 -3
- package/AudioV2/abstractAudio/subNodes/spatialAudioSubNode.js.map +1 -1
- package/AudioV2/abstractAudio/subNodes/stereoAudioSubNode.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.d.ts +86 -0
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js +29 -0
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js.map +1 -0
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.d.ts +29 -8
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js +1 -0
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.d.ts +28 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js +5 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.d.ts +35 -0
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js +96 -0
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js.map +1 -0
- package/AudioV2/abstractAudio/subProperties/index.d.ts +1 -0
- package/AudioV2/abstractAudio/subProperties/index.js +1 -0
- package/AudioV2/abstractAudio/subProperties/index.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/spatialAudio.d.ts +16 -1
- package/AudioV2/abstractAudio/subProperties/spatialAudio.js +48 -14
- package/AudioV2/abstractAudio/subProperties/spatialAudio.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/spatialAudioListener.d.ts +21 -0
- package/AudioV2/abstractAudio/subProperties/spatialAudioListener.js +39 -4
- package/AudioV2/abstractAudio/subProperties/spatialAudioListener.js.map +1 -1
- package/AudioV2/index.d.ts +1 -0
- package/AudioV2/index.js +1 -0
- package/AudioV2/index.js.map +1 -1
- package/AudioV2/spatialAudioAttachmentType.d.ts +5 -0
- package/AudioV2/spatialAudioAttachmentType.js +7 -0
- package/AudioV2/spatialAudioAttachmentType.js.map +1 -0
- package/AudioV2/webAudio/components/spatialWebAudioUpdaterComponent.d.ts +13 -0
- package/AudioV2/webAudio/components/spatialWebAudioUpdaterComponent.js +38 -0
- package/AudioV2/webAudio/components/spatialWebAudioUpdaterComponent.js.map +1 -0
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.d.ts +13 -14
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +39 -39
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.d.ts +37 -0
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js +85 -0
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js.map +1 -0
- package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.d.ts +5 -3
- package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.js +25 -2
- package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.js.map +1 -1
- package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.d.ts +2 -1
- package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js +32 -17
- package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js.map +1 -1
- package/AudioV2/webAudio/subProperties/spatialWebAudio.d.ts +6 -2
- package/AudioV2/webAudio/subProperties/spatialWebAudio.js +13 -15
- package/AudioV2/webAudio/subProperties/spatialWebAudio.js.map +1 -1
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.d.ts +1 -1
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +41 -56
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -1
- package/AudioV2/webAudio/webAudioBus.d.ts +3 -0
- package/AudioV2/webAudio/webAudioBus.js +23 -2
- package/AudioV2/webAudio/webAudioBus.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.d.ts +3 -1
- package/AudioV2/webAudio/webAudioEngine.js +11 -3
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/AudioV2/webAudio/webAudioStaticSound.d.ts +3 -0
- package/AudioV2/webAudio/webAudioStaticSound.js +23 -2
- package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.d.ts +3 -0
- package/AudioV2/webAudio/webAudioStreamingSound.js +23 -2
- package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.d.ts +0 -1
- package/Engines/WebGPU/webgpuTextureManager.js +2 -57
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.d.ts +6 -0
- package/Engines/abstractEngine.js +3 -3
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.common.js +4 -0
- package/Engines/engine.common.js.map +1 -1
- package/Engines/nativeEngine.d.ts +1 -0
- package/Engines/nativeEngine.js +3 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +1 -0
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +1 -0
- package/Engines/thinEngine.js +7 -4
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +2 -1
- package/Engines/webgpuEngine.js +12 -9
- package/Engines/webgpuEngine.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.d.ts +48 -0
- package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js +54 -0
- package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js.map +1 -0
- package/FlowGraph/Blocks/Data/index.d.ts +1 -0
- package/FlowGraph/Blocks/Data/index.js +1 -0
- package/FlowGraph/Blocks/Data/index.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.d.ts +1 -0
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js +19 -13
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js +3 -5
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.js +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.js +2 -4
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js +1 -2
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockFactory.js +2 -0
- package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockNames.d.ts +2 -1
- package/FlowGraph/Blocks/flowGraphBlockNames.js +1 -0
- package/FlowGraph/Blocks/flowGraphBlockNames.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphInteger.d.ts +1 -0
- package/FlowGraph/CustomTypes/flowGraphInteger.js +3 -0
- package/FlowGraph/CustomTypes/flowGraphInteger.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +2 -0
- package/FlowGraph/CustomTypes/flowGraphMatrix.js +6 -0
- package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
- package/FlowGraph/flowGraphExecutionBlock.d.ts +1 -0
- package/FlowGraph/flowGraphExecutionBlock.js +4 -0
- package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
- package/FlowGraph/utils.d.ts +2 -1
- package/FlowGraph/utils.js +7 -2
- package/FlowGraph/utils.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js +2 -2
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js +2 -2
- package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.d.ts +126 -0
- package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js +497 -0
- package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +6 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +30 -4
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +1 -0
- package/FrameGraph/Node/Blocks/index.js +1 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +2 -3
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js +3 -4
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/blurTask.js +2 -2
- package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.d.ts +2 -3
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +4 -5
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +6 -0
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +14 -0
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.d.ts +11 -0
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js +18 -0
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.d.ts +76 -0
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +170 -0
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssrTask.d.ts +16 -0
- package/FrameGraph/Tasks/PostProcesses/ssrTask.js +45 -0
- package/FrameGraph/Tasks/PostProcesses/ssrTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +10 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +29 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +7 -3
- package/FrameGraph/frameGraph.js +10 -4
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.d.ts +2 -1
- package/FrameGraph/frameGraphTextureManager.js +4 -3
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/FrameGraph/index.d.ts +1 -0
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/effectRenderer.js +1 -1
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/material.js +5 -3
- package/Materials/material.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +7 -5
- package/Materials/materialHelper.geometryrendering.js +8 -3
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/standardMaterial.js +1 -1
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/geometry.js +18 -7
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +1 -1
- package/Meshes/mesh.vertexData.js +2 -1
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Particles/particleSystemComponent.d.ts +2 -1
- package/Particles/particleSystemComponent.js +2 -2
- package/Particles/particleSystemComponent.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +23 -30
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +226 -411
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.d.ts +222 -0
- package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js +373 -0
- package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js.map +1 -0
- package/PostProcesses/thinDepthOfFieldEffect.d.ts +4 -4
- package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
- package/PostProcesses/thinSSRBlurCombinerPostProcess.d.ts +41 -0
- package/PostProcesses/thinSSRBlurCombinerPostProcess.js +185 -0
- package/PostProcesses/thinSSRBlurCombinerPostProcess.js.map +1 -0
- package/PostProcesses/thinSSRBlurPostProcess.d.ts +18 -0
- package/PostProcesses/thinSSRBlurPostProcess.js +47 -0
- package/PostProcesses/thinSSRBlurPostProcess.js.map +1 -0
- package/PostProcesses/thinSSRPostProcess.d.ts +94 -0
- package/PostProcesses/thinSSRPostProcess.js +416 -0
- package/PostProcesses/thinSSRPostProcess.js.map +1 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +2 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +2 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/iblCdfGenerator.js +1 -1
- package/Rendering/iblCdfGenerator.js.map +1 -1
- package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js +13 -2
- package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +1 -1
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/screenSpaceReflection2BlurCombiner.fragment.js +13 -2
- package/ShadersWGSL/screenSpaceReflection2BlurCombiner.fragment.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { _AudioAnalyzerSubNode } from "../../abstractAudio/subNodes/audioAnalyzerSubNode.js";
|
|
2
|
+
import { _GetEmptyByteFrequencyData, _GetEmptyFloatFrequencyData } from "../../abstractAudio/subProperties/audioAnalyzer.js";
|
|
3
|
+
/** @internal */
|
|
4
|
+
export async function _CreateAudioAnalyzerSubNodeAsync(engine) {
|
|
5
|
+
return new _WebAudioAnalyzerSubNode(engine);
|
|
6
|
+
}
|
|
7
|
+
/** @internal */
|
|
8
|
+
export class _WebAudioAnalyzerSubNode extends _AudioAnalyzerSubNode {
|
|
9
|
+
/** @internal */
|
|
10
|
+
constructor(engine) {
|
|
11
|
+
super(engine);
|
|
12
|
+
this._byteFrequencyData = null;
|
|
13
|
+
this._floatFrequencyData = null;
|
|
14
|
+
this._analyzerNode = new AnalyserNode(engine.audioContext);
|
|
15
|
+
}
|
|
16
|
+
/** @internal */
|
|
17
|
+
get fftSize() {
|
|
18
|
+
return this._analyzerNode.fftSize;
|
|
19
|
+
}
|
|
20
|
+
set fftSize(value) {
|
|
21
|
+
if (value === this._analyzerNode.fftSize) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this._analyzerNode.fftSize = value;
|
|
25
|
+
this._clearArrays();
|
|
26
|
+
}
|
|
27
|
+
/** @internal */
|
|
28
|
+
get inNode() {
|
|
29
|
+
return this._analyzerNode;
|
|
30
|
+
}
|
|
31
|
+
/** @internal */
|
|
32
|
+
get minDecibels() {
|
|
33
|
+
return this._analyzerNode.minDecibels;
|
|
34
|
+
}
|
|
35
|
+
set minDecibels(value) {
|
|
36
|
+
this._analyzerNode.minDecibels = value;
|
|
37
|
+
}
|
|
38
|
+
/** @internal */
|
|
39
|
+
get maxDecibels() {
|
|
40
|
+
return this._analyzerNode.maxDecibels;
|
|
41
|
+
}
|
|
42
|
+
set maxDecibels(value) {
|
|
43
|
+
this._analyzerNode.maxDecibels = value;
|
|
44
|
+
}
|
|
45
|
+
/** @internal */
|
|
46
|
+
get smoothing() {
|
|
47
|
+
return this._analyzerNode.smoothingTimeConstant;
|
|
48
|
+
}
|
|
49
|
+
set smoothing(value) {
|
|
50
|
+
this._analyzerNode.smoothingTimeConstant = value;
|
|
51
|
+
}
|
|
52
|
+
/** @internal */
|
|
53
|
+
dispose() {
|
|
54
|
+
super.dispose();
|
|
55
|
+
this._clearArrays();
|
|
56
|
+
this._byteFrequencyData = null;
|
|
57
|
+
this._floatFrequencyData = null;
|
|
58
|
+
this._analyzerNode.disconnect();
|
|
59
|
+
}
|
|
60
|
+
/** @internal */
|
|
61
|
+
getClassName() {
|
|
62
|
+
return "_WebAudioAnalyzerSubNode";
|
|
63
|
+
}
|
|
64
|
+
/** @internal */
|
|
65
|
+
getByteFrequencyData() {
|
|
66
|
+
if (!this._byteFrequencyData || this._byteFrequencyData.length === 0) {
|
|
67
|
+
this._byteFrequencyData = new Uint8Array(this._analyzerNode.frequencyBinCount);
|
|
68
|
+
}
|
|
69
|
+
this._analyzerNode.getByteFrequencyData(this._byteFrequencyData);
|
|
70
|
+
return this._byteFrequencyData;
|
|
71
|
+
}
|
|
72
|
+
/** @internal */
|
|
73
|
+
getFloatFrequencyData() {
|
|
74
|
+
if (!this._floatFrequencyData || this._floatFrequencyData.length === 0) {
|
|
75
|
+
this._floatFrequencyData = new Float32Array(this._analyzerNode.frequencyBinCount);
|
|
76
|
+
}
|
|
77
|
+
this._analyzerNode.getFloatFrequencyData(this._floatFrequencyData);
|
|
78
|
+
return this._floatFrequencyData;
|
|
79
|
+
}
|
|
80
|
+
_clearArrays() {
|
|
81
|
+
this._byteFrequencyData?.set(_GetEmptyByteFrequencyData());
|
|
82
|
+
this._floatFrequencyData?.set(_GetEmptyFloatFrequencyData());
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=webAudioAnalyzerSubNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webAudioAnalyzerSubNode.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../../types\";\nimport { _AudioAnalyzerSubNode } from \"../../abstractAudio/subNodes/audioAnalyzerSubNode\";\nimport type { AudioAnalyzerFFTSizeType } from \"../../abstractAudio/subProperties/abstractAudioAnalyzer\";\nimport { _GetEmptyByteFrequencyData, _GetEmptyFloatFrequencyData } from \"../../abstractAudio/subProperties/audioAnalyzer\";\nimport type { _WebAudioEngine } from \"../webAudioEngine\";\nimport type { IWebAudioInNode } from \"../webAudioNode\";\n\n/** @internal */\nexport async function _CreateAudioAnalyzerSubNodeAsync(engine: _WebAudioEngine): Promise<_AudioAnalyzerSubNode> {\n return new _WebAudioAnalyzerSubNode(engine);\n}\n\n/** @internal */\nexport class _WebAudioAnalyzerSubNode extends _AudioAnalyzerSubNode implements IWebAudioInNode {\n private readonly _analyzerNode: AnalyserNode;\n private _byteFrequencyData: Nullable<Uint8Array> = null;\n private _floatFrequencyData: Nullable<Float32Array> = null;\n\n /** @internal */\n public constructor(engine: _WebAudioEngine) {\n super(engine);\n\n this._analyzerNode = new AnalyserNode(engine.audioContext);\n }\n\n /** @internal */\n public get fftSize(): AudioAnalyzerFFTSizeType {\n return this._analyzerNode.fftSize as AudioAnalyzerFFTSizeType;\n }\n\n public set fftSize(value: AudioAnalyzerFFTSizeType) {\n if (value === this._analyzerNode.fftSize) {\n return;\n }\n\n this._analyzerNode.fftSize = value;\n\n this._clearArrays();\n }\n\n /** @internal */\n public get inNode(): AudioNode {\n return this._analyzerNode;\n }\n\n /** @internal */\n public get minDecibels(): number {\n return this._analyzerNode.minDecibels;\n }\n\n public set minDecibels(value: number) {\n this._analyzerNode.minDecibels = value;\n }\n\n /** @internal */\n public get maxDecibels(): number {\n return this._analyzerNode.maxDecibels;\n }\n\n public set maxDecibels(value: number) {\n this._analyzerNode.maxDecibels = value;\n }\n\n /** @internal */\n public get smoothing(): number {\n return this._analyzerNode.smoothingTimeConstant;\n }\n\n public set smoothing(value: number) {\n this._analyzerNode.smoothingTimeConstant = value;\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this._clearArrays();\n this._byteFrequencyData = null;\n this._floatFrequencyData = null;\n\n this._analyzerNode.disconnect();\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_WebAudioAnalyzerSubNode\";\n }\n\n /** @internal */\n public getByteFrequencyData(): Uint8Array {\n if (!this._byteFrequencyData || this._byteFrequencyData.length === 0) {\n this._byteFrequencyData = new Uint8Array(this._analyzerNode.frequencyBinCount);\n }\n this._analyzerNode.getByteFrequencyData(this._byteFrequencyData);\n return this._byteFrequencyData;\n }\n\n /** @internal */\n public getFloatFrequencyData(): Float32Array {\n if (!this._floatFrequencyData || this._floatFrequencyData.length === 0) {\n this._floatFrequencyData = new Float32Array(this._analyzerNode.frequencyBinCount);\n }\n this._analyzerNode.getFloatFrequencyData(this._floatFrequencyData);\n return this._floatFrequencyData;\n }\n\n private _clearArrays(): void {\n this._byteFrequencyData?.set(_GetEmptyByteFrequencyData());\n this._floatFrequencyData?.set(_GetEmptyFloatFrequencyData());\n }\n}\n"]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import type { Nullable } from "../../../types
|
|
1
|
+
import type { Nullable } from "../../../types";
|
|
2
2
|
import type { AbstractAudioNode } from "../../abstractAudio/abstractAudioNode";
|
|
3
3
|
import { _AbstractAudioSubGraph } from "../../abstractAudio/subNodes/abstractAudioSubGraph";
|
|
4
4
|
import type { _AbstractAudioSubNode } from "../../abstractAudio/subNodes/abstractAudioSubNode";
|
|
5
5
|
import type { IVolumeAudioOptions } from "../../abstractAudio/subNodes/volumeAudioSubNode";
|
|
6
|
+
import type { IAudioAnalyzerOptions } from "../../abstractAudio/subProperties/abstractAudioAnalyzer";
|
|
6
7
|
import type { IWebAudioSuperNode } from "../webAudioNode";
|
|
7
8
|
/**
|
|
8
9
|
* Options for creating a WebAudioBaseSubGraph.
|
|
9
10
|
*/
|
|
10
|
-
export interface IWebAudioBaseSubGraphOptions extends IVolumeAudioOptions {
|
|
11
|
+
export interface IWebAudioBaseSubGraphOptions extends IAudioAnalyzerOptions, IVolumeAudioOptions {
|
|
11
12
|
}
|
|
12
13
|
/** @internal */
|
|
13
14
|
export declare abstract class _WebAudioBaseSubGraph extends _AbstractAudioSubGraph {
|
|
@@ -22,5 +23,6 @@ export declare abstract class _WebAudioBaseSubGraph extends _AbstractAudioSubGra
|
|
|
22
23
|
get inNode(): Nullable<AudioNode>;
|
|
23
24
|
/** @internal */
|
|
24
25
|
get outNode(): Nullable<AudioNode>;
|
|
25
|
-
protected _createSubNode(name: string):
|
|
26
|
+
protected _createSubNode(name: string): Promise<_AbstractAudioSubNode>;
|
|
27
|
+
protected _onSubNodesChanged(): void;
|
|
26
28
|
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { _AbstractAudioSubGraph } from "../../abstractAudio/subNodes/abstractAudioSubGraph.js";
|
|
2
|
+
import { _GetAudioAnalyzerSubNode } from "../../abstractAudio/subNodes/audioAnalyzerSubNode.js";
|
|
2
3
|
import { _GetVolumeAudioSubNode } from "../../abstractAudio/subNodes/volumeAudioSubNode.js";
|
|
4
|
+
import { _HasAudioAnalyzerOptions } from "../../abstractAudio/subProperties/abstractAudioAnalyzer.js";
|
|
3
5
|
import { _CreateVolumeAudioSubNodeAsync } from "./volumeWebAudioSubNode.js";
|
|
6
|
+
import { _CreateAudioAnalyzerSubNodeAsync } from "./webAudioAnalyzerSubNode.js";
|
|
4
7
|
/** @internal */
|
|
5
8
|
export class _WebAudioBaseSubGraph extends _AbstractAudioSubGraph {
|
|
6
9
|
/** @internal */
|
|
@@ -11,8 +14,19 @@ export class _WebAudioBaseSubGraph extends _AbstractAudioSubGraph {
|
|
|
11
14
|
}
|
|
12
15
|
/** @internal */
|
|
13
16
|
async init(options) {
|
|
14
|
-
|
|
17
|
+
const hasAnalyzerOptions = _HasAudioAnalyzerOptions(options);
|
|
18
|
+
if (hasAnalyzerOptions) {
|
|
19
|
+
this.createAndAddSubNode("Analyzer" /* AudioSubNode.ANALYZER */);
|
|
20
|
+
}
|
|
21
|
+
this.createAndAddSubNode("Volume" /* AudioSubNode.VOLUME */);
|
|
15
22
|
await this._createSubNodePromisesResolved();
|
|
23
|
+
if (hasAnalyzerOptions) {
|
|
24
|
+
const analyzerNode = _GetAudioAnalyzerSubNode(this);
|
|
25
|
+
if (!analyzerNode) {
|
|
26
|
+
throw new Error("No analyzer subnode.");
|
|
27
|
+
}
|
|
28
|
+
analyzerNode.setOptions(options);
|
|
29
|
+
}
|
|
16
30
|
const volumeNode = _GetVolumeAudioSubNode(this);
|
|
17
31
|
if (!volumeNode) {
|
|
18
32
|
throw new Error("No volume subnode.");
|
|
@@ -44,10 +58,19 @@ export class _WebAudioBaseSubGraph extends _AbstractAudioSubGraph {
|
|
|
44
58
|
}
|
|
45
59
|
_createSubNode(name) {
|
|
46
60
|
switch (name) {
|
|
61
|
+
case "Analyzer" /* AudioSubNode.ANALYZER */:
|
|
62
|
+
return _CreateAudioAnalyzerSubNodeAsync(this._owner.engine);
|
|
47
63
|
case "Volume" /* AudioSubNode.VOLUME */:
|
|
48
64
|
return _CreateVolumeAudioSubNodeAsync(this._owner.engine);
|
|
49
65
|
default:
|
|
50
|
-
|
|
66
|
+
throw new Error(`Unknown subnode name: ${name}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
_onSubNodesChanged() {
|
|
70
|
+
const analyzerNode = _GetAudioAnalyzerSubNode(this);
|
|
71
|
+
const volumeNode = _GetVolumeAudioSubNode(this);
|
|
72
|
+
if (analyzerNode && volumeNode) {
|
|
73
|
+
volumeNode.connect(analyzerNode);
|
|
51
74
|
}
|
|
52
75
|
}
|
|
53
76
|
}
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"webAudioBaseSubGraph.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../../types\";\nimport type { AbstractAudioNode } from \"../../abstractAudio/abstractAudioNode\";\nimport { _AbstractAudioSubGraph } from \"../../abstractAudio/subNodes/abstractAudioSubGraph\";\nimport type { _AbstractAudioSubNode } from \"../../abstractAudio/subNodes/abstractAudioSubNode\";\nimport { _GetAudioAnalyzerSubNode } from \"../../abstractAudio/subNodes/audioAnalyzerSubNode\";\nimport { AudioSubNode } from \"../../abstractAudio/subNodes/audioSubNode\";\nimport type { IVolumeAudioOptions } from \"../../abstractAudio/subNodes/volumeAudioSubNode\";\nimport { _GetVolumeAudioSubNode } from \"../../abstractAudio/subNodes/volumeAudioSubNode\";\nimport type { IAudioAnalyzerOptions } from \"../../abstractAudio/subProperties/abstractAudioAnalyzer\";\nimport { _HasAudioAnalyzerOptions } from \"../../abstractAudio/subProperties/abstractAudioAnalyzer\";\nimport type { IWebAudioInNode, IWebAudioSuperNode } from \"../webAudioNode\";\nimport type { _VolumeWebAudioSubNode } from \"./volumeWebAudioSubNode\";\nimport { _CreateVolumeAudioSubNodeAsync } from \"./volumeWebAudioSubNode\";\nimport { _CreateAudioAnalyzerSubNodeAsync } from \"./webAudioAnalyzerSubNode\";\n\n/**\n * Options for creating a WebAudioBaseSubGraph.\n */\nexport interface IWebAudioBaseSubGraphOptions extends IAudioAnalyzerOptions, 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 const hasAnalyzerOptions = _HasAudioAnalyzerOptions(options);\n\n if (hasAnalyzerOptions) {\n this.createAndAddSubNode(AudioSubNode.ANALYZER);\n }\n\n this.createAndAddSubNode(AudioSubNode.VOLUME);\n\n await this._createSubNodePromisesResolved();\n\n if (hasAnalyzerOptions) {\n const analyzerNode = _GetAudioAnalyzerSubNode(this);\n if (!analyzerNode) {\n throw new Error(\"No analyzer subnode.\");\n }\n\n analyzerNode.setOptions(options);\n }\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): Promise<_AbstractAudioSubNode> {\n switch (name) {\n case AudioSubNode.ANALYZER:\n return _CreateAudioAnalyzerSubNodeAsync(this._owner.engine);\n case AudioSubNode.VOLUME:\n return _CreateVolumeAudioSubNodeAsync(this._owner.engine);\n default:\n throw new Error(`Unknown subnode name: ${name}`);\n }\n }\n\n protected _onSubNodesChanged(): void {\n const analyzerNode = _GetAudioAnalyzerSubNode(this);\n const volumeNode = _GetVolumeAudioSubNode(this);\n\n if (analyzerNode && volumeNode) {\n volumeNode.connect(analyzerNode);\n }\n }\n}\n"]}
|
|
@@ -10,12 +10,13 @@ export interface IWebAudioBusAndSoundSubGraphOptions extends ISpatialAudioOption
|
|
|
10
10
|
}
|
|
11
11
|
/** @internal */
|
|
12
12
|
export declare abstract class _WebAudioBusAndSoundSubGraph extends _WebAudioBaseSubGraph {
|
|
13
|
+
private _rootNode;
|
|
13
14
|
protected abstract readonly _upstreamNodes: Nullable<Set<AbstractAudioNode>>;
|
|
14
15
|
protected _inNode: Nullable<AudioNode>;
|
|
15
16
|
/** @internal */
|
|
16
17
|
init(options: Partial<IWebAudioBusAndSoundSubGraphOptions>): Promise<void>;
|
|
17
18
|
/** @internal */
|
|
18
19
|
get inNode(): Nullable<AudioNode>;
|
|
19
|
-
protected _createSubNode(name: string):
|
|
20
|
+
protected _createSubNode(name: string): Promise<_AbstractAudioSubNode>;
|
|
20
21
|
protected _onSubNodesChanged(): void;
|
|
21
22
|
}
|
|
@@ -10,6 +10,7 @@ import { _WebAudioBaseSubGraph } from "./webAudioBaseSubGraph.js";
|
|
|
10
10
|
export class _WebAudioBusAndSoundSubGraph extends _WebAudioBaseSubGraph {
|
|
11
11
|
constructor() {
|
|
12
12
|
super(...arguments);
|
|
13
|
+
this._rootNode = null;
|
|
13
14
|
this._inNode = null;
|
|
14
15
|
}
|
|
15
16
|
/** @internal */
|
|
@@ -18,10 +19,10 @@ export class _WebAudioBusAndSoundSubGraph extends _WebAudioBaseSubGraph {
|
|
|
18
19
|
let hasSpatialOptions = false;
|
|
19
20
|
let hasStereoOptions = false;
|
|
20
21
|
if ((hasSpatialOptions = _HasSpatialAudioOptions(options))) {
|
|
21
|
-
this.
|
|
22
|
+
this.createAndAddSubNode("Spatial" /* AudioSubNode.SPATIAL */);
|
|
22
23
|
}
|
|
23
24
|
if ((hasStereoOptions = _HasStereoAudioOptions(options))) {
|
|
24
|
-
this.
|
|
25
|
+
this.createAndAddSubNode("Stereo" /* AudioSubNode.STEREO */);
|
|
25
26
|
}
|
|
26
27
|
await this._createSubNodePromisesResolved();
|
|
27
28
|
if (hasSpatialOptions) {
|
|
@@ -36,20 +37,22 @@ export class _WebAudioBusAndSoundSubGraph extends _WebAudioBaseSubGraph {
|
|
|
36
37
|
return this._inNode;
|
|
37
38
|
}
|
|
38
39
|
_createSubNode(name) {
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
try {
|
|
41
|
+
const node = super._createSubNode(name);
|
|
41
42
|
return node;
|
|
42
43
|
}
|
|
44
|
+
catch (e) { }
|
|
43
45
|
switch (name) {
|
|
44
46
|
case "Spatial" /* AudioSubNode.SPATIAL */:
|
|
45
47
|
return _CreateSpatialAudioSubNodeAsync(this._owner.engine);
|
|
46
48
|
case "Stereo" /* AudioSubNode.STEREO */:
|
|
47
49
|
return _CreateStereoAudioSubNodeAsync(this._owner.engine);
|
|
48
50
|
default:
|
|
49
|
-
|
|
51
|
+
throw new Error(`Unknown subnode name: ${name}`);
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
54
|
_onSubNodesChanged() {
|
|
55
|
+
super._onSubNodesChanged();
|
|
53
56
|
const spatialNode = _GetSpatialAudioSubNode(this);
|
|
54
57
|
const stereoNode = _GetStereoAudioSubNode(this);
|
|
55
58
|
const volumeNode = _GetVolumeAudioSubNode(this);
|
|
@@ -64,10 +67,7 @@ export class _WebAudioBusAndSoundSubGraph extends _WebAudioBaseSubGraph {
|
|
|
64
67
|
}
|
|
65
68
|
if (spatialNode) {
|
|
66
69
|
spatialNode.disconnectAll();
|
|
67
|
-
if (
|
|
68
|
-
spatialNode.connect(stereoNode);
|
|
69
|
-
}
|
|
70
|
-
else if (volumeNode) {
|
|
70
|
+
if (volumeNode) {
|
|
71
71
|
spatialNode.connect(volumeNode);
|
|
72
72
|
}
|
|
73
73
|
}
|
|
@@ -77,17 +77,32 @@ export class _WebAudioBusAndSoundSubGraph extends _WebAudioBaseSubGraph {
|
|
|
77
77
|
stereoNode.connect(volumeNode);
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
if (spatialNode && stereoNode) {
|
|
81
|
+
this._rootNode = new GainNode(this._owner.engine.audioContext);
|
|
82
|
+
this._rootNode.connect(spatialNode.outNode);
|
|
83
|
+
this._rootNode.connect(stereoNode.outNode);
|
|
83
84
|
}
|
|
84
|
-
else
|
|
85
|
-
|
|
85
|
+
else {
|
|
86
|
+
this._rootNode?.disconnect();
|
|
87
|
+
this._rootNode = null;
|
|
86
88
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
+
let inSubNode = null;
|
|
90
|
+
let inNode = null;
|
|
91
|
+
if (this._rootNode) {
|
|
92
|
+
inNode = this._rootNode;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
if (spatialNode) {
|
|
96
|
+
inSubNode = spatialNode;
|
|
97
|
+
}
|
|
98
|
+
else if (stereoNode) {
|
|
99
|
+
inSubNode = stereoNode;
|
|
100
|
+
}
|
|
101
|
+
else if (volumeNode) {
|
|
102
|
+
inSubNode = volumeNode;
|
|
103
|
+
}
|
|
104
|
+
inNode = inSubNode?.node ?? null;
|
|
89
105
|
}
|
|
90
|
-
const inNode = inSubNode?.node ?? null;
|
|
91
106
|
if (this._inNode !== inNode) {
|
|
92
107
|
// Disconnect the wrapped upstream WebAudio nodes from the old wrapped WebAudio node.
|
|
93
108
|
// The wrapper nodes are unaware of this change.
|
|
@@ -1 +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"]}
|
|
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 private _rootNode: Nullable<GainNode> = null;\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): Promise<_AbstractAudioSubNode> {\n try {\n const node = super._createSubNode(name);\n return node;\n } catch (e) {}\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 throw new Error(`Unknown subnode name: ${name}`);\n }\n }\n\n protected override _onSubNodesChanged(): void {\n super._onSubNodesChanged();\n\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 (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 if (spatialNode && stereoNode) {\n this._rootNode = new GainNode(this._owner.engine.audioContext);\n this._rootNode.connect((spatialNode as _SpatialWebAudioSubNode).outNode);\n this._rootNode.connect((stereoNode as _StereoWebAudioSubNode).outNode);\n } else {\n this._rootNode?.disconnect();\n this._rootNode = null;\n }\n\n let inSubNode: Nullable<IWebAudioSubNode> = null;\n\n let inNode: Nullable<AudioNode> = null;\n\n if (this._rootNode) {\n inNode = this._rootNode;\n } else {\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 inNode = inSubNode?.node ?? null;\n }\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"]}
|
|
@@ -2,9 +2,13 @@ import type { _AbstractAudioSubGraph } from "../../abstractAudio/subNodes/abstra
|
|
|
2
2
|
import { _SpatialAudio } from "../../abstractAudio/subProperties/spatialAudio";
|
|
3
3
|
/** @internal */
|
|
4
4
|
export declare class _SpatialWebAudio extends _SpatialAudio {
|
|
5
|
-
private
|
|
5
|
+
private _updaterComponent;
|
|
6
6
|
/** @internal */
|
|
7
|
-
constructor(subGraph: _AbstractAudioSubGraph, autoUpdate: boolean);
|
|
7
|
+
constructor(subGraph: _AbstractAudioSubGraph, autoUpdate: boolean, minUpdateTime: number);
|
|
8
|
+
/** @internal */
|
|
9
|
+
get minUpdateTime(): number;
|
|
10
|
+
/** @internal */
|
|
11
|
+
set minUpdateTime(value: number);
|
|
8
12
|
/** @internal */
|
|
9
13
|
dispose(): void;
|
|
10
14
|
}
|
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
import { _SpatialAudio } from "../../abstractAudio/subProperties/spatialAudio.js";
|
|
2
|
+
import { _SpatialWebAudioUpdaterComponent } from "../components/spatialWebAudioUpdaterComponent.js";
|
|
2
3
|
/** @internal */
|
|
3
4
|
export class _SpatialWebAudio extends _SpatialAudio {
|
|
4
5
|
/** @internal */
|
|
5
|
-
constructor(subGraph, autoUpdate) {
|
|
6
|
+
constructor(subGraph, autoUpdate, minUpdateTime) {
|
|
6
7
|
super(subGraph);
|
|
7
|
-
this.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this.update();
|
|
17
|
-
requestAnimationFrame(update);
|
|
18
|
-
};
|
|
19
|
-
requestAnimationFrame(update);
|
|
8
|
+
this._updaterComponent = new _SpatialWebAudioUpdaterComponent(this, autoUpdate, minUpdateTime);
|
|
9
|
+
}
|
|
10
|
+
/** @internal */
|
|
11
|
+
get minUpdateTime() {
|
|
12
|
+
return this._updaterComponent.minUpdateTime;
|
|
13
|
+
}
|
|
14
|
+
/** @internal */
|
|
15
|
+
set minUpdateTime(value) {
|
|
16
|
+
this._updaterComponent.minUpdateTime = value;
|
|
20
17
|
}
|
|
21
18
|
/** @internal */
|
|
22
19
|
dispose() {
|
|
23
|
-
this.
|
|
20
|
+
this._updaterComponent.dispose();
|
|
21
|
+
this._updaterComponent = null;
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
24
|
//# sourceMappingURL=spatialWebAudio.js.map
|
|
@@ -1 +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;
|
|
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;AAC/E,OAAO,EAAE,gCAAgC,EAAE,MAAM,+CAA+C,CAAC;AAEjG,gBAAgB;AAChB,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IAG/C,gBAAgB;IAChB,YAAmB,QAAgC,EAAE,UAAmB,EAAE,aAAqB;QAC3F,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEhB,IAAI,CAAC,iBAAiB,GAAG,IAAI,gCAAgC,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IACnG,CAAC;IAED,gBAAgB;IAChB,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;IAChD,CAAC;IAED,gBAAgB;IAChB,IAAW,aAAa,CAAC,KAAa;QAClC,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,KAAK,CAAC;IACjD,CAAC;IAED,gBAAgB;IACT,OAAO;QACV,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,IAAK,CAAC;IACnC,CAAC;CACJ","sourcesContent":["import type { _AbstractAudioSubGraph } from \"../../abstractAudio/subNodes/abstractAudioSubGraph\";\nimport { _SpatialAudio } from \"../../abstractAudio/subProperties/spatialAudio\";\nimport { _SpatialWebAudioUpdaterComponent } from \"../components/spatialWebAudioUpdaterComponent\";\n\n/** @internal */\nexport class _SpatialWebAudio extends _SpatialAudio {\n private _updaterComponent: _SpatialWebAudioUpdaterComponent;\n\n /** @internal */\n public constructor(subGraph: _AbstractAudioSubGraph, autoUpdate: boolean, minUpdateTime: number) {\n super(subGraph);\n\n this._updaterComponent = new _SpatialWebAudioUpdaterComponent(this, autoUpdate, minUpdateTime);\n }\n\n /** @internal */\n public get minUpdateTime(): number {\n return this._updaterComponent.minUpdateTime;\n }\n\n /** @internal */\n public set minUpdateTime(value: number) {\n this._updaterComponent.minUpdateTime = value;\n }\n\n /** @internal */\n public dispose(): void {\n this._updaterComponent.dispose();\n this._updaterComponent = null!;\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { _SpatialAudioListener } from "../../abstractAudio/subProperties/spatialAudioListener";
|
|
2
2
|
import type { _WebAudioEngine } from "../webAudioEngine";
|
|
3
3
|
/** @internal */
|
|
4
|
-
export declare function _CreateSpatialAudioListener(engine: _WebAudioEngine, autoUpdate: boolean): _SpatialAudioListener;
|
|
4
|
+
export declare function _CreateSpatialAudioListener(engine: _WebAudioEngine, autoUpdate: boolean, minUpdateTime: number): _SpatialAudioListener;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Matrix, Quaternion, Vector3 } from "../../../Maths/math.vector.js";
|
|
2
2
|
import { _SpatialAudioListener } from "../../abstractAudio/subProperties/spatialAudioListener.js";
|
|
3
|
+
import { _SpatialWebAudioUpdaterComponent } from "../components/spatialWebAudioUpdaterComponent.js";
|
|
3
4
|
const TmpMatrix = Matrix.Zero();
|
|
4
5
|
const TmpQuaternion = new Quaternion();
|
|
5
6
|
const TmpVector = Vector3.Zero();
|
|
6
7
|
/** @internal */
|
|
7
|
-
export function _CreateSpatialAudioListener(engine, autoUpdate) {
|
|
8
|
-
return new _SpatialWebAudioListener(engine, autoUpdate);
|
|
8
|
+
export function _CreateSpatialAudioListener(engine, autoUpdate, minUpdateTime) {
|
|
9
|
+
return new _SpatialWebAudioListener(engine, autoUpdate, minUpdateTime);
|
|
9
10
|
}
|
|
10
11
|
/**
|
|
11
12
|
* This sub property is not backed by a sub node and all properties are set directly on the audio context listener.
|
|
@@ -14,88 +15,72 @@ export function _CreateSpatialAudioListener(engine, autoUpdate) {
|
|
|
14
15
|
*/
|
|
15
16
|
class _SpatialWebAudioListener extends _SpatialAudioListener {
|
|
16
17
|
/** @internal */
|
|
17
|
-
constructor(engine, autoUpdate) {
|
|
18
|
+
constructor(engine, autoUpdate, minUpdateTime) {
|
|
18
19
|
super();
|
|
19
|
-
this._autoUpdate = false;
|
|
20
20
|
this._lastPosition = Vector3.Zero();
|
|
21
21
|
this._lastRotation = Vector3.Zero();
|
|
22
22
|
this._lastRotationQuaternion = new Quaternion();
|
|
23
|
-
|
|
24
|
-
this.
|
|
25
|
-
|
|
23
|
+
/** @internal */
|
|
24
|
+
this.position = Vector3.Zero();
|
|
25
|
+
/** @internal */
|
|
26
|
+
this.rotation = Vector3.Zero();
|
|
27
|
+
/** @internal */
|
|
28
|
+
this.rotationQuaternion = new Quaternion();
|
|
26
29
|
this._audioContext = engine.audioContext;
|
|
27
|
-
|
|
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();
|
|
30
|
+
this._updaterComponent = new _SpatialWebAudioUpdaterComponent(this, autoUpdate, minUpdateTime);
|
|
47
31
|
}
|
|
48
32
|
/** @internal */
|
|
49
|
-
get
|
|
50
|
-
return this.
|
|
51
|
-
}
|
|
52
|
-
set rotation(value) {
|
|
53
|
-
this._rotation = value;
|
|
54
|
-
this._updateRotation();
|
|
33
|
+
get minUpdateTime() {
|
|
34
|
+
return this._updaterComponent.minUpdateTime;
|
|
55
35
|
}
|
|
56
36
|
/** @internal */
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
set rotationQuaternion(value) {
|
|
61
|
-
this._rotationQuaternion = value;
|
|
62
|
-
this._updateRotation();
|
|
37
|
+
set minUpdateTime(value) {
|
|
38
|
+
this._updaterComponent.minUpdateTime = value;
|
|
63
39
|
}
|
|
64
40
|
/** @internal */
|
|
65
41
|
dispose() {
|
|
66
42
|
super.dispose();
|
|
67
|
-
this.
|
|
43
|
+
this._updaterComponent.dispose();
|
|
44
|
+
this._updaterComponent = null;
|
|
68
45
|
}
|
|
69
46
|
/** @internal */
|
|
70
47
|
update() {
|
|
71
|
-
this.
|
|
72
|
-
|
|
48
|
+
if (this.isAttached) {
|
|
49
|
+
this._attacherComponent?.update();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.updatePosition();
|
|
53
|
+
this.updateRotation();
|
|
54
|
+
}
|
|
73
55
|
}
|
|
74
|
-
|
|
75
|
-
|
|
56
|
+
/** @internal */
|
|
57
|
+
updatePosition() {
|
|
58
|
+
if (this._lastPosition.equalsWithEpsilon(this.position)) {
|
|
76
59
|
return;
|
|
77
60
|
}
|
|
78
61
|
const listener = this._audioContext.listener;
|
|
79
|
-
listener.positionX.value = this.
|
|
80
|
-
listener.positionY.value = this.
|
|
81
|
-
listener.positionZ.value = this.
|
|
82
|
-
this._lastPosition.copyFrom(this.
|
|
62
|
+
listener.positionX.value = this.position.x;
|
|
63
|
+
listener.positionY.value = this.position.y;
|
|
64
|
+
listener.positionZ.value = this.position.z;
|
|
65
|
+
this._lastPosition.copyFrom(this.position);
|
|
83
66
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
67
|
+
/** @internal */
|
|
68
|
+
updateRotation() {
|
|
69
|
+
if (!this._lastRotationQuaternion.equalsWithEpsilon(this.rotationQuaternion)) {
|
|
70
|
+
TmpQuaternion.copyFrom(this.rotationQuaternion);
|
|
71
|
+
this._lastRotationQuaternion.copyFrom(this.rotationQuaternion);
|
|
88
72
|
}
|
|
89
|
-
else if (!this._lastRotation.equalsWithEpsilon(this.
|
|
90
|
-
Quaternion.FromEulerAnglesToRef(this.
|
|
91
|
-
this._lastRotation.copyFrom(this.
|
|
73
|
+
else if (!this._lastRotation.equalsWithEpsilon(this.rotation)) {
|
|
74
|
+
Quaternion.FromEulerAnglesToRef(this.rotation.x, this.rotation.y, this.rotation.z, TmpQuaternion);
|
|
75
|
+
this._lastRotation.copyFrom(this.rotation);
|
|
92
76
|
}
|
|
93
77
|
else {
|
|
94
78
|
return;
|
|
95
79
|
}
|
|
96
80
|
Matrix.FromQuaternionToRef(TmpQuaternion, TmpMatrix);
|
|
97
81
|
const listener = this._audioContext.listener;
|
|
98
|
-
|
|
82
|
+
// NB: The WebAudio API is right-handed.
|
|
83
|
+
Vector3.TransformNormalToRef(Vector3.RightHandedForwardReadOnly, TmpMatrix, TmpVector);
|
|
99
84
|
listener.forwardX.value = TmpVector.x;
|
|
100
85
|
listener.forwardY.value = TmpVector.y;
|
|
101
86
|
listener.forwardZ.value = TmpVector.z;
|