1 | import { MidSideEffect, } from "../effect/MidSideEffect.js";
|
2 | import { Signal } from "../signal/Signal.js";
|
3 | import { Multiply } from "../signal/Multiply.js";
|
4 | import { Subtract } from "../signal/Subtract.js";
|
5 | import { optionsFromArguments } from "../core/util/Defaults.js";
|
6 | import { readOnly } from "../core/util/Interface.js";
|
7 | import { connect } from "../core/context/ToneAudioNode.js";
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | export class StereoWidener extends MidSideEffect {
|
19 | constructor() {
|
20 | const options = optionsFromArguments(StereoWidener.getDefaults(), arguments, ["width"]);
|
21 | super(options);
|
22 | this.name = "StereoWidener";
|
23 | this.width = new Signal({
|
24 | context: this.context,
|
25 | value: options.width,
|
26 | units: "normalRange",
|
27 | });
|
28 | readOnly(this, ["width"]);
|
29 | this._twoTimesWidthMid = new Multiply({
|
30 | context: this.context,
|
31 | value: 2,
|
32 | });
|
33 | this._twoTimesWidthSide = new Multiply({
|
34 | context: this.context,
|
35 | value: 2,
|
36 | });
|
37 | this._midMult = new Multiply({ context: this.context });
|
38 | this._twoTimesWidthMid.connect(this._midMult.factor);
|
39 | this.connectEffectMid(this._midMult);
|
40 | this._oneMinusWidth = new Subtract({ context: this.context });
|
41 | this._oneMinusWidth.connect(this._twoTimesWidthMid);
|
42 | connect(this.context.getConstant(1), this._oneMinusWidth);
|
43 | this.width.connect(this._oneMinusWidth.subtrahend);
|
44 | this._sideMult = new Multiply({ context: this.context });
|
45 | this.width.connect(this._twoTimesWidthSide);
|
46 | this._twoTimesWidthSide.connect(this._sideMult.factor);
|
47 | this.connectEffectSide(this._sideMult);
|
48 | }
|
49 | static getDefaults() {
|
50 | return Object.assign(MidSideEffect.getDefaults(), {
|
51 | width: 0.5,
|
52 | });
|
53 | }
|
54 | dispose() {
|
55 | super.dispose();
|
56 | this.width.dispose();
|
57 | this._midMult.dispose();
|
58 | this._sideMult.dispose();
|
59 | this._twoTimesWidthMid.dispose();
|
60 | this._twoTimesWidthSide.dispose();
|
61 | this._oneMinusWidth.dispose();
|
62 | return this;
|
63 | }
|
64 | }
|
65 |
|
\ | No newline at end of file |