@babylonjs/viewer
Version:
The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.
3 lines (2 loc) • 22.7 kB
JavaScript
import{V as t,Q as e,bn as i,M as s,O as n,G as a,a4 as o}from"./index-yNtOWHHe.esm.min.js";class r{constructor(t){this._mainBuses=new Set,this._nodes=new Set,this._defaultMainBus=null,this._parameterRampDuration=.01,"number"==typeof t.parameterRampDuration&&(this.parameterRampDuration=t.parameterRampDuration)}get defaultMainBus(){return 0===this._mainBuses.size?null:(this._defaultMainBus||(this._defaultMainBus=Array.from(this._mainBuses)[0]),this._defaultMainBus)}get parameterRampDuration(){return this._parameterRampDuration}set parameterRampDuration(t){this._parameterRampDuration=Math.max(0,t)}dispose(){const t=this._nodes.values();for(let e=t.next();!e.done;e=t.next())e.value.dispose();this._mainBuses.clear(),this._nodes.clear(),this._defaultMainBus=null}unlockAsync(){return this.resumeAsync()}_addMainBus(t){this._mainBuses.add(t),this._addNode(t)}_removeMainBus(t){this._mainBuses.delete(t),this._defaultMainBus=null,this._removeNode(t)}_addNode(t){this._nodes.add(t)}_removeNode(t){this._nodes.delete(t)}}const u={position:t.Zero(),rotation:t.Zero(),rotationQuaternion:new e};class d{}class h{constructor(i){this._attachmentType=3,this._position=new t,this._rotationQuaternion=new e,this._sceneNode=null,this._useBoundingBox=!1,this.dispose=()=>{this.detach()},this._spatialAudioNode=i}get isAttached(){return null!==this._sceneNode}attach(t,e,i){this._sceneNode!==t&&(this.detach(),t&&(this._attachmentType=i,this._sceneNode=t,this._sceneNode.onDisposeObservable.add(this.dispose),this._useBoundingBox=e))}detach(){this._sceneNode?.onDisposeObservable.removeCallback(this.dispose),this._sceneNode=null}update(){1&this._attachmentType&&(this._useBoundingBox&&this._sceneNode.getBoundingInfo?this._position.copyFrom(this._sceneNode.getBoundingInfo().boundingBox.centerWorld):this._sceneNode?.getWorldMatrix().getTranslationToRef(this._position),this._spatialAudioNode.position.copyFrom(this._position),this._spatialAudioNode._updatePosition()),2&this._attachmentType&&(this._sceneNode?.getWorldMatrix().decompose(void 0,this._rotationQuaternion),this._spatialAudioNode.rotationQuaternion.copyFrom(this._rotationQuaternion),this._spatialAudioNode._updateRotation())}}class l extends d{constructor(){super(),this._attacherComponent=null,this._attacherComponent=new h(this)}get isAttached(){return null!==this._attacherComponent&&this._attacherComponent.isAttached}attach(t,e=!1,i=3){this._attacherComponent||(this._attacherComponent=new h(this)),this._attacherComponent.attach(t,e,i)}detach(){this._attacherComponent?.detach()}dispose(){this._attacherComponent?.dispose(),this._attacherComponent=null}setOptions(t){void 0!==t.listenerMinUpdateTime&&(this.minUpdateTime=t.listenerMinUpdateTime),t.listenerPosition&&(this.position=t.listenerPosition.clone()),t.listenerRotationQuaternion?this.rotationQuaternion=t.listenerRotationQuaternion.clone():t.listenerRotation?this.rotation=t.listenerRotation.clone():this.rotationQuaternion=u.rotationQuaternion.clone(),this.update()}}class _{constructor(t,e,s){if(this._autoUpdate=!0,this._lastUpdateTime=0,this.minUpdateTime=0,!e)return;this.minUpdateTime=s;const n=()=>{if(!this._autoUpdate)return;let e=!1;if(0<this.minUpdateTime){const t=i.Now;this._lastUpdateTime&&t-this._lastUpdateTime<this.minUpdateTime&&(e=!0),this._lastUpdateTime=t}e||t.update(),requestAnimationFrame(n)};requestAnimationFrame(n)}dispose(){this._autoUpdate=!1}}const m=new RegExp("\\.(\\w{3,4})($|\\?)"),p=100,c=new Float32Array([0,0]);let g=null,b=null,v=null;function A(t,e,i){let s;if(g||(g=new Float32Array(p)),"linear"===t)return c[0]=e,c[1]=i,c;if("exponential"===t)s=function(){if(!b){b=new Float32Array(p);const t=1/99;let e=t;for(let i=1;i<p;i++)b[i]=Math.exp(-11.512925464970227*(1-e)),e+=t}return b}();else{if("logarithmic"!==t)throw new Error(`Unknown ramp shape: ${t}`);s=function(){if(!v){v=new Float32Array(p);const t=.01;let e=t;for(let i=0;i<p;i++)v[i]=1+Math.log10(e)/Math.log10(p),e+=t}return v}()}const n=Math.sign(i-e),a=Math.abs(i-e);if(1===n)for(let t=0;t<s.length;t++)g[t]=e+a*s[t];else{let t=99;for(let i=0;i<s.length;i++,t--)g[i]=e-a*(1-s[t])}return g}function f(t){return t.replace(/#/gm,"%23")}class w{constructor(t,e){this._deferredRampOptions={duration:0,shape:"linear"},this._deferredTargetValue=-1,this._isObservingUpdates=!1,this._rampEndTime=0,this._applyDeferredRamp=()=>{0<this._deferredRampOptions.duration&&this._rampEndTime<this._engine.currentTime&&this.setTargetValue(this._deferredTargetValue,this._deferredRampOptions)},this._engine=t,this._param=e,this._targetValue=e.value}get isRamping(){return this._engine.currentTime<this._rampEndTime}get targetValue(){return this._targetValue}set targetValue(t){this.setTargetValue(t)}get value(){return this._param.value}dispose(){this._clearDeferredRamp(),this._param=null,this._engine=null}setTargetValue(t,e=null){if(this._targetValue===t)return;const i="string"==typeof e?.shape?e.shape:"linear";let s="number"==typeof e?.duration?Math.max(e.duration,this._engine.parameterRampDuration):this._engine.parameterRampDuration;const n=this._engine.currentTime;if(n<this._rampEndTime){if(.011<this._rampEndTime-n)throw new Error("Audio parameter not set. Wait for current ramp to finish.");this._deferRamp(t,s,i)}else(s=Math.max(this._engine.parameterRampDuration,s))<1e-6?this._param.setValueAtTime(this._targetValue=t,n):(this._param.cancelScheduledValues(n),this._param.setValueCurveAtTime(A(i,this._targetValue,this._targetValue=t),n,s),this._clearDeferredRamp(),this._rampEndTime=n+s)}_deferRamp(t,e,i){this._deferredRampOptions.duration=e,this._deferredRampOptions.shape=i,this._deferredTargetValue=t,this._isObservingUpdates||(this._engine._addUpdateObserver(this._applyDeferredRamp),this._isObservingUpdates=!0)}_clearDeferredRamp(){this._deferredRampOptions.duration=0,this._isObservingUpdates&&(this._engine._removeUpdateObserver(this._applyDeferredRamp),this._isObservingUpdates=!1)}}const y=s.Zero(),C=new e,O=t.Zero(),U=t.Zero();function x(t,e,i){const s=t._audioContext.listener;return s.forwardX&&s.forwardY&&s.forwardZ&&s.positionX&&s.positionY&&s.positionZ&&s.upX&&s.upY&&s.upZ?new T(t,e,i):new R(t,e,i)}class N extends l{constructor(i,s,n){super(),this._lastPosition=t.Zero(),this._lastRotation=t.Zero(),this._lastRotationQuaternion=new e,this.position=t.Zero(),this.rotation=t.Zero(),this.rotationQuaternion=new e,this._listener=i._audioContext.listener,this.engine=i,this._updaterComponent=new _(this,s,n)}dispose(){super.dispose(),this._updaterComponent.dispose(),this._updaterComponent=null}get minUpdateTime(){return this._updaterComponent.minUpdateTime}set minUpdateTime(t){this._updaterComponent.minUpdateTime=t}update(){this.isAttached?this._attacherComponent?.update():(this._updatePosition(),this._updateRotation())}_updatePosition(){this._lastPosition.equalsWithEpsilon(this.position)||(this._setWebAudioPosition(this.position),this._lastPosition.copyFrom(this.position))}_updateRotation(){if(this._lastRotationQuaternion.equalsWithEpsilon(this.rotationQuaternion)){if(this._lastRotation.equalsWithEpsilon(this.rotation))return;e.FromEulerAnglesToRef(this.rotation.x,this.rotation.y,this.rotation.z,C),this._lastRotation.copyFrom(this.rotation)}else C.copyFrom(this.rotationQuaternion),this._lastRotationQuaternion.copyFrom(this.rotationQuaternion);s.FromQuaternionToRef(C,y),t.TransformNormalToRef(t.RightHandedForwardReadOnly,y,O),t.TransformNormalToRef(t.Up(),y,U),this._setWebAudioOrientation(O,U)}}class T extends N{constructor(t,e,i){super(t,e,i);const s=t._audioContext.listener;this._forwardX=new w(t,s.forwardX),this._forwardY=new w(t,s.forwardY),this._forwardZ=new w(t,s.forwardZ),this._positionX=new w(t,s.positionX),this._positionY=new w(t,s.positionY),this._positionZ=new w(t,s.positionZ),this._upX=new w(t,s.upX),this._upY=new w(t,s.upY),this._upZ=new w(t,s.upZ)}_setWebAudioPosition(t){this.isAttached&&(this._positionX.isRamping||this._positionY.isRamping||this._positionZ.isRamping)||(this._positionX.targetValue=t.x,this._positionY.targetValue=t.y,this._positionZ.targetValue=t.z)}_setWebAudioOrientation(t,e){this.isAttached&&(this._forwardX.isRamping||this._forwardY.isRamping||this._forwardZ.isRamping||this._upX.isRamping||this._upY.isRamping||this._upZ.isRamping)||(this._forwardX.targetValue=t.x,this._forwardY.targetValue=t.y,this._forwardZ.targetValue=t.z,this._upX.targetValue=e.x,this._upY.targetValue=e.y,this._upZ.targetValue=e.z)}}class R extends N{_setWebAudioPosition(t){this._listener.setPosition(t.x,t.y,t.z)}_setWebAudioOrientation(t,e){this._listener.setOrientation(t.x,t.y,t.z,e.x,e.y,e.z)}}var S;!function(t){t[t.HAS_INPUTS=1]="HAS_INPUTS",t[t.HAS_OUTPUTS=2]="HAS_OUTPUTS",t[t.HAS_INPUTS_AND_OUTPUTS=3]="HAS_INPUTS_AND_OUTPUTS"}(S||(S={}));class B{constructor(t,e){this.onDisposeObservable=new n,this.engine=t,1&e&&(this._upstreamNodes=new Set),2&e&&(this._downstreamNodes=new Set)}dispose(){if(this._downstreamNodes){for(const t of Array.from(this._downstreamNodes))if(!this._disconnect(t))throw new Error("Disconnect failed");this._downstreamNodes.clear()}if(this._upstreamNodes){for(const t of Array.from(this._upstreamNodes))if(!t._disconnect(this))throw new Error("Disconnect failed");this._upstreamNodes.clear()}this.onDisposeObservable.notifyObservers(this),this.onDisposeObservable.clear()}_connect(t){return!!this._downstreamNodes&&(!this._downstreamNodes.has(t)&&(!!t._onConnect(this)&&(this._downstreamNodes.add(t),!0)))}_disconnect(t){return!!this._downstreamNodes&&(!!this._downstreamNodes.delete(t)&&t._onDisconnect(this))}_onConnect(t){return!!this._upstreamNodes&&(!this._upstreamNodes.has(t)&&(this._upstreamNodes.add(t),!0))}_onDisconnect(t){return this._upstreamNodes?.delete(t)??!1}}class P extends B{constructor(t,e,i){super(e,i),this.onNameChangedObservable=new n,this._name=t}get name(){return this._name}set name(t){if(this._name===t)return;const e=this._name;this._name=t,this.onNameChangedObservable.notifyObservers({newName:t,oldName:e,node:this})}dispose(){super.dispose(),this.onNameChangedObservable.clear()}}class M extends B{constructor(t){super(t,1)}}class E extends M{constructor(t){super(t),this._setGainNode(new GainNode(t._audioContext))}dispose(){super.dispose(),this._volume.dispose(),this._gainNode.disconnect(),this._destinationNode.disconnect()}get _inNode(){return this._gainNode}set _inNode(t){this._gainNode!==t&&this._setGainNode(t)}get volume(){return this._volume.targetValue}set volume(t){this._volume.targetValue=t}get _destinationNode(){return this.engine._audioDestination}getClassName(){return"_WebAudioMainOut"}setVolume(t,e=null){this._volume.setTargetValue(t,e)}_setGainNode(t){this._gainNode!==t&&(this._gainNode?.disconnect(),t.connect(this._destinationNode),this._volume=new w(this.engine,t.gain),this._gainNode=t)}}class I{constructor(t,e){this._button=null,this._enabled=!0,this._style=null,this._onStateChanged=()=>{this._button&&("running"===this._engine.state?this._hide():this._show())},this._engine=t;const i=e||a.LastCreatedEngine?.getInputElement()?.parentElement||document.body,s=(i?.offsetTop||0)+20;this._style=document.createElement("style"),this._style.appendChild(document.createTextNode(`.babylonUnmute{position:absolute;top:${s}px;margin-left:20px;height:40px;width:60px;background-color:rgba(51,51,51,0.7);background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2239%22%20height%3D%2232%22%20viewBox%3D%220%200%2039%2032%22%3E%3Cpath%20fill%3D%22white%22%20d%3D%22M9.625%2018.938l-0.031%200.016h-4.953q-0.016%200-0.031-0.016v-12.453q0-0.016%200.031-0.016h4.953q0.031%200%200.031%200.016v12.453zM12.125%207.688l8.719-8.703v27.453l-8.719-8.719-0.016-0.047v-9.938zM23.359%207.875l1.406-1.406%204.219%204.203%204.203-4.203%201.422%201.406-4.219%204.219%204.219%204.203-1.484%201.359-4.141-4.156-4.219%204.219-1.406-1.422%204.219-4.203z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E");background-size:80%;background-repeat:no-repeat;background-position:center;background-position-y:4px;border:none;outline:none;transition:transform 0.125s ease-out;cursor:pointer;z-index:9999;}.babylonUnmute:hover{transform:scale(1.05)}`)),document.head.appendChild(this._style),this._button=document.createElement("button"),this._button.className="babylonUnmute",this._button.id="babylonUnmuteButton",this._button.addEventListener("click",(()=>{this._engine.unlockAsync()})),i.appendChild(this._button),this._engine.stateChangedObservable.add(this._onStateChanged)}dispose(){this._button?.remove(),this._button=null,this._style?.remove(),this._style=null,this._engine.stateChangedObservable.removeCallback(this._onStateChanged)}get enabled(){return this._enabled}set enabled(t){this._enabled=t,t?"running"!==this._engine.state&&this._show():this._hide()}_show(){this._button&&(this._button.style.display="block")}_hide(){this._button&&(this._button.style.display="none")}}const D={aac:"audio/aac",ac3:"audio/ac3",flac:"audio/flac",m4a:"audio/mp4",mp3:'audio/mpeg; codecs="mp3"',mp4:"audio/mp4",ogg:'audio/ogg; codecs="vorbis"',wav:"audio/wav",webm:'audio/webm; codecs="vorbis"'};class k extends r{constructor(t={}){super(t),this._audioContextStarted=!1,this._destinationNode=null,this._invalidFormats=new Set,this._isUpdating=!1,this._listener=null,this._listenerAutoUpdate=!0,this._listenerMinUpdateTime=0,this._pauseCalled=!1,this._resumeOnInteraction=!0,this._resumeOnPause=!0,this._resumeOnPauseRetryInterval=1e3,this._resumeOnPauseTimerId=null,this._resumePromise=null,this._silentHtmlAudio=null,this._unmuteUI=null,this._updateObservable=null,this._validFormats=new Set,this._volume=1,this._isUsingOfflineAudioContext=!1,this.isReadyPromise=new Promise((t=>{this._resolveIsReadyPromise=t})),this.stateChangedObservable=new n,this.userGestureObservable=new n,this._initAudioContextAsync=async()=>{this._audioContext.addEventListener("statechange",this._onAudioContextStateChange),this._mainOut=new E(this),this._mainOut.volume=this._volume,await this.createMainBusAsync("default")},this._onAudioContextStateChange=()=>{"running"===this.state&&(clearInterval(this._resumeOnPauseTimerId),this._audioContextStarted=!0,this._resumePromise=null),"suspended"!==this.state&&"interrupted"!==this.state||this._audioContextStarted&&this._resumeOnPause&&!this._pauseCalled&&(clearInterval(this._resumeOnPauseTimerId),this._resumeOnPauseTimerId=setInterval((()=>{this.resumeAsync()}),this._resumeOnPauseRetryInterval)),this.stateChangedObservable.notifyObservers(this.state)},this._onUserGestureAsync=async()=>{if(this._resumeOnInteraction&&await this._audioContext.resume(),!this._silentHtmlAudio){this._silentHtmlAudio=document.createElement("audio");const t=this._silentHtmlAudio;t.controls=!1,t.preload="auto",t.loop=!0,t.src="data:audio/wav;base64,UklGRjAAAABXQVZFZm10IBAAAAABAAEAgLsAAAB3AQACABAAZGF0YQwAAAAAAAEA/v8CAP//AQA=",t.play()}this.userGestureObservable.notifyObservers()},this._startUpdating=()=>{if(!this._isUpdating)if(this._isUpdating=!0,"running"===this.state)this._update();else{const t=()=>{"running"===this.state&&(this._update(),this.stateChangedObservable.removeCallback(t))};this.stateChangedObservable.add(t)}},this._update=()=>{this._updateObservable?.hasObservers()?(this._updateObservable.notifyObservers(),requestAnimationFrame(this._update)):this._isUpdating=!1},"boolean"==typeof t.listenerAutoUpdate&&(this._listenerAutoUpdate=t.listenerAutoUpdate),"number"==typeof t.listenerMinUpdateTime&&(this._listenerMinUpdateTime=t.listenerMinUpdateTime),this._volume=t.volume??1,t.audioContext?(this._isUsingOfflineAudioContext=t.audioContext instanceof OfflineAudioContext,this._audioContext=t.audioContext):this._audioContext=new AudioContext,t.disableDefaultUI||(this._unmuteUI=new I(this,t.defaultUIParentElement))}async _initAsync(t){this._resumeOnInteraction="boolean"!=typeof t.resumeOnInteraction||t.resumeOnInteraction,this._resumeOnPause="boolean"!=typeof t.resumeOnPause||t.resumeOnPause,this._resumeOnPauseRetryInterval=t.resumeOnPauseRetryInterval??1e3,document.addEventListener("click",this._onUserGestureAsync),await this._initAudioContextAsync(),function(t){return t.listenerEnabled||void 0!==t.listenerMinUpdateTime||void 0!==t.listenerPosition||void 0!==t.listenerRotation||void 0!==t.listenerRotationQuaternion}(t)&&(this._listener=x(this,this._listenerAutoUpdate,this._listenerMinUpdateTime),this._listener.setOptions(t)),this._resolveIsReadyPromise()}get currentTime(){return this._audioContext.currentTime??0}get _inNode(){return this._audioContext.destination}get mainOut(){return this._mainOut}get listener(){return this._listener??(this._listener=x(this,this._listenerAutoUpdate,this._listenerMinUpdateTime))}get state(){return this._isUsingOfflineAudioContext?"running":this._audioContext.state}get volume(){return this._volume}set volume(t){this._volume!==t&&(this._volume=t,this._mainOut&&(this._mainOut.volume=t))}get _audioDestination(){return this._destinationNode?this._destinationNode:this._destinationNode=this._audioContext.destination}set _audioDestination(t){this._destinationNode=t}get _unmuteUIEnabled(){return!!this._unmuteUI&&this._unmuteUI.enabled}set _unmuteUIEnabled(t){this._unmuteUI&&(this._unmuteUI.enabled=t)}async createBusAsync(t,e={}){const i=new((await import("./webAudioBus-DXZh7Dj8.esm.min.js"))._WebAudioBus)(t,this,e);return await i._initAsync(e),i}async createMainBusAsync(t,e={}){const i=new((await import("./webAudioMainBus-COEmzIol.esm.min.js"))._WebAudioMainBus)(t,this);return await i._initAsync(e),i}async createMicrophoneSoundSourceAsync(t,e){let i;try{i=await navigator.mediaDevices.getUserMedia({audio:!0})}catch(t){throw new Error("Unable to access microphone: "+t)}return await this.createSoundSourceAsync(t,new MediaStreamAudioSourceNode(this._audioContext,{mediaStream:i}),{outBusAutoDefault:!1,...e})}async createSoundAsync(t,e,i={}){const s=new((await import("./webAudioStaticSound-BR9u01Kt.esm.min.js"))._WebAudioStaticSound)(t,this,i);return await s._initAsync(e,i),s}async createSoundBufferAsync(t,e={}){const i=new((await import("./webAudioStaticSound-BR9u01Kt.esm.min.js"))._WebAudioStaticSoundBuffer)(this);return await i._initAsync(t,e),i}async createSoundSourceAsync(t,e,i={}){const s=new((await import("./webAudioSoundSource-BSqy4CGx.esm.min.js"))._WebAudioSoundSource)(t,e,this,i);return await s._initAsync(i),s}async createStreamingSoundAsync(t,e,i={}){const s=new((await import("./webAudioStreamingSound-BTFSVhs5.esm.min.js"))._WebAudioStreamingSound)(t,this,i);return await s._initAsync(e,i),s}dispose(){super.dispose(),this._listener?.dispose(),this._listener=null,"closed"===this._audioContext.state||this._isUsingOfflineAudioContext||this._audioContext.close(),document.removeEventListener("click",this._onUserGestureAsync),this._audioContext.removeEventListener("statechange",this._onAudioContextStateChange),this._silentHtmlAudio?.remove(),this._updateObservable?.clear(),this._updateObservable=null,this._unmuteUI?.dispose(),this._unmuteUI=null,this.stateChangedObservable.clear()}flagInvalidFormat(t){this._invalidFormats.add(t)}isFormatValid(t){if(this._validFormats.has(t))return!0;if(this._invalidFormats.has(t))return!1;const e=D[t];if(void 0===e)return!1;return""===(new Audio).canPlayType(e)?(this._invalidFormats.add(t),!1):(this._validFormats.add(t),!0)}async pauseAsync(){await this._audioContext.suspend(),this._pauseCalled=!0}resumeAsync(){return this._pauseCalled=!1,this._resumePromise||(this._resumePromise=this._audioContext.resume()),this._resumePromise}setVolume(t,e=null){if(!this._mainOut)throw new Error("Main output not initialized yet.");this._mainOut.setVolume(t,e)}_addMainBus(t){super._addMainBus(t)}_removeMainBus(t){super._removeMainBus(t)}_addNode(t){super._addNode(t)}_removeNode(t){super._removeNode(t)}_addUpdateObserver(t){this._updateObservable||(this._updateObservable=new n),this._updateObservable.add(t),this._startUpdating()}_removeUpdateObserver(t){this._updateObservable&&this._updateObservable.removeCallback(t)}}o.AudioEngineFactory=(t,e,i)=>new V(t,e,i);class V{get masterGain(){return this._masterGain}set masterGain(t){this._masterGain=this._v2.mainOut._inNode=t}get useCustomUnlockedButton(){return this._useCustomUnlockedButton}set useCustomUnlockedButton(t){this._useCustomUnlockedButton=t,this._v2._unmuteUIEnabled=!t}get audioContext(){return"running"===this._v2.state&&this._triggerRunningStateAsync(),this._v2._audioContext}constructor(t=null,e=null,i=null){this._audioContext=null,this._tryToRun=!1,this._useCustomUnlockedButton=!1,this.canUseWebAudio=!0,this.WarnedWebAudioUnsupported=!1,this.isMP3supported=!1,this.isOGGsupported=!1,this.unlocked=!1,this.onAudioUnlockedObservable=new n,this.onAudioLockedObservable=new n;const s=new k({audioContext:e||void 0,defaultUIParentElement:t?.parentElement?t.parentElement:void 0});s._unmuteUIEnabled=!1,this._masterGain=new GainNode(s._audioContext),s._audioDestination=i,s.stateChangedObservable.add((t=>{"running"===t?(this.unlocked=!0,this.onAudioUnlockedObservable.notifyObservers(this)):(this.unlocked=!1,this.onAudioLockedObservable.notifyObservers(this))})),s._initAsync({resumeOnInteraction:!1}).then((()=>{s.mainOut._inNode=this._masterGain,s.stateChangedObservable.notifyObservers(s.state)})),this.isMP3supported=s.isFormatValid("mp3"),this.isOGGsupported=s.isFormatValid("ogg"),this._v2=s}lock(){this._v2._audioContext.suspend(),this._useCustomUnlockedButton||(this._v2._unmuteUIEnabled=!0)}unlock(){"running"!==this._audioContext?.state?this._triggerRunningStateAsync():this.unlocked||(this.unlocked=!0,this.onAudioUnlockedObservable.notifyObservers(this))}_resumeAudioContextOnStateChange(){this._audioContext?.addEventListener("statechange",(()=>{this.unlocked&&"running"!==this._audioContext?.state&&this._resumeAudioContextAsync()}),{once:!0,passive:!0,signal:AbortSignal.timeout(3e3)})}_resumeAudioContextAsync(){return this._v2._isUsingOfflineAudioContext?Promise.resolve():this._v2._audioContext.resume()}dispose(){this._v2.dispose(),this.onAudioUnlockedObservable.clear(),this.onAudioLockedObservable.clear()}getGlobalVolume(){return this.masterGain.gain.value}setGlobalVolume(t){this.masterGain.gain.value=t}connectToAnalyser(t){this._connectedAnalyser&&this._connectedAnalyser.stopDebugCanvas(),this._connectedAnalyser=t,this.masterGain.disconnect(),this._connectedAnalyser.connectAudioNodes(this.masterGain,this._v2._audioContext.destination)}async _triggerRunningStateAsync(){this._tryToRun||(this._tryToRun=!0,await this._resumeAudioContextAsync(),this._tryToRun=!1,this.unlocked=!0,this.onAudioUnlockedObservable.notifyObservers(this))}}export{P as A,h as _,w as a,_ as b,f as c,m as d,B as e};
//# sourceMappingURL=audioEngine-vi2zlmHT.esm.min.js.map