@pixi/sound
Version:
WebAudio API playback library with filters
1 lines • 5.51 kB
Source Map (JSON)
{"version":3,"file":"ReverbFilter.mjs","sources":["../../src/filters/ReverbFilter.ts"],"sourcesContent":["import { getInstance } from '../instance';\nimport { Filter } from './Filter';\n\n/**\n * Filter for adding reverb. Refactored from\n * https://github.com/web-audio-components/simple-reverb/\n *\n * @memberof filters\n */\nclass ReverbFilter extends Filter\n{\n private _seconds: number;\n private _decay: number;\n private _reverse: boolean;\n\n /**\n * @param seconds - Seconds for reverb\n * @param decay - The decay length\n * @param reverse - Reverse reverb\n */\n constructor(seconds = 3, decay = 2, reverse = false)\n {\n super(null);\n this._seconds = this._clamp(seconds, 1, 50);\n this._decay = this._clamp(decay, 0, 100);\n this._reverse = reverse;\n this._rebuild();\n }\n\n /**\n * Clamp a value\n * @param value\n * @param min - Minimum value\n * @param max - Maximum value\n * @return Clamped number\n */\n private _clamp(value: number, min: number, max: number): number\n {\n return Math.min(max, Math.max(min, value));\n }\n\n /**\n * Length of reverb in seconds from 1 to 50\n * @default 3\n */\n get seconds(): number\n {\n return this._seconds;\n }\n set seconds(seconds: number)\n {\n this._seconds = this._clamp(seconds, 1, 50);\n this._rebuild();\n }\n\n /**\n * Decay value from 0 to 100\n * @default 2\n */\n get decay(): number\n {\n return this._decay;\n }\n set decay(decay: number)\n {\n this._decay = this._clamp(decay, 0, 100);\n this._rebuild();\n }\n\n /**\n * Reverse value from 0 to 1\n * @default false\n */\n get reverse(): boolean\n {\n return this._reverse;\n }\n set reverse(reverse: boolean)\n {\n this._reverse = reverse;\n this._rebuild();\n }\n\n /**\n * Utility function for building an impulse response\n * from the module parameters.\n */\n private _rebuild(): void\n {\n if (getInstance().useLegacy)\n {\n return;\n }\n const { audioContext } = getInstance().context;\n const rate: number = audioContext.sampleRate;\n const length: number = rate * this._seconds;\n const impulse: AudioBuffer = audioContext.createBuffer(2, length, rate);\n const impulseL: Float32Array = impulse.getChannelData(0);\n const impulseR: Float32Array = impulse.getChannelData(1);\n let n: number;\n\n for (let i = 0; i < length; i++)\n {\n n = this._reverse ? length - i : i;\n impulseL[i] = ((Math.random() * 2) - 1) * Math.pow(1 - (n / length), this._decay);\n impulseR[i] = ((Math.random() * 2) - 1) * Math.pow(1 - (n / length), this._decay);\n }\n const convolver = audioContext.createConvolver();\n\n convolver.buffer = impulse;\n this.init(convolver);\n }\n}\n\nexport { ReverbFilter };\n"],"names":[],"mappings":"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"}