UNPKG

@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.

161 lines (157 loc) 4.88 kB
import { A as AbstractAudioBus } from './abstractAudioBus-BM-qVCSZ.esm.js'; import { _ as _HasSpatialAudioOptions, a as _StereoAudio, b as _SpatialWebAudio, c as _WebAudioBusAndSoundSubGraph } from './spatialWebAudio-BHkDY-w9.esm.js'; import './webAudioBaseSubGraph-BjGMAHX6.esm.js'; import './spatialWebAudioUpdaterComponent-jS7MKp73.esm.js'; import './index-MZPybX0H.esm.js'; /** * Abstract class for an audio bus that has spatial audio and stereo output capabilities. * * Instances of this class can be connected to other audio buses. * * Audio buses are created by the {@link CreateAudioBusAsync} function. */ class AudioBus extends AbstractAudioBus { constructor(name, engine, options) { super(name, engine); this._spatialAutoUpdate = true; this._spatialMinUpdateTime = 0; this._outBus = null; this._spatial = null; this._onOutBusDisposed = () => { this.outBus = this.engine.defaultMainBus; }; if (typeof options.spatialAutoUpdate === "boolean") { this._spatialAutoUpdate = options.spatialAutoUpdate; } if (typeof options.spatialMinUpdateTime === "number") { this._spatialMinUpdateTime = options.spatialMinUpdateTime; } } /** * The output bus of the audio bus. Defaults to the audio engine's default main bus. */ get outBus() { return this._outBus; } set outBus(outBus) { if (this._outBus === outBus) { return; } if (this._outBus) { this._outBus.onDisposeObservable.removeCallback(this._onOutBusDisposed); if (!this._disconnect(this._outBus)) { throw new Error("Disconnect failed"); } } this._outBus = outBus; if (this._outBus) { this._outBus.onDisposeObservable.add(this._onOutBusDisposed); if (!this._connect(this._outBus)) { throw new Error("Connect failed"); } } } /** * The spatial audio features. */ get spatial() { if (this._spatial) { return this._spatial; } return this._initSpatialProperty(); } /** * Releases associated resources. */ dispose() { super.dispose(); this._spatial?.dispose(); this._spatial = null; if (this._outBus) { this._outBus.onDisposeObservable.removeCallback(this._onOutBusDisposed); } this._outBus = null; } _initSpatialProperty() { return (this._spatial = this._createSpatialProperty(this._spatialAutoUpdate, this._spatialMinUpdateTime)); } } /** @internal */ class _WebAudioBus extends AudioBus { /** @internal */ constructor(name, engine, options) { super(name, engine, options); this._stereo = null; this._subGraph = new _WebAudioBus._SubGraph(this); } /** @internal */ async _initAsync(options) { if (options.outBus) { this.outBus = options.outBus; } else { await this.engine.isReadyPromise; this.outBus = this.engine.defaultMainBus; } await this._subGraph.initAsync(options); if (_HasSpatialAudioOptions(options)) { this._initSpatialProperty(); } this.engine._addNode(this); } /** @internal */ dispose() { super.dispose(); this._stereo = null; this.engine._removeNode(this); } /** @internal */ get _inNode() { return this._subGraph._inNode; } /** @internal */ get _outNode() { return this._subGraph._outNode; } /** @internal */ get stereo() { return this._stereo ?? (this._stereo = new _StereoAudio(this._subGraph)); } /** @internal */ getClassName() { return "_WebAudioBus"; } _createSpatialProperty(autoUpdate, minUpdateTime) { return new _SpatialWebAudio(this._subGraph, autoUpdate, minUpdateTime); } _connect(node) { const connected = super._connect(node); if (!connected) { return false; } if (node._inNode) { this._outNode?.connect(node._inNode); } return true; } _disconnect(node) { const disconnected = super._disconnect(node); if (!disconnected) { return false; } if (node._inNode) { this._outNode?.disconnect(node._inNode); } return true; } } _WebAudioBus._SubGraph = class extends _WebAudioBusAndSoundSubGraph { get _downstreamNodes() { return this._owner._downstreamNodes ?? null; } get _upstreamNodes() { return this._owner._upstreamNodes ?? null; } }; export { _WebAudioBus }; //# sourceMappingURL=webAudioBus-lW3wu8TI.esm.js.map