UNPKG

1.75 kBJavaScriptView Raw
1import { WaveShaper } from "./WaveShaper.js";
2import { optionsFromArguments } from "../core/util/Defaults.js";
3import { SignalOperator } from "./SignalOperator.js";
4/**
5 * Pow applies an exponent to the incoming signal. The incoming signal must be AudioRange [-1, 1]
6 *
7 * @example
8 * const pow = new Tone.Pow(2);
9 * const sig = new Tone.Signal(0.5).connect(pow);
10 * // output of pow is 0.25.
11 * @category Signal
12 */
13export class Pow extends SignalOperator {
14 constructor() {
15 const options = optionsFromArguments(Pow.getDefaults(), arguments, [
16 "value",
17 ]);
18 super(options);
19 this.name = "Pow";
20 this._exponentScaler =
21 this.input =
22 this.output =
23 new WaveShaper({
24 context: this.context,
25 mapping: this._expFunc(options.value),
26 length: 8192,
27 });
28 this._exponent = options.value;
29 }
30 static getDefaults() {
31 return Object.assign(SignalOperator.getDefaults(), {
32 value: 1,
33 });
34 }
35 /**
36 * the function which maps the waveshaper
37 * @param exponent exponent value
38 */
39 _expFunc(exponent) {
40 return (val) => {
41 return Math.pow(Math.abs(val), exponent);
42 };
43 }
44 /**
45 * The value of the exponent.
46 */
47 get value() {
48 return this._exponent;
49 }
50 set value(exponent) {
51 this._exponent = exponent;
52 this._exponentScaler.setMap(this._expFunc(this._exponent));
53 }
54 /**
55 * Clean up.
56 */
57 dispose() {
58 super.dispose();
59 this._exponentScaler.dispose();
60 return this;
61 }
62}
63//# sourceMappingURL=Pow.js.map
\No newline at end of file