@fluex/fluexgl-dsp 0.4.0 → 0.4.2

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.
Files changed (78) hide show
  1. package/README.md +16 -38
  2. package/lib/dist/core/classes/AudioClip.d.ts +3 -1
  3. package/lib/dist/core/classes/AudioClip.d.ts.map +1 -1
  4. package/lib/dist/core/classes/AudioClip.js +18 -5
  5. package/lib/dist/core/classes/AudioClipPlayer.d.ts +8 -2
  6. package/lib/dist/core/classes/AudioClipPlayer.d.ts.map +1 -1
  7. package/lib/dist/core/classes/AudioClipPlayer.js +48 -1
  8. package/lib/dist/core/classes/AudioDevice.d.ts +2 -0
  9. package/lib/dist/core/classes/AudioDevice.d.ts.map +1 -1
  10. package/lib/dist/core/classes/AudioDevice.js +4 -0
  11. package/lib/dist/core/classes/Channel.d.ts +10 -2
  12. package/lib/dist/core/classes/Channel.d.ts.map +1 -1
  13. package/lib/dist/core/classes/Channel.js +67 -0
  14. package/lib/dist/core/classes/DpsPipeline.d.ts +1 -1
  15. package/lib/dist/core/classes/DpsPipeline.d.ts.map +1 -1
  16. package/lib/dist/core/classes/DpsPipeline.js +7 -3
  17. package/lib/dist/core/classes/Effector.d.ts +2 -2
  18. package/lib/dist/core/classes/Effector.d.ts.map +1 -1
  19. package/lib/dist/core/classes/Effector.js +1 -1
  20. package/lib/dist/core/classes/Master.d.ts +12 -0
  21. package/lib/dist/core/classes/Master.d.ts.map +1 -1
  22. package/lib/dist/core/classes/Master.js +77 -7
  23. package/lib/dist/effects/classes/Analyser.d.ts +16 -0
  24. package/lib/dist/effects/classes/Analyser.d.ts.map +1 -0
  25. package/lib/dist/effects/classes/Analyser.js +62 -0
  26. package/lib/dist/effects/classes/Chorus.d.ts +4 -3
  27. package/lib/dist/effects/classes/Chorus.d.ts.map +1 -1
  28. package/lib/dist/effects/classes/Chorus.js +21 -12
  29. package/lib/dist/effects/classes/clips/HardClip.d.ts +4 -3
  30. package/lib/dist/effects/classes/clips/HardClip.d.ts.map +1 -1
  31. package/lib/dist/effects/classes/clips/HardClip.js +15 -9
  32. package/lib/dist/effects/classes/clips/SoftClip.d.ts +4 -3
  33. package/lib/dist/effects/classes/clips/SoftClip.d.ts.map +1 -1
  34. package/lib/dist/effects/classes/clips/SoftClip.js +15 -9
  35. package/lib/dist/effects/classes/filters/LowPassFilter.d.ts +4 -3
  36. package/lib/dist/effects/classes/filters/LowPassFilter.d.ts.map +1 -1
  37. package/lib/dist/effects/classes/filters/LowPassFilter.js +23 -14
  38. package/lib/dist/effects/exports.d.ts +1 -0
  39. package/lib/dist/effects/exports.d.ts.map +1 -1
  40. package/lib/dist/effects/exports.js +1 -0
  41. package/lib/dist/index.d.ts +5 -4
  42. package/lib/dist/index.d.ts.map +1 -1
  43. package/lib/dist/index.js +13 -18
  44. package/lib/dist/typings.d.ts +13 -11
  45. package/lib/dist/typings.d.ts.map +1 -1
  46. package/lib/dist/typings.js +5 -0
  47. package/lib/dist/utilities/debugger.js +6 -6
  48. package/lib/dist/utilities/helpers.d.ts +2 -0
  49. package/lib/dist/utilities/helpers.d.ts.map +1 -1
  50. package/lib/dist/utilities/helpers.js +35 -12
  51. package/lib/src/core/classes/AudioClip.ts +23 -7
  52. package/lib/src/core/classes/AudioClipPlayer.ts +67 -7
  53. package/lib/src/core/classes/AudioDevice.ts +5 -0
  54. package/lib/src/core/classes/Channel.ts +97 -4
  55. package/lib/src/core/classes/DpsPipeline.ts +7 -3
  56. package/lib/src/core/classes/Effector.ts +3 -2
  57. package/lib/src/core/classes/Master.ts +98 -11
  58. package/lib/src/effects/classes/Analyser.ts +84 -0
  59. package/lib/src/effects/classes/Chorus.ts +22 -13
  60. package/lib/src/effects/classes/clips/HardClip.ts +17 -10
  61. package/lib/src/effects/classes/clips/SoftClip.ts +17 -10
  62. package/lib/src/effects/classes/filters/LowPassFilter.ts +28 -15
  63. package/lib/src/effects/exports.ts +2 -1
  64. package/lib/src/index.ts +27 -29
  65. package/lib/src/typings.ts +14 -14
  66. package/lib/src/utilities/debugger.ts +6 -6
  67. package/lib/src/utilities/helpers.ts +38 -14
  68. package/package.json +1 -1
  69. package/lib/dist/effects/classes/Filter.d.ts +0 -3
  70. package/lib/dist/effects/classes/Filter.d.ts.map +0 -1
  71. package/lib/dist/effects/classes/Filter.js +0 -2
  72. package/lib/dist/effects/classes/SoftClip.d.ts +0 -10
  73. package/lib/dist/effects/classes/SoftClip.d.ts.map +0 -1
  74. package/lib/dist/effects/classes/SoftClip.js +0 -39
  75. package/lib/dist/test/linkable-channels.d.ts +0 -2
  76. package/lib/dist/test/linkable-channels.d.ts.map +0 -1
  77. package/lib/dist/test/linkable-channels.js +0 -16
  78. package/lib/src/core/functions/rebuild-effect-chain.ts +0 -5
