@fluex/fluexgl-dsp 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -38
- package/lib/dist/console-codes.d.ts +22 -7
- package/lib/dist/console-codes.d.ts.map +1 -1
- package/lib/dist/console-codes.js +22 -7
- package/lib/dist/core/classes/AudioClip.d.ts +3 -1
- package/lib/dist/core/classes/AudioClip.d.ts.map +1 -1
- package/lib/dist/core/classes/AudioClip.js +23 -17
- package/lib/dist/core/classes/AudioClipPlayer.d.ts +10 -2
- package/lib/dist/core/classes/AudioClipPlayer.d.ts.map +1 -1
- package/lib/dist/core/classes/AudioClipPlayer.js +56 -2
- package/lib/dist/core/classes/AudioDevice.d.ts +2 -0
- package/lib/dist/core/classes/AudioDevice.d.ts.map +1 -1
- package/lib/dist/core/classes/AudioDevice.js +5 -0
- package/lib/dist/core/classes/Channel.d.ts +14 -4
- package/lib/dist/core/classes/Channel.d.ts.map +1 -1
- package/lib/dist/core/classes/Channel.js +93 -7
- package/lib/dist/core/classes/DpsPipeline.d.ts +1 -1
- package/lib/dist/core/classes/DpsPipeline.d.ts.map +1 -1
- package/lib/dist/core/classes/DpsPipeline.js +7 -3
- package/lib/dist/core/classes/Effector.d.ts +2 -2
- package/lib/dist/core/classes/Effector.d.ts.map +1 -1
- package/lib/dist/core/classes/Effector.js +1 -1
- package/lib/dist/core/classes/Master.d.ts +12 -0
- package/lib/dist/core/classes/Master.d.ts.map +1 -1
- package/lib/dist/core/classes/Master.js +80 -9
- package/lib/dist/effects/classes/Analyser.d.ts +16 -0
- package/lib/dist/effects/classes/Analyser.d.ts.map +1 -0
- package/lib/dist/effects/classes/Analyser.js +62 -0
- package/lib/dist/effects/classes/Chorus.d.ts +4 -3
- package/lib/dist/effects/classes/Chorus.d.ts.map +1 -1
- package/lib/dist/effects/classes/Chorus.js +21 -12
- package/lib/dist/effects/classes/clips/HardClip.d.ts +4 -3
- package/lib/dist/effects/classes/clips/HardClip.d.ts.map +1 -1
- package/lib/dist/effects/classes/clips/HardClip.js +15 -9
- package/lib/dist/effects/classes/clips/SoftClip.d.ts +4 -3
- package/lib/dist/effects/classes/clips/SoftClip.d.ts.map +1 -1
- package/lib/dist/effects/classes/clips/SoftClip.js +15 -9
- package/lib/dist/effects/classes/filters/LowPassFilter.d.ts +4 -3
- package/lib/dist/effects/classes/filters/LowPassFilter.d.ts.map +1 -1
- package/lib/dist/effects/classes/filters/LowPassFilter.js +23 -14
- package/lib/dist/effects/exports.d.ts +1 -0
- package/lib/dist/effects/exports.d.ts.map +1 -1
- package/lib/dist/effects/exports.js +1 -0
- package/lib/dist/index.d.ts +5 -4
- package/lib/dist/index.d.ts.map +1 -1
- package/lib/dist/index.js +13 -18
- package/lib/dist/typings.d.ts +13 -11
- package/lib/dist/typings.d.ts.map +1 -1
- package/lib/dist/typings.js +5 -0
- package/lib/dist/utilities/debugger.js +6 -6
- package/lib/dist/utilities/helpers.d.ts +2 -0
- package/lib/dist/utilities/helpers.d.ts.map +1 -1
- package/lib/dist/utilities/helpers.js +35 -12
- package/lib/dist/utilities/web-assembly.d.ts.map +1 -1
- package/lib/dist/utilities/web-assembly.js +6 -0
- package/lib/src/console-codes.ts +22 -7
- package/lib/src/core/classes/AudioClip.ts +28 -19
- package/lib/src/core/classes/AudioClipPlayer.ts +77 -8
- package/lib/src/core/classes/AudioDevice.ts +6 -1
- package/lib/src/core/classes/Channel.ts +126 -13
- package/lib/src/core/classes/DpsPipeline.ts +7 -3
- package/lib/src/core/classes/Effector.ts +3 -2
- package/lib/src/core/classes/Master.ts +101 -13
- package/lib/src/effects/classes/Analyser.ts +84 -0
- package/lib/src/effects/classes/Chorus.ts +22 -13
- package/lib/src/effects/classes/clips/HardClip.ts +17 -10
- package/lib/src/effects/classes/clips/SoftClip.ts +17 -10
- package/lib/src/effects/classes/filters/LowPassFilter.ts +28 -15
- package/lib/src/effects/exports.ts +2 -1
- package/lib/src/index.ts +27 -29
- package/lib/src/typings.ts +14 -14
- package/lib/src/utilities/debugger.ts +6 -6
- package/lib/src/utilities/helpers.ts +39 -15
- package/lib/src/utilities/web-assembly.ts +8 -0
- package/package.json +1 -1
- package/lib/dist/effects/classes/Filter.d.ts +0 -3
- package/lib/dist/effects/classes/Filter.d.ts.map +0 -1
- package/lib/dist/effects/classes/Filter.js +0 -2
- package/lib/dist/effects/classes/SoftClip.d.ts +0 -10
- package/lib/dist/effects/classes/SoftClip.d.ts.map +0 -1
- package/lib/dist/effects/classes/SoftClip.js +0 -39
- package/lib/dist/test/linkable-channels.d.ts +0 -2
- package/lib/dist/test/linkable-channels.d.ts.map +0 -1
- package/lib/dist/test/linkable-channels.js +0 -16
- package/lib/src/core/functions/rebuild-effect-chain.ts +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DpsPipeline.d.ts","sourceRoot":"","sources":["../../../src/core/classes/DpsPipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM5C,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"DpsPipeline.d.ts","sourceRoot":"","sources":["../../../src/core/classes/DpsPipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM5C,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAGjE;;;GAGG;AACH,qBAAa,WAAW;IAEpB;;OAEG;IACI,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAExC;;OAEG;IACI,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE3C;;OAEG;IACI,EAAE,EAAE,MAAM,CAAQ;IAEzB;;OAEG;IACI,cAAc,EAAE,OAAO,CAAS;IAEvC;;OAEG;IACH,OAAO,CAAC,OAAO,CAAuB;IAEtC;;;;;OAKG;gBACS,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,gCAAgC;IAQpF;;;;;OAKG;IACU,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;;;;;OAMG;IACU,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;IA0CtD;;;;;;OAMG;IACU,+BAA+B;IA+BrC,6CAA6C;CAGvD"}
|
|
@@ -4,6 +4,7 @@ import { Debug } from "../../utilities/debugger";
|
|
|
4
4
|
import { LoadWebAssemblyModule } from "../../utilities/web-assembly";
|
|
5
5
|
import { ConstructProcessorWorklet, LoadWorkletOnAudioDevice } from "../../utilities/helpers";
|
|
6
6
|
import { ErrorCodes, WarningCodes } from "../../console-codes";
|
|
7
|
+
import { DSP } from "../../index";
|
|
7
8
|
/**
|
|
8
9
|
* Represents the digital signal processing (DSP) pipeline responsible for initializing
|
|
9
10
|
* WebAssembly modules, AudioWorklet processors, and resolving audio output devices.
|
|
@@ -35,9 +36,12 @@ export class DspPipeline {
|
|
|
35
36
|
* @param options - Initialization options for the DSP pipeline.
|
|
36
37
|
* Must include valid paths to the WebAssembly and AudioWorklet files.
|
|
37
38
|
*/
|
|
38
|
-
constructor(options) {
|
|
39
|
-
this.pathToWasm =
|
|
40
|
-
this.pathToWorklet =
|
|
39
|
+
constructor({ pathToWasm, pathToWorklet, options }) {
|
|
40
|
+
this.pathToWasm = pathToWasm;
|
|
41
|
+
this.pathToWorklet = pathToWorklet;
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
for (const key in options)
|
|
44
|
+
DSP[key] = options[key];
|
|
41
45
|
}
|
|
42
46
|
/**
|
|
43
47
|
* Initializes the DSP pipeline.
|
|
@@ -4,7 +4,7 @@ export declare abstract class Effector {
|
|
|
4
4
|
label: string | null;
|
|
5
5
|
name: string;
|
|
6
6
|
audioWorkletNode: AudioWorkletNode | null;
|
|
7
|
-
|
|
7
|
+
context: AudioContext | null;
|
|
8
8
|
private hasRegisteredMessageEventListener;
|
|
9
9
|
private events;
|
|
10
10
|
private handleIncomingMessages;
|
|
@@ -13,6 +13,6 @@ export declare abstract class Effector {
|
|
|
13
13
|
Once<K extends keyof EffectorEventMap>(event: K, cb: EffectorEventMap[K]): () => void;
|
|
14
14
|
RemoveEventListener<K extends keyof EffectorEventMap>(event: K, cb: EffectorEventMap[K]): Effector;
|
|
15
15
|
ClearEventListeners(event?: keyof EffectorEventMap): Effector;
|
|
16
|
-
abstract InitializeOnAttachment(
|
|
16
|
+
abstract InitializeOnAttachment(context: AudioContext): Promise<void>;
|
|
17
17
|
}
|
|
18
18
|
//# sourceMappingURL=Effector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Effector.d.ts","sourceRoot":"","sources":["../../../src/core/classes/Effector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGhH,8BAAsB,QAAQ;IAEnB,EAAE,EAAE,MAAM,CAAQ;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,IAAI,EAAE,MAAM,CAAc;
|
|
1
|
+
{"version":3,"file":"Effector.d.ts","sourceRoot":"","sources":["../../../src/core/classes/Effector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGhH,8BAAsB,QAAQ;IAEnB,EAAE,EAAE,MAAM,CAAQ;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,IAAI,EAAE,MAAM,CAAc;IAE1B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IACjD,OAAO,EAAE,YAAY,GAAG,IAAI,CAAQ;IAE3C,OAAO,CAAC,iCAAiC,CAAkB;IAE3D,OAAO,CAAC,MAAM,CAMb;IAED,OAAO,CAAC,sBAAsB;IAgB9B,SAAS,CAAC,4BAA4B,CAAC,IAAI,EAAE,gBAAgB;IAOtD,gBAAgB,CAAC,CAAC,SAAS,MAAM,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAOjG,IAAI,CAAC,CAAC,SAAS,MAAM,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAarF,mBAAmB,CAAC,CAAC,SAAS,MAAM,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,QAAQ;IAalG,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,gBAAgB,GAAG,QAAQ;aAWpD,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAC/E"}
|
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
import { Channel } from "./Channel";
|
|
2
|
+
import { Effector } from "./Effector";
|
|
3
|
+
import { AudioClipPlayer } from "./AudioClipPlayer";
|
|
4
|
+
import { AudioClip } from "./AudioClip";
|
|
2
5
|
export declare class Master {
|
|
3
6
|
id: string;
|
|
4
7
|
channels: Channel[];
|
|
8
|
+
effects: Effector[];
|
|
9
|
+
input: GainNode | null;
|
|
5
10
|
gainNode: GainNode | null;
|
|
6
11
|
analyserNode: AnalyserNode | null;
|
|
7
12
|
context: AudioContext | null;
|
|
13
|
+
audioClipPlayer: AudioClipPlayer | null;
|
|
8
14
|
constructor(context: AudioContext);
|
|
15
|
+
private disconnectAudioNodes;
|
|
16
|
+
private rebuildEffectChain;
|
|
17
|
+
AttachEffect(effect: Effector): void;
|
|
18
|
+
DetachEffect(effect: Effector): void;
|
|
9
19
|
AttachChannel(channel: Channel): void;
|
|
10
20
|
DetachChannel(channel: Channel): void;
|
|
21
|
+
HasAudioClipPlayer(): boolean;
|
|
22
|
+
AttachAudioClip(audioClip: AudioClip): void;
|
|
11
23
|
}
|
|
12
24
|
//# sourceMappingURL=Master.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Master.d.ts","sourceRoot":"","sources":["../../../src/core/classes/Master.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"Master.d.ts","sourceRoot":"","sources":["../../../src/core/classes/Master.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBAAa,MAAM;IAER,EAAE,EAAE,MAAM,CAAQ;IAElB,QAAQ,EAAE,OAAO,EAAE,CAAM;IACzB,OAAO,EAAE,QAAQ,EAAE,CAAM;IAEzB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAQ;IAC9B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAQ;IACjC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAQ;IACzC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAQ;IACpC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAQ;gBAE1C,OAAO,EAAE,YAAY;IAmBjC,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,kBAAkB;IAuBnB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAapC,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAkBpC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAcrC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAkBrC,kBAAkB,IAAI,OAAO;IAI7B,eAAe,CAAC,SAAS,EAAE,SAAS;CAM9C"}
|
|
@@ -1,41 +1,112 @@
|
|
|
1
1
|
import { v4 } from "uuid";
|
|
2
2
|
import { Debug } from "../../utilities/debugger";
|
|
3
|
+
import { AudioClipPlayer } from "./AudioClipPlayer";
|
|
4
|
+
import { ErrorCodes } from "lib/src/console-codes";
|
|
3
5
|
export class Master {
|
|
4
6
|
id = v4();
|
|
5
7
|
channels = [];
|
|
8
|
+
effects = [];
|
|
9
|
+
input = null;
|
|
6
10
|
gainNode = null;
|
|
7
11
|
analyserNode = null;
|
|
8
12
|
context = null;
|
|
13
|
+
audioClipPlayer = null;
|
|
9
14
|
constructor(context) {
|
|
10
15
|
this.context = context;
|
|
16
|
+
this.disconnectAudioNodes();
|
|
17
|
+
this.audioClipPlayer = new AudioClipPlayer(context);
|
|
18
|
+
this.input = new GainNode(context);
|
|
11
19
|
this.gainNode = new GainNode(context);
|
|
12
20
|
this.analyserNode = new AnalyserNode(context);
|
|
21
|
+
this.input.connect(this.gainNode);
|
|
13
22
|
this.gainNode.connect(this.analyserNode);
|
|
14
23
|
this.analyserNode.connect(this.context.destination);
|
|
24
|
+
this.audioClipPlayer.Send(this);
|
|
25
|
+
}
|
|
26
|
+
disconnectAudioNodes() {
|
|
27
|
+
if (this.input)
|
|
28
|
+
this.input.disconnect();
|
|
29
|
+
if (this.gainNode)
|
|
30
|
+
this.gainNode.disconnect();
|
|
31
|
+
if (this.analyserNode)
|
|
32
|
+
this.analyserNode.disconnect();
|
|
33
|
+
this.effects.forEach(function (effect) {
|
|
34
|
+
if (effect.audioWorkletNode)
|
|
35
|
+
effect.audioWorkletNode.disconnect();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
rebuildEffectChain() {
|
|
39
|
+
if (!this.context)
|
|
40
|
+
return;
|
|
41
|
+
if (!this.input || !this.gainNode || !this.analyserNode)
|
|
42
|
+
return;
|
|
43
|
+
this.disconnectAudioNodes();
|
|
44
|
+
let currentNode = this.input;
|
|
45
|
+
this.effects.forEach(function (effect) {
|
|
46
|
+
if (!effect.audioWorkletNode)
|
|
47
|
+
return;
|
|
48
|
+
currentNode.connect(effect.audioWorkletNode);
|
|
49
|
+
currentNode = effect.audioWorkletNode;
|
|
50
|
+
});
|
|
51
|
+
currentNode.connect(this.gainNode);
|
|
52
|
+
this.gainNode.connect(this.analyserNode);
|
|
53
|
+
this.analyserNode.connect(this.context.destination);
|
|
54
|
+
}
|
|
55
|
+
AttachEffect(effect) {
|
|
56
|
+
if (this.effects.includes(effect))
|
|
57
|
+
return Debug.Error("Could not attach the effect because it is already part of this master channel.", [
|
|
58
|
+
"Call .DetachEffect([effect Effector]) before attaching the effect."
|
|
59
|
+
], ErrorCodes.EFFECT_ALREADY_ATTACHED);
|
|
60
|
+
if (!this.context)
|
|
61
|
+
return this.rebuildEffectChain();
|
|
62
|
+
this.effects.push(effect);
|
|
63
|
+
effect.InitializeOnAttachment(this.context);
|
|
64
|
+
this.rebuildEffectChain();
|
|
65
|
+
}
|
|
66
|
+
DetachEffect(effect) {
|
|
67
|
+
if (!this.effects.includes(effect))
|
|
68
|
+
return Debug.Error("Could not detach the effect because it is not part of this master channel.", [
|
|
69
|
+
"Call .AttachEffect([effect Effector]) before detaching the effect."
|
|
70
|
+
], ErrorCodes.EFFECT_NOT_FOUND);
|
|
71
|
+
const self = this;
|
|
72
|
+
this.effects.forEach(function (_effect, index) {
|
|
73
|
+
if (effect.id === _effect.id) {
|
|
74
|
+
self.effects.splice(index, 1);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
this.rebuildEffectChain();
|
|
15
79
|
}
|
|
16
80
|
AttachChannel(channel) {
|
|
17
81
|
if (this.channels.includes(channel))
|
|
18
82
|
return Debug.Error("Could not attach the channel because it is already part of this master channel.", [
|
|
19
83
|
"Call .DetachChannel([channel Channel]) before attaching the channel."
|
|
20
|
-
]);
|
|
84
|
+
], ErrorCodes.CHANNEL_ALREADY_ATTACHED);
|
|
21
85
|
this.channels.push(channel);
|
|
22
|
-
if (channel.output && this.
|
|
23
|
-
channel.output.connect(this.
|
|
86
|
+
if (channel.output && this.input)
|
|
87
|
+
channel.output.connect(this.input);
|
|
24
88
|
return;
|
|
25
89
|
}
|
|
26
90
|
DetachChannel(channel) {
|
|
27
91
|
if (!this.channels.includes(channel))
|
|
28
92
|
return Debug.Error("Could not detach the channel because it is not part of this master channel.", [
|
|
29
93
|
"Call .AttachChannel([channel Channel]) before detaching the channel."
|
|
30
|
-
]);
|
|
31
|
-
if (channel.output && this.
|
|
32
|
-
channel.output.disconnect(this.
|
|
94
|
+
], ErrorCodes.CHANNEL_NOT_FOUND);
|
|
95
|
+
if (channel.output && this.input)
|
|
96
|
+
channel.output.disconnect(this.input);
|
|
33
97
|
const self = this;
|
|
34
98
|
this.channels.forEach(function (_channel, index) {
|
|
35
|
-
if (channel.id
|
|
36
|
-
self.channels.splice(index, 1);
|
|
99
|
+
if (channel.id !== _channel.id)
|
|
37
100
|
return;
|
|
38
|
-
|
|
101
|
+
self.channels.splice(index, 1);
|
|
39
102
|
});
|
|
40
103
|
}
|
|
104
|
+
HasAudioClipPlayer() {
|
|
105
|
+
return !!this.audioClipPlayer;
|
|
106
|
+
}
|
|
107
|
+
AttachAudioClip(audioClip) {
|
|
108
|
+
if (!this.audioClipPlayer)
|
|
109
|
+
return Debug.Error("Cannot not link AudioClip to this channel because this channel's AudioClipPlayer is undefined.");
|
|
110
|
+
this.audioClipPlayer.AttachAudioClip(audioClip);
|
|
111
|
+
}
|
|
41
112
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Effector } from "../../core/exports";
|
|
2
|
+
export declare class Analyser extends Effector {
|
|
3
|
+
label: string | null;
|
|
4
|
+
name: string;
|
|
5
|
+
analyserNode: AnalyserNode | null;
|
|
6
|
+
float32ArrayBuffer: Float32Array<ArrayBuffer>;
|
|
7
|
+
uint8ArrayBuffer: Uint8Array<ArrayBuffer>;
|
|
8
|
+
private options;
|
|
9
|
+
constructor(options?: Partial<AnalyserOptions>);
|
|
10
|
+
InitializeOnAttachment(context: AudioContext): Promise<void>;
|
|
11
|
+
SetOptions(options: Partial<AnalyserOptions>): void;
|
|
12
|
+
GetWaveformFloatData(): Float32Array | null;
|
|
13
|
+
GetWaveformByteData(): Uint8Array | null;
|
|
14
|
+
private allocateBuffers;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=Analyser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Analyser.d.ts","sourceRoot":"","sources":["../../../src/effects/classes/Analyser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9C,qBAAa,QAAS,SAAQ,QAAQ;IAE3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAc;IAClC,IAAI,EAAE,MAAM,CAAc;IAE1B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAQ;IAEzC,kBAAkB,4BAAsB;IACxC,gBAAgB,0BAAoB;IAE3C,OAAO,CAAC,OAAO,CAKb;gBAEU,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAMjC,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IASlE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAwBnD,oBAAoB,IAAI,YAAY,GAAG,IAAI;IAQ3C,mBAAmB,IAAI,UAAU,GAAG,IAAI;IAQ/C,OAAO,CAAC,eAAe;CAO1B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Effector } from "../../core/exports";
|
|
2
|
+
export class Analyser extends Effector {
|
|
3
|
+
label = "Analyser";
|
|
4
|
+
name = "Analyser";
|
|
5
|
+
analyserNode = null;
|
|
6
|
+
float32ArrayBuffer = new Float32Array();
|
|
7
|
+
uint8ArrayBuffer = new Uint8Array();
|
|
8
|
+
options = {
|
|
9
|
+
fftSize: 32,
|
|
10
|
+
smoothingTimeConstant: 0.8,
|
|
11
|
+
minDecibels: -90,
|
|
12
|
+
maxDecibels: -10,
|
|
13
|
+
};
|
|
14
|
+
constructor(options) {
|
|
15
|
+
super();
|
|
16
|
+
if (options)
|
|
17
|
+
this.SetOptions(options);
|
|
18
|
+
}
|
|
19
|
+
async InitializeOnAttachment(context) {
|
|
20
|
+
this.context = context;
|
|
21
|
+
this.analyserNode = new AnalyserNode(context, this.options);
|
|
22
|
+
this.audioWorkletNode = this.analyserNode;
|
|
23
|
+
this.allocateBuffers();
|
|
24
|
+
}
|
|
25
|
+
SetOptions(options) {
|
|
26
|
+
Object.keys(options).forEach((key) => {
|
|
27
|
+
const value = options[key];
|
|
28
|
+
if (typeof value === "undefined")
|
|
29
|
+
return;
|
|
30
|
+
if (key === "fftSize" && value) {
|
|
31
|
+
const allowed = [32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768];
|
|
32
|
+
if (!allowed.includes(value))
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.options[key] = value;
|
|
36
|
+
if (this.analyserNode) {
|
|
37
|
+
this.analyserNode[key] = value;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
if (options.fftSize && this.analyserNode) {
|
|
41
|
+
this.allocateBuffers();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
GetWaveformFloatData() {
|
|
45
|
+
if (!this.analyserNode)
|
|
46
|
+
return null;
|
|
47
|
+
this.analyserNode.getFloatTimeDomainData(this.float32ArrayBuffer);
|
|
48
|
+
return this.float32ArrayBuffer;
|
|
49
|
+
}
|
|
50
|
+
GetWaveformByteData() {
|
|
51
|
+
if (!this.analyserNode)
|
|
52
|
+
return null;
|
|
53
|
+
this.analyserNode.getByteTimeDomainData(this.uint8ArrayBuffer);
|
|
54
|
+
return this.uint8ArrayBuffer;
|
|
55
|
+
}
|
|
56
|
+
allocateBuffers() {
|
|
57
|
+
if (!this.analyserNode)
|
|
58
|
+
return;
|
|
59
|
+
this.float32ArrayBuffer = new Float32Array(this.analyserNode.fftSize);
|
|
60
|
+
this.uint8ArrayBuffer = new Uint8Array(this.analyserNode.fftSize);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effector } from "../../core/classes/Effector";
|
|
2
|
-
import { ChorusEffectOptions } from "../../typings";
|
|
2
|
+
import { ChorusEffectOptions, StrictMode } from "../../typings";
|
|
3
3
|
export declare class Chorus extends Effector {
|
|
4
4
|
label: string | null;
|
|
5
5
|
name: string;
|
|
@@ -8,8 +8,9 @@ export declare class Chorus extends Effector {
|
|
|
8
8
|
rateHz: number;
|
|
9
9
|
mix: number;
|
|
10
10
|
feedback: number;
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
strictMode: StrictMode;
|
|
12
|
+
constructor({ baseDelayMs, depthMs, rateHz, mix, feedback, strictMode }: Partial<ChorusEffectOptions>);
|
|
13
|
+
InitializeOnAttachment(context: AudioContext): Promise<void>;
|
|
13
14
|
ReturnOptionsAsObject(): ChorusEffectOptions;
|
|
14
15
|
SetBaseDelayMs(value: number): boolean;
|
|
15
16
|
SetDepthMs(value: number): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chorus.d.ts","sourceRoot":"","sources":["../../../src/effects/classes/Chorus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAsD,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Chorus.d.ts","sourceRoot":"","sources":["../../../src/effects/classes/Chorus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAsD,UAAU,EAAE,MAAM,eAAe,CAAC;AAEpH,qBAAa,MAAO,SAAQ,QAAQ;IAEzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAY;IAChC,IAAI,EAAE,MAAM,CAAY;IAExB,WAAW,EAAE,MAAM,CAAM;IACzB,OAAO,EAAE,MAAM,CAAK;IACpB,MAAM,EAAE,MAAM,CAAO;IACrB,GAAG,EAAE,MAAM,CAAO;IAClB,QAAQ,EAAE,MAAM,CAAO;IACvB,UAAU,EAAE,UAAU,CAAuB;gBAExC,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAaxF,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,qBAAqB,IAAI,mBAAmB;IAW5C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAMtC,UAAU,CAAC,KAAK,EAAE,MAAM;IAMxB,SAAS,CAAC,KAAK,EAAE,MAAM;IAMvB,MAAM,CAAC,KAAK,EAAE,MAAM;IAMpB,WAAW,CAAC,KAAK,EAAE,MAAM;CAKnC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SendMessageToWorklet, CreateAudioWorkletNode } from "../../utilities/helpers";
|
|
1
|
+
import { CoerceFiniteNumber, SendMessageToWorklet, CreateAudioWorkletNode } from "../../utilities/helpers";
|
|
2
2
|
import { Effector } from "../../core/classes/Effector";
|
|
3
|
-
import { ChorusMessageCommandId, AudioWorkletProcessorNames } from "../../typings";
|
|
3
|
+
import { ChorusMessageCommandId, AudioWorkletProcessorNames, StrictMode } from "../../typings";
|
|
4
4
|
export class Chorus extends Effector {
|
|
5
5
|
label = "Chorus";
|
|
6
6
|
name = "Chorus";
|
|
@@ -9,17 +9,20 @@ export class Chorus extends Effector {
|
|
|
9
9
|
rateHz = 1.5;
|
|
10
10
|
mix = 0.5;
|
|
11
11
|
feedback = 0.2;
|
|
12
|
-
|
|
12
|
+
strictMode = StrictMode.Disabled;
|
|
13
|
+
constructor({ baseDelayMs, depthMs, rateHz, mix, feedback, strictMode }) {
|
|
13
14
|
super();
|
|
14
|
-
this.baseDelayMs = baseDelayMs
|
|
15
|
-
this.depthMs = depthMs
|
|
16
|
-
this.rateHz = rateHz
|
|
17
|
-
this.mix = mix
|
|
18
|
-
this.feedback = feedback
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
this.baseDelayMs = Math.max(0, CoerceFiniteNumber(baseDelayMs, this.baseDelayMs));
|
|
16
|
+
this.depthMs = Math.max(0, CoerceFiniteNumber(depthMs, this.depthMs));
|
|
17
|
+
this.rateHz = Math.max(0, CoerceFiniteNumber(rateHz, this.rateHz));
|
|
18
|
+
this.mix = Math.max(0, Math.min(1, CoerceFiniteNumber(mix, this.mix)));
|
|
19
|
+
this.feedback = Math.max(0, Math.min(1, CoerceFiniteNumber(feedback, this.feedback)));
|
|
20
|
+
const mode = CoerceFiniteNumber(strictMode, this.strictMode);
|
|
21
|
+
this.strictMode = mode === StrictMode.Enabled ? StrictMode.Enabled : StrictMode.Disabled;
|
|
22
|
+
}
|
|
23
|
+
async InitializeOnAttachment(context) {
|
|
24
|
+
this.context = context;
|
|
25
|
+
this.audioWorkletNode = CreateAudioWorkletNode(context, AudioWorkletProcessorNames.Chorus, this.ReturnOptionsAsObject());
|
|
23
26
|
}
|
|
24
27
|
ReturnOptionsAsObject() {
|
|
25
28
|
return {
|
|
@@ -28,25 +31,31 @@ export class Chorus extends Effector {
|
|
|
28
31
|
rateHz: this.rateHz,
|
|
29
32
|
mix: this.mix,
|
|
30
33
|
feedback: this.feedback,
|
|
34
|
+
strictMode: this.strictMode
|
|
31
35
|
};
|
|
32
36
|
}
|
|
33
37
|
SetBaseDelayMs(value) {
|
|
38
|
+
value = Math.max(0, CoerceFiniteNumber(value, this.baseDelayMs));
|
|
34
39
|
this.baseDelayMs = value;
|
|
35
40
|
return SendMessageToWorklet(this.audioWorkletNode, ChorusMessageCommandId.SetBaseDelayMs, value);
|
|
36
41
|
}
|
|
37
42
|
SetDepthMs(value) {
|
|
43
|
+
value = Math.max(0, CoerceFiniteNumber(value, this.depthMs));
|
|
38
44
|
this.depthMs = value;
|
|
39
45
|
return SendMessageToWorklet(this.audioWorkletNode, ChorusMessageCommandId.SetDepthMs, value);
|
|
40
46
|
}
|
|
41
47
|
SetRateHz(value) {
|
|
48
|
+
value = Math.max(0, CoerceFiniteNumber(value, this.rateHz));
|
|
42
49
|
this.rateHz = value;
|
|
43
50
|
return SendMessageToWorklet(this.audioWorkletNode, ChorusMessageCommandId.SetRateHz, value);
|
|
44
51
|
}
|
|
45
52
|
SetMix(value) {
|
|
53
|
+
value = Math.max(0, Math.min(1, CoerceFiniteNumber(value, this.mix)));
|
|
46
54
|
this.mix = value;
|
|
47
55
|
return SendMessageToWorklet(this.audioWorkletNode, ChorusMessageCommandId.SetMix, value);
|
|
48
56
|
}
|
|
49
57
|
SetFeedback(value) {
|
|
58
|
+
value = Math.max(0, Math.min(1, CoerceFiniteNumber(value, this.feedback)));
|
|
50
59
|
this.feedback = value;
|
|
51
60
|
return SendMessageToWorklet(this.audioWorkletNode, ChorusMessageCommandId.SetFeedback, value);
|
|
52
61
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Effector } from "../../../core/classes/Effector";
|
|
2
|
-
import { HardClipOptions } from "../../../typings";
|
|
2
|
+
import { HardClipOptions, StrictMode } from "../../../typings";
|
|
3
3
|
export declare class HardClip extends Effector {
|
|
4
4
|
label: string | null;
|
|
5
5
|
name: string;
|
|
6
6
|
drive: number;
|
|
7
7
|
gain: number;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
strictMode: StrictMode;
|
|
9
|
+
constructor({ drive, gain, strictMode }: Partial<HardClipOptions>);
|
|
10
|
+
InitializeOnAttachment(context: AudioContext): Promise<void>;
|
|
10
11
|
ReturnOptionsAsObject(): HardClipOptions;
|
|
11
12
|
SetDrive(drive: number): boolean;
|
|
12
13
|
SetGain(gain: number): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HardClip.d.ts","sourceRoot":"","sources":["../../../../src/effects/classes/clips/HardClip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1D,OAAO,EAAwD,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"HardClip.d.ts","sourceRoot":"","sources":["../../../../src/effects/classes/clips/HardClip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1D,OAAO,EAAwD,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAErH,qBAAa,QAAS,SAAQ,QAAQ;IAE3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAc;IAClC,IAAI,EAAE,MAAM,CAAc;IAE1B,KAAK,EAAE,MAAM,CAAK;IAClB,IAAI,EAAE,MAAM,CAAK;IACjB,UAAU,EAAE,UAAU,CAAuB;gBAExC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,eAAe,CAAC;IAUpD,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,qBAAqB,IAAI,eAAe;IAQvC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAMjC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAKxC"}
|
|
@@ -1,31 +1,37 @@
|
|
|
1
1
|
import { Effector } from "../../../core/classes/Effector";
|
|
2
|
-
import { CreateAudioWorkletNode, SendMessageToWorklet } from "../../../utilities/helpers";
|
|
3
|
-
import { HardClipMessageCommandId, AudioWorkletProcessorNames } from "../../../typings";
|
|
2
|
+
import { CoerceFiniteNumber, CreateAudioWorkletNode, SendMessageToWorklet } from "../../../utilities/helpers";
|
|
3
|
+
import { HardClipMessageCommandId, AudioWorkletProcessorNames, StrictMode } from "../../../typings";
|
|
4
4
|
export class HardClip extends Effector {
|
|
5
5
|
label = "HardClip";
|
|
6
6
|
name = "HardClip";
|
|
7
7
|
drive = 1;
|
|
8
8
|
gain = 1;
|
|
9
|
-
|
|
9
|
+
strictMode = StrictMode.Disabled;
|
|
10
|
+
constructor({ drive, gain, strictMode }) {
|
|
10
11
|
super();
|
|
11
|
-
this.drive = drive
|
|
12
|
-
this.gain = gain
|
|
12
|
+
this.drive = Math.max(0, CoerceFiniteNumber(drive, this.drive));
|
|
13
|
+
this.gain = Math.max(0, CoerceFiniteNumber(gain, this.gain));
|
|
14
|
+
const mode = CoerceFiniteNumber(strictMode, this.strictMode);
|
|
15
|
+
this.strictMode = mode === StrictMode.Enabled ? StrictMode.Enabled : StrictMode.Disabled;
|
|
13
16
|
}
|
|
14
|
-
async InitializeOnAttachment(
|
|
15
|
-
this.
|
|
16
|
-
this.audioWorkletNode = CreateAudioWorkletNode(
|
|
17
|
+
async InitializeOnAttachment(context) {
|
|
18
|
+
this.context = context;
|
|
19
|
+
this.audioWorkletNode = CreateAudioWorkletNode(context, AudioWorkletProcessorNames.HardClip, this.ReturnOptionsAsObject());
|
|
17
20
|
}
|
|
18
21
|
ReturnOptionsAsObject() {
|
|
19
22
|
return {
|
|
20
23
|
drive: this.drive,
|
|
21
|
-
gain: this.gain
|
|
24
|
+
gain: this.gain,
|
|
25
|
+
strictMode: this.strictMode
|
|
22
26
|
};
|
|
23
27
|
}
|
|
24
28
|
SetDrive(drive) {
|
|
29
|
+
drive = Math.max(0, CoerceFiniteNumber(drive, this.drive));
|
|
25
30
|
this.drive = drive;
|
|
26
31
|
return SendMessageToWorklet(this.audioWorkletNode, HardClipMessageCommandId.SetDrive, drive);
|
|
27
32
|
}
|
|
28
33
|
SetGain(gain) {
|
|
34
|
+
gain = Math.max(0, CoerceFiniteNumber(gain, this.gain));
|
|
29
35
|
this.gain = gain;
|
|
30
36
|
return SendMessageToWorklet(this.audioWorkletNode, HardClipMessageCommandId.SetGain, gain);
|
|
31
37
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Effector } from "../../../core/classes/Effector";
|
|
2
|
-
import { SoftClipOptions } from "../../../typings";
|
|
2
|
+
import { SoftClipOptions, StrictMode } from "../../../typings";
|
|
3
3
|
export declare class SoftClip extends Effector {
|
|
4
4
|
label: string | null;
|
|
5
5
|
name: string;
|
|
6
6
|
drive: number;
|
|
7
7
|
gain: number;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
strictMode: StrictMode;
|
|
9
|
+
constructor({ drive, gain, strictMode }: Partial<SoftClipOptions>);
|
|
10
|
+
InitializeOnAttachment(context: AudioContext): Promise<void>;
|
|
10
11
|
ReturnOptionsAsObject(): SoftClipOptions;
|
|
11
12
|
SetDrive(drive: number): boolean;
|
|
12
13
|
SetGain(gain: number): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SoftClip.d.ts","sourceRoot":"","sources":["../../../../src/effects/classes/clips/SoftClip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAwD,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"SoftClip.d.ts","sourceRoot":"","sources":["../../../../src/effects/classes/clips/SoftClip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAwD,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAErH,qBAAa,QAAS,SAAQ,QAAQ;IAE3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAc;IAClC,IAAI,EAAE,MAAM,CAAc;IAE1B,KAAK,EAAE,MAAM,CAAK;IAClB,IAAI,EAAE,MAAM,CAAK;IACjB,UAAU,EAAE,UAAU,CAAuB;gBAExC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,eAAe,CAAC;IAUpD,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,qBAAqB,IAAI,eAAe;IAQxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAMhC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAKxC"}
|
|
@@ -1,31 +1,37 @@
|
|
|
1
|
-
import { CreateAudioWorkletNode, SendMessageToWorklet } from "../../../utilities/helpers";
|
|
1
|
+
import { CoerceFiniteNumber, CreateAudioWorkletNode, SendMessageToWorklet } from "../../../utilities/helpers";
|
|
2
2
|
import { Effector } from "../../../core/classes/Effector";
|
|
3
|
-
import { AudioWorkletProcessorNames, SoftClipMessageCommandId } from "../../../typings";
|
|
3
|
+
import { AudioWorkletProcessorNames, SoftClipMessageCommandId, StrictMode } from "../../../typings";
|
|
4
4
|
export class SoftClip extends Effector {
|
|
5
5
|
label = "SoftClip";
|
|
6
6
|
name = "SoftClip";
|
|
7
7
|
drive = 1;
|
|
8
8
|
gain = 1;
|
|
9
|
-
|
|
9
|
+
strictMode = StrictMode.Disabled;
|
|
10
|
+
constructor({ drive, gain, strictMode }) {
|
|
10
11
|
super();
|
|
11
|
-
this.drive = drive
|
|
12
|
-
this.gain = gain
|
|
12
|
+
this.drive = Math.max(0, CoerceFiniteNumber(drive, this.drive));
|
|
13
|
+
this.gain = Math.max(0, CoerceFiniteNumber(gain, this.gain));
|
|
14
|
+
const mode = CoerceFiniteNumber(strictMode, this.strictMode);
|
|
15
|
+
this.strictMode = mode === StrictMode.Enabled ? StrictMode.Enabled : StrictMode.Disabled;
|
|
13
16
|
}
|
|
14
|
-
async InitializeOnAttachment(
|
|
15
|
-
this.
|
|
16
|
-
this.audioWorkletNode = CreateAudioWorkletNode(
|
|
17
|
+
async InitializeOnAttachment(context) {
|
|
18
|
+
this.context = context;
|
|
19
|
+
this.audioWorkletNode = CreateAudioWorkletNode(context, AudioWorkletProcessorNames.SoftClip, this.ReturnOptionsAsObject());
|
|
17
20
|
}
|
|
18
21
|
ReturnOptionsAsObject() {
|
|
19
22
|
return {
|
|
20
23
|
drive: this.drive,
|
|
21
|
-
gain: this.gain
|
|
24
|
+
gain: this.gain,
|
|
25
|
+
strictMode: this.strictMode
|
|
22
26
|
};
|
|
23
27
|
}
|
|
24
28
|
SetDrive(drive) {
|
|
29
|
+
drive = Math.max(0, CoerceFiniteNumber(drive, this.drive));
|
|
25
30
|
this.drive = drive;
|
|
26
31
|
return SendMessageToWorklet(this.audioWorkletNode, SoftClipMessageCommandId.SetDrive, drive);
|
|
27
32
|
}
|
|
28
33
|
SetGain(gain) {
|
|
34
|
+
gain = Math.max(0, CoerceFiniteNumber(gain, this.gain));
|
|
29
35
|
this.gain = gain;
|
|
30
36
|
return SendMessageToWorklet(this.audioWorkletNode, SoftClipMessageCommandId.SetGain, gain);
|
|
31
37
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Effector } from "../../../core/classes/Effector";
|
|
2
|
-
import { LowPassFilterOptions } from "../../../typings";
|
|
2
|
+
import { LowPassFilterOptions, StrictMode } from "../../../typings";
|
|
3
3
|
export declare class LowPassFilter extends Effector {
|
|
4
4
|
name: string;
|
|
5
5
|
label: string | null;
|
|
6
6
|
cutoff: number;
|
|
7
7
|
q: number;
|
|
8
8
|
minFrequency: number;
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
strictMode: StrictMode;
|
|
10
|
+
constructor({ cutoff, minFrequency, q, strictMode }: Partial<LowPassFilterOptions>);
|
|
11
|
+
InitializeOnAttachment(context: AudioContext): Promise<void>;
|
|
11
12
|
ReturnOptionsAsObject(): LowPassFilterOptions;
|
|
12
13
|
SetCutoff(cutoff?: number): boolean;
|
|
13
14
|
SetMinFrequency(minFrequency?: number): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LowPassFilter.d.ts","sourceRoot":"","sources":["../../../../src/effects/classes/filters/LowPassFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAI1D,OAAO,EAAE,oBAAoB,EAA6D,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"LowPassFilter.d.ts","sourceRoot":"","sources":["../../../../src/effects/classes/filters/LowPassFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAI1D,OAAO,EAAE,oBAAoB,EAA6D,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/H,qBAAa,aAAc,SAAQ,QAAQ;IAEhC,IAAI,EAAE,MAAM,CAAmB;IAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAmB;IAEvC,MAAM,EAAE,MAAM,CAAQ;IACtB,CAAC,EAAE,MAAM,CAAO;IAChB,YAAY,EAAE,MAAM,CAAM;IAC1B,UAAU,EAAE,UAAU,CAAuB;gBAExC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAWrE,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,qBAAqB,IAAI,oBAAoB;IAS7C,SAAS,CAAC,MAAM,GAAE,MAAa,GAAG,OAAO;IAczC,eAAe,CAAC,YAAY,GAAE,MAAW,GAAG,OAAO;IAWnD,IAAI,CAAC,CAAC,GAAE,MAAY,GAAG,OAAO;CAWxC"}
|