@onerjs/core 8.30.4 → 8.30.5
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/Audio/audioSceneComponent.d.ts +9 -5
- package/Audio/audioSceneComponent.js +1 -0
- package/Audio/audioSceneComponent.js.map +1 -1
- package/AudioV2/abstractAudio/audioEngineV2.d.ts +8 -0
- package/AudioV2/abstractAudio/audioEngineV2.js +19 -0
- package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.d.ts +5 -0
- package/AudioV2/webAudio/webAudioEngine.js +8 -0
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/AudioV2/webAudio/webAudioStaticSound.js +2 -2
- package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js +5 -2
- package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
- package/Cameras/camera.d.ts +4 -0
- package/Cameras/camera.js +18 -9
- package/Cameras/camera.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +8 -0
- package/Engines/WebGPU/webgpuDrawContext.js +8 -0
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/computeShaderBlock.d.ts +42 -0
- package/FrameGraph/Node/Blocks/computeShaderBlock.js +74 -0
- package/FrameGraph/Node/Blocks/computeShaderBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/executeBlock.d.ts +11 -1
- package/FrameGraph/Node/Blocks/executeBlock.js +18 -0
- package/FrameGraph/Node/Blocks/executeBlock.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/Blocks/inputBlock.js +2 -0
- package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/outputBlock.js +1 -0
- package/FrameGraph/Node/Blocks/outputBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +7 -3
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlock.js +7 -0
- package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
- package/FrameGraph/Passes/pass.d.ts +11 -1
- package/FrameGraph/Passes/pass.js +11 -1
- package/FrameGraph/Passes/pass.js.map +1 -1
- package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +115 -0
- package/FrameGraph/Tasks/Misc/computeShaderTask.js +174 -0
- package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -0
- package/FrameGraph/Tasks/Misc/executeTask.d.ts +5 -0
- package/FrameGraph/Tasks/Misc/executeTask.js +3 -0
- package/FrameGraph/Tasks/Misc/executeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssao2Task.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2Task.js +7 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2Task.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +1 -1
- package/FrameGraph/frameGraph.js +3 -6
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphTask.d.ts +3 -2
- package/FrameGraph/frameGraphTask.js +5 -2
- package/FrameGraph/frameGraphTask.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.js +2 -2
- 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/Lights/directionalLight.js +1 -4
- package/Lights/directionalLight.js.map +1 -1
- package/Lights/pointLight.js +2 -5
- package/Lights/pointLight.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +8 -0
- package/Materials/materialHelper.functions.js +31 -0
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/shaderMaterial.js +20 -0
- package/Materials/shaderMaterial.js.map +1 -1
- package/Maths/math.vector.functions.d.ts +26 -13
- package/Maths/math.vector.functions.js +29 -8
- package/Maths/math.vector.functions.js.map +1 -1
- package/Misc/decorators.d.ts +1 -1
- package/Misc/decorators.js.map +1 -1
- package/Misc/dumpTools.d.ts +20 -0
- package/Misc/dumpTools.js +60 -49
- package/Misc/dumpTools.js.map +1 -1
- package/Misc/index.d.ts +1 -2
- package/Misc/index.js +1 -2
- package/Misc/index.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/boxShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/coneShapeBlock.d.ts +57 -0
- package/Particles/Node/Blocks/Emitters/coneShapeBlock.js +163 -0
- package/Particles/Node/Blocks/Emitters/coneShapeBlock.js.map +1 -0
- package/Particles/Node/Blocks/Emitters/index.d.ts +5 -4
- package/Particles/Node/Blocks/Emitters/index.js +5 -4
- package/Particles/Node/Blocks/Emitters/index.js.map +1 -1
- package/Particles/Node/Blocks/particleInputBlock.js +2 -0
- package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
- package/Particles/Node/Blocks/systemBlock.d.ts +4 -0
- package/Particles/Node/Blocks/systemBlock.js +8 -0
- package/Particles/Node/Blocks/systemBlock.js.map +1 -1
- package/Particles/Node/Enums/nodeParticleContextualSources.d.ts +5 -1
- package/Particles/Node/Enums/nodeParticleContextualSources.js +4 -0
- package/Particles/Node/Enums/nodeParticleContextualSources.js.map +1 -1
- package/Particles/Node/nodeParticleBuildState.js +5 -0
- package/Particles/Node/nodeParticleBuildState.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.helper.d.ts +4 -3
- package/Particles/Node/nodeParticleSystemSet.helper.js +182 -115
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Physics/physicsRaycastResult.d.ts +3 -0
- package/Physics/physicsRaycastResult.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +1 -1
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +9 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/thinSSAO2PostProcess.d.ts +1 -0
- package/PostProcesses/thinSSAO2PostProcess.js +18 -6
- package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +1 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDirectLighting.js +5 -2
- package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +1 -1
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/Shaders/particles.vertex.js +1 -1
- package/Shaders/particles.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +2 -2
- package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +5 -2
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +2 -2
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid.vertex.js +77 -3
- package/ShadersWGSL/iblVoxelGrid.vertex.js.map +1 -1
- package/ShadersWGSL/particles.vertex.js +1 -1
- package/ShadersWGSL/particles.vertex.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +2 -0
- package/scene.js +9 -1
- package/scene.js.map +1 -1
|
@@ -16,41 +16,44 @@ declare module "../scene.js" {
|
|
|
16
16
|
/**
|
|
17
17
|
* The main sound track played by the scene.
|
|
18
18
|
* It contains your primary collection of sounds.
|
|
19
|
+
* @deprecated please use AudioEngineV2 instead
|
|
19
20
|
*/
|
|
20
21
|
mainSoundTrack: SoundTrack;
|
|
21
22
|
/**
|
|
22
23
|
* The list of sound tracks added to the scene
|
|
23
|
-
* @
|
|
24
|
+
* @deprecated please use AudioEngineV2 instead
|
|
24
25
|
*/
|
|
25
26
|
soundTracks: Nullable<Array<SoundTrack>>;
|
|
26
27
|
/**
|
|
27
28
|
* Gets a sound using a given name
|
|
28
29
|
* @param name defines the name to search for
|
|
29
30
|
* @returns the found sound or null if not found at all.
|
|
31
|
+
* @deprecated please use AudioEngineV2 instead
|
|
30
32
|
*/
|
|
31
33
|
getSoundByName(name: string): Nullable<Sound>;
|
|
32
34
|
/**
|
|
33
35
|
* Gets or sets if audio support is enabled
|
|
34
|
-
* @
|
|
36
|
+
* @deprecated please use AudioEngineV2 instead
|
|
35
37
|
*/
|
|
36
38
|
audioEnabled: boolean;
|
|
37
39
|
/**
|
|
38
40
|
* Gets or sets if audio will be output to headphones
|
|
39
|
-
* @
|
|
41
|
+
* @deprecated please use AudioEngineV2 instead
|
|
40
42
|
*/
|
|
41
43
|
headphone: boolean;
|
|
42
44
|
/**
|
|
43
45
|
* Gets or sets custom audio listener position provider
|
|
44
|
-
* @
|
|
46
|
+
* @deprecated please use AudioEngineV2 instead
|
|
45
47
|
*/
|
|
46
48
|
audioListenerPositionProvider: Nullable<() => Vector3>;
|
|
47
49
|
/**
|
|
48
50
|
* Gets or sets custom audio listener rotation provider
|
|
49
|
-
* @
|
|
51
|
+
* @deprecated please use AudioEngineV2 instead
|
|
50
52
|
*/
|
|
51
53
|
audioListenerRotationProvider: Nullable<() => Vector3>;
|
|
52
54
|
/**
|
|
53
55
|
* Gets or sets a refresh rate when using 3D audio positioning
|
|
56
|
+
* @deprecated please use AudioEngineV2 instead
|
|
54
57
|
*/
|
|
55
58
|
audioPositioningRefreshRate: number;
|
|
56
59
|
}
|
|
@@ -58,6 +61,7 @@ declare module "../scene.js" {
|
|
|
58
61
|
/**
|
|
59
62
|
* Defines the sound scene component responsible to manage any sounds
|
|
60
63
|
* in a given scene.
|
|
64
|
+
* @deprecated please use AudioEngineV2 instead
|
|
61
65
|
*/
|
|
62
66
|
export declare class AudioSceneComponent implements ISceneSerializableComponent {
|
|
63
67
|
private static _CameraDirection;
|
|
@@ -193,6 +193,7 @@ Object.defineProperty(Scene.prototype, "audioPositioningRefreshRate", {
|
|
|
193
193
|
/**
|
|
194
194
|
* Defines the sound scene component responsible to manage any sounds
|
|
195
195
|
* in a given scene.
|
|
196
|
+
* @deprecated please use AudioEngineV2 instead
|
|
196
197
|
*/
|
|
197
198
|
export class AudioSceneComponent {
|
|
198
199
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audioSceneComponent.js","sourceRoot":"","sources":["../../../../dev/core/src/Audio/audioSceneComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import { Sound } from \"./sound\";\r\nimport { SoundTrack } from \"./soundTrack\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport type { ISceneSerializableComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { Scene } from \"../scene\";\r\nimport type { AssetContainer } from \"../assetContainer\";\r\n\r\nimport \"./audioEngine\";\r\nimport { PrecisionDate } from \"../Misc/precisionDate\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport { AddParser } from \"core/Loading/Plugins/babylonFileParser.function\";\r\nimport type { IAssetContainer } from \"core/IAssetContainer\";\r\n\r\n// Adds the parser to the scene parsers.\r\nAddParser(SceneComponentConstants.NAME_AUDIO, (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => {\r\n // TODO: add sound\r\n let loadedSounds: Sound[] = [];\r\n let loadedSound: Sound;\r\n container.sounds = container.sounds || [];\r\n if (parsedData.sounds !== undefined && parsedData.sounds !== null) {\r\n for (let index = 0, cache = parsedData.sounds.length; index < cache; index++) {\r\n const parsedSound = parsedData.sounds[index];\r\n if (AbstractEngine.audioEngine?.canUseWebAudio) {\r\n if (!parsedSound.url) {\r\n parsedSound.url = parsedSound.name;\r\n }\r\n if (!loadedSounds[parsedSound.url]) {\r\n loadedSound = Sound.Parse(parsedSound, scene, rootUrl);\r\n loadedSounds[parsedSound.url] = loadedSound;\r\n container.sounds.push(loadedSound);\r\n } else {\r\n container.sounds.push(Sound.Parse(parsedSound, scene, rootUrl, loadedSounds[parsedSound.url]));\r\n }\r\n } else {\r\n container.sounds.push(new Sound(parsedSound.name, null, scene));\r\n }\r\n }\r\n }\r\n\r\n loadedSounds = [];\r\n});\r\n\r\ndeclare module \"../scene\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Scene {\r\n /**\r\n * @internal\r\n * Backing field\r\n */\r\n _mainSoundTrack: SoundTrack;\r\n /**\r\n * The main sound track played by the scene.\r\n * It contains your primary collection of sounds.\r\n */\r\n mainSoundTrack: SoundTrack;\r\n /**\r\n * The list of sound tracks added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic\r\n */\r\n soundTracks: Nullable<Array<SoundTrack>>;\r\n\r\n /**\r\n * Gets a sound using a given name\r\n * @param name defines the name to search for\r\n * @returns the found sound or null if not found at all.\r\n */\r\n getSoundByName(name: string): Nullable<Sound>;\r\n\r\n /**\r\n * Gets or sets if audio support is enabled\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic\r\n */\r\n audioEnabled: boolean;\r\n\r\n /**\r\n * Gets or sets if audio will be output to headphones\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic\r\n */\r\n headphone: boolean;\r\n\r\n /**\r\n * Gets or sets custom audio listener position provider\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic\r\n */\r\n audioListenerPositionProvider: Nullable<() => Vector3>;\r\n\r\n /**\r\n * Gets or sets custom audio listener rotation provider\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic\r\n */\r\n audioListenerRotationProvider: Nullable<() => Vector3>;\r\n\r\n /**\r\n * Gets or sets a refresh rate when using 3D audio positioning\r\n */\r\n audioPositioningRefreshRate: number;\r\n }\r\n}\r\n\r\nObject.defineProperty(Scene.prototype, \"mainSoundTrack\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n if (!this._mainSoundTrack) {\r\n this._mainSoundTrack = new SoundTrack(this, { mainTrack: true });\r\n }\r\n\r\n return this._mainSoundTrack;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nScene.prototype.getSoundByName = function (name: string): Nullable<Sound> {\r\n let index: number;\r\n for (index = 0; index < this.mainSoundTrack.soundCollection.length; index++) {\r\n if (this.mainSoundTrack.soundCollection[index].name === name) {\r\n return this.mainSoundTrack.soundCollection[index];\r\n }\r\n }\r\n\r\n if (this.soundTracks) {\r\n for (let sdIndex = 0; sdIndex < this.soundTracks.length; sdIndex++) {\r\n for (index = 0; index < this.soundTracks[sdIndex].soundCollection.length; index++) {\r\n if (this.soundTracks[sdIndex].soundCollection[index].name === name) {\r\n return this.soundTracks[sdIndex].soundCollection[index];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nObject.defineProperty(Scene.prototype, \"audioEnabled\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n return compo.audioEnabled;\r\n },\r\n set: function (this: Scene, value: boolean) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n if (value) {\r\n compo.enableAudio();\r\n } else {\r\n compo.disableAudio();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(Scene.prototype, \"headphone\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n return compo.headphone;\r\n },\r\n set: function (this: Scene, value: boolean) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n if (value) {\r\n compo.switchAudioModeForHeadphones();\r\n } else {\r\n compo.switchAudioModeForNormalSpeakers();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(Scene.prototype, \"audioListenerPositionProvider\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n return compo.audioListenerPositionProvider;\r\n },\r\n set: function (this: Scene, value: () => Vector3) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n if (value && typeof value !== \"function\") {\r\n throw new Error(\"The value passed to [Scene.audioListenerPositionProvider] must be a function that returns a Vector3\");\r\n } else {\r\n compo.audioListenerPositionProvider = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(Scene.prototype, \"audioListenerRotationProvider\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n return compo.audioListenerRotationProvider;\r\n },\r\n set: function (this: Scene, value: () => Vector3) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n if (value && typeof value !== \"function\") {\r\n throw new Error(\"The value passed to [Scene.audioListenerRotationProvider] must be a function that returns a Vector3\");\r\n } else {\r\n compo.audioListenerRotationProvider = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(Scene.prototype, \"audioPositioningRefreshRate\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n return compo.audioPositioningRefreshRate;\r\n },\r\n set: function (this: Scene, value: number) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n compo.audioPositioningRefreshRate = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\n/**\r\n * Defines the sound scene component responsible to manage any sounds\r\n * in a given scene.\r\n */\r\nexport class AudioSceneComponent implements ISceneSerializableComponent {\r\n private static _CameraDirection = new Vector3(0, 0, -1);\r\n\r\n /**\r\n * The component name helpful to identify the component in the list of scene components.\r\n */\r\n public readonly name = SceneComponentConstants.NAME_AUDIO;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n private _audioEnabled = true;\r\n /**\r\n * Gets whether audio is enabled or not.\r\n * Please use related enable/disable method to switch state.\r\n */\r\n public get audioEnabled(): boolean {\r\n return this._audioEnabled;\r\n }\r\n\r\n private _headphone = false;\r\n /**\r\n * Gets whether audio is outputting to headphone or not.\r\n * Please use the according Switch methods to change output.\r\n */\r\n public get headphone(): boolean {\r\n return this._headphone;\r\n }\r\n\r\n /**\r\n * Gets or sets a refresh rate when using 3D audio positioning\r\n */\r\n public audioPositioningRefreshRate = 500;\r\n\r\n /**\r\n * Gets or Sets a custom listener position for all sounds in the scene\r\n * By default, this is the position of the first active camera\r\n */\r\n public audioListenerPositionProvider: Nullable<() => Vector3> = null;\r\n\r\n /**\r\n * Gets or Sets a custom listener rotation for all sounds in the scene\r\n * By default, this is the rotation of the first active camera\r\n */\r\n public audioListenerRotationProvider: Nullable<() => Vector3> = null;\r\n\r\n /**\r\n * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene?: Nullable<Scene>) {\r\n scene = scene || EngineStore.LastCreatedScene;\r\n if (!scene) {\r\n return;\r\n }\r\n this.scene = scene;\r\n\r\n scene.soundTracks = [] as SoundTrack[];\r\n scene.sounds = [] as Sound[];\r\n }\r\n\r\n /**\r\n * Registers the component in a given scene\r\n */\r\n public register(): void {\r\n this.scene._afterRenderStage.registerStep(SceneComponentConstants.STEP_AFTERRENDER_AUDIO, this, this._afterRender);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n // Nothing to do here. (Not rendering related)\r\n }\r\n\r\n /**\r\n * Serializes the component data to the specified json object\r\n * @param serializationObject The object to serialize to\r\n */\r\n public serialize(serializationObject: any): void {\r\n serializationObject.sounds = [];\r\n\r\n if (this.scene.soundTracks) {\r\n for (let index = 0; index < this.scene.soundTracks.length; index++) {\r\n const soundtrack = this.scene.soundTracks[index];\r\n\r\n for (let soundId = 0; soundId < soundtrack.soundCollection.length; soundId++) {\r\n serializationObject.sounds.push(soundtrack.soundCollection[soundId].serialize());\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n public addFromContainer(container: IAssetContainer): void {\r\n if (!container.sounds) {\r\n return;\r\n }\r\n for (const sound of container.sounds) {\r\n sound.play();\r\n sound.autoplay = true;\r\n this.scene.mainSoundTrack.addSound(sound);\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n public removeFromContainer(container: IAssetContainer, dispose = false): void {\r\n if (!container.sounds) {\r\n return;\r\n }\r\n for (const sound of container.sounds) {\r\n sound.stop();\r\n sound.autoplay = false;\r\n this.scene.mainSoundTrack.removeSound(sound);\r\n if (dispose) {\r\n sound.dispose();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n const scene = this.scene;\r\n if (scene._mainSoundTrack) {\r\n scene.mainSoundTrack.dispose();\r\n }\r\n\r\n if (scene.soundTracks) {\r\n for (let scIndex = 0; scIndex < scene.soundTracks.length; scIndex++) {\r\n scene.soundTracks[scIndex].dispose();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Disables audio in the associated scene.\r\n */\r\n public disableAudio() {\r\n const scene = this.scene;\r\n this._audioEnabled = false;\r\n\r\n if (AbstractEngine.audioEngine && AbstractEngine.audioEngine.audioContext) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n AbstractEngine.audioEngine.audioContext.suspend();\r\n }\r\n\r\n let i: number;\r\n for (i = 0; i < scene.mainSoundTrack.soundCollection.length; i++) {\r\n scene.mainSoundTrack.soundCollection[i].pause();\r\n }\r\n if (scene.soundTracks) {\r\n for (i = 0; i < scene.soundTracks.length; i++) {\r\n for (let j = 0; j < scene.soundTracks[i].soundCollection.length; j++) {\r\n scene.soundTracks[i].soundCollection[j].pause();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Enables audio in the associated scene.\r\n */\r\n public enableAudio() {\r\n const scene = this.scene;\r\n this._audioEnabled = true;\r\n\r\n if (AbstractEngine.audioEngine && AbstractEngine.audioEngine.audioContext) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n AbstractEngine.audioEngine.audioContext.resume();\r\n }\r\n\r\n let i: number;\r\n for (i = 0; i < scene.mainSoundTrack.soundCollection.length; i++) {\r\n if (scene.mainSoundTrack.soundCollection[i].isPaused) {\r\n scene.mainSoundTrack.soundCollection[i].play();\r\n }\r\n }\r\n if (scene.soundTracks) {\r\n for (i = 0; i < scene.soundTracks.length; i++) {\r\n for (let j = 0; j < scene.soundTracks[i].soundCollection.length; j++) {\r\n if (scene.soundTracks[i].soundCollection[j].isPaused) {\r\n scene.soundTracks[i].soundCollection[j].play();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Switch audio to headphone output.\r\n */\r\n public switchAudioModeForHeadphones() {\r\n const scene = this.scene;\r\n this._headphone = true;\r\n\r\n scene.mainSoundTrack.switchPanningModelToHRTF();\r\n if (scene.soundTracks) {\r\n for (let i = 0; i < scene.soundTracks.length; i++) {\r\n scene.soundTracks[i].switchPanningModelToHRTF();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Switch audio to normal speakers.\r\n */\r\n public switchAudioModeForNormalSpeakers() {\r\n const scene = this.scene;\r\n this._headphone = false;\r\n\r\n scene.mainSoundTrack.switchPanningModelToEqualPower();\r\n\r\n if (scene.soundTracks) {\r\n for (let i = 0; i < scene.soundTracks.length; i++) {\r\n scene.soundTracks[i].switchPanningModelToEqualPower();\r\n }\r\n }\r\n }\r\n\r\n private _cachedCameraDirection = new Vector3();\r\n private _cachedCameraPosition = new Vector3();\r\n private _lastCheck = 0;\r\n private _invertMatrixTemp = new Matrix();\r\n private _cameraDirectionTemp = new Vector3();\r\n\r\n private _afterRender() {\r\n const now = PrecisionDate.Now;\r\n if (this._lastCheck && now - this._lastCheck < this.audioPositioningRefreshRate) {\r\n return;\r\n }\r\n\r\n this._lastCheck = now;\r\n\r\n const scene = this.scene;\r\n if (!this._audioEnabled || !scene._mainSoundTrack || !scene.soundTracks || (scene._mainSoundTrack.soundCollection.length === 0 && scene.soundTracks.length === 1)) {\r\n return;\r\n }\r\n\r\n const audioEngine = AbstractEngine.audioEngine;\r\n\r\n if (!audioEngine) {\r\n return;\r\n }\r\n\r\n if (audioEngine.audioContext) {\r\n let listeningCamera = scene.activeCamera;\r\n if (scene.activeCameras && scene.activeCameras.length > 0) {\r\n listeningCamera = scene.activeCameras[0];\r\n }\r\n\r\n // A custom listener position provider was set\r\n // Use the users provided position instead of camera's\r\n if (this.audioListenerPositionProvider) {\r\n const position: Vector3 = this.audioListenerPositionProvider();\r\n // Set the listener position\r\n audioEngine.audioContext.listener.setPosition(position.x || 0, position.y || 0, position.z || 0);\r\n // Check if there is a listening camera\r\n } else if (listeningCamera) {\r\n // Set the listener position to the listening camera global position\r\n if (!this._cachedCameraPosition.equals(listeningCamera.globalPosition)) {\r\n this._cachedCameraPosition.copyFrom(listeningCamera.globalPosition);\r\n audioEngine.audioContext.listener.setPosition(listeningCamera.globalPosition.x, listeningCamera.globalPosition.y, listeningCamera.globalPosition.z);\r\n }\r\n }\r\n // Otherwise set the listener position to 0, 0 ,0\r\n else {\r\n // Set the listener position\r\n audioEngine.audioContext.listener.setPosition(0, 0, 0);\r\n }\r\n\r\n // A custom listener rotation provider was set\r\n // Use the users provided rotation instead of camera's\r\n if (this.audioListenerRotationProvider) {\r\n const rotation: Vector3 = this.audioListenerRotationProvider();\r\n audioEngine.audioContext.listener.setOrientation(rotation.x || 0, rotation.y || 0, rotation.z || 0, 0, 1, 0);\r\n // Check if there is a listening camera\r\n } else if (listeningCamera) {\r\n // for VR cameras\r\n if (listeningCamera.rigCameras && listeningCamera.rigCameras.length > 0) {\r\n listeningCamera = listeningCamera.rigCameras[0];\r\n }\r\n\r\n listeningCamera.getViewMatrix().invertToRef(this._invertMatrixTemp);\r\n Vector3.TransformNormalToRef(AudioSceneComponent._CameraDirection, this._invertMatrixTemp, this._cameraDirectionTemp);\r\n this._cameraDirectionTemp.normalize();\r\n // To avoid some errors on GearVR\r\n if (!isNaN(this._cameraDirectionTemp.x) && !isNaN(this._cameraDirectionTemp.y) && !isNaN(this._cameraDirectionTemp.z)) {\r\n if (!this._cachedCameraDirection.equals(this._cameraDirectionTemp)) {\r\n this._cachedCameraDirection.copyFrom(this._cameraDirectionTemp);\r\n audioEngine.audioContext.listener.setOrientation(this._cameraDirectionTemp.x, this._cameraDirectionTemp.y, this._cameraDirectionTemp.z, 0, 1, 0);\r\n }\r\n }\r\n }\r\n // Otherwise set the listener rotation to 0, 0 ,0\r\n else {\r\n // Set the listener position\r\n audioEngine.audioContext.listener.setOrientation(0, 0, 0, 0, 1, 0);\r\n }\r\n\r\n let i: number;\r\n for (i = 0; i < scene.mainSoundTrack.soundCollection.length; i++) {\r\n const sound = scene.mainSoundTrack.soundCollection[i];\r\n if (sound.useCustomAttenuation) {\r\n sound.updateDistanceFromListener();\r\n }\r\n }\r\n if (scene.soundTracks) {\r\n for (i = 0; i < scene.soundTracks.length; i++) {\r\n for (let j = 0; j < scene.soundTracks[i].soundCollection.length; j++) {\r\n const sound = scene.soundTracks[i].soundCollection[j];\r\n if (sound.useCustomAttenuation) {\r\n sound.updateDistanceFromListener();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nSound._SceneComponentInitialization = (scene: Scene) => {\r\n let compo = scene._getComponent(SceneComponentConstants.NAME_AUDIO);\r\n if (!compo) {\r\n compo = new AudioSceneComponent(scene);\r\n scene._addComponent(compo);\r\n }\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"audioSceneComponent.js","sourceRoot":"","sources":["../../../../dev/core/src/Audio/audioSceneComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import { Sound } from \"./sound\";\r\nimport { SoundTrack } from \"./soundTrack\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport type { ISceneSerializableComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { Scene } from \"../scene\";\r\nimport type { AssetContainer } from \"../assetContainer\";\r\n\r\nimport \"./audioEngine\";\r\nimport { PrecisionDate } from \"../Misc/precisionDate\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport { AddParser } from \"core/Loading/Plugins/babylonFileParser.function\";\r\nimport type { IAssetContainer } from \"core/IAssetContainer\";\r\n\r\n// Adds the parser to the scene parsers.\r\nAddParser(SceneComponentConstants.NAME_AUDIO, (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => {\r\n // TODO: add sound\r\n let loadedSounds: Sound[] = [];\r\n let loadedSound: Sound;\r\n container.sounds = container.sounds || [];\r\n if (parsedData.sounds !== undefined && parsedData.sounds !== null) {\r\n for (let index = 0, cache = parsedData.sounds.length; index < cache; index++) {\r\n const parsedSound = parsedData.sounds[index];\r\n if (AbstractEngine.audioEngine?.canUseWebAudio) {\r\n if (!parsedSound.url) {\r\n parsedSound.url = parsedSound.name;\r\n }\r\n if (!loadedSounds[parsedSound.url]) {\r\n loadedSound = Sound.Parse(parsedSound, scene, rootUrl);\r\n loadedSounds[parsedSound.url] = loadedSound;\r\n container.sounds.push(loadedSound);\r\n } else {\r\n container.sounds.push(Sound.Parse(parsedSound, scene, rootUrl, loadedSounds[parsedSound.url]));\r\n }\r\n } else {\r\n container.sounds.push(new Sound(parsedSound.name, null, scene));\r\n }\r\n }\r\n }\r\n\r\n loadedSounds = [];\r\n});\r\n\r\ndeclare module \"../scene\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Scene {\r\n /**\r\n * @internal\r\n * Backing field\r\n */\r\n _mainSoundTrack: SoundTrack;\r\n /**\r\n * The main sound track played by the scene.\r\n * It contains your primary collection of sounds.\r\n * @deprecated please use AudioEngineV2 instead\r\n */\r\n mainSoundTrack: SoundTrack;\r\n /**\r\n * The list of sound tracks added to the scene\r\n * @deprecated please use AudioEngineV2 instead\r\n */\r\n soundTracks: Nullable<Array<SoundTrack>>;\r\n\r\n /**\r\n * Gets a sound using a given name\r\n * @param name defines the name to search for\r\n * @returns the found sound or null if not found at all.\r\n * @deprecated please use AudioEngineV2 instead\r\n */\r\n getSoundByName(name: string): Nullable<Sound>;\r\n\r\n /**\r\n * Gets or sets if audio support is enabled\r\n * @deprecated please use AudioEngineV2 instead\r\n */\r\n audioEnabled: boolean;\r\n\r\n /**\r\n * Gets or sets if audio will be output to headphones\r\n * @deprecated please use AudioEngineV2 instead\r\n */\r\n headphone: boolean;\r\n\r\n /**\r\n * Gets or sets custom audio listener position provider\r\n * @deprecated please use AudioEngineV2 instead\r\n */\r\n audioListenerPositionProvider: Nullable<() => Vector3>;\r\n\r\n /**\r\n * Gets or sets custom audio listener rotation provider\r\n * @deprecated please use AudioEngineV2 instead\r\n */\r\n audioListenerRotationProvider: Nullable<() => Vector3>;\r\n\r\n /**\r\n * Gets or sets a refresh rate when using 3D audio positioning\r\n * @deprecated please use AudioEngineV2 instead\r\n */\r\n audioPositioningRefreshRate: number;\r\n }\r\n}\r\n\r\nObject.defineProperty(Scene.prototype, \"mainSoundTrack\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n if (!this._mainSoundTrack) {\r\n this._mainSoundTrack = new SoundTrack(this, { mainTrack: true });\r\n }\r\n\r\n return this._mainSoundTrack;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nScene.prototype.getSoundByName = function (name: string): Nullable<Sound> {\r\n let index: number;\r\n for (index = 0; index < this.mainSoundTrack.soundCollection.length; index++) {\r\n if (this.mainSoundTrack.soundCollection[index].name === name) {\r\n return this.mainSoundTrack.soundCollection[index];\r\n }\r\n }\r\n\r\n if (this.soundTracks) {\r\n for (let sdIndex = 0; sdIndex < this.soundTracks.length; sdIndex++) {\r\n for (index = 0; index < this.soundTracks[sdIndex].soundCollection.length; index++) {\r\n if (this.soundTracks[sdIndex].soundCollection[index].name === name) {\r\n return this.soundTracks[sdIndex].soundCollection[index];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nObject.defineProperty(Scene.prototype, \"audioEnabled\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n return compo.audioEnabled;\r\n },\r\n set: function (this: Scene, value: boolean) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n if (value) {\r\n compo.enableAudio();\r\n } else {\r\n compo.disableAudio();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(Scene.prototype, \"headphone\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n return compo.headphone;\r\n },\r\n set: function (this: Scene, value: boolean) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n if (value) {\r\n compo.switchAudioModeForHeadphones();\r\n } else {\r\n compo.switchAudioModeForNormalSpeakers();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(Scene.prototype, \"audioListenerPositionProvider\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n return compo.audioListenerPositionProvider;\r\n },\r\n set: function (this: Scene, value: () => Vector3) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n if (value && typeof value !== \"function\") {\r\n throw new Error(\"The value passed to [Scene.audioListenerPositionProvider] must be a function that returns a Vector3\");\r\n } else {\r\n compo.audioListenerPositionProvider = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(Scene.prototype, \"audioListenerRotationProvider\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n return compo.audioListenerRotationProvider;\r\n },\r\n set: function (this: Scene, value: () => Vector3) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n if (value && typeof value !== \"function\") {\r\n throw new Error(\"The value passed to [Scene.audioListenerRotationProvider] must be a function that returns a Vector3\");\r\n } else {\r\n compo.audioListenerRotationProvider = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(Scene.prototype, \"audioPositioningRefreshRate\", {\r\n get: function (this: Scene) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n return compo.audioPositioningRefreshRate;\r\n },\r\n set: function (this: Scene, value: number) {\r\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO) as AudioSceneComponent;\r\n if (!compo) {\r\n compo = new AudioSceneComponent(this);\r\n this._addComponent(compo);\r\n }\r\n\r\n compo.audioPositioningRefreshRate = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\n/**\r\n * Defines the sound scene component responsible to manage any sounds\r\n * in a given scene.\r\n * @deprecated please use AudioEngineV2 instead\r\n */\r\nexport class AudioSceneComponent implements ISceneSerializableComponent {\r\n private static _CameraDirection = new Vector3(0, 0, -1);\r\n\r\n /**\r\n * The component name helpful to identify the component in the list of scene components.\r\n */\r\n public readonly name = SceneComponentConstants.NAME_AUDIO;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n private _audioEnabled = true;\r\n /**\r\n * Gets whether audio is enabled or not.\r\n * Please use related enable/disable method to switch state.\r\n */\r\n public get audioEnabled(): boolean {\r\n return this._audioEnabled;\r\n }\r\n\r\n private _headphone = false;\r\n /**\r\n * Gets whether audio is outputting to headphone or not.\r\n * Please use the according Switch methods to change output.\r\n */\r\n public get headphone(): boolean {\r\n return this._headphone;\r\n }\r\n\r\n /**\r\n * Gets or sets a refresh rate when using 3D audio positioning\r\n */\r\n public audioPositioningRefreshRate = 500;\r\n\r\n /**\r\n * Gets or Sets a custom listener position for all sounds in the scene\r\n * By default, this is the position of the first active camera\r\n */\r\n public audioListenerPositionProvider: Nullable<() => Vector3> = null;\r\n\r\n /**\r\n * Gets or Sets a custom listener rotation for all sounds in the scene\r\n * By default, this is the rotation of the first active camera\r\n */\r\n public audioListenerRotationProvider: Nullable<() => Vector3> = null;\r\n\r\n /**\r\n * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene?: Nullable<Scene>) {\r\n scene = scene || EngineStore.LastCreatedScene;\r\n if (!scene) {\r\n return;\r\n }\r\n this.scene = scene;\r\n\r\n scene.soundTracks = [] as SoundTrack[];\r\n scene.sounds = [] as Sound[];\r\n }\r\n\r\n /**\r\n * Registers the component in a given scene\r\n */\r\n public register(): void {\r\n this.scene._afterRenderStage.registerStep(SceneComponentConstants.STEP_AFTERRENDER_AUDIO, this, this._afterRender);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n // Nothing to do here. (Not rendering related)\r\n }\r\n\r\n /**\r\n * Serializes the component data to the specified json object\r\n * @param serializationObject The object to serialize to\r\n */\r\n public serialize(serializationObject: any): void {\r\n serializationObject.sounds = [];\r\n\r\n if (this.scene.soundTracks) {\r\n for (let index = 0; index < this.scene.soundTracks.length; index++) {\r\n const soundtrack = this.scene.soundTracks[index];\r\n\r\n for (let soundId = 0; soundId < soundtrack.soundCollection.length; soundId++) {\r\n serializationObject.sounds.push(soundtrack.soundCollection[soundId].serialize());\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n public addFromContainer(container: IAssetContainer): void {\r\n if (!container.sounds) {\r\n return;\r\n }\r\n for (const sound of container.sounds) {\r\n sound.play();\r\n sound.autoplay = true;\r\n this.scene.mainSoundTrack.addSound(sound);\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n public removeFromContainer(container: IAssetContainer, dispose = false): void {\r\n if (!container.sounds) {\r\n return;\r\n }\r\n for (const sound of container.sounds) {\r\n sound.stop();\r\n sound.autoplay = false;\r\n this.scene.mainSoundTrack.removeSound(sound);\r\n if (dispose) {\r\n sound.dispose();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n const scene = this.scene;\r\n if (scene._mainSoundTrack) {\r\n scene.mainSoundTrack.dispose();\r\n }\r\n\r\n if (scene.soundTracks) {\r\n for (let scIndex = 0; scIndex < scene.soundTracks.length; scIndex++) {\r\n scene.soundTracks[scIndex].dispose();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Disables audio in the associated scene.\r\n */\r\n public disableAudio() {\r\n const scene = this.scene;\r\n this._audioEnabled = false;\r\n\r\n if (AbstractEngine.audioEngine && AbstractEngine.audioEngine.audioContext) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n AbstractEngine.audioEngine.audioContext.suspend();\r\n }\r\n\r\n let i: number;\r\n for (i = 0; i < scene.mainSoundTrack.soundCollection.length; i++) {\r\n scene.mainSoundTrack.soundCollection[i].pause();\r\n }\r\n if (scene.soundTracks) {\r\n for (i = 0; i < scene.soundTracks.length; i++) {\r\n for (let j = 0; j < scene.soundTracks[i].soundCollection.length; j++) {\r\n scene.soundTracks[i].soundCollection[j].pause();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Enables audio in the associated scene.\r\n */\r\n public enableAudio() {\r\n const scene = this.scene;\r\n this._audioEnabled = true;\r\n\r\n if (AbstractEngine.audioEngine && AbstractEngine.audioEngine.audioContext) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n AbstractEngine.audioEngine.audioContext.resume();\r\n }\r\n\r\n let i: number;\r\n for (i = 0; i < scene.mainSoundTrack.soundCollection.length; i++) {\r\n if (scene.mainSoundTrack.soundCollection[i].isPaused) {\r\n scene.mainSoundTrack.soundCollection[i].play();\r\n }\r\n }\r\n if (scene.soundTracks) {\r\n for (i = 0; i < scene.soundTracks.length; i++) {\r\n for (let j = 0; j < scene.soundTracks[i].soundCollection.length; j++) {\r\n if (scene.soundTracks[i].soundCollection[j].isPaused) {\r\n scene.soundTracks[i].soundCollection[j].play();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Switch audio to headphone output.\r\n */\r\n public switchAudioModeForHeadphones() {\r\n const scene = this.scene;\r\n this._headphone = true;\r\n\r\n scene.mainSoundTrack.switchPanningModelToHRTF();\r\n if (scene.soundTracks) {\r\n for (let i = 0; i < scene.soundTracks.length; i++) {\r\n scene.soundTracks[i].switchPanningModelToHRTF();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Switch audio to normal speakers.\r\n */\r\n public switchAudioModeForNormalSpeakers() {\r\n const scene = this.scene;\r\n this._headphone = false;\r\n\r\n scene.mainSoundTrack.switchPanningModelToEqualPower();\r\n\r\n if (scene.soundTracks) {\r\n for (let i = 0; i < scene.soundTracks.length; i++) {\r\n scene.soundTracks[i].switchPanningModelToEqualPower();\r\n }\r\n }\r\n }\r\n\r\n private _cachedCameraDirection = new Vector3();\r\n private _cachedCameraPosition = new Vector3();\r\n private _lastCheck = 0;\r\n private _invertMatrixTemp = new Matrix();\r\n private _cameraDirectionTemp = new Vector3();\r\n\r\n private _afterRender() {\r\n const now = PrecisionDate.Now;\r\n if (this._lastCheck && now - this._lastCheck < this.audioPositioningRefreshRate) {\r\n return;\r\n }\r\n\r\n this._lastCheck = now;\r\n\r\n const scene = this.scene;\r\n if (!this._audioEnabled || !scene._mainSoundTrack || !scene.soundTracks || (scene._mainSoundTrack.soundCollection.length === 0 && scene.soundTracks.length === 1)) {\r\n return;\r\n }\r\n\r\n const audioEngine = AbstractEngine.audioEngine;\r\n\r\n if (!audioEngine) {\r\n return;\r\n }\r\n\r\n if (audioEngine.audioContext) {\r\n let listeningCamera = scene.activeCamera;\r\n if (scene.activeCameras && scene.activeCameras.length > 0) {\r\n listeningCamera = scene.activeCameras[0];\r\n }\r\n\r\n // A custom listener position provider was set\r\n // Use the users provided position instead of camera's\r\n if (this.audioListenerPositionProvider) {\r\n const position: Vector3 = this.audioListenerPositionProvider();\r\n // Set the listener position\r\n audioEngine.audioContext.listener.setPosition(position.x || 0, position.y || 0, position.z || 0);\r\n // Check if there is a listening camera\r\n } else if (listeningCamera) {\r\n // Set the listener position to the listening camera global position\r\n if (!this._cachedCameraPosition.equals(listeningCamera.globalPosition)) {\r\n this._cachedCameraPosition.copyFrom(listeningCamera.globalPosition);\r\n audioEngine.audioContext.listener.setPosition(listeningCamera.globalPosition.x, listeningCamera.globalPosition.y, listeningCamera.globalPosition.z);\r\n }\r\n }\r\n // Otherwise set the listener position to 0, 0 ,0\r\n else {\r\n // Set the listener position\r\n audioEngine.audioContext.listener.setPosition(0, 0, 0);\r\n }\r\n\r\n // A custom listener rotation provider was set\r\n // Use the users provided rotation instead of camera's\r\n if (this.audioListenerRotationProvider) {\r\n const rotation: Vector3 = this.audioListenerRotationProvider();\r\n audioEngine.audioContext.listener.setOrientation(rotation.x || 0, rotation.y || 0, rotation.z || 0, 0, 1, 0);\r\n // Check if there is a listening camera\r\n } else if (listeningCamera) {\r\n // for VR cameras\r\n if (listeningCamera.rigCameras && listeningCamera.rigCameras.length > 0) {\r\n listeningCamera = listeningCamera.rigCameras[0];\r\n }\r\n\r\n listeningCamera.getViewMatrix().invertToRef(this._invertMatrixTemp);\r\n Vector3.TransformNormalToRef(AudioSceneComponent._CameraDirection, this._invertMatrixTemp, this._cameraDirectionTemp);\r\n this._cameraDirectionTemp.normalize();\r\n // To avoid some errors on GearVR\r\n if (!isNaN(this._cameraDirectionTemp.x) && !isNaN(this._cameraDirectionTemp.y) && !isNaN(this._cameraDirectionTemp.z)) {\r\n if (!this._cachedCameraDirection.equals(this._cameraDirectionTemp)) {\r\n this._cachedCameraDirection.copyFrom(this._cameraDirectionTemp);\r\n audioEngine.audioContext.listener.setOrientation(this._cameraDirectionTemp.x, this._cameraDirectionTemp.y, this._cameraDirectionTemp.z, 0, 1, 0);\r\n }\r\n }\r\n }\r\n // Otherwise set the listener rotation to 0, 0 ,0\r\n else {\r\n // Set the listener position\r\n audioEngine.audioContext.listener.setOrientation(0, 0, 0, 0, 1, 0);\r\n }\r\n\r\n let i: number;\r\n for (i = 0; i < scene.mainSoundTrack.soundCollection.length; i++) {\r\n const sound = scene.mainSoundTrack.soundCollection[i];\r\n if (sound.useCustomAttenuation) {\r\n sound.updateDistanceFromListener();\r\n }\r\n }\r\n if (scene.soundTracks) {\r\n for (i = 0; i < scene.soundTracks.length; i++) {\r\n for (let j = 0; j < scene.soundTracks[i].soundCollection.length; j++) {\r\n const sound = scene.soundTracks[i].soundCollection[j];\r\n if (sound.useCustomAttenuation) {\r\n sound.updateDistanceFromListener();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nSound._SceneComponentInitialization = (scene: Scene) => {\r\n let compo = scene._getComponent(SceneComponentConstants.NAME_AUDIO);\r\n if (!compo) {\r\n compo = new AudioSceneComponent(scene);\r\n scene._addComponent(compo);\r\n }\r\n};\r\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Nullable } from "../../types.js";
|
|
2
2
|
import type { IAudioParameterRampOptions } from "../audioParameter.js";
|
|
3
3
|
import type { AbstractAudioNode, AbstractNamedAudioNode } from "./abstractAudioNode.js";
|
|
4
|
+
import type { AbstractSound } from "./abstractSound.js";
|
|
4
5
|
import type { AbstractSoundSource, ISoundSourceOptions } from "./abstractSoundSource.js";
|
|
5
6
|
import type { AudioBus, IAudioBusOptions } from "./audioBus.js";
|
|
6
7
|
import type { IMainAudioBusOptions, MainAudioBus } from "./mainAudioBus.js";
|
|
@@ -39,6 +40,7 @@ export type AudioEngineV2State = "closed" | "interrupted" | "running" | "suspend
|
|
|
39
40
|
export declare abstract class AudioEngineV2 {
|
|
40
41
|
/** Not owned, but all items should be in `_nodes` container, too, which is owned. */
|
|
41
42
|
private readonly _mainBuses;
|
|
43
|
+
private readonly _sounds;
|
|
42
44
|
/** Owned top-level sound and bus nodes. */
|
|
43
45
|
private readonly _nodes;
|
|
44
46
|
private _defaultMainBus;
|
|
@@ -87,6 +89,10 @@ export declare abstract class AudioEngineV2 {
|
|
|
87
89
|
*/
|
|
88
90
|
get parameterRampDuration(): number;
|
|
89
91
|
set parameterRampDuration(value: number);
|
|
92
|
+
/**
|
|
93
|
+
* The list of static and streaming sounds created by the audio engine.
|
|
94
|
+
*/
|
|
95
|
+
get sounds(): ReadonlyArray<AbstractSound>;
|
|
90
96
|
/**
|
|
91
97
|
* Creates a new audio bus.
|
|
92
98
|
* @param name - The name of the audio bus.
|
|
@@ -177,6 +183,8 @@ export declare abstract class AudioEngineV2 {
|
|
|
177
183
|
protected _removeMainBus(mainBus: MainAudioBus): void;
|
|
178
184
|
protected _addNode(node: AbstractNamedAudioNode): void;
|
|
179
185
|
protected _removeNode(node: AbstractNamedAudioNode): void;
|
|
186
|
+
protected _addSound(sound: AbstractSound): void;
|
|
187
|
+
protected _removeSound(sound: AbstractSound): void;
|
|
180
188
|
}
|
|
181
189
|
/**
|
|
182
190
|
* @internal
|
|
@@ -18,6 +18,7 @@ export class AudioEngineV2 {
|
|
|
18
18
|
constructor(options) {
|
|
19
19
|
/** Not owned, but all items should be in `_nodes` container, too, which is owned. */
|
|
20
20
|
this._mainBuses = new Set();
|
|
21
|
+
this._sounds = new Array();
|
|
21
22
|
/** Owned top-level sound and bus nodes. */
|
|
22
23
|
this._nodes = new Set();
|
|
23
24
|
this._defaultMainBus = null;
|
|
@@ -54,6 +55,12 @@ export class AudioEngineV2 {
|
|
|
54
55
|
set parameterRampDuration(value) {
|
|
55
56
|
this._parameterRampDuration = Math.max(0, value);
|
|
56
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* The list of static and streaming sounds created by the audio engine.
|
|
60
|
+
*/
|
|
61
|
+
get sounds() {
|
|
62
|
+
return this._sounds;
|
|
63
|
+
}
|
|
57
64
|
/**
|
|
58
65
|
* Releases associated resources.
|
|
59
66
|
*/
|
|
@@ -67,6 +74,7 @@ export class AudioEngineV2 {
|
|
|
67
74
|
}
|
|
68
75
|
this._mainBuses.clear();
|
|
69
76
|
this._nodes.clear();
|
|
77
|
+
this._sounds.length = 0;
|
|
70
78
|
this._defaultMainBus = null;
|
|
71
79
|
}
|
|
72
80
|
/**
|
|
@@ -93,6 +101,17 @@ export class AudioEngineV2 {
|
|
|
93
101
|
_removeNode(node) {
|
|
94
102
|
this._nodes.delete(node);
|
|
95
103
|
}
|
|
104
|
+
_addSound(sound) {
|
|
105
|
+
this._sounds.push(sound);
|
|
106
|
+
this._addNode(sound);
|
|
107
|
+
}
|
|
108
|
+
_removeSound(sound) {
|
|
109
|
+
const index = this._sounds.indexOf(sound);
|
|
110
|
+
if (index !== -1) {
|
|
111
|
+
this._sounds.splice(index, 1);
|
|
112
|
+
}
|
|
113
|
+
this._removeNode(sound);
|
|
114
|
+
}
|
|
96
115
|
}
|
|
97
116
|
/**
|
|
98
117
|
* @internal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audioEngineV2.js","sourceRoot":"","sources":["../../../../../dev/core/src/AudioV2/abstractAudio/audioEngineV2.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\nimport type { IAudioParameterRampOptions } from \"../audioParameter\";\nimport type { AbstractAudioNode, AbstractNamedAudioNode } from \"./abstractAudioNode\";\nimport type { AbstractSoundSource, ISoundSourceOptions } from \"./abstractSoundSource\";\nimport type { AudioBus, IAudioBusOptions } from \"./audioBus\";\nimport type { IMainAudioBusOptions, MainAudioBus } from \"./mainAudioBus\";\nimport type { IStaticSoundOptions, StaticSound } from \"./staticSound\";\nimport type { IStaticSoundBufferOptions, StaticSoundBuffer } from \"./staticSoundBuffer\";\nimport type { IStreamingSoundOptions, StreamingSound } from \"./streamingSound\";\nimport type { AbstractSpatialAudioListener, ISpatialAudioListenerOptions } from \"./subProperties/abstractSpatialAudioListener\";\n\nconst Instances: AudioEngineV2[] = [];\n\n/**\n * Gets the most recently created v2 audio engine.\n * @returns The most recently created v2 audio engine.\n */\nexport function LastCreatedAudioEngine(): Nullable<AudioEngineV2> {\n if (Instances.length === 0) {\n return null;\n }\n\n return Instances[Instances.length - 1];\n}\n\n/**\n * Options for creating a v2 audio engine.\n */\nexport interface IAudioEngineV2Options extends ISpatialAudioListenerOptions {\n /**\n * The smoothing duration to use when changing audio parameters, in seconds. Defaults to `0.01` (10 milliseconds).\n */\n parameterRampDuration: number;\n /**\n * The initial output volume of the audio engine. Defaults to `1`.\n */\n volume: number;\n}\n\n/**\n * The state of a v2 audio engine.\n * @see {@link AudioEngineV2.state}\n */\nexport type AudioEngineV2State = \"closed\" | \"interrupted\" | \"running\" | \"suspended\";\n\n/**\n * Abstract base class for v2 audio engines.\n *\n * A v2 audio engine based on the WebAudio API can be created with the {@link CreateAudioEngineAsync} function.\n */\nexport abstract class AudioEngineV2 {\n /** Not owned, but all items should be in `_nodes` container, too, which is owned. */\n private readonly _mainBuses = new Set<MainAudioBus>();\n\n /** Owned top-level sound and bus nodes. */\n private readonly _nodes = new Set<AbstractNamedAudioNode>();\n\n private _defaultMainBus: Nullable<MainAudioBus> = null;\n\n private _parameterRampDuration: number = 0.01;\n\n protected constructor(options: Partial<IAudioEngineV2Options>) {\n Instances.push(this);\n\n if (typeof options.parameterRampDuration === \"number\") {\n this.parameterRampDuration = options.parameterRampDuration;\n }\n }\n\n /**\n * The elapsed time since the audio engine was started, in seconds.\n */\n public abstract readonly currentTime: number;\n\n /**\n * The default main bus that will be used for audio buses and sounds if their `outBus` option is not set.\n * @see {@link IAudioBusOptions.outBus}\n * @see {@link IAbstractSoundOptions.outBus}\n */\n public get defaultMainBus(): Nullable<MainAudioBus> {\n if (this._mainBuses.size === 0) {\n return null;\n }\n\n if (!this._defaultMainBus) {\n this._defaultMainBus = Array.from(this._mainBuses)[0];\n }\n\n return this._defaultMainBus;\n }\n\n /**\n * The spatial audio listener properties for the audio engine.\n * - Each audio engine has exactly one listener.\n */\n public abstract readonly listener: AbstractSpatialAudioListener;\n\n /**\n * The main output node.\n * - This is the last node in the audio graph before the audio is sent to the speakers.\n */\n public abstract readonly mainOut: AbstractAudioNode;\n\n /**\n * The current state of the audio engine.\n *\n * Possible values are:\n * - `\"closed\"`: The audio engine has been closed.\n * - `\"interrupted\"`: The audio engine has been interrupted and is not running.\n * - `\"running\"`: The audio engine is running normally.\n * - `\"suspended\"`: The audio engine is suspended and is not running.\n */\n public abstract readonly state: AudioEngineV2State;\n\n /**\n * The output volume of the audio engine.\n */\n public abstract volume: number;\n\n /**\n * The smoothing duration to use when changing audio parameters, in seconds. Defaults to `0.01` (10 milliseconds).\n *\n * Due to limitations in some browsers, it is not recommended to set this value to longer than `0.01` seconds.\n *\n * Setting this value to longer than `0.01` seconds may result in errors being throw when setting audio parameters.\n */\n public get parameterRampDuration(): number {\n return this._parameterRampDuration;\n }\n\n public set parameterRampDuration(value: number) {\n this._parameterRampDuration = Math.max(0, value);\n }\n\n /**\n * Creates a new audio bus.\n * @param name - The name of the audio bus.\n * @param options - The options to use when creating the audio bus.\n * @returns A promise that resolves with the created audio bus.\n */\n public abstract createBusAsync(name: string, options?: Partial<IAudioBusOptions>): Promise<AudioBus>;\n\n /**\n * Creates a new main audio bus.\n * @param name - The name of the main audio bus.\n * @param options - The options to use when creating the main audio bus.\n * @returns A promise that resolves with the created main audio bus.\n */\n public abstract createMainBusAsync(name: string, options?: Partial<IMainAudioBusOptions>): Promise<MainAudioBus>;\n\n /**\n * Creates a new microphone sound source.\n * @param name - The name of the sound.\n * @param options - The options for the sound source.\n * @returns A promise that resolves to the created sound source.\n */\n public abstract createMicrophoneSoundSourceAsync(name: string, options?: Partial<ISoundSourceOptions>): Promise<AbstractSoundSource>;\n\n /**\n * Creates a new static sound.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the static sound.\n * @returns A promise that resolves to the created static sound.\n */\n public abstract createSoundAsync(\n name: string,\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options?: Partial<IStaticSoundOptions>\n ): Promise<StaticSound>;\n\n /**\n * Creates a new static sound buffer.\n * @param source - The source of the sound buffer.\n * @param options - The options for the static sound buffer.\n * @returns A promise that resolves to the created static sound buffer.\n */\n public abstract createSoundBufferAsync(\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options?: Partial<IStaticSoundBufferOptions>\n ): Promise<StaticSoundBuffer>;\n\n /**\n * Creates a new sound source.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the sound source.\n * @returns A promise that resolves to the created sound source.\n */\n public abstract createSoundSourceAsync(name: string, source: AudioNode, options?: Partial<ISoundSourceOptions>): Promise<AbstractSoundSource>;\n\n /**\n * Creates a new streaming sound.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the streaming sound.\n * @returns A promise that resolves to the created streaming sound.\n */\n public abstract createStreamingSoundAsync(name: string, source: HTMLMediaElement | string | string[], options?: Partial<IStreamingSoundOptions>): Promise<StreamingSound>;\n\n /**\n * Releases associated resources.\n */\n public dispose(): void {\n if (Instances.includes(this)) {\n Instances.splice(Instances.indexOf(this), 1);\n }\n\n const nodeIt = this._nodes.values();\n for (let next = nodeIt.next(); !next.done; next = nodeIt.next()) {\n next.value.dispose();\n }\n\n this._mainBuses.clear();\n this._nodes.clear();\n\n this._defaultMainBus = null;\n }\n\n /**\n * Checks if the specified format is valid.\n * @param format The format to check as an audio file extension like \"mp3\" or \"wav\".\n * @returns `true` if the format is valid; otherwise `false`.\n */\n public abstract isFormatValid(format: string): boolean;\n\n /**\n * Pauses the audio engine if it is running.\n * @returns A promise that resolves when the audio engine is paused.\n */\n public abstract pauseAsync(): Promise<void>;\n\n /**\n * Resumes the audio engine if it is not running.\n * @returns A promise that resolves when the audio engine is running.\n */\n public abstract resumeAsync(): Promise<void>;\n\n /**\n * Sets the audio output volume with optional ramping.\n * If the duration is 0 then the volume is set immediately, otherwise it is ramped to the new value over the given duration using the given shape.\n * If a ramp is already in progress then the volume is not set and an error is thrown.\n * @param value The value to set the volume to.\n * @param options The options to use for ramping the volume change.\n */\n public abstract setVolume(value: number, options?: Partial<IAudioParameterRampOptions>): void;\n\n /**\n * Unlocks the audio engine if it is locked.\n * - Note that the returned promise may already be resolved if the audio engine is already unlocked.\n * @returns A promise that is resolved when the audio engine is unlocked.\n */\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\n public unlockAsync(): Promise<void> {\n return this.resumeAsync();\n }\n\n protected _addMainBus(mainBus: MainAudioBus): void {\n this._mainBuses.add(mainBus);\n\n this._addNode(mainBus);\n }\n\n protected _removeMainBus(mainBus: MainAudioBus): void {\n this._mainBuses.delete(mainBus);\n this._defaultMainBus = null;\n\n this._removeNode(mainBus);\n }\n\n protected _addNode(node: AbstractNamedAudioNode): void {\n this._nodes.add(node);\n }\n\n protected _removeNode(node: AbstractNamedAudioNode): void {\n this._nodes.delete(node);\n }\n}\n\n/**\n * @internal\n * @param engine - The given audio engine. If `null` then the last created audio engine is used.\n * @returns the given audio engine or the last created audio engine.\n * @throws An error if the resulting engine is `null`.\n */\nexport function _GetAudioEngine(engine: Nullable<AudioEngineV2>): AudioEngineV2 {\n if (!engine) {\n engine = LastCreatedAudioEngine();\n }\n\n if (engine) {\n return engine;\n }\n\n throw new Error(\"No audio engine.\");\n}\n\n/**\n * Creates a new audio bus.\n * @param name - The name of the audio bus.\n * @param options - The options to use when creating the audio bus.\n * @param engine - The audio engine.\n * @returns A promise that resolves with the created audio bus.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateAudioBusAsync(name: string, options: Partial<IAudioBusOptions> = {}, engine: Nullable<AudioEngineV2> = null): Promise<AudioBus> {\n engine = _GetAudioEngine(engine);\n return engine.createBusAsync(name, options);\n}\n\n/**\n * Creates a new main audio bus.\n * @param name - The name of the main audio bus.\n * @param options - The options to use when creating the main audio bus.\n * @param engine - The audio engine.\n * @returns A promise that resolves with the created main audio bus.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateMainAudioBusAsync(name: string, options: Partial<IMainAudioBusOptions> = {}, engine: Nullable<AudioEngineV2> = null): Promise<MainAudioBus> {\n engine = _GetAudioEngine(engine);\n return engine.createMainBusAsync(name, options);\n}\n\n/**\n * Creates a new microphone sound source.\n * @param name - The name of the sound.\n * @param options - The options for the sound source.\n * @param engine - The audio engine.\n * @returns A promise that resolves to the created sound source.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateMicrophoneSoundSourceAsync(name: string, options: Partial<ISoundSourceOptions> = {}, engine: Nullable<AudioEngineV2> = null): Promise<AbstractSoundSource> {\n engine = _GetAudioEngine(engine);\n return engine.createMicrophoneSoundSourceAsync(name, options);\n}\n\n/**\n * Creates a new static sound.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the static sound.\n * @param engine - The audio engine.\n * @returns A promise that resolves to the created static sound.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateSoundAsync(\n name: string,\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options: Partial<IStaticSoundOptions> = {},\n engine: Nullable<AudioEngineV2> = null\n): Promise<StaticSound> {\n engine = _GetAudioEngine(engine);\n return engine.createSoundAsync(name, source, options);\n}\n\n/**\n * Creates a new static sound buffer.\n * @param source - The source of the sound buffer.\n * @param options - The options for the static sound buffer.\n * @param engine - The audio engine.\n * @returns A promise that resolves to the created static sound buffer.\n */\nexport async function CreateSoundBufferAsync(\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options: Partial<IStaticSoundBufferOptions> = {},\n engine: Nullable<AudioEngineV2> = null\n): Promise<StaticSoundBuffer> {\n engine = _GetAudioEngine(engine);\n return await engine.createSoundBufferAsync(source, options);\n}\n\n/**\n * Creates a new sound source.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the sound source.\n * @param engine - The audio engine.\n * @returns A promise that resolves to the created sound source.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateSoundSourceAsync(\n name: string,\n source: AudioNode,\n options: Partial<ISoundSourceOptions> = {},\n engine: Nullable<AudioEngineV2> = null\n): Promise<AbstractSoundSource> {\n engine = _GetAudioEngine(engine);\n return engine.createSoundSourceAsync(name, source, options);\n}\n\n/**\n * Creates a new streaming sound.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the streaming sound.\n * @param engine - The audio engine.\n * @returns A promise that resolves to the created streaming sound.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateStreamingSoundAsync(\n name: string,\n source: HTMLMediaElement | string | string[],\n options: Partial<IStreamingSoundOptions> = {},\n engine: Nullable<AudioEngineV2> = null\n): Promise<StreamingSound> {\n engine = _GetAudioEngine(engine);\n return engine.createStreamingSoundAsync(name, source, options);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"audioEngineV2.js","sourceRoot":"","sources":["../../../../../dev/core/src/AudioV2/abstractAudio/audioEngineV2.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\nimport type { IAudioParameterRampOptions } from \"../audioParameter\";\nimport type { AbstractAudioNode, AbstractNamedAudioNode } from \"./abstractAudioNode\";\nimport type { AbstractSound } from \"./abstractSound\";\nimport type { AbstractSoundSource, ISoundSourceOptions } from \"./abstractSoundSource\";\nimport type { AudioBus, IAudioBusOptions } from \"./audioBus\";\nimport type { IMainAudioBusOptions, MainAudioBus } from \"./mainAudioBus\";\nimport type { IStaticSoundOptions, StaticSound } from \"./staticSound\";\nimport type { IStaticSoundBufferOptions, StaticSoundBuffer } from \"./staticSoundBuffer\";\nimport type { IStreamingSoundOptions, StreamingSound } from \"./streamingSound\";\nimport type { AbstractSpatialAudioListener, ISpatialAudioListenerOptions } from \"./subProperties/abstractSpatialAudioListener\";\n\nconst Instances: AudioEngineV2[] = [];\n\n/**\n * Gets the most recently created v2 audio engine.\n * @returns The most recently created v2 audio engine.\n */\nexport function LastCreatedAudioEngine(): Nullable<AudioEngineV2> {\n if (Instances.length === 0) {\n return null;\n }\n\n return Instances[Instances.length - 1];\n}\n\n/**\n * Options for creating a v2 audio engine.\n */\nexport interface IAudioEngineV2Options extends ISpatialAudioListenerOptions {\n /**\n * The smoothing duration to use when changing audio parameters, in seconds. Defaults to `0.01` (10 milliseconds).\n */\n parameterRampDuration: number;\n /**\n * The initial output volume of the audio engine. Defaults to `1`.\n */\n volume: number;\n}\n\n/**\n * The state of a v2 audio engine.\n * @see {@link AudioEngineV2.state}\n */\nexport type AudioEngineV2State = \"closed\" | \"interrupted\" | \"running\" | \"suspended\";\n\n/**\n * Abstract base class for v2 audio engines.\n *\n * A v2 audio engine based on the WebAudio API can be created with the {@link CreateAudioEngineAsync} function.\n */\nexport abstract class AudioEngineV2 {\n /** Not owned, but all items should be in `_nodes` container, too, which is owned. */\n private readonly _mainBuses = new Set<MainAudioBus>();\n private readonly _sounds = new Array<AbstractSound>();\n\n /** Owned top-level sound and bus nodes. */\n private readonly _nodes = new Set<AbstractNamedAudioNode>();\n\n private _defaultMainBus: Nullable<MainAudioBus> = null;\n\n private _parameterRampDuration: number = 0.01;\n\n protected constructor(options: Partial<IAudioEngineV2Options>) {\n Instances.push(this);\n\n if (typeof options.parameterRampDuration === \"number\") {\n this.parameterRampDuration = options.parameterRampDuration;\n }\n }\n\n /**\n * The elapsed time since the audio engine was started, in seconds.\n */\n public abstract readonly currentTime: number;\n\n /**\n * The default main bus that will be used for audio buses and sounds if their `outBus` option is not set.\n * @see {@link IAudioBusOptions.outBus}\n * @see {@link IAbstractSoundOptions.outBus}\n */\n public get defaultMainBus(): Nullable<MainAudioBus> {\n if (this._mainBuses.size === 0) {\n return null;\n }\n\n if (!this._defaultMainBus) {\n this._defaultMainBus = Array.from(this._mainBuses)[0];\n }\n\n return this._defaultMainBus;\n }\n\n /**\n * The spatial audio listener properties for the audio engine.\n * - Each audio engine has exactly one listener.\n */\n public abstract readonly listener: AbstractSpatialAudioListener;\n\n /**\n * The main output node.\n * - This is the last node in the audio graph before the audio is sent to the speakers.\n */\n public abstract readonly mainOut: AbstractAudioNode;\n\n /**\n * The current state of the audio engine.\n *\n * Possible values are:\n * - `\"closed\"`: The audio engine has been closed.\n * - `\"interrupted\"`: The audio engine has been interrupted and is not running.\n * - `\"running\"`: The audio engine is running normally.\n * - `\"suspended\"`: The audio engine is suspended and is not running.\n */\n public abstract readonly state: AudioEngineV2State;\n\n /**\n * The output volume of the audio engine.\n */\n public abstract volume: number;\n\n /**\n * The smoothing duration to use when changing audio parameters, in seconds. Defaults to `0.01` (10 milliseconds).\n *\n * Due to limitations in some browsers, it is not recommended to set this value to longer than `0.01` seconds.\n *\n * Setting this value to longer than `0.01` seconds may result in errors being throw when setting audio parameters.\n */\n public get parameterRampDuration(): number {\n return this._parameterRampDuration;\n }\n\n public set parameterRampDuration(value: number) {\n this._parameterRampDuration = Math.max(0, value);\n }\n\n /**\n * The list of static and streaming sounds created by the audio engine.\n */\n public get sounds(): ReadonlyArray<AbstractSound> {\n return this._sounds;\n }\n\n /**\n * Creates a new audio bus.\n * @param name - The name of the audio bus.\n * @param options - The options to use when creating the audio bus.\n * @returns A promise that resolves with the created audio bus.\n */\n public abstract createBusAsync(name: string, options?: Partial<IAudioBusOptions>): Promise<AudioBus>;\n\n /**\n * Creates a new main audio bus.\n * @param name - The name of the main audio bus.\n * @param options - The options to use when creating the main audio bus.\n * @returns A promise that resolves with the created main audio bus.\n */\n public abstract createMainBusAsync(name: string, options?: Partial<IMainAudioBusOptions>): Promise<MainAudioBus>;\n\n /**\n * Creates a new microphone sound source.\n * @param name - The name of the sound.\n * @param options - The options for the sound source.\n * @returns A promise that resolves to the created sound source.\n */\n public abstract createMicrophoneSoundSourceAsync(name: string, options?: Partial<ISoundSourceOptions>): Promise<AbstractSoundSource>;\n\n /**\n * Creates a new static sound.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the static sound.\n * @returns A promise that resolves to the created static sound.\n */\n public abstract createSoundAsync(\n name: string,\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options?: Partial<IStaticSoundOptions>\n ): Promise<StaticSound>;\n\n /**\n * Creates a new static sound buffer.\n * @param source - The source of the sound buffer.\n * @param options - The options for the static sound buffer.\n * @returns A promise that resolves to the created static sound buffer.\n */\n public abstract createSoundBufferAsync(\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options?: Partial<IStaticSoundBufferOptions>\n ): Promise<StaticSoundBuffer>;\n\n /**\n * Creates a new sound source.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the sound source.\n * @returns A promise that resolves to the created sound source.\n */\n public abstract createSoundSourceAsync(name: string, source: AudioNode, options?: Partial<ISoundSourceOptions>): Promise<AbstractSoundSource>;\n\n /**\n * Creates a new streaming sound.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the streaming sound.\n * @returns A promise that resolves to the created streaming sound.\n */\n public abstract createStreamingSoundAsync(name: string, source: HTMLMediaElement | string | string[], options?: Partial<IStreamingSoundOptions>): Promise<StreamingSound>;\n\n /**\n * Releases associated resources.\n */\n public dispose(): void {\n if (Instances.includes(this)) {\n Instances.splice(Instances.indexOf(this), 1);\n }\n\n const nodeIt = this._nodes.values();\n for (let next = nodeIt.next(); !next.done; next = nodeIt.next()) {\n next.value.dispose();\n }\n\n this._mainBuses.clear();\n this._nodes.clear();\n this._sounds.length = 0;\n\n this._defaultMainBus = null;\n }\n\n /**\n * Checks if the specified format is valid.\n * @param format The format to check as an audio file extension like \"mp3\" or \"wav\".\n * @returns `true` if the format is valid; otherwise `false`.\n */\n public abstract isFormatValid(format: string): boolean;\n\n /**\n * Pauses the audio engine if it is running.\n * @returns A promise that resolves when the audio engine is paused.\n */\n public abstract pauseAsync(): Promise<void>;\n\n /**\n * Resumes the audio engine if it is not running.\n * @returns A promise that resolves when the audio engine is running.\n */\n public abstract resumeAsync(): Promise<void>;\n\n /**\n * Sets the audio output volume with optional ramping.\n * If the duration is 0 then the volume is set immediately, otherwise it is ramped to the new value over the given duration using the given shape.\n * If a ramp is already in progress then the volume is not set and an error is thrown.\n * @param value The value to set the volume to.\n * @param options The options to use for ramping the volume change.\n */\n public abstract setVolume(value: number, options?: Partial<IAudioParameterRampOptions>): void;\n\n /**\n * Unlocks the audio engine if it is locked.\n * - Note that the returned promise may already be resolved if the audio engine is already unlocked.\n * @returns A promise that is resolved when the audio engine is unlocked.\n */\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\n public unlockAsync(): Promise<void> {\n return this.resumeAsync();\n }\n\n protected _addMainBus(mainBus: MainAudioBus): void {\n this._mainBuses.add(mainBus);\n\n this._addNode(mainBus);\n }\n\n protected _removeMainBus(mainBus: MainAudioBus): void {\n this._mainBuses.delete(mainBus);\n this._defaultMainBus = null;\n\n this._removeNode(mainBus);\n }\n\n protected _addNode(node: AbstractNamedAudioNode): void {\n this._nodes.add(node);\n }\n\n protected _removeNode(node: AbstractNamedAudioNode): void {\n this._nodes.delete(node);\n }\n\n protected _addSound(sound: AbstractSound): void {\n this._sounds.push(sound);\n this._addNode(sound);\n }\n\n protected _removeSound(sound: AbstractSound): void {\n const index = this._sounds.indexOf(sound);\n if (index !== -1) {\n this._sounds.splice(index, 1);\n }\n this._removeNode(sound);\n }\n}\n\n/**\n * @internal\n * @param engine - The given audio engine. If `null` then the last created audio engine is used.\n * @returns the given audio engine or the last created audio engine.\n * @throws An error if the resulting engine is `null`.\n */\nexport function _GetAudioEngine(engine: Nullable<AudioEngineV2>): AudioEngineV2 {\n if (!engine) {\n engine = LastCreatedAudioEngine();\n }\n\n if (engine) {\n return engine;\n }\n\n throw new Error(\"No audio engine.\");\n}\n\n/**\n * Creates a new audio bus.\n * @param name - The name of the audio bus.\n * @param options - The options to use when creating the audio bus.\n * @param engine - The audio engine.\n * @returns A promise that resolves with the created audio bus.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateAudioBusAsync(name: string, options: Partial<IAudioBusOptions> = {}, engine: Nullable<AudioEngineV2> = null): Promise<AudioBus> {\n engine = _GetAudioEngine(engine);\n return engine.createBusAsync(name, options);\n}\n\n/**\n * Creates a new main audio bus.\n * @param name - The name of the main audio bus.\n * @param options - The options to use when creating the main audio bus.\n * @param engine - The audio engine.\n * @returns A promise that resolves with the created main audio bus.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateMainAudioBusAsync(name: string, options: Partial<IMainAudioBusOptions> = {}, engine: Nullable<AudioEngineV2> = null): Promise<MainAudioBus> {\n engine = _GetAudioEngine(engine);\n return engine.createMainBusAsync(name, options);\n}\n\n/**\n * Creates a new microphone sound source.\n * @param name - The name of the sound.\n * @param options - The options for the sound source.\n * @param engine - The audio engine.\n * @returns A promise that resolves to the created sound source.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateMicrophoneSoundSourceAsync(name: string, options: Partial<ISoundSourceOptions> = {}, engine: Nullable<AudioEngineV2> = null): Promise<AbstractSoundSource> {\n engine = _GetAudioEngine(engine);\n return engine.createMicrophoneSoundSourceAsync(name, options);\n}\n\n/**\n * Creates a new static sound.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the static sound.\n * @param engine - The audio engine.\n * @returns A promise that resolves to the created static sound.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateSoundAsync(\n name: string,\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options: Partial<IStaticSoundOptions> = {},\n engine: Nullable<AudioEngineV2> = null\n): Promise<StaticSound> {\n engine = _GetAudioEngine(engine);\n return engine.createSoundAsync(name, source, options);\n}\n\n/**\n * Creates a new static sound buffer.\n * @param source - The source of the sound buffer.\n * @param options - The options for the static sound buffer.\n * @param engine - The audio engine.\n * @returns A promise that resolves to the created static sound buffer.\n */\nexport async function CreateSoundBufferAsync(\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options: Partial<IStaticSoundBufferOptions> = {},\n engine: Nullable<AudioEngineV2> = null\n): Promise<StaticSoundBuffer> {\n engine = _GetAudioEngine(engine);\n return await engine.createSoundBufferAsync(source, options);\n}\n\n/**\n * Creates a new sound source.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the sound source.\n * @param engine - The audio engine.\n * @returns A promise that resolves to the created sound source.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateSoundSourceAsync(\n name: string,\n source: AudioNode,\n options: Partial<ISoundSourceOptions> = {},\n engine: Nullable<AudioEngineV2> = null\n): Promise<AbstractSoundSource> {\n engine = _GetAudioEngine(engine);\n return engine.createSoundSourceAsync(name, source, options);\n}\n\n/**\n * Creates a new streaming sound.\n * @param name - The name of the sound.\n * @param source - The source of the sound.\n * @param options - The options for the streaming sound.\n * @param engine - The audio engine.\n * @returns A promise that resolves to the created streaming sound.\n */\n// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\nexport function CreateStreamingSoundAsync(\n name: string,\n source: HTMLMediaElement | string | string[],\n options: Partial<IStreamingSoundOptions> = {},\n engine: Nullable<AudioEngineV2> = null\n): Promise<StreamingSound> {\n engine = _GetAudioEngine(engine);\n return engine.createStreamingSoundAsync(name, source, options);\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Observable } from "../../Misc/observable.js";
|
|
2
2
|
import type { Nullable } from "../../types.js";
|
|
3
3
|
import type { AbstractNamedAudioNode } from "../abstractAudio/abstractAudioNode.js";
|
|
4
|
+
import type { AbstractSound } from "../abstractAudio/abstractSound.js";
|
|
4
5
|
import type { AbstractSoundSource, ISoundSourceOptions } from "../abstractAudio/abstractSoundSource.js";
|
|
5
6
|
import type { AudioBus, IAudioBusOptions } from "../abstractAudio/audioBus.js";
|
|
6
7
|
import type { AudioEngineV2State, IAudioEngineV2Options } from "../abstractAudio/audioEngineV2.js";
|
|
@@ -143,6 +144,10 @@ export declare class _WebAudioEngine extends AudioEngineV2 {
|
|
|
143
144
|
/** @internal */
|
|
144
145
|
_removeNode(node: AbstractNamedAudioNode): void;
|
|
145
146
|
/** @internal */
|
|
147
|
+
_addSound(sound: AbstractSound): void;
|
|
148
|
+
/** @internal */
|
|
149
|
+
_removeSound(sound: AbstractSound): void;
|
|
150
|
+
/** @internal */
|
|
146
151
|
_addUpdateObserver(callback: () => void): void;
|
|
147
152
|
_removeUpdateObserver(callback: () => void): void;
|
|
148
153
|
private _initAudioContextAsync;
|
|
@@ -355,6 +355,14 @@ export class _WebAudioEngine extends AudioEngineV2 {
|
|
|
355
355
|
super._removeNode(node);
|
|
356
356
|
}
|
|
357
357
|
/** @internal */
|
|
358
|
+
_addSound(sound) {
|
|
359
|
+
super._addSound(sound);
|
|
360
|
+
}
|
|
361
|
+
/** @internal */
|
|
362
|
+
_removeSound(sound) {
|
|
363
|
+
super._removeSound(sound);
|
|
364
|
+
}
|
|
365
|
+
/** @internal */
|
|
358
366
|
_addUpdateObserver(callback) {
|
|
359
367
|
if (!this._updateObservable) {
|
|
360
368
|
this._updateObservable = new Observable();
|