@@ -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
- constructor({ baseDelayMs, depthMs, rateHz, mix, feedback }: Partial<ChorusEffectOptions>);
12
- InitializeOnAttachment(parentialContext: AudioContext): Promise<void>;
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;AAExG,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;gBAElB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAU5E,sBAAsB,CAAC,gBAAgB,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3E,qBAAqB,IAAI,mBAAmB;IAU5C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAKtC,UAAU,CAAC,KAAK,EAAE,MAAM;IAKxB,SAAS,CAAC,KAAK,EAAE,MAAM;IAKvB,MAAM,CAAC,KAAK,EAAE,MAAM;IAKpB,WAAW,CAAC,KAAK,EAAE,MAAM;CAInC"}
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
- constructor({ baseDelayMs, depthMs, rateHz, mix, feedback }) {
12
+ strictMode = StrictMode.Disabled;
13
+ constructor({ baseDelayMs, depthMs, rateHz, mix, feedback, strictMode }) {
13
14
  super();
14
- this.baseDelayMs = baseDelayMs ?? this.baseDelayMs;
15
- this.depthMs = depthMs ?? this.depthMs;
16
- this.rateHz = rateHz ?? this.rateHz;
17
- this.mix = mix ?? this.mix;
18
- this.feedback = feedback ?? this.feedback;
19
- }
20
- async InitializeOnAttachment(parentialContext) {
21
- this.parentialContext = parentialContext;
22
- this.audioWorkletNode = CreateAudioWorkletNode(parentialContext, AudioWorkletProcessorNames.Chorus, this.ReturnOptionsAsObject());
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
- constructor({ drive, gain }: Partial<HardClipOptions>);
9
- InitializeOnAttachment(parentialContext: AudioContext): Promise<void>;
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;AAEzG,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;gBAEZ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,eAAe,CAAC;IAOxC,sBAAsB,CAAC,gBAAgB,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3E,qBAAqB,IAAI,eAAe;IAOvC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAKjC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAIxC"}
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
- constructor({ drive, gain }) {
9
+ strictMode = StrictMode.Disabled;
10
+ constructor({ drive, gain, strictMode }) {
10
11
  super();
11
- this.drive = drive ?? this.drive;
12
- this.gain = gain ?? this.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(parentialContext) {
15
- this.parentialContext = parentialContext;
16
- this.audioWorkletNode = CreateAudioWorkletNode(parentialContext, AudioWorkletProcessorNames.HardClip, this.ReturnOptionsAsObject());
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
- constructor({ drive, gain }: Partial<SoftClipOptions>);
9
- InitializeOnAttachment(parentialContext: AudioContext): Promise<void>;
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;AAEzG,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;gBAEZ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,eAAe,CAAC;IAOxC,sBAAsB,CAAC,gBAAgB,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3E,qBAAqB,IAAI,eAAe;IAOxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAKhC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAIxC"}
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
- constructor({ drive, gain }) {
9
+ strictMode = StrictMode.Disabled;
10
+ constructor({ drive, gain, strictMode }) {
10
11
  super();
11
- this.drive = drive ?? this.drive;
12
- this.gain = gain ?? this.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(parentialContext) {
15
- this.parentialContext = parentialContext;
16
- this.audioWorkletNode = CreateAudioWorkletNode(parentialContext, AudioWorkletProcessorNames.SoftClip, this.ReturnOptionsAsObject());
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
- constructor({ cutoff, minFrequency, q }: Partial<LowPassFilterOptions>);
10
- InitializeOnAttachment(parentialContext: AudioContext): Promise<void>;
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;AAEnH,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;gBAErB,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAQzD,sBAAsB,CAAC,gBAAgB,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3E,qBAAqB,IAAI,oBAAoB;IAQ7C,SAAS,CAAC,MAAM,GAAE,MAAa,GAAG,OAAO;IAWzC,eAAe,CAAC,YAAY,GAAE,MAAW,GAAG,OAAO;IASnD,IAAI,CAAC,CAAC,GAAE,MAAY,GAAG,OAAO;CAQxC"}
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"}
@@ -1,45 +1,54 @@
1
1
  import { Effector } from "../../../core/classes/Effector";
2
- import { SendMessageToWorklet, CreateAudioWorkletNode } from "../../../utilities/helpers";
3
- import { LowPassFilterMessageCommandId, AudioWorkletProcessorNames } from "../../../typings";
2
+ import { CoerceFiniteNumber, SendMessageToWorklet, CreateAudioWorkletNode } from "../../../utilities/helpers";
3
+ import { LowPassFilterMessageCommandId, AudioWorkletProcessorNames, StrictMode } from "../../../typings";
4
4
  export class LowPassFilter extends Effector {
5
5
  name = "LowPassFilter";
6
6
  label = "LowPassFilter";
7
7
  cutoff = 1000;
8
8
  q = 0.7;
9
9
  minFrequency = 10;
10
- constructor({ cutoff, minFrequency, q }) {
10
+ strictMode = StrictMode.Disabled;
11
+ constructor({ cutoff, minFrequency, q, strictMode }) {
11
12
  super();
12
- this.cutoff = cutoff ?? this.cutoff;
13
- this.minFrequency = minFrequency ?? this.minFrequency;
14
- this.q = q ?? this.q;
13
+ this.cutoff = CoerceFiniteNumber(cutoff, this.cutoff);
14
+ this.minFrequency = CoerceFiniteNumber(minFrequency, this.minFrequency);
15
+ this.q = CoerceFiniteNumber(q, this.q);
16
+ const mode = CoerceFiniteNumber(strictMode, this.strictMode);
17
+ this.strictMode = mode === StrictMode.Enabled ? StrictMode.Enabled : StrictMode.Disabled;
15
18
  }
16
- async InitializeOnAttachment(parentialContext) {
17
- this.parentialContext = parentialContext;
18
- this.audioWorkletNode = CreateAudioWorkletNode(parentialContext, AudioWorkletProcessorNames.LowPassFilter, this.ReturnOptionsAsObject());
19
- this.registerMessageEventListener(this.audioWorkletNode);
19
+ async InitializeOnAttachment(context) {
20
+ this.context = context;
21
+ this.audioWorkletNode = CreateAudioWorkletNode(context, AudioWorkletProcessorNames.LowPassFilter, this.ReturnOptionsAsObject());
22
+ this.audioWorkletNode && this.registerMessageEventListener(this.audioWorkletNode);
20
23
  }
21
24
  ReturnOptionsAsObject() {
22
25
  return {
23
26
  cutoff: this.cutoff,
24
27
  minFrequency: this.minFrequency,
25
- q: this.q
28
+ q: this.q,
29
+ strictMode: this.strictMode
26
30
  };
27
31
  }
28
32
  SetCutoff(cutoff = 1000) {
29
- if (!this.parentialContext)
33
+ if (!this.context)
30
34
  return false;
31
- if (cutoff >= this.parentialContext.sampleRate)
32
- cutoff = this.parentialContext.sampleRate;
35
+ cutoff = CoerceFiniteNumber(cutoff, this.cutoff);
36
+ cutoff = Math.max(this.minFrequency, cutoff);
37
+ if (cutoff >= this.context.sampleRate)
38
+ cutoff = this.context.sampleRate;
33
39
  this.cutoff = cutoff;
34
40
  return SendMessageToWorklet(this.audioWorkletNode, LowPassFilterMessageCommandId.SetCutoff, cutoff);
35
41
  }
36
42
  SetMinFrequency(minFrequency = 10) {
43
+ minFrequency = CoerceFiniteNumber(minFrequency, this.minFrequency);
37
44
  if (minFrequency < 10)
38
45
  minFrequency = 10;
39
46
  this.minFrequency = minFrequency;
40
47
  return SendMessageToWorklet(this.audioWorkletNode, LowPassFilterMessageCommandId.SetMinFrequency, minFrequency);
41
48
  }
42
49
  SetQ(q = 0.7) {
50
+ q = CoerceFiniteNumber(q, this.q);
51
+ q = Math.max(0.0001, q);
43
52
  if (q > 4)
44
53
  q = 4;
45
54
  this.q = q;
@@ -1,4 +1,5 @@
1
1
  export { Chorus } from "./classes/Chorus";
2
+ export { Analyser } from "./classes/Analyser";
2
3
  export { Distortion } from "./classes/Distortion";
3
4
  export { Equalizer } from "./classes/Equalizer";
4
5
  export { Limiter } from "./classes/Limiter";
@@ -1 +1 @@
1
- {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/effects/exports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/effects/exports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { Chorus } from "./classes/Chorus";
2
+ export { Analyser } from "./classes/Analyser";
2
3
  export { Distortion } from "./classes/Distortion";
3
4
  export { Equalizer } from "./classes/Equalizer";
4
5
  export { Limiter } from "./classes/Limiter";
@@ -2,12 +2,13 @@
2
2
  * FluexGL Audio
3
3
  * A javascript digital audio processor library.
4
4
  */
5
- import { FluexGLAudioDescriptor } from "./typings";
6
- export declare const FluexGLAudio: FluexGLAudioDescriptor;
7
- export { Chorus, Distortion, Equalizer, Limiter, Saturation, StereoPanner, Compressor, MultibandCompressor, AdvancedDelay, MonoDelay, PingPongDelay, StereoDelay, ChamberReverb, ConvolverReverb, GenericReverb, HallReverb, RoomReverb, SoftClip, LowPassFilter, HardClip } from "./effects/exports";
5
+ import { DspOptions } from "./typings";
6
+ export declare const DSP: DspOptions;
7
+ export { Chorus, Analyser, Distortion, Equalizer, Limiter, Saturation, StereoPanner, Compressor, MultibandCompressor, AdvancedDelay, MonoDelay, PingPongDelay, StereoDelay, ChamberReverb, ConvolverReverb, GenericReverb, HallReverb, RoomReverb, SoftClip, LowPassFilter, HardClip } from "./effects/exports";
8
8
  export { AudioDevice, Channel, Effector, Master, AudioClip, DspPipeline, AudioClipPlayer } from "./core/exports";
9
9
  export { InitializeDspPipeline, ResolveAudioOutputDevices, ResolveAudioInputDevices, ResolveDefaultAudioInputDevice, ResolveDefaultAudioOutputDevice, LoadAudioSource, LoadAudioSourceFromBlob, LoadWorkletOnAudioDevice, SendMessageToWorklet } from "./utilities/helpers";
10
10
  export { SUPPORTED_FILE_TYPES } from "./utilities/constants";
11
11
  export { hasInitializedWasm, } from "./utilities/web-assembly";
12
- export type { FluexGLAudioDescriptor, FluexGLAudioDebuggerOptions, FluexGLAudioOptions, LoadAudioSourceOptions, AudioSourceData, ChannelOptions, ChannelSpatialization, AudioClipEventMap, AudioClipEvents, AudioClipOnProgressEvent, AudioClipAnalyserProperty, AudioClipAnalyserType, DspPipelineInitializationOptions, DspPipelineInitializationState, ChorusEffectOptions, LowPassFilterOptions, LowPassFilterMessageCommandId, ChorusMessageCommandId, AudioWorkletProcessorNames, SoftClipMessageCommandId, SoftClipOptions, HardClipMessageCommandId, HardClipOptions, EffectorEventMap, IncomingMessageType, IncomingProcessorMessage, ProcessorData, ProcessorIdentificationCodes, EffectorEvents } from "./typings";
12
+ export { StrictMode, ProcessorIdentificationCodes, HardClipMessageCommandId, SoftClipMessageCommandId, AudioWorkletProcessorNames, ChorusMessageCommandId, LowPassFilterMessageCommandId } from "./typings";
13
+ export type { DspDebuggerOptions, DspOptions, LoadAudioSourceOptions, AudioSourceData, ChannelOptions, ChannelSpatialization, AudioClipEventMap, AudioClipEvents, AudioClipOnProgressEvent, AudioClipAnalyserProperty, AudioClipAnalyserType, DspPipelineInitializationOptions, DspPipelineInitializationState, ChorusEffectOptions, LowPassFilterOptions, SoftClipOptions, HardClipOptions, EffectorEventMap, IncomingMessageType, IncomingProcessorMessage, ProcessorData, EffectorEvents, } from "./typings";
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,eAAO,MAAM,YAAY,EAAE,sBAkB1B,CAAA;AAED,OAAO,EACH,MAAM,EACN,UAAU,EACV,SAAS,EACT,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,aAAa,EACb,QAAQ,EACX,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACH,WAAW,EACX,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,WAAW,EACX,eAAe,EAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACH,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,8BAA8B,EAC9B,+BAA+B,EAC/B,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,oBAAoB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACH,kBAAkB,GACrB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACR,sBAAsB,EACtB,2BAA2B,EAC3B,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,gCAAgC,EAChC,8BAA8B,EAC9B,mBAAmB,EACnB,oBAAoB,EACpB,6BAA6B,EAC7B,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,4BAA4B,EAC5B,cAAc,EACjB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,eAAO,MAAM,GAAG,EAAE,UAYjB,CAAA;AAED,OAAO,EACH,MAAM,EACN,QAAQ,EACR,UAAU,EACV,SAAS,EACT,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,aAAa,EACb,QAAQ,EACX,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACH,WAAW,EACX,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,WAAW,EACX,eAAe,EAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACH,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,8BAA8B,EAC9B,+BAA+B,EAC/B,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,oBAAoB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACH,kBAAkB,GACrB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACH,UAAU,EACV,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,6BAA6B,EAChC,MAAM,WAAW,CAAC;AAEnB,YAAY,EACR,kBAAkB,EAClB,UAAU,EACV,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,gCAAgC,EAChC,8BAA8B,EAC9B,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,cAAc,GACjB,MAAM,WAAW,CAAC"}
package/lib/dist/index.js CHANGED
@@ -2,27 +2,22 @@
2
2
  * FluexGL Audio
3
3
  * A javascript digital audio processor library.
4
4
  */
5
- export const FluexGLAudio = {
6
- name: "FluexGL Audio",
7
- author: "Rohan Kanhaisingh",
8
- version: "0.0.2",
9
- license: "MIT",
10
- repository: "https://github.com/rohankanhaisingh/FluexGL-Audio",
11
- options: {
12
- maxMasterChannels: 8,
13
- maxTotalChannels: 128,
14
- sampleRate: 44000,
15
- spatialization: "stereo",
16
- debugger: {
17
- showErrors: true,
18
- showInfo: true,
19
- showWarnings: true,
20
- breakOnError: true
21
- }
5
+ export const DSP = {
6
+ maxMasterChannels: 8,
7
+ maxTotalChannels: 128,
8
+ sampleRate: 44000,
9
+ spatialization: "stereo",
10
+ overrideMaxAudioBufferNodes: false,
11
+ debugger: {
12
+ showErrors: true,
13
+ showInfo: true,
14
+ showWarnings: true,
15
+ breakOnError: true
22
16
  }
23
17
  };
24
- export { Chorus, Distortion, Equalizer, Limiter, Saturation, StereoPanner, Compressor, MultibandCompressor, AdvancedDelay, MonoDelay, PingPongDelay, StereoDelay, ChamberReverb, ConvolverReverb, GenericReverb, HallReverb, RoomReverb, SoftClip, LowPassFilter, HardClip } from "./effects/exports";
18
+ export { Chorus, Analyser, Distortion, Equalizer, Limiter, Saturation, StereoPanner, Compressor, MultibandCompressor, AdvancedDelay, MonoDelay, PingPongDelay, StereoDelay, ChamberReverb, ConvolverReverb, GenericReverb, HallReverb, RoomReverb, SoftClip, LowPassFilter, HardClip } from "./effects/exports";
25
19
  export { AudioDevice, Channel, Effector, Master, AudioClip, DspPipeline, AudioClipPlayer } from "./core/exports";
26
20
  export { InitializeDspPipeline, ResolveAudioOutputDevices, ResolveAudioInputDevices, ResolveDefaultAudioInputDevice, ResolveDefaultAudioOutputDevice, LoadAudioSource, LoadAudioSourceFromBlob, LoadWorkletOnAudioDevice, SendMessageToWorklet } from "./utilities/helpers";
27
21
  export { SUPPORTED_FILE_TYPES } from "./utilities/constants";
28
22
  export { hasInitializedWasm, } from "./utilities/web-assembly";
23
+ export { StrictMode, ProcessorIdentificationCodes, HardClipMessageCommandId, SoftClipMessageCommandId, AudioWorkletProcessorNames, ChorusMessageCommandId, LowPassFilterMessageCommandId } from "./typings";
@@ -51,26 +51,23 @@ export declare enum ProcessorIdentificationCodes {
51
51
  UnknownProcessorName = "UNKNOWN_PROCESSOR_NAME",
52
52
  UnknownProcessorCreationDate = "UNKNOWN_PROCESSOR_CREATION_DATE"
53
53
  }
54
- export interface FluexGLAudioDebuggerOptions {
54
+ export declare enum StrictMode {
55
+ Disabled = 0,
56
+ Enabled = 1
57
+ }
58
+ export interface DspDebuggerOptions {
55
59
  breakOnError: boolean;
56
60
  showInfo: boolean;
57
61
  showErrors: boolean;
58
62
  showWarnings: boolean;
59
63
  }
60
- export interface FluexGLAudioOptions {
64
+ export interface DspOptions {
61
65
  maxMasterChannels: number;
62
66
  maxTotalChannels: number;
63
67
  sampleRate: number;
64
68
  spatialization: ChannelSpatialization;
65
- debugger: FluexGLAudioDebuggerOptions;
66
- }
67
- export interface FluexGLAudioDescriptor {
68
- name: string;
69
- author: string;
70
- version: string;
71
- license: string;
72
- repository: string;
73
- options: FluexGLAudioOptions;
69
+ debugger: DspDebuggerOptions;
70
+ overrideMaxAudioBufferNodes: boolean;
74
71
  }
75
72
  export interface LoadAudioSourceOptions {
76
73
  allowForeignFileTypes: boolean;
@@ -99,6 +96,7 @@ export interface AudioClipEventMap {
99
96
  export interface DspPipelineInitializationOptions {
100
97
  pathToWasm: string;
101
98
  pathToWorklet: string;
99
+ options?: Partial<DspOptions>;
102
100
  }
103
101
  export interface DspPipelineInitializationState {
104
102
  success: boolean;
@@ -110,19 +108,23 @@ export interface ChorusEffectOptions {
110
108
  rateHz: number;
111
109
  mix: number;
112
110
  feedback: number;
111
+ strictMode: StrictMode;
113
112
  }
114
113
  export interface LowPassFilterOptions {
115
114
  cutoff: number;
116
115
  minFrequency: number;
117
116
  q: number;
117
+ strictMode: StrictMode;
118
118
  }
119
119
  export interface SoftClipOptions {
120
120
  drive: number;
121
121
  gain: number;
122
+ strictMode: StrictMode;
122
123
  }
123
124
  export interface HardClipOptions {
124
125
  drive: number;
125
126
  gain: number;
127
+ strictMode: StrictMode;
126
128
  }
127
129
  export interface EffectorEventMap {
128
130
  "incoming-processor-message": (message: IncomingProcessorMessage) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"typings.d.ts","sourceRoot":"","sources":["../src/typings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typings.d.ts","sourceRoot":"","sources":["../src/typings.ts"],"names":[],"mappings":"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"}
@@ -47,3 +47,8 @@ export var ProcessorIdentificationCodes;
47
47
  ProcessorIdentificationCodes["UnknownProcessorName"] = "UNKNOWN_PROCESSOR_NAME";
48
48
  ProcessorIdentificationCodes["UnknownProcessorCreationDate"] = "UNKNOWN_PROCESSOR_CREATION_DATE";
49
49
  })(ProcessorIdentificationCodes || (ProcessorIdentificationCodes = {}));
50
+ export var StrictMode;
51
+ (function (StrictMode) {
52
+ StrictMode[StrictMode["Disabled"] = 0] = "Disabled";
53
+ StrictMode[StrictMode["Enabled"] = 1] = "Enabled";
54
+ })(StrictMode || (StrictMode = {}));