UNPKG

tone

Version:

A Web Audio framework for making interactive music in the browser.

177 lines 5.47 kB
import { Param } from "../../core/context/Param.js"; import { ToneAudioNode, } from "../../core/context/ToneAudioNode.js"; import { optionsFromArguments } from "../../core/util/Defaults.js"; import "../../core/context/Listener.js"; /** * A spatialized panner node which supports equalpower or HRTF panning. * @category Component */ export class Panner3D extends ToneAudioNode { constructor() { const options = optionsFromArguments(Panner3D.getDefaults(), arguments, ["positionX", "positionY", "positionZ"]); super(options); this.name = "Panner3D"; this._panner = this.input = this.output = this.context.createPanner(); // set some values this.panningModel = options.panningModel; this.maxDistance = options.maxDistance; this.distanceModel = options.distanceModel; this.coneOuterGain = options.coneOuterGain; this.coneOuterAngle = options.coneOuterAngle; this.coneInnerAngle = options.coneInnerAngle; this.refDistance = options.refDistance; this.rolloffFactor = options.rolloffFactor; this.positionX = new Param({ context: this.context, param: this._panner.positionX, value: options.positionX, }); this.positionY = new Param({ context: this.context, param: this._panner.positionY, value: options.positionY, }); this.positionZ = new Param({ context: this.context, param: this._panner.positionZ, value: options.positionZ, }); this.orientationX = new Param({ context: this.context, param: this._panner.orientationX, value: options.orientationX, }); this.orientationY = new Param({ context: this.context, param: this._panner.orientationY, value: options.orientationY, }); this.orientationZ = new Param({ context: this.context, param: this._panner.orientationZ, value: options.orientationZ, }); } static getDefaults() { return Object.assign(ToneAudioNode.getDefaults(), { coneInnerAngle: 360, coneOuterAngle: 360, coneOuterGain: 0, distanceModel: "inverse", maxDistance: 10000, orientationX: 0, orientationY: 0, orientationZ: 0, panningModel: "equalpower", positionX: 0, positionY: 0, positionZ: 0, refDistance: 1, rolloffFactor: 1, }); } /** * Sets the position of the source in 3d space. */ setPosition(x, y, z) { this.positionX.value = x; this.positionY.value = y; this.positionZ.value = z; return this; } /** * Sets the orientation of the source in 3d space. */ setOrientation(x, y, z) { this.orientationX.value = x; this.orientationY.value = y; this.orientationZ.value = z; return this; } /** * The panning model. Either "equalpower" or "HRTF". */ get panningModel() { return this._panner.panningModel; } set panningModel(val) { this._panner.panningModel = val; } /** * A reference distance for reducing volume as source move further from the listener */ get refDistance() { return this._panner.refDistance; } set refDistance(val) { this._panner.refDistance = val; } /** * Describes how quickly the volume is reduced as source moves away from listener. */ get rolloffFactor() { return this._panner.rolloffFactor; } set rolloffFactor(val) { this._panner.rolloffFactor = val; } /** * The distance model used by, "linear", "inverse", or "exponential". */ get distanceModel() { return this._panner.distanceModel; } set distanceModel(val) { this._panner.distanceModel = val; } /** * The angle, in degrees, inside of which there will be no volume reduction */ get coneInnerAngle() { return this._panner.coneInnerAngle; } set coneInnerAngle(val) { this._panner.coneInnerAngle = val; } /** * The angle, in degrees, outside of which the volume will be reduced * to a constant value of coneOuterGain */ get coneOuterAngle() { return this._panner.coneOuterAngle; } set coneOuterAngle(val) { this._panner.coneOuterAngle = val; } /** * The gain outside of the coneOuterAngle */ get coneOuterGain() { return this._panner.coneOuterGain; } set coneOuterGain(val) { this._panner.coneOuterGain = val; } /** * The maximum distance between source and listener, * after which the volume will not be reduced any further. */ get maxDistance() { return this._panner.maxDistance; } set maxDistance(val) { this._panner.maxDistance = val; } dispose() { super.dispose(); this._panner.disconnect(); this.orientationX.dispose(); this.orientationY.dispose(); this.orientationZ.dispose(); this.positionX.dispose(); this.positionY.dispose(); this.positionZ.dispose(); return this; } } //# sourceMappingURL=Panner3D.js.map