web-audio-api
Version:
Portable Web Audio API
45 lines (36 loc) • 1.48 kB
JavaScript
import * as mathUtils from '../mathUtils.js'
import { DOMErr } from '../errors.js'
class ConeEffect {
get innerAngle() { return this.
set innerAngle(v) {
if (!Number.isFinite(v)) throw new TypeError('Invalid coneInnerAngle')
this.
}
get outerAngle() { return this.
set outerAngle(v) {
if (!Number.isFinite(v)) throw new TypeError('Invalid coneOuterAngle')
this.
}
get outerGain() { return this.
set outerGain(v) {
if (!Number.isFinite(v)) throw new TypeError('Invalid coneOuterGain')
if (v < 0 || v > 1) throw DOMErr('Invalid coneOuterGain', 'InvalidStateError')
this.
}
gain(sourcePosition, sourceOrientation, listenerPosition, scratch) {
if (sourceOrientation.isZero() || (this.
return 1 // no cone — unity gain
let sourceToListener = scratch.setFrom(listenerPosition).subFrom(sourcePosition)
let absAngle = Math.abs(mathUtils.rad2deg(sourceToListener.angleBetween(sourceOrientation)))
let absInner = Math.abs(this.
let absOuter = Math.abs(this.
if (absAngle <= absInner) return 1
if (absAngle >= absOuter) return this.
let x = (absAngle - absInner) / (absOuter - absInner)
return (1 - x) + this.
}
}
export default ConeEffect