@babylonjs/core 8.8.5 → 8.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.core.js +2 -2
- package/Animations/animatable.core.js.map +1 -1
- package/AudioV2/abstractAudio/abstractSound.d.ts +0 -7
- package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
- package/AudioV2/abstractAudio/abstractSoundSource.d.ts +6 -3
- package/AudioV2/abstractAudio/abstractSoundSource.js +1 -2
- package/AudioV2/abstractAudio/abstractSoundSource.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.js +4 -1
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/AudioV2/webAudio/webAudioSoundSource.js +1 -1
- package/AudioV2/webAudio/webAudioSoundSource.js.map +1 -1
- package/AudioV2/webAudio/webAudioStaticSound.js +1 -1
- package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
- package/Cameras/targetCamera.d.ts +0 -4
- package/Cameras/targetCamera.js +0 -28
- package/Cameras/targetCamera.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +3 -0
- package/Collisions/gpuPicker.js +26 -2
- package/Collisions/gpuPicker.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +22 -15
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.d.ts +1 -0
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js +8 -0
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +5 -2
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/constants.d.ts +5 -0
- package/Engines/constants.js +5 -0
- package/Engines/constants.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js +1 -1
- package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.d.ts +2 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.js +5 -4
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.d.ts +3 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.js +26 -4
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.d.ts +3 -0
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js +13 -0
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +7 -0
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +17 -0
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +2 -0
- package/FrameGraph/frameGraph.js +2 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +1 -1
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Helpers/environmentHelper.js +3 -3
- package/Helpers/environmentHelper.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +4 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.d.ts +30 -0
- package/Materials/PBR/pbrBRDFConfiguration.js +45 -0
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +0 -10
- package/Materials/PBR/pbrBaseMaterial.js +0 -13
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrMaterial.d.ts +0 -16
- package/Materials/PBR/pbrMaterial.decalMap.js +0 -5
- package/Materials/PBR/pbrMaterial.decalMap.js.map +1 -1
- package/Materials/PBR/pbrMaterial.js +1 -30
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +4 -4
- package/Materials/Textures/renderTargetTexture.js +3 -1
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/effectRenderer.d.ts +1 -0
- package/Materials/effectRenderer.js +3 -1
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +7 -8
- package/Materials/shaderMaterial.js +21 -15
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/standardMaterial.decalMap.js +0 -5
- package/Materials/standardMaterial.decalMap.js.map +1 -1
- package/Materials/standardMaterial.js +1 -1
- package/Materials/standardMaterial.js.map +1 -1
- package/Maths/ThinMaths/thinMath.matrix.functions.d.ts +11 -11
- package/Maths/ThinMaths/thinMath.matrix.functions.js.map +1 -1
- package/Maths/math.like.d.ts +2 -2
- package/Maths/math.like.js.map +1 -1
- package/Maths/math.vector.d.ts +23 -17
- package/Maths/math.vector.js +144 -115
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Node/nodeGeometry.d.ts +1 -1
- package/Meshes/Node/nodeGeometry.js +1 -1
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/csg2.js +1 -1
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/instancedMesh.js +12 -2
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +2 -2
- package/Meshes/mesh.js.map +1 -1
- package/Misc/minMaxReducer.js +5 -0
- package/Misc/minMaxReducer.js.map +1 -1
- package/Offline/database.d.ts +1 -1
- package/Offline/database.js +5 -5
- package/Offline/database.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +1 -1
- package/Rendering/depthPeelingRenderer.js +1 -1
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +1 -1
- package/Rendering/edgesRenderer.js +2 -2
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +2 -2
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +2 -2
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/prePassEffectConfiguration.d.ts +5 -0
- package/Rendering/prePassEffectConfiguration.js.map +1 -1
- package/Rendering/prePassRenderer.js +3 -0
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.d.ts +6 -1
- package/Rendering/subSurfaceConfiguration.js +6 -1
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +15 -14
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js +3 -0
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js +2 -2
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js +4 -4
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +6 -2
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/pbr.fragment.js +6 -2
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/pbr.vertex.d.ts +1 -0
- package/Shaders/pbr.vertex.js +12 -4
- package/Shaders/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +3 -0
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +2 -2
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +7 -2
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +2 -1
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.vertex.d.ts +1 -0
- package/ShadersWGSL/pbr.vertex.js +5 -2
- package/ShadersWGSL/pbr.vertex.js.map +1 -1
- package/assetContainer.js +13 -13
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +4 -0
- package/scene.js +21 -15
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +1 -1
- package/sceneComponent.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webAudioEngine.js","sourceRoot":"","sources":["../../../../../dev/core/src/AudioV2/webAudio/webAudioEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../../Misc/observable\";\nimport type { Nullable } from \"../../types\";\nimport type { AbstractNamedAudioNode } from \"../abstractAudio/abstractAudioNode\";\nimport type { AbstractSoundSource, ISoundSourceOptions } from \"../abstractAudio/abstractSoundSource\";\nimport type { AudioBus, IAudioBusOptions } from \"../abstractAudio/audioBus\";\nimport type { AudioEngineV2State, IAudioEngineV2Options } from \"../abstractAudio/audioEngineV2\";\nimport { AudioEngineV2 } from \"../abstractAudio/audioEngineV2\";\nimport type { IMainAudioBusOptions, MainAudioBus } from \"../abstractAudio/mainAudioBus\";\nimport type { IStaticSoundOptions, StaticSound } from \"../abstractAudio/staticSound\";\nimport type { IStaticSoundBufferOptions, StaticSoundBuffer } from \"../abstractAudio/staticSoundBuffer\";\nimport type { IStreamingSoundOptions, StreamingSound } from \"../abstractAudio/streamingSound\";\nimport type { AbstractSpatialAudioListener } from \"../abstractAudio/subProperties/abstractSpatialAudioListener\";\nimport { _HasSpatialAudioListenerOptions } from \"../abstractAudio/subProperties/abstractSpatialAudioListener\";\nimport type { _SpatialAudioListener } from \"../abstractAudio/subProperties/spatialAudioListener\";\nimport { _CreateSpatialAudioListener } from \"./subProperties/spatialWebAudioListener\";\nimport { _WebAudioMainOut } from \"./webAudioMainOut\";\nimport { _WebAudioUnmuteUI } from \"./webAudioUnmuteUI\";\n\n/**\n * Options for creating a v2 audio engine that uses the WebAudio API.\n */\nexport interface IWebAudioEngineOptions extends IAudioEngineV2Options {\n /**\n * The audio context to be used by the engine.\n */\n audioContext: AudioContext;\n /**\n * The default UI's parent element. Defaults to the last created graphics engine's canvas if it exists; otherwise the HTML document's body.\n */\n defaultUIParentElement?: HTMLElement;\n /**\n * Set to `true` to disable the default UI. Defaults to `false`.\n */\n disableDefaultUI?: boolean;\n /**\n * Set to `true` to automatically resume the audio context when the user interacts with the page. Defaults to `true`.\n */\n resumeOnInteraction: boolean;\n /**\n * Set to `true` to automatically resume the audio context when the browser pauses audio playback. Defaults to `true`.\n */\n resumeOnPause: boolean;\n /**\n * The interval in milliseconds to try resuming audio playback when `resumeOnPause` is `true`. Defaults to `1000`.\n */\n resumeOnPauseRetryInterval: number;\n}\n\n/**\n * Creates a new v2 audio engine that uses the WebAudio API.\n * @param options - The options for creating the audio engine.\n * @returns A promise that resolves with the created audio engine.\n */\nexport async function CreateAudioEngineAsync(options: Partial<IWebAudioEngineOptions> = {}): Promise<AudioEngineV2> {\n const engine = new _WebAudioEngine(options);\n await engine._initAsync(options);\n return engine;\n}\n\nconst FormatMimeTypes: { [key: string]: string } = {\n aac: \"audio/aac\",\n ac3: \"audio/ac3\",\n flac: \"audio/flac\",\n m4a: \"audio/mp4\",\n mp3: 'audio/mpeg; codecs=\"mp3\"',\n mp4: \"audio/mp4\",\n ogg: 'audio/ogg; codecs=\"vorbis\"',\n wav: \"audio/wav\",\n webm: 'audio/webm; codecs=\"vorbis\"',\n};\n\n/** @internal */\nexport class _WebAudioEngine extends AudioEngineV2 {\n private _audioContextStarted = false;\n private _invalidFormats = new Set<string>();\n private readonly _isUsingOfflineAudioContext: boolean = false;\n private _listener: Nullable<_SpatialAudioListener> = null;\n private readonly _listenerAutoUpdate: boolean = true;\n private readonly _listenerMinUpdateTime: number = 0;\n private _mainOut: _WebAudioMainOut;\n private _pauseCalled = false;\n private _resumeOnInteraction = true;\n private _resumeOnPause = true;\n private _resumeOnPauseRetryInterval = 1000;\n private _resumeOnPauseTimerId: any = null;\n private _resumePromise: Nullable<Promise<void>> = null;\n private _silentHtmlAudio: Nullable<HTMLAudioElement> = null;\n private _unmuteUI: Nullable<_WebAudioUnmuteUI> = null;\n private readonly _validFormats = new Set<string>();\n private _volume = 1;\n\n /** @internal */\n public readonly _audioContext: AudioContext;\n\n /** @internal */\n public readonly isReadyPromise: Promise<void> = new Promise((resolve) => {\n this._resolveIsReadyPromise = resolve;\n });\n\n /** @internal */\n public stateChangedObservable: Observable<string> = new Observable();\n\n /** @internal */\n public userGestureObservable: Observable<void> = new Observable();\n\n /** @internal */\n public constructor(options: Partial<IWebAudioEngineOptions> = {}) {\n super(options);\n\n if (typeof options.listenerAutoUpdate === \"boolean\") {\n this._listenerAutoUpdate = options.listenerAutoUpdate;\n }\n\n if (typeof options.listenerMinUpdateTime === \"number\") {\n this._listenerMinUpdateTime = options.listenerMinUpdateTime;\n }\n\n this._volume = options.volume ?? 1;\n\n if (options.audioContext) {\n this._isUsingOfflineAudioContext = options.audioContext instanceof OfflineAudioContext;\n this._audioContext = options.audioContext;\n } else {\n this._audioContext = new AudioContext();\n }\n\n if (!options.disableDefaultUI) {\n this._unmuteUI = new _WebAudioUnmuteUI(this, options.defaultUIParentElement);\n }\n }\n\n /** @internal */\n public async _initAsync(options: Partial<IWebAudioEngineOptions>): Promise<void> {\n this._resumeOnInteraction = typeof options.resumeOnInteraction === \"boolean\" ? options.resumeOnInteraction : true;\n this._resumeOnPause = typeof options.resumeOnPause === \"boolean\" ? options.resumeOnPause : true;\n this._resumeOnPauseRetryInterval = options.resumeOnPauseRetryInterval ?? 1000;\n\n document.addEventListener(\"click\", this._onUserGestureAsync);\n\n await this._initAudioContextAsync();\n\n if (_HasSpatialAudioListenerOptions(options)) {\n this._listener = _CreateSpatialAudioListener(this, this._listenerAutoUpdate, this._listenerMinUpdateTime);\n this._listener.setOptions(options);\n }\n\n this._resolveIsReadyPromise();\n }\n\n /** @internal */\n public get currentTime(): number {\n return this._audioContext.currentTime ?? 0;\n }\n\n /** @internal */\n public get _inNode(): AudioNode {\n return this._audioContext.destination;\n }\n\n /** @internal */\n public get mainOut(): _WebAudioMainOut {\n return this._mainOut;\n }\n\n /** @internal */\n public get listener(): AbstractSpatialAudioListener {\n return this._listener ?? (this._listener = _CreateSpatialAudioListener(this, this._listenerAutoUpdate, this._listenerMinUpdateTime));\n }\n\n /** @internal */\n public get state(): AudioEngineV2State {\n // Always return \"running\" for OfflineAudioContext so sound `play` calls work while the context is suspended.\n return this._isUsingOfflineAudioContext ? \"running\" : this._audioContext.state;\n }\n\n /** @internal */\n public get volume(): number {\n return this._volume;\n }\n\n /** @internal */\n public set volume(value: number) {\n if (this._volume === value) {\n return;\n }\n\n this._volume = value;\n\n if (this._mainOut) {\n this._mainOut.volume = value;\n }\n }\n\n /** @internal */\n public async createBusAsync(name: string, options: Partial<IAudioBusOptions> = {}): Promise<AudioBus> {\n const module = await import(\"./webAudioBus\");\n\n const bus = new module._WebAudioBus(name, this, options);\n await bus._initAsync(options);\n\n return bus;\n }\n\n /** @internal */\n public async createMainBusAsync(name: string, options: Partial<IMainAudioBusOptions> = {}): Promise<MainAudioBus> {\n const module = await import(\"./webAudioMainBus\");\n\n const bus = new module._WebAudioMainBus(name, this);\n await bus._initAsync(options);\n\n return bus;\n }\n\n /** @internal */\n public async createMicrophoneSoundSourceAsync(name: string, options?: Partial<ISoundSourceOptions>): Promise<AbstractSoundSource> {\n let mediaStream: MediaStream;\n\n try {\n mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true });\n } catch (e) {\n throw new Error(\"Unable to access microphone: \" + e);\n }\n\n return await this.createSoundSourceAsync(name, new MediaStreamAudioSourceNode(this._audioContext, { mediaStream }), options);\n }\n\n /** @internal */\n public async createSoundAsync(\n name: string,\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options: Partial<IStaticSoundOptions> = {}\n ): Promise<StaticSound> {\n const module = await import(\"./webAudioStaticSound\");\n\n const sound = new module._WebAudioStaticSound(name, this, options);\n await sound._initAsync(source, options);\n\n return sound;\n }\n\n /** @internal */\n public async createSoundBufferAsync(\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options: Partial<IStaticSoundBufferOptions> = {}\n ): Promise<StaticSoundBuffer> {\n const module = await import(\"./webAudioStaticSound\");\n\n const soundBuffer = new module._WebAudioStaticSoundBuffer(this);\n await soundBuffer._initAsync(source, options);\n\n return soundBuffer;\n }\n\n /** @internal */\n public async createSoundSourceAsync(name: string, source: AudioNode, options: Partial<ISoundSourceOptions> = {}): Promise<AbstractSoundSource> {\n const module = await import(\"./webAudioSoundSource\");\n\n const soundSource = new module._WebAudioSoundSource(name, source, this, options);\n await soundSource._initAsync(options);\n\n return soundSource;\n }\n\n /** @internal */\n public async createStreamingSoundAsync(name: string, source: HTMLMediaElement | string | string[], options: Partial<IStreamingSoundOptions> = {}): Promise<StreamingSound> {\n const module = await import(\"./webAudioStreamingSound\");\n\n const sound = new module._WebAudioStreamingSound(name, this, options);\n await sound._initAsync(source, options);\n\n return sound;\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this._listener?.dispose();\n this._listener = null;\n\n // Note that OfflineAudioContext does not have a `close` method.\n if (this._audioContext.state !== \"closed\" && !this._isUsingOfflineAudioContext) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._audioContext.close();\n }\n\n document.removeEventListener(\"click\", this._onUserGestureAsync);\n this._audioContext.removeEventListener(\"statechange\", this._onAudioContextStateChange);\n\n this._silentHtmlAudio?.remove();\n\n this._unmuteUI?.dispose();\n this._unmuteUI = null;\n }\n\n /** @internal */\n public flagInvalidFormat(format: string): void {\n this._invalidFormats.add(format);\n }\n\n /** @internal */\n public isFormatValid(format: string): boolean {\n if (this._validFormats.has(format)) {\n return true;\n }\n\n if (this._invalidFormats.has(format)) {\n return false;\n }\n\n const mimeType = FormatMimeTypes[format];\n if (mimeType === undefined) {\n return false;\n }\n\n const audio = new Audio();\n if (audio.canPlayType(mimeType) === \"\") {\n this._invalidFormats.add(format);\n return false;\n }\n\n this._validFormats.add(format);\n\n return true;\n }\n\n /** @internal */\n public override async pauseAsync(): Promise<void> {\n await this._audioContext.suspend();\n\n this._pauseCalled = true;\n }\n\n /** @internal */\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\n public override resumeAsync(): Promise<void> {\n this._pauseCalled = false;\n\n if (this._resumePromise) {\n return this._resumePromise;\n }\n\n this._resumePromise = this._audioContext.resume();\n return this._resumePromise;\n }\n\n /** @internal */\n public override _addMainBus(mainBus: MainAudioBus): void {\n super._addMainBus(mainBus);\n }\n\n /** @internal */\n public override _removeMainBus(mainBus: MainAudioBus): void {\n super._removeMainBus(mainBus);\n }\n\n /** @internal */\n public override _addNode(node: AbstractNamedAudioNode): void {\n super._addNode(node);\n }\n\n /** @internal */\n public override _removeNode(node: AbstractNamedAudioNode): void {\n super._removeNode(node);\n }\n\n /** @internal */\n public _setAudioParam(audioParam: AudioParam, value: number) {\n audioParam.linearRampToValueAtTime(value, this.currentTime + this.parameterRampDuration);\n }\n\n private _initAudioContextAsync: () => Promise<void> = async () => {\n this._audioContext.addEventListener(\"statechange\", this._onAudioContextStateChange);\n\n this._mainOut = new _WebAudioMainOut(this);\n this._mainOut.volume = this._volume;\n\n await this.createMainBusAsync(\"default\");\n };\n\n private _onAudioContextStateChange = () => {\n if (this.state === \"running\") {\n clearInterval(this._resumeOnPauseTimerId);\n this._audioContextStarted = true;\n this._resumePromise = null;\n }\n if (this.state === \"suspended\" || this.state === \"interrupted\") {\n if (this._audioContextStarted && this._resumeOnPause && !this._pauseCalled) {\n clearInterval(this._resumeOnPauseTimerId);\n\n this._resumeOnPauseTimerId = setInterval(() => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.resumeAsync();\n }, this._resumeOnPauseRetryInterval);\n }\n }\n\n this.stateChangedObservable.notifyObservers(this.state);\n };\n\n private _onUserGestureAsync: () => void = async () => {\n if (this._resumeOnInteraction) {\n await this._audioContext.resume();\n }\n\n // On iOS the ringer switch must be turned on for WebAudio to play.\n // This gets WebAudio to play with the ringer switch turned off by playing an HTMLAudioElement.\n if (!this._silentHtmlAudio) {\n this._silentHtmlAudio = document.createElement(\"audio\");\n\n const audio = this._silentHtmlAudio;\n audio.controls = false;\n audio.preload = \"auto\";\n audio.loop = true;\n\n // Wave data for 0.0001 seconds of silence.\n audio.src = \"data:audio/wav;base64,UklGRjAAAABXQVZFZm10IBAAAAABAAEAgLsAAAB3AQACABAAZGF0YQwAAAAAAAEA/v8CAP//AQA=\";\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n audio.play();\n }\n\n this.userGestureObservable.notifyObservers();\n };\n\n private _resolveIsReadyPromise: () => void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"webAudioEngine.js","sourceRoot":"","sources":["../../../../../dev/core/src/AudioV2/webAudio/webAudioEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../../Misc/observable\";\nimport type { Nullable } from \"../../types\";\nimport type { AbstractNamedAudioNode } from \"../abstractAudio/abstractAudioNode\";\nimport type { AbstractSoundSource, ISoundSourceOptions } from \"../abstractAudio/abstractSoundSource\";\nimport type { AudioBus, IAudioBusOptions } from \"../abstractAudio/audioBus\";\nimport type { AudioEngineV2State, IAudioEngineV2Options } from \"../abstractAudio/audioEngineV2\";\nimport { AudioEngineV2 } from \"../abstractAudio/audioEngineV2\";\nimport type { IMainAudioBusOptions, MainAudioBus } from \"../abstractAudio/mainAudioBus\";\nimport type { IStaticSoundOptions, StaticSound } from \"../abstractAudio/staticSound\";\nimport type { IStaticSoundBufferOptions, StaticSoundBuffer } from \"../abstractAudio/staticSoundBuffer\";\nimport type { IStreamingSoundOptions, StreamingSound } from \"../abstractAudio/streamingSound\";\nimport type { AbstractSpatialAudioListener } from \"../abstractAudio/subProperties/abstractSpatialAudioListener\";\nimport { _HasSpatialAudioListenerOptions } from \"../abstractAudio/subProperties/abstractSpatialAudioListener\";\nimport type { _SpatialAudioListener } from \"../abstractAudio/subProperties/spatialAudioListener\";\nimport { _CreateSpatialAudioListener } from \"./subProperties/spatialWebAudioListener\";\nimport { _WebAudioMainOut } from \"./webAudioMainOut\";\nimport { _WebAudioUnmuteUI } from \"./webAudioUnmuteUI\";\n\n/**\n * Options for creating a v2 audio engine that uses the WebAudio API.\n */\nexport interface IWebAudioEngineOptions extends IAudioEngineV2Options {\n /**\n * The audio context to be used by the engine.\n */\n audioContext: AudioContext;\n /**\n * The default UI's parent element. Defaults to the last created graphics engine's canvas if it exists; otherwise the HTML document's body.\n */\n defaultUIParentElement?: HTMLElement;\n /**\n * Set to `true` to disable the default UI. Defaults to `false`.\n */\n disableDefaultUI?: boolean;\n /**\n * Set to `true` to automatically resume the audio context when the user interacts with the page. Defaults to `true`.\n */\n resumeOnInteraction: boolean;\n /**\n * Set to `true` to automatically resume the audio context when the browser pauses audio playback. Defaults to `true`.\n */\n resumeOnPause: boolean;\n /**\n * The interval in milliseconds to try resuming audio playback when `resumeOnPause` is `true`. Defaults to `1000`.\n */\n resumeOnPauseRetryInterval: number;\n}\n\n/**\n * Creates a new v2 audio engine that uses the WebAudio API.\n * @param options - The options for creating the audio engine.\n * @returns A promise that resolves with the created audio engine.\n */\nexport async function CreateAudioEngineAsync(options: Partial<IWebAudioEngineOptions> = {}): Promise<AudioEngineV2> {\n const engine = new _WebAudioEngine(options);\n await engine._initAsync(options);\n return engine;\n}\n\nconst FormatMimeTypes: { [key: string]: string } = {\n aac: \"audio/aac\",\n ac3: \"audio/ac3\",\n flac: \"audio/flac\",\n m4a: \"audio/mp4\",\n mp3: 'audio/mpeg; codecs=\"mp3\"',\n mp4: \"audio/mp4\",\n ogg: 'audio/ogg; codecs=\"vorbis\"',\n wav: \"audio/wav\",\n webm: 'audio/webm; codecs=\"vorbis\"',\n};\n\n/** @internal */\nexport class _WebAudioEngine extends AudioEngineV2 {\n private _audioContextStarted = false;\n private _invalidFormats = new Set<string>();\n private readonly _isUsingOfflineAudioContext: boolean = false;\n private _listener: Nullable<_SpatialAudioListener> = null;\n private readonly _listenerAutoUpdate: boolean = true;\n private readonly _listenerMinUpdateTime: number = 0;\n private _mainOut: _WebAudioMainOut;\n private _pauseCalled = false;\n private _resumeOnInteraction = true;\n private _resumeOnPause = true;\n private _resumeOnPauseRetryInterval = 1000;\n private _resumeOnPauseTimerId: any = null;\n private _resumePromise: Nullable<Promise<void>> = null;\n private _silentHtmlAudio: Nullable<HTMLAudioElement> = null;\n private _unmuteUI: Nullable<_WebAudioUnmuteUI> = null;\n private readonly _validFormats = new Set<string>();\n private _volume = 1;\n\n /** @internal */\n public readonly _audioContext: AudioContext;\n\n /** @internal */\n public readonly isReadyPromise: Promise<void> = new Promise((resolve) => {\n this._resolveIsReadyPromise = resolve;\n });\n\n /** @internal */\n public stateChangedObservable: Observable<string> = new Observable();\n\n /** @internal */\n public userGestureObservable: Observable<void> = new Observable();\n\n /** @internal */\n public constructor(options: Partial<IWebAudioEngineOptions> = {}) {\n super(options);\n\n if (typeof options.listenerAutoUpdate === \"boolean\") {\n this._listenerAutoUpdate = options.listenerAutoUpdate;\n }\n\n if (typeof options.listenerMinUpdateTime === \"number\") {\n this._listenerMinUpdateTime = options.listenerMinUpdateTime;\n }\n\n this._volume = options.volume ?? 1;\n\n if (options.audioContext) {\n this._isUsingOfflineAudioContext = options.audioContext instanceof OfflineAudioContext;\n this._audioContext = options.audioContext;\n } else {\n this._audioContext = new AudioContext();\n }\n\n if (!options.disableDefaultUI) {\n this._unmuteUI = new _WebAudioUnmuteUI(this, options.defaultUIParentElement);\n }\n }\n\n /** @internal */\n public async _initAsync(options: Partial<IWebAudioEngineOptions>): Promise<void> {\n this._resumeOnInteraction = typeof options.resumeOnInteraction === \"boolean\" ? options.resumeOnInteraction : true;\n this._resumeOnPause = typeof options.resumeOnPause === \"boolean\" ? options.resumeOnPause : true;\n this._resumeOnPauseRetryInterval = options.resumeOnPauseRetryInterval ?? 1000;\n\n document.addEventListener(\"click\", this._onUserGestureAsync);\n\n await this._initAudioContextAsync();\n\n if (_HasSpatialAudioListenerOptions(options)) {\n this._listener = _CreateSpatialAudioListener(this, this._listenerAutoUpdate, this._listenerMinUpdateTime);\n this._listener.setOptions(options);\n }\n\n this._resolveIsReadyPromise();\n }\n\n /** @internal */\n public get currentTime(): number {\n return this._audioContext.currentTime ?? 0;\n }\n\n /** @internal */\n public get _inNode(): AudioNode {\n return this._audioContext.destination;\n }\n\n /** @internal */\n public get mainOut(): _WebAudioMainOut {\n return this._mainOut;\n }\n\n /** @internal */\n public get listener(): AbstractSpatialAudioListener {\n return this._listener ?? (this._listener = _CreateSpatialAudioListener(this, this._listenerAutoUpdate, this._listenerMinUpdateTime));\n }\n\n /** @internal */\n public get state(): AudioEngineV2State {\n // Always return \"running\" for OfflineAudioContext so sound `play` calls work while the context is suspended.\n return this._isUsingOfflineAudioContext ? \"running\" : this._audioContext.state;\n }\n\n /** @internal */\n public get volume(): number {\n return this._volume;\n }\n\n /** @internal */\n public set volume(value: number) {\n if (this._volume === value) {\n return;\n }\n\n this._volume = value;\n\n if (this._mainOut) {\n this._mainOut.volume = value;\n }\n }\n\n /** @internal */\n public async createBusAsync(name: string, options: Partial<IAudioBusOptions> = {}): Promise<AudioBus> {\n const module = await import(\"./webAudioBus\");\n\n const bus = new module._WebAudioBus(name, this, options);\n await bus._initAsync(options);\n\n return bus;\n }\n\n /** @internal */\n public async createMainBusAsync(name: string, options: Partial<IMainAudioBusOptions> = {}): Promise<MainAudioBus> {\n const module = await import(\"./webAudioMainBus\");\n\n const bus = new module._WebAudioMainBus(name, this);\n await bus._initAsync(options);\n\n return bus;\n }\n\n /** @internal */\n public async createMicrophoneSoundSourceAsync(name: string, options?: Partial<ISoundSourceOptions>): Promise<AbstractSoundSource> {\n let mediaStream: MediaStream;\n\n try {\n mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true });\n } catch (e) {\n throw new Error(\"Unable to access microphone: \" + e);\n }\n\n return await this.createSoundSourceAsync(name, new MediaStreamAudioSourceNode(this._audioContext, { mediaStream }), {\n outBusAutoDefault: false,\n ...options,\n });\n }\n\n /** @internal */\n public async createSoundAsync(\n name: string,\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options: Partial<IStaticSoundOptions> = {}\n ): Promise<StaticSound> {\n const module = await import(\"./webAudioStaticSound\");\n\n const sound = new module._WebAudioStaticSound(name, this, options);\n await sound._initAsync(source, options);\n\n return sound;\n }\n\n /** @internal */\n public async createSoundBufferAsync(\n source: ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[],\n options: Partial<IStaticSoundBufferOptions> = {}\n ): Promise<StaticSoundBuffer> {\n const module = await import(\"./webAudioStaticSound\");\n\n const soundBuffer = new module._WebAudioStaticSoundBuffer(this);\n await soundBuffer._initAsync(source, options);\n\n return soundBuffer;\n }\n\n /** @internal */\n public async createSoundSourceAsync(name: string, source: AudioNode, options: Partial<ISoundSourceOptions> = {}): Promise<AbstractSoundSource> {\n const module = await import(\"./webAudioSoundSource\");\n\n const soundSource = new module._WebAudioSoundSource(name, source, this, options);\n await soundSource._initAsync(options);\n\n return soundSource;\n }\n\n /** @internal */\n public async createStreamingSoundAsync(name: string, source: HTMLMediaElement | string | string[], options: Partial<IStreamingSoundOptions> = {}): Promise<StreamingSound> {\n const module = await import(\"./webAudioStreamingSound\");\n\n const sound = new module._WebAudioStreamingSound(name, this, options);\n await sound._initAsync(source, options);\n\n return sound;\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this._listener?.dispose();\n this._listener = null;\n\n // Note that OfflineAudioContext does not have a `close` method.\n if (this._audioContext.state !== \"closed\" && !this._isUsingOfflineAudioContext) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._audioContext.close();\n }\n\n document.removeEventListener(\"click\", this._onUserGestureAsync);\n this._audioContext.removeEventListener(\"statechange\", this._onAudioContextStateChange);\n\n this._silentHtmlAudio?.remove();\n\n this._unmuteUI?.dispose();\n this._unmuteUI = null;\n }\n\n /** @internal */\n public flagInvalidFormat(format: string): void {\n this._invalidFormats.add(format);\n }\n\n /** @internal */\n public isFormatValid(format: string): boolean {\n if (this._validFormats.has(format)) {\n return true;\n }\n\n if (this._invalidFormats.has(format)) {\n return false;\n }\n\n const mimeType = FormatMimeTypes[format];\n if (mimeType === undefined) {\n return false;\n }\n\n const audio = new Audio();\n if (audio.canPlayType(mimeType) === \"\") {\n this._invalidFormats.add(format);\n return false;\n }\n\n this._validFormats.add(format);\n\n return true;\n }\n\n /** @internal */\n public override async pauseAsync(): Promise<void> {\n await this._audioContext.suspend();\n\n this._pauseCalled = true;\n }\n\n /** @internal */\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\n public override resumeAsync(): Promise<void> {\n this._pauseCalled = false;\n\n if (this._resumePromise) {\n return this._resumePromise;\n }\n\n this._resumePromise = this._audioContext.resume();\n return this._resumePromise;\n }\n\n /** @internal */\n public override _addMainBus(mainBus: MainAudioBus): void {\n super._addMainBus(mainBus);\n }\n\n /** @internal */\n public override _removeMainBus(mainBus: MainAudioBus): void {\n super._removeMainBus(mainBus);\n }\n\n /** @internal */\n public override _addNode(node: AbstractNamedAudioNode): void {\n super._addNode(node);\n }\n\n /** @internal */\n public override _removeNode(node: AbstractNamedAudioNode): void {\n super._removeNode(node);\n }\n\n /** @internal */\n public _setAudioParam(audioParam: AudioParam, value: number) {\n audioParam.linearRampToValueAtTime(value, this.currentTime + this.parameterRampDuration);\n }\n\n private _initAudioContextAsync: () => Promise<void> = async () => {\n this._audioContext.addEventListener(\"statechange\", this._onAudioContextStateChange);\n\n this._mainOut = new _WebAudioMainOut(this);\n this._mainOut.volume = this._volume;\n\n await this.createMainBusAsync(\"default\");\n };\n\n private _onAudioContextStateChange = () => {\n if (this.state === \"running\") {\n clearInterval(this._resumeOnPauseTimerId);\n this._audioContextStarted = true;\n this._resumePromise = null;\n }\n if (this.state === \"suspended\" || this.state === \"interrupted\") {\n if (this._audioContextStarted && this._resumeOnPause && !this._pauseCalled) {\n clearInterval(this._resumeOnPauseTimerId);\n\n this._resumeOnPauseTimerId = setInterval(() => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.resumeAsync();\n }, this._resumeOnPauseRetryInterval);\n }\n }\n\n this.stateChangedObservable.notifyObservers(this.state);\n };\n\n private _onUserGestureAsync: () => void = async () => {\n if (this._resumeOnInteraction) {\n await this._audioContext.resume();\n }\n\n // On iOS the ringer switch must be turned on for WebAudio to play.\n // This gets WebAudio to play with the ringer switch turned off by playing an HTMLAudioElement.\n if (!this._silentHtmlAudio) {\n this._silentHtmlAudio = document.createElement(\"audio\");\n\n const audio = this._silentHtmlAudio;\n audio.controls = false;\n audio.preload = \"auto\";\n audio.loop = true;\n\n // Wave data for 0.0001 seconds of silence.\n audio.src = \"data:audio/wav;base64,UklGRjAAAABXQVZFZm10IBAAAAABAAEAgLsAAAB3AQACABAAZGF0YQwAAAAAAAEA/v8CAP//AQA=\";\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n audio.play();\n }\n\n this.userGestureObservable.notifyObservers();\n };\n\n private _resolveIsReadyPromise: () => void;\n}\n"]}
|
|
@@ -27,7 +27,7 @@ export class _WebAudioSoundSource extends AbstractSoundSource {
|
|
|
27
27
|
if (options.outBus) {
|
|
28
28
|
this.outBus = options.outBus;
|
|
29
29
|
}
|
|
30
|
-
else {
|
|
30
|
+
else if (options.outBusAutoDefault !== false) {
|
|
31
31
|
await this.engine.isReadyPromise;
|
|
32
32
|
this.outBus = this.engine.defaultMainBus;
|
|
33
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webAudioSoundSource.js","sourceRoot":"","sources":["../../../../../dev/core/src/AudioV2/webAudio/webAudioSoundSource.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAE9F,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAInE,gBAAgB;AAChB,MAAM,OAAO,oBAAqB,SAAQ,mBAAmB;IAezD,gBAAgB;IAChB,YAAmB,IAAY,EAAE,YAAuB,EAAE,MAAuB,EAAE,OAAqC;QACpH,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAhBhB,aAAQ,GAA+B,IAAI,CAAC;QACnC,uBAAkB,GAAY,IAAI,CAAC;QACnC,0BAAqB,GAAW,CAAC,CAAC;QAC3C,YAAO,GAA2B,IAAI,CAAC;QAe3C,IAAI,OAAO,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACjD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,OAAO,CAAC,oBAAoB,KAAK,QAAQ,EAAE,CAAC;YACnD,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAElC,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,gBAAgB;IACT,KAAK,CAAC,UAAU,CAAC,OAAqC;QACzD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,CAAC;aAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"webAudioSoundSource.js","sourceRoot":"","sources":["../../../../../dev/core/src/AudioV2/webAudio/webAudioSoundSource.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\nimport type { AbstractAudioNode } from \"../abstractAudio\";\nimport type { ISoundSourceOptions } from \"../abstractAudio/abstractSoundSource\";\nimport { AbstractSoundSource } from \"../abstractAudio/abstractSoundSource\";\nimport { _HasSpatialAudioOptions } from \"../abstractAudio/subProperties/abstractSpatialAudio\";\nimport type { _SpatialAudio } from \"../abstractAudio/subProperties/spatialAudio\";\nimport { _StereoAudio } from \"../abstractAudio/subProperties/stereoAudio\";\nimport { _WebAudioBusAndSoundSubGraph } from \"./subNodes/webAudioBusAndSoundSubGraph\";\nimport { _SpatialWebAudio } from \"./subProperties/spatialWebAudio\";\nimport type { _WebAudioEngine } from \"./webAudioEngine\";\nimport type { IWebAudioInNode } from \"./webAudioNode\";\n\n/** @internal */\nexport class _WebAudioSoundSource extends AbstractSoundSource {\n private _spatial: Nullable<_SpatialWebAudio> = null;\n private readonly _spatialAutoUpdate: boolean = true;\n private readonly _spatialMinUpdateTime: number = 0;\n private _stereo: Nullable<_StereoAudio> = null;\n\n protected _subGraph: _WebAudioBusAndSoundSubGraph;\n protected _webAudioNode: AudioNode;\n\n /** @internal */\n public _audioContext: AudioContext | OfflineAudioContext;\n\n /** @internal */\n public override readonly engine: _WebAudioEngine;\n\n /** @internal */\n public constructor(name: string, webAudioNode: AudioNode, engine: _WebAudioEngine, options: Partial<ISoundSourceOptions>) {\n super(name, engine);\n\n if (typeof options.spatialAutoUpdate === \"boolean\") {\n this._spatialAutoUpdate = options.spatialAutoUpdate;\n }\n\n if (typeof options.spatialMinUpdateTime === \"number\") {\n this._spatialMinUpdateTime = options.spatialMinUpdateTime;\n }\n\n this._audioContext = this.engine._audioContext;\n this._webAudioNode = webAudioNode;\n\n this._subGraph = new _WebAudioSoundSource._SubGraph(this);\n }\n\n /** @internal */\n public async _initAsync(options: Partial<ISoundSourceOptions>): Promise<void> {\n if (options.outBus) {\n this.outBus = options.outBus;\n } else if (options.outBusAutoDefault !== false) {\n await this.engine.isReadyPromise;\n this.outBus = this.engine.defaultMainBus;\n }\n\n await this._subGraph.initAsync(options);\n\n if (_HasSpatialAudioOptions(options)) {\n this._initSpatialProperty();\n }\n\n this.engine._addNode(this);\n }\n\n /** @internal */\n public get _inNode() {\n return this._webAudioNode;\n }\n\n /** @internal */\n public get _outNode() {\n return this._subGraph._outNode;\n }\n\n /** @internal */\n public override get spatial(): _SpatialAudio {\n if (this._spatial) {\n return this._spatial;\n }\n return this._initSpatialProperty();\n }\n\n /** @internal */\n public override get stereo(): _StereoAudio {\n return this._stereo ?? (this._stereo = new _StereoAudio(this._subGraph));\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this._spatial?.dispose();\n this._spatial = null;\n\n this._stereo = null;\n\n this._subGraph.dispose();\n\n this.engine._removeNode(this);\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_WebAudioSoundSource\";\n }\n\n protected override _connect(node: IWebAudioInNode): boolean {\n const connected = super._connect(node);\n\n if (!connected) {\n return false;\n }\n\n // If the wrapped node is not available now, it will be connected later by the subgraph.\n if (node._inNode) {\n this._outNode?.connect(node._inNode);\n }\n\n return true;\n }\n\n protected override _disconnect(node: IWebAudioInNode): boolean {\n const disconnected = super._disconnect(node);\n\n if (!disconnected) {\n return false;\n }\n\n if (node._inNode) {\n this._outNode?.disconnect(node._inNode);\n }\n\n return true;\n }\n\n private _initSpatialProperty(): _SpatialAudio {\n if (!this._spatial) {\n this._spatial = new _SpatialWebAudio(this._subGraph, this._spatialAutoUpdate, this._spatialMinUpdateTime);\n }\n\n return this._spatial;\n }\n\n private static _SubGraph = class extends _WebAudioBusAndSoundSubGraph {\n protected override _owner: _WebAudioSoundSource;\n\n protected get _downstreamNodes(): Nullable<Set<AbstractAudioNode>> {\n return this._owner._downstreamNodes ?? null;\n }\n\n protected get _upstreamNodes(): Nullable<Set<AbstractAudioNode>> {\n return this._owner._upstreamNodes ?? null;\n }\n\n protected override _onSubNodesChanged(): void {\n super._onSubNodesChanged();\n\n this._owner._inNode.disconnect();\n\n if (this._owner._subGraph._inNode) {\n this._owner._inNode.connect(this._owner._subGraph._inNode);\n }\n }\n };\n}\n"]}
|
|
@@ -46,7 +46,7 @@ export class _WebAudioStaticSound extends StaticSound {
|
|
|
46
46
|
if (options.outBus) {
|
|
47
47
|
this.outBus = options.outBus;
|
|
48
48
|
}
|
|
49
|
-
else {
|
|
49
|
+
else if (options.outBusAutoDefault !== false) {
|
|
50
50
|
await this.engine.isReadyPromise;
|
|
51
51
|
this.outBus = this.engine.defaultMainBus;
|
|
52
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webAudioStaticSound.js","sourceRoot":"","sources":["../../../../../dev/core/src/AudioV2/webAudio/webAudioStaticSound.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\nimport type { AbstractAudioNode } from \"../abstractAudio/abstractAudioNode\";\nimport type { IStaticSoundOptions, IStaticSoundPlayOptions, IStaticSoundStopOptions, IStaticSoundStoredOptions } from \"../abstractAudio/staticSound\";\nimport { StaticSound } from \"../abstractAudio/staticSound\";\nimport type { IStaticSoundBufferOptions } from \"../abstractAudio/staticSoundBuffer\";\nimport { StaticSoundBuffer } from \"../abstractAudio/staticSoundBuffer\";\nimport type { IStaticSoundInstanceOptions } from \"../abstractAudio/staticSoundInstance\";\nimport { _StaticSoundInstance } from \"../abstractAudio/staticSoundInstance\";\nimport { _HasSpatialAudioOptions } from \"../abstractAudio/subProperties/abstractSpatialAudio\";\nimport type { _SpatialAudio } from \"../abstractAudio/subProperties/spatialAudio\";\nimport { _StereoAudio } from \"../abstractAudio/subProperties/stereoAudio\";\nimport { _CleanUrl, _FileExtensionRegex } from \"../audioUtils\";\nimport { SoundState } from \"../soundState\";\nimport { _WebAudioBusAndSoundSubGraph } from \"./subNodes/webAudioBusAndSoundSubGraph\";\nimport { _SpatialWebAudio } from \"./subProperties/spatialWebAudio\";\nimport type { _WebAudioEngine } from \"./webAudioEngine\";\nimport type { IWebAudioInNode, IWebAudioOutNode, IWebAudioSuperNode } from \"./webAudioNode\";\n\ntype StaticSoundSourceType = ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[];\n\n/** @internal */\nexport class _WebAudioStaticSound extends StaticSound implements IWebAudioSuperNode {\n private _buffer: _WebAudioStaticSoundBuffer;\n private _spatial: Nullable<_SpatialWebAudio> = null;\n private readonly _spatialAutoUpdate: boolean = true;\n private readonly _spatialMinUpdateTime: number = 0;\n private _stereo: Nullable<_StereoAudio> = null;\n\n protected override readonly _options: IStaticSoundStoredOptions;\n protected _subGraph: _WebAudioBusAndSoundSubGraph;\n\n /** @internal */\n public _audioContext: AudioContext | OfflineAudioContext;\n\n /** @internal */\n public override readonly engine: _WebAudioEngine;\n\n /** @internal */\n public constructor(name: string, engine: _WebAudioEngine, options: Partial<IStaticSoundOptions>) {\n super(name, engine);\n\n if (typeof options.spatialAutoUpdate === \"boolean\") {\n this._spatialAutoUpdate = options.spatialAutoUpdate;\n }\n\n if (typeof options.spatialMinUpdateTime === \"number\") {\n this._spatialMinUpdateTime = options.spatialMinUpdateTime;\n }\n\n this._options = {\n autoplay: options.autoplay ?? false,\n duration: options.duration ?? 0,\n loop: options.loop ?? false,\n loopEnd: options.loopEnd ?? 0,\n loopStart: options.loopStart ?? 0,\n maxInstances: options.maxInstances ?? Infinity,\n pitch: options.pitch ?? 0,\n playbackRate: options.playbackRate ?? 1,\n startOffset: options.startOffset ?? 0,\n };\n\n this._subGraph = new _WebAudioStaticSound._SubGraph(this);\n }\n\n /** @internal */\n public async _initAsync(source: StaticSoundSourceType, options: Partial<IStaticSoundOptions>): Promise<void> {\n this._audioContext = this.engine._audioContext;\n\n if (source instanceof _WebAudioStaticSoundBuffer) {\n this._buffer = source;\n } else if (typeof source === \"string\" || Array.isArray(source) || source instanceof ArrayBuffer || source instanceof AudioBuffer) {\n this._buffer = (await this.engine.createSoundBufferAsync(source, options)) as _WebAudioStaticSoundBuffer;\n }\n\n if (options.outBus) {\n this.outBus = options.outBus;\n } else {\n await this.engine.isReadyPromise;\n this.outBus = this.engine.defaultMainBus;\n }\n\n await this._subGraph.initAsync(options);\n\n if (_HasSpatialAudioOptions(options)) {\n this._initSpatialProperty();\n }\n\n if (options.autoplay) {\n this.play();\n }\n\n this.engine._addNode(this);\n }\n\n /** @internal */\n public get buffer(): _WebAudioStaticSoundBuffer {\n return this._buffer;\n }\n\n /** @internal */\n public get _inNode() {\n return this._subGraph._inNode;\n }\n\n /** @internal */\n public get _outNode() {\n return this._subGraph._outNode;\n }\n\n /** @internal */\n public override get spatial(): _SpatialAudio {\n if (this._spatial) {\n return this._spatial;\n }\n return this._initSpatialProperty();\n }\n\n /** @internal */\n public override get stereo(): _StereoAudio {\n return this._stereo ?? (this._stereo = new _StereoAudio(this._subGraph));\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this._spatial?.dispose();\n this._spatial = null;\n\n this._stereo = null;\n\n this._subGraph.dispose();\n\n this.engine._removeNode(this);\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_WebAudioStaticSound\";\n }\n\n protected _createInstance(): _WebAudioStaticSoundInstance {\n return new _WebAudioStaticSoundInstance(this, this._options);\n }\n\n protected override _connect(node: IWebAudioInNode): boolean {\n const connected = super._connect(node);\n\n if (!connected) {\n return false;\n }\n\n // If the wrapped node is not available now, it will be connected later by the subgraph.\n if (node._inNode) {\n this._outNode?.connect(node._inNode);\n }\n\n return true;\n }\n\n protected override _disconnect(node: IWebAudioInNode): boolean {\n const disconnected = super._disconnect(node);\n\n if (!disconnected) {\n return false;\n }\n\n if (node._inNode) {\n this._outNode?.disconnect(node._inNode);\n }\n\n return true;\n }\n\n private _initSpatialProperty(): _SpatialAudio {\n if (!this._spatial) {\n this._spatial = new _SpatialWebAudio(this._subGraph, this._spatialAutoUpdate, this._spatialMinUpdateTime);\n }\n\n return this._spatial;\n }\n\n private static _SubGraph = class extends _WebAudioBusAndSoundSubGraph {\n protected override _owner: _WebAudioStaticSound;\n\n protected get _downstreamNodes(): Nullable<Set<AbstractAudioNode>> {\n return this._owner._downstreamNodes ?? null;\n }\n\n protected get _upstreamNodes(): Nullable<Set<AbstractAudioNode>> {\n return this._owner._upstreamNodes ?? null;\n }\n };\n}\n\n/** @internal */\nexport class _WebAudioStaticSoundBuffer extends StaticSoundBuffer {\n /** @internal */\n public _audioBuffer: AudioBuffer;\n\n /** @internal */\n public override readonly engine: _WebAudioEngine;\n\n /** @internal */\n public constructor(engine: _WebAudioEngine) {\n super(engine);\n }\n\n public async _initAsync(source: StaticSoundSourceType, options: Partial<IStaticSoundBufferOptions>): Promise<void> {\n if (source instanceof AudioBuffer) {\n this._audioBuffer = source;\n } else if (typeof source === \"string\") {\n await this._initFromUrlAsync(source);\n } else if (Array.isArray(source)) {\n await this._initFromUrlsAsync(source, options.skipCodecCheck ?? false);\n } else if (source instanceof ArrayBuffer) {\n await this._initFromArrayBufferAsync(source);\n }\n }\n\n /** @internal */\n public get channelCount(): number {\n return this._audioBuffer.numberOfChannels;\n }\n\n /** @internal */\n public get duration(): number {\n return this._audioBuffer.duration;\n }\n\n /** @internal */\n public get length(): number {\n return this._audioBuffer.length;\n }\n\n /** @internal */\n public get sampleRate(): number {\n return this._audioBuffer.sampleRate;\n }\n\n private async _initFromArrayBufferAsync(arrayBuffer: ArrayBuffer): Promise<void> {\n this._audioBuffer = await this.engine._audioContext.decodeAudioData(arrayBuffer);\n }\n\n private async _initFromUrlAsync(url: string): Promise<void> {\n url = _CleanUrl(url);\n await this._initFromArrayBufferAsync(await (await fetch(url)).arrayBuffer());\n }\n\n private async _initFromUrlsAsync(urls: string[], skipCodecCheck: boolean): Promise<void> {\n for (const url of urls) {\n if (skipCodecCheck) {\n // eslint-disable-next-line no-await-in-loop\n await this._initFromUrlAsync(url);\n } else {\n const matches = url.match(_FileExtensionRegex);\n const format = matches?.at(1);\n if (format && this.engine.isFormatValid(format)) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await this._initFromUrlAsync(url);\n } catch {\n if (format && 0 < format.length) {\n this.engine.flagInvalidFormat(format);\n }\n }\n }\n }\n\n if (this._audioBuffer) {\n break;\n }\n }\n }\n}\n\n/** @internal */\nclass _WebAudioStaticSoundInstance extends _StaticSoundInstance implements IWebAudioOutNode {\n private _enginePlayTime: number = 0;\n private _enginePauseTime: number = 0;\n private _sourceNode: Nullable<AudioBufferSourceNode> = null;\n private _volumeNode: GainNode;\n\n protected override readonly _options: IStaticSoundInstanceOptions;\n protected override _sound: _WebAudioStaticSound;\n\n /** @internal */\n public override readonly engine: _WebAudioEngine;\n\n public constructor(sound: _WebAudioStaticSound, options: IStaticSoundInstanceOptions) {\n super(sound);\n\n this._options = options;\n\n this._volumeNode = new GainNode(sound._audioContext);\n this._initSourceNode();\n }\n\n /** @internal */\n public get currentTime(): number {\n if (this._state === SoundState.Stopped) {\n return 0;\n }\n\n const timeSinceLastStart = this._state === SoundState.Paused ? 0 : this.engine.currentTime - this._enginePlayTime;\n return this._enginePauseTime + timeSinceLastStart + this._options.startOffset;\n }\n\n public set currentTime(value: number) {\n const restart = this._state === SoundState.Starting || this._state === SoundState.Started;\n\n if (restart) {\n this.stop();\n this._deinitSourceNode();\n }\n\n this._options.startOffset = value;\n\n if (restart) {\n this.play();\n }\n }\n\n public get _outNode(): Nullable<AudioNode> {\n return this._volumeNode;\n }\n\n /** @internal */\n public set pitch(value: number) {\n if (this._sourceNode) {\n this.engine._setAudioParam(this._sourceNode.detune, value);\n }\n }\n\n /** @internal */\n public set playbackRate(value: number) {\n if (this._sourceNode) {\n this.engine._setAudioParam(this._sourceNode.playbackRate, value);\n }\n }\n\n /** @internal */\n public get startTime(): number {\n if (this._state === SoundState.Stopped) {\n return 0;\n }\n\n return this._enginePlayTime;\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this._sourceNode = null;\n\n this.stop();\n\n this._deinitSourceNode();\n\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_WebAudioStaticSoundInstance\";\n }\n\n /** @internal */\n public play(options: Partial<IStaticSoundPlayOptions> = {}): void {\n if (this._state === SoundState.Started) {\n return;\n }\n\n if (options.duration !== undefined) {\n this._options.duration = options.duration;\n }\n if (options.loop !== undefined) {\n this._options.loop = options.loop;\n }\n if (options.loopStart !== undefined) {\n this._options.loopStart = options.loopStart;\n }\n if (options.loopEnd !== undefined) {\n this._options.loopEnd = options.loopEnd;\n }\n if (options.startOffset !== undefined) {\n this._options.startOffset = options.startOffset;\n }\n\n let startOffset = this._options.startOffset;\n\n if (this._state === SoundState.Paused) {\n startOffset += this.currentTime;\n startOffset %= this._sound.buffer.duration;\n }\n\n this._enginePlayTime = this.engine.currentTime + (options.waitTime ?? 0);\n\n this._volumeNode.gain.value = options.volume ?? 1;\n\n this._initSourceNode();\n\n if (this.engine.state === \"running\") {\n this._setState(SoundState.Started);\n this._sourceNode?.start(this._enginePlayTime, startOffset, this._options.duration > 0 ? this._options.duration : undefined);\n } else if (this._options.loop) {\n this._setState(SoundState.Starting);\n this.engine.stateChangedObservable.add(this._onEngineStateChanged);\n }\n }\n\n /** @internal */\n public pause(): void {\n if (this._state === SoundState.Paused) {\n return;\n }\n\n this._setState(SoundState.Paused);\n this._enginePauseTime += this.engine.currentTime - this._enginePlayTime;\n\n this._sourceNode?.stop();\n this._deinitSourceNode();\n }\n\n /** @internal */\n public resume(): void {\n if (this._state === SoundState.Paused) {\n this.play();\n }\n }\n\n /** @internal */\n public stop(options: Partial<IStaticSoundStopOptions> = {}): void {\n if (this._state === SoundState.Stopped) {\n return;\n }\n\n this._setState(SoundState.Stopped);\n\n const engineStopTime = this.engine.currentTime + (options.waitTime ?? 0);\n this._sourceNode?.stop(engineStopTime);\n\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n }\n\n protected override _connect(node: AbstractAudioNode): boolean {\n const connected = super._connect(node);\n\n if (!connected) {\n return false;\n }\n\n // If the wrapped node is not available now, it will be connected later by the sound's subgraph.\n if (node instanceof _WebAudioStaticSound && node._inNode) {\n this._outNode?.connect(node._inNode);\n }\n\n return true;\n }\n\n protected override _disconnect(node: AbstractAudioNode): boolean {\n const disconnected = super._disconnect(node);\n\n if (!disconnected) {\n return false;\n }\n\n if (node instanceof _WebAudioStaticSound && node._inNode) {\n this._outNode?.disconnect(node._inNode);\n }\n\n return true;\n }\n\n protected _onEnded = () => {\n this._enginePlayTime = 0;\n\n this.onEndedObservable.notifyObservers(this);\n this._deinitSourceNode();\n };\n\n private _deinitSourceNode(): void {\n if (!this._sourceNode) {\n return;\n }\n\n if (!this._disconnect(this._sound)) {\n throw new Error(\"Disconnect failed\");\n }\n\n this._sourceNode.disconnect(this._volumeNode);\n this._sourceNode.removeEventListener(\"ended\", this._onEnded);\n\n this._sourceNode = null;\n }\n\n private _initSourceNode(): void {\n if (!this._sourceNode) {\n this._sourceNode = new AudioBufferSourceNode(this._sound._audioContext, { buffer: this._sound.buffer._audioBuffer });\n\n this._sourceNode.addEventListener(\"ended\", this._onEnded, { once: true });\n this._sourceNode.connect(this._volumeNode);\n\n if (!this._connect(this._sound)) {\n throw new Error(\"Connect failed\");\n }\n }\n\n const node = this._sourceNode;\n node.detune.value = this._sound.pitch;\n node.loop = this._options.loop;\n node.loopEnd = this._options.loopEnd;\n node.loopStart = this._options.loopStart;\n node.playbackRate.value = this._sound.playbackRate;\n }\n\n private _onEngineStateChanged = () => {\n if (this.engine.state !== \"running\") {\n return;\n }\n\n if (this._options.loop && this.state === SoundState.Starting) {\n this.play();\n }\n\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"webAudioStaticSound.js","sourceRoot":"","sources":["../../../../../dev/core/src/AudioV2/webAudio/webAudioStaticSound.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\nimport type { AbstractAudioNode } from \"../abstractAudio/abstractAudioNode\";\nimport type { IStaticSoundOptions, IStaticSoundPlayOptions, IStaticSoundStopOptions, IStaticSoundStoredOptions } from \"../abstractAudio/staticSound\";\nimport { StaticSound } from \"../abstractAudio/staticSound\";\nimport type { IStaticSoundBufferOptions } from \"../abstractAudio/staticSoundBuffer\";\nimport { StaticSoundBuffer } from \"../abstractAudio/staticSoundBuffer\";\nimport type { IStaticSoundInstanceOptions } from \"../abstractAudio/staticSoundInstance\";\nimport { _StaticSoundInstance } from \"../abstractAudio/staticSoundInstance\";\nimport { _HasSpatialAudioOptions } from \"../abstractAudio/subProperties/abstractSpatialAudio\";\nimport type { _SpatialAudio } from \"../abstractAudio/subProperties/spatialAudio\";\nimport { _StereoAudio } from \"../abstractAudio/subProperties/stereoAudio\";\nimport { _CleanUrl, _FileExtensionRegex } from \"../audioUtils\";\nimport { SoundState } from \"../soundState\";\nimport { _WebAudioBusAndSoundSubGraph } from \"./subNodes/webAudioBusAndSoundSubGraph\";\nimport { _SpatialWebAudio } from \"./subProperties/spatialWebAudio\";\nimport type { _WebAudioEngine } from \"./webAudioEngine\";\nimport type { IWebAudioInNode, IWebAudioOutNode, IWebAudioSuperNode } from \"./webAudioNode\";\n\ntype StaticSoundSourceType = ArrayBuffer | AudioBuffer | StaticSoundBuffer | string | string[];\n\n/** @internal */\nexport class _WebAudioStaticSound extends StaticSound implements IWebAudioSuperNode {\n private _buffer: _WebAudioStaticSoundBuffer;\n private _spatial: Nullable<_SpatialWebAudio> = null;\n private readonly _spatialAutoUpdate: boolean = true;\n private readonly _spatialMinUpdateTime: number = 0;\n private _stereo: Nullable<_StereoAudio> = null;\n\n protected override readonly _options: IStaticSoundStoredOptions;\n protected _subGraph: _WebAudioBusAndSoundSubGraph;\n\n /** @internal */\n public _audioContext: AudioContext | OfflineAudioContext;\n\n /** @internal */\n public override readonly engine: _WebAudioEngine;\n\n /** @internal */\n public constructor(name: string, engine: _WebAudioEngine, options: Partial<IStaticSoundOptions>) {\n super(name, engine);\n\n if (typeof options.spatialAutoUpdate === \"boolean\") {\n this._spatialAutoUpdate = options.spatialAutoUpdate;\n }\n\n if (typeof options.spatialMinUpdateTime === \"number\") {\n this._spatialMinUpdateTime = options.spatialMinUpdateTime;\n }\n\n this._options = {\n autoplay: options.autoplay ?? false,\n duration: options.duration ?? 0,\n loop: options.loop ?? false,\n loopEnd: options.loopEnd ?? 0,\n loopStart: options.loopStart ?? 0,\n maxInstances: options.maxInstances ?? Infinity,\n pitch: options.pitch ?? 0,\n playbackRate: options.playbackRate ?? 1,\n startOffset: options.startOffset ?? 0,\n };\n\n this._subGraph = new _WebAudioStaticSound._SubGraph(this);\n }\n\n /** @internal */\n public async _initAsync(source: StaticSoundSourceType, options: Partial<IStaticSoundOptions>): Promise<void> {\n this._audioContext = this.engine._audioContext;\n\n if (source instanceof _WebAudioStaticSoundBuffer) {\n this._buffer = source;\n } else if (typeof source === \"string\" || Array.isArray(source) || source instanceof ArrayBuffer || source instanceof AudioBuffer) {\n this._buffer = (await this.engine.createSoundBufferAsync(source, options)) as _WebAudioStaticSoundBuffer;\n }\n\n if (options.outBus) {\n this.outBus = options.outBus;\n } else if (options.outBusAutoDefault !== false) {\n await this.engine.isReadyPromise;\n this.outBus = this.engine.defaultMainBus;\n }\n\n await this._subGraph.initAsync(options);\n\n if (_HasSpatialAudioOptions(options)) {\n this._initSpatialProperty();\n }\n\n if (options.autoplay) {\n this.play();\n }\n\n this.engine._addNode(this);\n }\n\n /** @internal */\n public get buffer(): _WebAudioStaticSoundBuffer {\n return this._buffer;\n }\n\n /** @internal */\n public get _inNode() {\n return this._subGraph._inNode;\n }\n\n /** @internal */\n public get _outNode() {\n return this._subGraph._outNode;\n }\n\n /** @internal */\n public override get spatial(): _SpatialAudio {\n if (this._spatial) {\n return this._spatial;\n }\n return this._initSpatialProperty();\n }\n\n /** @internal */\n public override get stereo(): _StereoAudio {\n return this._stereo ?? (this._stereo = new _StereoAudio(this._subGraph));\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this._spatial?.dispose();\n this._spatial = null;\n\n this._stereo = null;\n\n this._subGraph.dispose();\n\n this.engine._removeNode(this);\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_WebAudioStaticSound\";\n }\n\n protected _createInstance(): _WebAudioStaticSoundInstance {\n return new _WebAudioStaticSoundInstance(this, this._options);\n }\n\n protected override _connect(node: IWebAudioInNode): boolean {\n const connected = super._connect(node);\n\n if (!connected) {\n return false;\n }\n\n // If the wrapped node is not available now, it will be connected later by the subgraph.\n if (node._inNode) {\n this._outNode?.connect(node._inNode);\n }\n\n return true;\n }\n\n protected override _disconnect(node: IWebAudioInNode): boolean {\n const disconnected = super._disconnect(node);\n\n if (!disconnected) {\n return false;\n }\n\n if (node._inNode) {\n this._outNode?.disconnect(node._inNode);\n }\n\n return true;\n }\n\n private _initSpatialProperty(): _SpatialAudio {\n if (!this._spatial) {\n this._spatial = new _SpatialWebAudio(this._subGraph, this._spatialAutoUpdate, this._spatialMinUpdateTime);\n }\n\n return this._spatial;\n }\n\n private static _SubGraph = class extends _WebAudioBusAndSoundSubGraph {\n protected override _owner: _WebAudioStaticSound;\n\n protected get _downstreamNodes(): Nullable<Set<AbstractAudioNode>> {\n return this._owner._downstreamNodes ?? null;\n }\n\n protected get _upstreamNodes(): Nullable<Set<AbstractAudioNode>> {\n return this._owner._upstreamNodes ?? null;\n }\n };\n}\n\n/** @internal */\nexport class _WebAudioStaticSoundBuffer extends StaticSoundBuffer {\n /** @internal */\n public _audioBuffer: AudioBuffer;\n\n /** @internal */\n public override readonly engine: _WebAudioEngine;\n\n /** @internal */\n public constructor(engine: _WebAudioEngine) {\n super(engine);\n }\n\n public async _initAsync(source: StaticSoundSourceType, options: Partial<IStaticSoundBufferOptions>): Promise<void> {\n if (source instanceof AudioBuffer) {\n this._audioBuffer = source;\n } else if (typeof source === \"string\") {\n await this._initFromUrlAsync(source);\n } else if (Array.isArray(source)) {\n await this._initFromUrlsAsync(source, options.skipCodecCheck ?? false);\n } else if (source instanceof ArrayBuffer) {\n await this._initFromArrayBufferAsync(source);\n }\n }\n\n /** @internal */\n public get channelCount(): number {\n return this._audioBuffer.numberOfChannels;\n }\n\n /** @internal */\n public get duration(): number {\n return this._audioBuffer.duration;\n }\n\n /** @internal */\n public get length(): number {\n return this._audioBuffer.length;\n }\n\n /** @internal */\n public get sampleRate(): number {\n return this._audioBuffer.sampleRate;\n }\n\n private async _initFromArrayBufferAsync(arrayBuffer: ArrayBuffer): Promise<void> {\n this._audioBuffer = await this.engine._audioContext.decodeAudioData(arrayBuffer);\n }\n\n private async _initFromUrlAsync(url: string): Promise<void> {\n url = _CleanUrl(url);\n await this._initFromArrayBufferAsync(await (await fetch(url)).arrayBuffer());\n }\n\n private async _initFromUrlsAsync(urls: string[], skipCodecCheck: boolean): Promise<void> {\n for (const url of urls) {\n if (skipCodecCheck) {\n // eslint-disable-next-line no-await-in-loop\n await this._initFromUrlAsync(url);\n } else {\n const matches = url.match(_FileExtensionRegex);\n const format = matches?.at(1);\n if (format && this.engine.isFormatValid(format)) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await this._initFromUrlAsync(url);\n } catch {\n if (format && 0 < format.length) {\n this.engine.flagInvalidFormat(format);\n }\n }\n }\n }\n\n if (this._audioBuffer) {\n break;\n }\n }\n }\n}\n\n/** @internal */\nclass _WebAudioStaticSoundInstance extends _StaticSoundInstance implements IWebAudioOutNode {\n private _enginePlayTime: number = 0;\n private _enginePauseTime: number = 0;\n private _sourceNode: Nullable<AudioBufferSourceNode> = null;\n private _volumeNode: GainNode;\n\n protected override readonly _options: IStaticSoundInstanceOptions;\n protected override _sound: _WebAudioStaticSound;\n\n /** @internal */\n public override readonly engine: _WebAudioEngine;\n\n public constructor(sound: _WebAudioStaticSound, options: IStaticSoundInstanceOptions) {\n super(sound);\n\n this._options = options;\n\n this._volumeNode = new GainNode(sound._audioContext);\n this._initSourceNode();\n }\n\n /** @internal */\n public get currentTime(): number {\n if (this._state === SoundState.Stopped) {\n return 0;\n }\n\n const timeSinceLastStart = this._state === SoundState.Paused ? 0 : this.engine.currentTime - this._enginePlayTime;\n return this._enginePauseTime + timeSinceLastStart + this._options.startOffset;\n }\n\n public set currentTime(value: number) {\n const restart = this._state === SoundState.Starting || this._state === SoundState.Started;\n\n if (restart) {\n this.stop();\n this._deinitSourceNode();\n }\n\n this._options.startOffset = value;\n\n if (restart) {\n this.play();\n }\n }\n\n public get _outNode(): Nullable<AudioNode> {\n return this._volumeNode;\n }\n\n /** @internal */\n public set pitch(value: number) {\n if (this._sourceNode) {\n this.engine._setAudioParam(this._sourceNode.detune, value);\n }\n }\n\n /** @internal */\n public set playbackRate(value: number) {\n if (this._sourceNode) {\n this.engine._setAudioParam(this._sourceNode.playbackRate, value);\n }\n }\n\n /** @internal */\n public get startTime(): number {\n if (this._state === SoundState.Stopped) {\n return 0;\n }\n\n return this._enginePlayTime;\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this._sourceNode = null;\n\n this.stop();\n\n this._deinitSourceNode();\n\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_WebAudioStaticSoundInstance\";\n }\n\n /** @internal */\n public play(options: Partial<IStaticSoundPlayOptions> = {}): void {\n if (this._state === SoundState.Started) {\n return;\n }\n\n if (options.duration !== undefined) {\n this._options.duration = options.duration;\n }\n if (options.loop !== undefined) {\n this._options.loop = options.loop;\n }\n if (options.loopStart !== undefined) {\n this._options.loopStart = options.loopStart;\n }\n if (options.loopEnd !== undefined) {\n this._options.loopEnd = options.loopEnd;\n }\n if (options.startOffset !== undefined) {\n this._options.startOffset = options.startOffset;\n }\n\n let startOffset = this._options.startOffset;\n\n if (this._state === SoundState.Paused) {\n startOffset += this.currentTime;\n startOffset %= this._sound.buffer.duration;\n }\n\n this._enginePlayTime = this.engine.currentTime + (options.waitTime ?? 0);\n\n this._volumeNode.gain.value = options.volume ?? 1;\n\n this._initSourceNode();\n\n if (this.engine.state === \"running\") {\n this._setState(SoundState.Started);\n this._sourceNode?.start(this._enginePlayTime, startOffset, this._options.duration > 0 ? this._options.duration : undefined);\n } else if (this._options.loop) {\n this._setState(SoundState.Starting);\n this.engine.stateChangedObservable.add(this._onEngineStateChanged);\n }\n }\n\n /** @internal */\n public pause(): void {\n if (this._state === SoundState.Paused) {\n return;\n }\n\n this._setState(SoundState.Paused);\n this._enginePauseTime += this.engine.currentTime - this._enginePlayTime;\n\n this._sourceNode?.stop();\n this._deinitSourceNode();\n }\n\n /** @internal */\n public resume(): void {\n if (this._state === SoundState.Paused) {\n this.play();\n }\n }\n\n /** @internal */\n public stop(options: Partial<IStaticSoundStopOptions> = {}): void {\n if (this._state === SoundState.Stopped) {\n return;\n }\n\n this._setState(SoundState.Stopped);\n\n const engineStopTime = this.engine.currentTime + (options.waitTime ?? 0);\n this._sourceNode?.stop(engineStopTime);\n\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n }\n\n protected override _connect(node: AbstractAudioNode): boolean {\n const connected = super._connect(node);\n\n if (!connected) {\n return false;\n }\n\n // If the wrapped node is not available now, it will be connected later by the sound's subgraph.\n if (node instanceof _WebAudioStaticSound && node._inNode) {\n this._outNode?.connect(node._inNode);\n }\n\n return true;\n }\n\n protected override _disconnect(node: AbstractAudioNode): boolean {\n const disconnected = super._disconnect(node);\n\n if (!disconnected) {\n return false;\n }\n\n if (node instanceof _WebAudioStaticSound && node._inNode) {\n this._outNode?.disconnect(node._inNode);\n }\n\n return true;\n }\n\n protected _onEnded = () => {\n this._enginePlayTime = 0;\n\n this.onEndedObservable.notifyObservers(this);\n this._deinitSourceNode();\n };\n\n private _deinitSourceNode(): void {\n if (!this._sourceNode) {\n return;\n }\n\n if (!this._disconnect(this._sound)) {\n throw new Error(\"Disconnect failed\");\n }\n\n this._sourceNode.disconnect(this._volumeNode);\n this._sourceNode.removeEventListener(\"ended\", this._onEnded);\n\n this._sourceNode = null;\n }\n\n private _initSourceNode(): void {\n if (!this._sourceNode) {\n this._sourceNode = new AudioBufferSourceNode(this._sound._audioContext, { buffer: this._sound.buffer._audioBuffer });\n\n this._sourceNode.addEventListener(\"ended\", this._onEnded, { once: true });\n this._sourceNode.connect(this._volumeNode);\n\n if (!this._connect(this._sound)) {\n throw new Error(\"Connect failed\");\n }\n }\n\n const node = this._sourceNode;\n node.detune.value = this._sound.pitch;\n node.loop = this._options.loop;\n node.loopEnd = this._options.loopEnd;\n node.loopStart = this._options.loopStart;\n node.playbackRate.value = this._sound.playbackRate;\n }\n\n private _onEngineStateChanged = () => {\n if (this.engine.state !== \"running\") {\n return;\n }\n\n if (this._options.loop && this.state === SoundState.Starting) {\n this.play();\n }\n\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n };\n}\n"]}
|
|
@@ -42,7 +42,7 @@ export class _WebAudioStreamingSound extends StreamingSound {
|
|
|
42
42
|
if (options.outBus) {
|
|
43
43
|
this.outBus = options.outBus;
|
|
44
44
|
}
|
|
45
|
-
else {
|
|
45
|
+
else if (options.outBusAutoDefault !== false) {
|
|
46
46
|
await this.engine.isReadyPromise;
|
|
47
47
|
this.outBus = this.engine.defaultMainBus;
|
|
48
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webAudioStreamingSound.js","sourceRoot":"","sources":["../../../../../dev/core/src/AudioV2/webAudio/webAudioStreamingSound.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\nimport { Tools } from \"../../Misc/tools\";\nimport type { Nullable } from \"../../types\";\nimport type { AbstractAudioNode } from \"../abstractAudio/abstractAudioNode\";\nimport type {} from \"../abstractAudio/abstractSound\";\nimport type { IStreamingSoundOptions, IStreamingSoundPlayOptions, IStreamingSoundStoredOptions } from \"../abstractAudio/streamingSound\";\nimport { StreamingSound } from \"../abstractAudio/streamingSound\";\nimport { _StreamingSoundInstance } from \"../abstractAudio/streamingSoundInstance\";\nimport { _HasSpatialAudioOptions } from \"../abstractAudio/subProperties/abstractSpatialAudio\";\nimport type { _SpatialAudio } from \"../abstractAudio/subProperties/spatialAudio\";\nimport { _StereoAudio } from \"../abstractAudio/subProperties/stereoAudio\";\nimport { _CleanUrl } from \"../audioUtils\";\nimport { SoundState } from \"../soundState\";\nimport { _WebAudioBusAndSoundSubGraph } from \"./subNodes/webAudioBusAndSoundSubGraph\";\nimport { _SpatialWebAudio } from \"./subProperties/spatialWebAudio\";\nimport type { _WebAudioEngine } from \"./webAudioEngine\";\nimport type { IWebAudioInNode, IWebAudioOutNode, IWebAudioSuperNode } from \"./webAudioNode\";\n\ntype StreamingSoundSourceType = HTMLMediaElement | string | string[];\n\n/** @internal */\nexport class _WebAudioStreamingSound extends StreamingSound implements IWebAudioSuperNode {\n private _spatial: Nullable<_SpatialAudio> = null;\n private readonly _spatialAutoUpdate: boolean = true;\n private readonly _spatialMinUpdateTime: number = 0;\n private _stereo: Nullable<_StereoAudio> = null;\n\n protected override readonly _options: IStreamingSoundStoredOptions;\n protected _subGraph: _WebAudioBusAndSoundSubGraph;\n\n /** @internal */\n public _audioContext: AudioContext;\n\n /** @internal */\n public override readonly engine: _WebAudioEngine;\n\n /** @internal */\n public _source: StreamingSoundSourceType;\n\n /** @internal */\n public constructor(name: string, engine: _WebAudioEngine, options: Partial<IStreamingSoundOptions>) {\n super(name, engine);\n\n if (typeof options.spatialAutoUpdate === \"boolean\") {\n this._spatialAutoUpdate = options.spatialAutoUpdate;\n }\n\n if (typeof options.spatialMinUpdateTime === \"number\") {\n this._spatialMinUpdateTime = options.spatialMinUpdateTime;\n }\n\n this._options = {\n autoplay: options.autoplay ?? false,\n loop: options.loop ?? false,\n maxInstances: options.maxInstances ?? Infinity,\n preloadCount: options.preloadCount ?? 1,\n startOffset: options.startOffset ?? 0,\n };\n\n this._subGraph = new _WebAudioStreamingSound._SubGraph(this);\n }\n\n /** @internal */\n public async _initAsync(source: StreamingSoundSourceType, options: Partial<IStreamingSoundOptions>): Promise<void> {\n const audioContext = this.engine._audioContext;\n\n if (!(audioContext instanceof AudioContext)) {\n throw new Error(\"Unsupported audio context type.\");\n }\n\n this._audioContext = audioContext;\n this._source = source;\n\n if (options.outBus) {\n this.outBus = options.outBus;\n } else {\n await this.engine.isReadyPromise;\n this.outBus = this.engine.defaultMainBus;\n }\n\n await this._subGraph.initAsync(options);\n\n if (_HasSpatialAudioOptions(options)) {\n this._initSpatialProperty();\n }\n\n if (this.preloadCount) {\n await this.preloadInstancesAsync(this.preloadCount);\n }\n\n if (options.autoplay) {\n this.play(options);\n }\n\n this.engine._addNode(this);\n }\n\n /** @internal */\n public get _inNode() {\n return this._subGraph._inNode;\n }\n\n /** @internal */\n public get _outNode() {\n return this._subGraph._outNode;\n }\n\n /** @internal */\n public override get spatial(): _SpatialAudio {\n if (this._spatial) {\n return this._spatial;\n }\n return this._initSpatialProperty();\n }\n\n /** @internal */\n public override get stereo(): _StereoAudio {\n return this._stereo ?? (this._stereo = new _StereoAudio(this._subGraph));\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this._spatial = null;\n this._stereo = null;\n\n this._subGraph.dispose();\n\n this.engine._removeNode(this);\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_WebAudioStreamingSound\";\n }\n\n protected _createInstance(): _WebAudioStreamingSoundInstance {\n return new _WebAudioStreamingSoundInstance(this, this._options);\n }\n\n protected override _connect(node: IWebAudioInNode): boolean {\n const connected = super._connect(node);\n\n if (!connected) {\n return false;\n }\n\n // If the wrapped node is not available now, it will be connected later by the subgraph.\n if (node._inNode) {\n this._outNode?.connect(node._inNode);\n }\n\n return true;\n }\n\n protected override _disconnect(node: IWebAudioInNode): boolean {\n const disconnected = super._disconnect(node);\n\n if (!disconnected) {\n return false;\n }\n\n if (node._inNode) {\n this._outNode?.disconnect(node._inNode);\n }\n\n return true;\n }\n\n private _initSpatialProperty(): _SpatialAudio {\n if (!this._spatial) {\n this._spatial = new _SpatialWebAudio(this._subGraph, this._spatialAutoUpdate, this._spatialMinUpdateTime);\n }\n\n return this._spatial;\n }\n\n private static _SubGraph = class extends _WebAudioBusAndSoundSubGraph {\n protected override _owner: _WebAudioStreamingSound;\n\n protected get _downstreamNodes(): Nullable<Set<AbstractAudioNode>> {\n return this._owner._downstreamNodes ?? null;\n }\n\n protected get _upstreamNodes(): Nullable<Set<AbstractAudioNode>> {\n return this._owner._upstreamNodes ?? null;\n }\n };\n}\n\n/** @internal */\nclass _WebAudioStreamingSoundInstance extends _StreamingSoundInstance implements IWebAudioOutNode {\n private _currentTimeChangedWhilePaused = false;\n private _enginePlayTime: number = Infinity;\n private _enginePauseTime: number = 0;\n private _isReady: boolean = false;\n private _isReadyPromise: Promise<HTMLMediaElement> = new Promise((resolve, reject) => {\n this._resolveIsReadyPromise = resolve;\n this._rejectIsReadyPromise = reject;\n });\n private _mediaElement: HTMLMediaElement;\n private _sourceNode: Nullable<MediaElementAudioSourceNode>;\n private _volumeNode: GainNode;\n\n protected override readonly _options: IStreamingSoundStoredOptions;\n protected override _sound: _WebAudioStreamingSound;\n\n /** @internal */\n public override readonly engine: _WebAudioEngine;\n\n public constructor(sound: _WebAudioStreamingSound, options: IStreamingSoundStoredOptions) {\n super(sound);\n\n this._options = options;\n this._volumeNode = new GainNode(sound._audioContext);\n\n if (typeof sound._source === \"string\") {\n this._initFromUrl(sound._source);\n } else if (Array.isArray(sound._source)) {\n this._initFromUrls(sound._source);\n } else if (sound._source instanceof HTMLMediaElement) {\n this._initFromMediaElement(sound._source);\n }\n }\n\n /** @internal */\n public get currentTime(): number {\n if (this._state === SoundState.Stopped) {\n return 0;\n }\n\n const timeSinceLastStart = this._state === SoundState.Paused ? 0 : this.engine.currentTime - this._enginePlayTime;\n return this._enginePauseTime + timeSinceLastStart + this._options.startOffset;\n }\n\n public set currentTime(value: number) {\n const restart = this._state === SoundState.Starting || this._state === SoundState.Started;\n\n if (restart) {\n this._mediaElement.pause();\n this._setState(SoundState.Stopped);\n }\n\n this._options.startOffset = value;\n\n if (restart) {\n this.play({ startOffset: value });\n } else if (this._state === SoundState.Paused) {\n this._currentTimeChangedWhilePaused = true;\n }\n }\n\n public get _outNode(): Nullable<AudioNode> {\n return this._volumeNode;\n }\n\n /** @internal */\n public get startTime(): number {\n if (this._state === SoundState.Stopped) {\n return 0;\n }\n\n return this._enginePlayTime;\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this.stop();\n\n this._sourceNode?.disconnect(this._volumeNode);\n this._sourceNode = null;\n\n this._mediaElement.removeEventListener(\"error\", this._onError);\n this._mediaElement.removeEventListener(\"ended\", this._onEnded);\n this._mediaElement.removeEventListener(\"canplaythrough\", this._onCanPlayThrough);\n\n for (const source of Array.from(this._mediaElement.children)) {\n this._mediaElement.removeChild(source);\n }\n\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n this.engine.userGestureObservable.removeCallback(this._onUserGesture);\n }\n\n /** @internal */\n public play(options: Partial<IStreamingSoundPlayOptions> = {}): void {\n if (this._state === SoundState.Started) {\n return;\n }\n\n if (options.loop !== undefined) {\n this._options.loop = options.loop;\n }\n this._mediaElement.loop = this._options.loop;\n\n let startOffset = options.startOffset;\n\n if (this._currentTimeChangedWhilePaused) {\n startOffset = this._options.startOffset;\n this._currentTimeChangedWhilePaused = false;\n } else if (this._state === SoundState.Paused) {\n startOffset = this.currentTime + this._options.startOffset;\n }\n\n if (startOffset && startOffset > 0) {\n this._mediaElement.currentTime = startOffset;\n }\n\n this._volumeNode.gain.value = options.volume ?? 1;\n\n this._play();\n }\n\n /** @internal */\n public pause(): void {\n if (this._state !== SoundState.Starting && this._state !== SoundState.Started) {\n return;\n }\n\n this._setState(SoundState.Paused);\n this._enginePauseTime += this.engine.currentTime - this._enginePlayTime;\n\n this._mediaElement.pause();\n }\n\n /** @internal */\n public resume(): void {\n if (this._state === SoundState.Paused) {\n this.play();\n } else if (this._currentTimeChangedWhilePaused) {\n this.play();\n }\n }\n\n /** @internal */\n public override stop(): void {\n if (this._state === SoundState.Stopped) {\n return;\n }\n\n this._stop();\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_WebAudioStreamingSoundInstance\";\n }\n\n protected override _connect(node: AbstractAudioNode): boolean {\n const connected = super._connect(node);\n\n if (!connected) {\n return false;\n }\n\n // If the wrapped node is not available now, it will be connected later by the sound's subgraph.\n if (node instanceof _WebAudioStreamingSound && node._inNode) {\n this._outNode?.connect(node._inNode);\n }\n\n return true;\n }\n\n protected override _disconnect(node: AbstractAudioNode): boolean {\n const disconnected = super._disconnect(node);\n\n if (!disconnected) {\n return false;\n }\n\n if (node instanceof _WebAudioStreamingSound && node._inNode) {\n this._outNode?.disconnect(node._inNode);\n }\n\n return true;\n }\n\n private _initFromMediaElement(mediaElement: HTMLMediaElement): void {\n Tools.SetCorsBehavior(mediaElement.currentSrc, mediaElement);\n\n mediaElement.controls = false;\n mediaElement.loop = this._options.loop;\n mediaElement.preload = \"auto\";\n\n mediaElement.addEventListener(\"canplaythrough\", this._onCanPlayThrough, { once: true });\n mediaElement.addEventListener(\"ended\", this._onEnded, { once: true });\n mediaElement.addEventListener(\"error\", this._onError, { once: true });\n\n mediaElement.load();\n\n this._sourceNode = new MediaElementAudioSourceNode(this._sound._audioContext, { mediaElement: mediaElement });\n this._sourceNode.connect(this._volumeNode);\n\n if (!this._connect(this._sound)) {\n throw new Error(\"Connect failed\");\n }\n\n this._mediaElement = mediaElement;\n }\n\n private _initFromUrl(url: string): void {\n const audio = new Audio(_CleanUrl(url));\n this._initFromMediaElement(audio);\n }\n\n private _initFromUrls(urls: string[]): void {\n const audio = new Audio();\n\n for (const url of urls) {\n const source = document.createElement(\"source\");\n source.src = _CleanUrl(url);\n audio.appendChild(source);\n }\n\n this._initFromMediaElement(audio);\n }\n\n private _onCanPlayThrough: () => void = () => {\n this._isReady = true;\n this._resolveIsReadyPromise(this._mediaElement);\n this.onReadyObservable.notifyObservers(this);\n };\n\n private _onEnded: () => void = () => {\n this.onEndedObservable.notifyObservers(this);\n this.dispose();\n };\n\n private _onError: (reason: any) => void = (reason: any) => {\n this._setState(SoundState.FailedToStart);\n this.onErrorObservable.notifyObservers(reason);\n this._rejectIsReadyPromise(reason);\n this.dispose();\n };\n\n private _onEngineStateChanged = () => {\n if (this.engine.state !== \"running\") {\n return;\n }\n\n if (this._options.loop && this.state === SoundState.Starting) {\n this.play();\n }\n\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n };\n\n private _onUserGesture = () => {\n this.play();\n };\n\n private _play(): void {\n this._setState(SoundState.Starting);\n\n if (!this._isReady) {\n this._playWhenReady();\n return;\n }\n\n if (this._state !== SoundState.Starting) {\n return;\n }\n\n if (this.engine.state === \"running\") {\n const result = this._mediaElement.play();\n\n this._enginePlayTime = this.engine.currentTime;\n this._setState(SoundState.Started);\n\n // It's possible that the play() method fails on Safari, even if the audio engine's state is \"running\".\n // This occurs when the audio context is paused by the system and resumed automatically by the audio engine\n // without a user interaction (e.g. when the Vision Pro exits and reenters immersive mode).\n // eslint-disable-next-line github/no-then\n result.catch(() => {\n this._setState(SoundState.FailedToStart);\n\n if (this._options.loop) {\n this.engine.userGestureObservable.addOnce(this._onUserGesture);\n }\n });\n } else if (this._options.loop) {\n this.engine.stateChangedObservable.add(this._onEngineStateChanged);\n } else {\n this.stop();\n this._setState(SoundState.FailedToStart);\n }\n }\n\n private _playWhenReady(): void {\n this._isReadyPromise\n // eslint-disable-next-line github/no-then\n .then(() => {\n this._play();\n })\n // eslint-disable-next-line github/no-then\n .catch(() => {\n Logger.Error(\"Streaming sound instance failed to play\");\n this._setState(SoundState.FailedToStart);\n });\n }\n\n private _rejectIsReadyPromise: (reason?: any) => void;\n private _resolveIsReadyPromise: (mediaElement: HTMLMediaElement) => void;\n\n private _stop(): void {\n this._mediaElement.pause();\n this._setState(SoundState.Stopped);\n this._onEnded();\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"webAudioStreamingSound.js","sourceRoot":"","sources":["../../../../../dev/core/src/AudioV2/webAudio/webAudioStreamingSound.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\nimport { Tools } from \"../../Misc/tools\";\nimport type { Nullable } from \"../../types\";\nimport type { AbstractAudioNode } from \"../abstractAudio/abstractAudioNode\";\nimport type {} from \"../abstractAudio/abstractSound\";\nimport type { IStreamingSoundOptions, IStreamingSoundPlayOptions, IStreamingSoundStoredOptions } from \"../abstractAudio/streamingSound\";\nimport { StreamingSound } from \"../abstractAudio/streamingSound\";\nimport { _StreamingSoundInstance } from \"../abstractAudio/streamingSoundInstance\";\nimport { _HasSpatialAudioOptions } from \"../abstractAudio/subProperties/abstractSpatialAudio\";\nimport type { _SpatialAudio } from \"../abstractAudio/subProperties/spatialAudio\";\nimport { _StereoAudio } from \"../abstractAudio/subProperties/stereoAudio\";\nimport { _CleanUrl } from \"../audioUtils\";\nimport { SoundState } from \"../soundState\";\nimport { _WebAudioBusAndSoundSubGraph } from \"./subNodes/webAudioBusAndSoundSubGraph\";\nimport { _SpatialWebAudio } from \"./subProperties/spatialWebAudio\";\nimport type { _WebAudioEngine } from \"./webAudioEngine\";\nimport type { IWebAudioInNode, IWebAudioOutNode, IWebAudioSuperNode } from \"./webAudioNode\";\n\ntype StreamingSoundSourceType = HTMLMediaElement | string | string[];\n\n/** @internal */\nexport class _WebAudioStreamingSound extends StreamingSound implements IWebAudioSuperNode {\n private _spatial: Nullable<_SpatialAudio> = null;\n private readonly _spatialAutoUpdate: boolean = true;\n private readonly _spatialMinUpdateTime: number = 0;\n private _stereo: Nullable<_StereoAudio> = null;\n\n protected override readonly _options: IStreamingSoundStoredOptions;\n protected _subGraph: _WebAudioBusAndSoundSubGraph;\n\n /** @internal */\n public _audioContext: AudioContext;\n\n /** @internal */\n public override readonly engine: _WebAudioEngine;\n\n /** @internal */\n public _source: StreamingSoundSourceType;\n\n /** @internal */\n public constructor(name: string, engine: _WebAudioEngine, options: Partial<IStreamingSoundOptions>) {\n super(name, engine);\n\n if (typeof options.spatialAutoUpdate === \"boolean\") {\n this._spatialAutoUpdate = options.spatialAutoUpdate;\n }\n\n if (typeof options.spatialMinUpdateTime === \"number\") {\n this._spatialMinUpdateTime = options.spatialMinUpdateTime;\n }\n\n this._options = {\n autoplay: options.autoplay ?? false,\n loop: options.loop ?? false,\n maxInstances: options.maxInstances ?? Infinity,\n preloadCount: options.preloadCount ?? 1,\n startOffset: options.startOffset ?? 0,\n };\n\n this._subGraph = new _WebAudioStreamingSound._SubGraph(this);\n }\n\n /** @internal */\n public async _initAsync(source: StreamingSoundSourceType, options: Partial<IStreamingSoundOptions>): Promise<void> {\n const audioContext = this.engine._audioContext;\n\n if (!(audioContext instanceof AudioContext)) {\n throw new Error(\"Unsupported audio context type.\");\n }\n\n this._audioContext = audioContext;\n this._source = source;\n\n if (options.outBus) {\n this.outBus = options.outBus;\n } else if (options.outBusAutoDefault !== false) {\n await this.engine.isReadyPromise;\n this.outBus = this.engine.defaultMainBus;\n }\n\n await this._subGraph.initAsync(options);\n\n if (_HasSpatialAudioOptions(options)) {\n this._initSpatialProperty();\n }\n\n if (this.preloadCount) {\n await this.preloadInstancesAsync(this.preloadCount);\n }\n\n if (options.autoplay) {\n this.play(options);\n }\n\n this.engine._addNode(this);\n }\n\n /** @internal */\n public get _inNode() {\n return this._subGraph._inNode;\n }\n\n /** @internal */\n public get _outNode() {\n return this._subGraph._outNode;\n }\n\n /** @internal */\n public override get spatial(): _SpatialAudio {\n if (this._spatial) {\n return this._spatial;\n }\n return this._initSpatialProperty();\n }\n\n /** @internal */\n public override get stereo(): _StereoAudio {\n return this._stereo ?? (this._stereo = new _StereoAudio(this._subGraph));\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this._spatial = null;\n this._stereo = null;\n\n this._subGraph.dispose();\n\n this.engine._removeNode(this);\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_WebAudioStreamingSound\";\n }\n\n protected _createInstance(): _WebAudioStreamingSoundInstance {\n return new _WebAudioStreamingSoundInstance(this, this._options);\n }\n\n protected override _connect(node: IWebAudioInNode): boolean {\n const connected = super._connect(node);\n\n if (!connected) {\n return false;\n }\n\n // If the wrapped node is not available now, it will be connected later by the subgraph.\n if (node._inNode) {\n this._outNode?.connect(node._inNode);\n }\n\n return true;\n }\n\n protected override _disconnect(node: IWebAudioInNode): boolean {\n const disconnected = super._disconnect(node);\n\n if (!disconnected) {\n return false;\n }\n\n if (node._inNode) {\n this._outNode?.disconnect(node._inNode);\n }\n\n return true;\n }\n\n private _initSpatialProperty(): _SpatialAudio {\n if (!this._spatial) {\n this._spatial = new _SpatialWebAudio(this._subGraph, this._spatialAutoUpdate, this._spatialMinUpdateTime);\n }\n\n return this._spatial;\n }\n\n private static _SubGraph = class extends _WebAudioBusAndSoundSubGraph {\n protected override _owner: _WebAudioStreamingSound;\n\n protected get _downstreamNodes(): Nullable<Set<AbstractAudioNode>> {\n return this._owner._downstreamNodes ?? null;\n }\n\n protected get _upstreamNodes(): Nullable<Set<AbstractAudioNode>> {\n return this._owner._upstreamNodes ?? null;\n }\n };\n}\n\n/** @internal */\nclass _WebAudioStreamingSoundInstance extends _StreamingSoundInstance implements IWebAudioOutNode {\n private _currentTimeChangedWhilePaused = false;\n private _enginePlayTime: number = Infinity;\n private _enginePauseTime: number = 0;\n private _isReady: boolean = false;\n private _isReadyPromise: Promise<HTMLMediaElement> = new Promise((resolve, reject) => {\n this._resolveIsReadyPromise = resolve;\n this._rejectIsReadyPromise = reject;\n });\n private _mediaElement: HTMLMediaElement;\n private _sourceNode: Nullable<MediaElementAudioSourceNode>;\n private _volumeNode: GainNode;\n\n protected override readonly _options: IStreamingSoundStoredOptions;\n protected override _sound: _WebAudioStreamingSound;\n\n /** @internal */\n public override readonly engine: _WebAudioEngine;\n\n public constructor(sound: _WebAudioStreamingSound, options: IStreamingSoundStoredOptions) {\n super(sound);\n\n this._options = options;\n this._volumeNode = new GainNode(sound._audioContext);\n\n if (typeof sound._source === \"string\") {\n this._initFromUrl(sound._source);\n } else if (Array.isArray(sound._source)) {\n this._initFromUrls(sound._source);\n } else if (sound._source instanceof HTMLMediaElement) {\n this._initFromMediaElement(sound._source);\n }\n }\n\n /** @internal */\n public get currentTime(): number {\n if (this._state === SoundState.Stopped) {\n return 0;\n }\n\n const timeSinceLastStart = this._state === SoundState.Paused ? 0 : this.engine.currentTime - this._enginePlayTime;\n return this._enginePauseTime + timeSinceLastStart + this._options.startOffset;\n }\n\n public set currentTime(value: number) {\n const restart = this._state === SoundState.Starting || this._state === SoundState.Started;\n\n if (restart) {\n this._mediaElement.pause();\n this._setState(SoundState.Stopped);\n }\n\n this._options.startOffset = value;\n\n if (restart) {\n this.play({ startOffset: value });\n } else if (this._state === SoundState.Paused) {\n this._currentTimeChangedWhilePaused = true;\n }\n }\n\n public get _outNode(): Nullable<AudioNode> {\n return this._volumeNode;\n }\n\n /** @internal */\n public get startTime(): number {\n if (this._state === SoundState.Stopped) {\n return 0;\n }\n\n return this._enginePlayTime;\n }\n\n /** @internal */\n public override dispose(): void {\n super.dispose();\n\n this.stop();\n\n this._sourceNode?.disconnect(this._volumeNode);\n this._sourceNode = null;\n\n this._mediaElement.removeEventListener(\"error\", this._onError);\n this._mediaElement.removeEventListener(\"ended\", this._onEnded);\n this._mediaElement.removeEventListener(\"canplaythrough\", this._onCanPlayThrough);\n\n for (const source of Array.from(this._mediaElement.children)) {\n this._mediaElement.removeChild(source);\n }\n\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n this.engine.userGestureObservable.removeCallback(this._onUserGesture);\n }\n\n /** @internal */\n public play(options: Partial<IStreamingSoundPlayOptions> = {}): void {\n if (this._state === SoundState.Started) {\n return;\n }\n\n if (options.loop !== undefined) {\n this._options.loop = options.loop;\n }\n this._mediaElement.loop = this._options.loop;\n\n let startOffset = options.startOffset;\n\n if (this._currentTimeChangedWhilePaused) {\n startOffset = this._options.startOffset;\n this._currentTimeChangedWhilePaused = false;\n } else if (this._state === SoundState.Paused) {\n startOffset = this.currentTime + this._options.startOffset;\n }\n\n if (startOffset && startOffset > 0) {\n this._mediaElement.currentTime = startOffset;\n }\n\n this._volumeNode.gain.value = options.volume ?? 1;\n\n this._play();\n }\n\n /** @internal */\n public pause(): void {\n if (this._state !== SoundState.Starting && this._state !== SoundState.Started) {\n return;\n }\n\n this._setState(SoundState.Paused);\n this._enginePauseTime += this.engine.currentTime - this._enginePlayTime;\n\n this._mediaElement.pause();\n }\n\n /** @internal */\n public resume(): void {\n if (this._state === SoundState.Paused) {\n this.play();\n } else if (this._currentTimeChangedWhilePaused) {\n this.play();\n }\n }\n\n /** @internal */\n public override stop(): void {\n if (this._state === SoundState.Stopped) {\n return;\n }\n\n this._stop();\n }\n\n /** @internal */\n public getClassName(): string {\n return \"_WebAudioStreamingSoundInstance\";\n }\n\n protected override _connect(node: AbstractAudioNode): boolean {\n const connected = super._connect(node);\n\n if (!connected) {\n return false;\n }\n\n // If the wrapped node is not available now, it will be connected later by the sound's subgraph.\n if (node instanceof _WebAudioStreamingSound && node._inNode) {\n this._outNode?.connect(node._inNode);\n }\n\n return true;\n }\n\n protected override _disconnect(node: AbstractAudioNode): boolean {\n const disconnected = super._disconnect(node);\n\n if (!disconnected) {\n return false;\n }\n\n if (node instanceof _WebAudioStreamingSound && node._inNode) {\n this._outNode?.disconnect(node._inNode);\n }\n\n return true;\n }\n\n private _initFromMediaElement(mediaElement: HTMLMediaElement): void {\n Tools.SetCorsBehavior(mediaElement.currentSrc, mediaElement);\n\n mediaElement.controls = false;\n mediaElement.loop = this._options.loop;\n mediaElement.preload = \"auto\";\n\n mediaElement.addEventListener(\"canplaythrough\", this._onCanPlayThrough, { once: true });\n mediaElement.addEventListener(\"ended\", this._onEnded, { once: true });\n mediaElement.addEventListener(\"error\", this._onError, { once: true });\n\n mediaElement.load();\n\n this._sourceNode = new MediaElementAudioSourceNode(this._sound._audioContext, { mediaElement: mediaElement });\n this._sourceNode.connect(this._volumeNode);\n\n if (!this._connect(this._sound)) {\n throw new Error(\"Connect failed\");\n }\n\n this._mediaElement = mediaElement;\n }\n\n private _initFromUrl(url: string): void {\n const audio = new Audio(_CleanUrl(url));\n this._initFromMediaElement(audio);\n }\n\n private _initFromUrls(urls: string[]): void {\n const audio = new Audio();\n\n for (const url of urls) {\n const source = document.createElement(\"source\");\n source.src = _CleanUrl(url);\n audio.appendChild(source);\n }\n\n this._initFromMediaElement(audio);\n }\n\n private _onCanPlayThrough: () => void = () => {\n this._isReady = true;\n this._resolveIsReadyPromise(this._mediaElement);\n this.onReadyObservable.notifyObservers(this);\n };\n\n private _onEnded: () => void = () => {\n this.onEndedObservable.notifyObservers(this);\n this.dispose();\n };\n\n private _onError: (reason: any) => void = (reason: any) => {\n this._setState(SoundState.FailedToStart);\n this.onErrorObservable.notifyObservers(reason);\n this._rejectIsReadyPromise(reason);\n this.dispose();\n };\n\n private _onEngineStateChanged = () => {\n if (this.engine.state !== \"running\") {\n return;\n }\n\n if (this._options.loop && this.state === SoundState.Starting) {\n this.play();\n }\n\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n };\n\n private _onUserGesture = () => {\n this.play();\n };\n\n private _play(): void {\n this._setState(SoundState.Starting);\n\n if (!this._isReady) {\n this._playWhenReady();\n return;\n }\n\n if (this._state !== SoundState.Starting) {\n return;\n }\n\n if (this.engine.state === \"running\") {\n const result = this._mediaElement.play();\n\n this._enginePlayTime = this.engine.currentTime;\n this._setState(SoundState.Started);\n\n // It's possible that the play() method fails on Safari, even if the audio engine's state is \"running\".\n // This occurs when the audio context is paused by the system and resumed automatically by the audio engine\n // without a user interaction (e.g. when the Vision Pro exits and reenters immersive mode).\n // eslint-disable-next-line github/no-then\n result.catch(() => {\n this._setState(SoundState.FailedToStart);\n\n if (this._options.loop) {\n this.engine.userGestureObservable.addOnce(this._onUserGesture);\n }\n });\n } else if (this._options.loop) {\n this.engine.stateChangedObservable.add(this._onEngineStateChanged);\n } else {\n this.stop();\n this._setState(SoundState.FailedToStart);\n }\n }\n\n private _playWhenReady(): void {\n this._isReadyPromise\n // eslint-disable-next-line github/no-then\n .then(() => {\n this._play();\n })\n // eslint-disable-next-line github/no-then\n .catch(() => {\n Logger.Error(\"Streaming sound instance failed to play\");\n this._setState(SoundState.FailedToStart);\n });\n }\n\n private _rejectIsReadyPromise: (reason?: any) => void;\n private _resolveIsReadyPromise: (mediaElement: HTMLMediaElement) => void;\n\n private _stop(): void {\n this._mediaElement.pause();\n this._setState(SoundState.Stopped);\n this._onEnded();\n this.engine.stateChangedObservable.removeCallback(this._onEngineStateChanged);\n }\n}\n"]}
|
|
@@ -11,8 +11,6 @@ export declare class TargetCamera extends Camera {
|
|
|
11
11
|
private static _RigCamTransformMatrix;
|
|
12
12
|
private static _TargetTransformMatrix;
|
|
13
13
|
private static _TargetFocalPoint;
|
|
14
|
-
private _tmpUpVector;
|
|
15
|
-
private _tmpTargetVector;
|
|
16
14
|
/**
|
|
17
15
|
* Define the current direction the camera is moving to
|
|
18
16
|
*/
|
|
@@ -21,8 +19,6 @@ export declare class TargetCamera extends Camera {
|
|
|
21
19
|
* Define the current rotation the camera is rotating to
|
|
22
20
|
*/
|
|
23
21
|
cameraRotation: Vector2;
|
|
24
|
-
/** Gets or sets a boolean indicating that the scaling of the parent hierarchy will not be taken in account by the camera */
|
|
25
|
-
ignoreParentScaling: boolean;
|
|
26
22
|
/**
|
|
27
23
|
* When set, the up vector of the camera will be updated by the rotation of the camera
|
|
28
24
|
*/
|
package/Cameras/targetCamera.js
CHANGED
|
@@ -25,8 +25,6 @@ export class TargetCamera extends Camera {
|
|
|
25
25
|
*/
|
|
26
26
|
constructor(name, position, scene, setActiveOnSceneIfNoneActive = true) {
|
|
27
27
|
super(name, position, scene, setActiveOnSceneIfNoneActive);
|
|
28
|
-
this._tmpUpVector = Vector3.Zero();
|
|
29
|
-
this._tmpTargetVector = Vector3.Zero();
|
|
30
28
|
/**
|
|
31
29
|
* Define the current direction the camera is moving to
|
|
32
30
|
*/
|
|
@@ -35,8 +33,6 @@ export class TargetCamera extends Camera {
|
|
|
35
33
|
* Define the current rotation the camera is rotating to
|
|
36
34
|
*/
|
|
37
35
|
this.cameraRotation = new Vector2(0, 0);
|
|
38
|
-
/** Gets or sets a boolean indicating that the scaling of the parent hierarchy will not be taken in account by the camera */
|
|
39
|
-
this.ignoreParentScaling = false;
|
|
40
36
|
/**
|
|
41
37
|
* When set, the up vector of the camera will be updated by the rotation of the camera
|
|
42
38
|
*/
|
|
@@ -402,27 +398,6 @@ export class TargetCamera extends Camera {
|
|
|
402
398
|
return this._viewMatrix;
|
|
403
399
|
}
|
|
404
400
|
_computeViewMatrix(position, target, up) {
|
|
405
|
-
if (this.ignoreParentScaling) {
|
|
406
|
-
if (this.parent) {
|
|
407
|
-
const parentWorldMatrix = this.parent.getWorldMatrix();
|
|
408
|
-
Vector3.TransformCoordinatesToRef(position, parentWorldMatrix, this._globalPosition);
|
|
409
|
-
Vector3.TransformCoordinatesToRef(target, parentWorldMatrix, this._tmpTargetVector);
|
|
410
|
-
Vector3.TransformNormalToRef(up, parentWorldMatrix, this._tmpUpVector);
|
|
411
|
-
this._markSyncedWithParent();
|
|
412
|
-
}
|
|
413
|
-
else {
|
|
414
|
-
this._globalPosition.copyFrom(position);
|
|
415
|
-
this._tmpTargetVector.copyFrom(target);
|
|
416
|
-
this._tmpUpVector.copyFrom(up);
|
|
417
|
-
}
|
|
418
|
-
if (this.getScene().useRightHandedSystem) {
|
|
419
|
-
Matrix.LookAtRHToRef(this._globalPosition, this._tmpTargetVector, this._tmpUpVector, this._viewMatrix);
|
|
420
|
-
}
|
|
421
|
-
else {
|
|
422
|
-
Matrix.LookAtLHToRef(this._globalPosition, this._tmpTargetVector, this._tmpUpVector, this._viewMatrix);
|
|
423
|
-
}
|
|
424
|
-
return;
|
|
425
|
-
}
|
|
426
401
|
if (this.getScene().useRightHandedSystem) {
|
|
427
402
|
Matrix.LookAtRHToRef(position, target, up, this._viewMatrix);
|
|
428
403
|
}
|
|
@@ -524,9 +499,6 @@ export class TargetCamera extends Camera {
|
|
|
524
499
|
TargetCamera._RigCamTransformMatrix = new Matrix();
|
|
525
500
|
TargetCamera._TargetTransformMatrix = new Matrix();
|
|
526
501
|
TargetCamera._TargetFocalPoint = new Vector3();
|
|
527
|
-
__decorate([
|
|
528
|
-
serialize()
|
|
529
|
-
], TargetCamera.prototype, "ignoreParentScaling", void 0);
|
|
530
502
|
__decorate([
|
|
531
503
|
serialize()
|
|
532
504
|
], TargetCamera.prototype, "updateUpVectorFromRotation", void 0);
|