@pixi/sound
Version:
WebAudio API playback library with filters
46 lines (43 loc) • 1.22 kB
JavaScript
import { getInstance } from '../instance.mjs';
import { Filter } from './Filter.mjs';
class DistortionFilter extends Filter {
/** @param amount - The amount of distoration from 0 to 1. */
constructor(amount = 0) {
let distortion;
if (!getInstance().useLegacy) {
const { audioContext } = getInstance().context;
distortion = audioContext.createWaveShaper();
}
super(distortion);
this._distortion = distortion;
this.amount = amount;
}
/** The amount of distortion to set. */
set amount(value) {
this._amount = value;
if (getInstance().useLegacy) {
return;
}
const scaledValue = value * 1e3;
const samples = 44100;
const curve = new Float32Array(samples);
const deg = Math.PI / 180;
let i = 0;
let x;
for (; i < samples; ++i) {
x = i * 2 / samples - 1;
curve[i] = (3 + scaledValue) * x * 20 * deg / (Math.PI + scaledValue * Math.abs(x));
}
this._distortion.curve = curve;
this._distortion.oversample = "4x";
}
get amount() {
return this._amount;
}
destroy() {
this._distortion = null;
super.destroy();
}
}
export { DistortionFilter };
//# sourceMappingURL=DistortionFilter.mjs.map