@effetune/dsp 0.5.0 → 0.7.0

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/dist/effect.js CHANGED
@@ -2,8 +2,8 @@ import { AssetError, ValidationError } from './errors.js';
2
2
 
3
3
  export const EFFECT_CHANNELS = Object.freeze([
4
4
  'all', 'stereo', 'left', 'right',
5
- '1', '2', '3', '4', '5', '6', '7', '8',
6
- '34', '56', '78'
5
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16',
6
+ '34', '56', '78', '910', '1112', '1314', '1516'
7
7
  ]);
8
8
 
9
9
  const COMMON_KEYS = new Set(['id', 'enabled', 'channel', 'assets', 'parameters']);
@@ -12,6 +12,7 @@ const ASSET_NAMES_BY_EFFECT = new Map([
12
12
  ['FIRCrossover', ['impulseResponse']],
13
13
  ['FiveBandFIRPEQ', ['impulseResponse']],
14
14
  ['GroupDelayEQ', ['impulseResponse']],
15
+ ['GroupDelayPEQ', ['impulseResponse']],
15
16
  ['IRReverb', ['impulseResponse']],
16
17
  ['RoomEQ', ['impulseResponse']]
17
18
  ]);
@@ -85,6 +86,32 @@ export function validateParameterValue(effectType, definition, value) {
85
86
  return Array.isArray(value) ? Object.freeze([...value]) : value;
86
87
  }
87
88
 
89
+ export function canonicalizeProcessingParameters(effectType, parameters) {
90
+ const canonical = { ...parameters };
91
+ if (effectType === 'AutoFilter' &&
92
+ canonical.minimumFrequency > canonical.maximumFrequency) {
93
+ [canonical.minimumFrequency, canonical.maximumFrequency] =
94
+ [canonical.maximumFrequency, canonical.minimumFrequency];
95
+ } else if (effectType === 'Chorus' && canonical.depth > canonical.delay) {
96
+ canonical.depth = canonical.delay;
97
+ } else if (effectType === 'FrequencyShifter' &&
98
+ canonical.minimumShift > canonical.maximumShift) {
99
+ [canonical.minimumShift, canonical.maximumShift] =
100
+ [canonical.maximumShift, canonical.minimumShift];
101
+ } else if (effectType === 'MultibandCompressor' || effectType === 'MultibandExpander' ||
102
+ effectType === 'MultibandBalance' || effectType === 'MultibandTransient' ||
103
+ effectType === 'MultibandSaturation') {
104
+ const count = effectType === 'MultibandTransient' || effectType === 'MultibandSaturation'
105
+ ? 2 : 4;
106
+ for (let index = 2; index <= count; index++) {
107
+ const key = `frequency${index}`;
108
+ const previous = canonical[`frequency${index - 1}`];
109
+ if (canonical[key] < previous) canonical[key] = previous;
110
+ }
111
+ }
112
+ return canonical;
113
+ }
114
+
88
115
  function normalizeBaseAssets(effectType, assets) {
89
116
  const assetNames = ASSET_NAMES_BY_EFFECT.get(effectType);
90
117
  if (!assetNames) {
@@ -1,9 +1,9 @@
1
1
  // Generated by scripts/gen-dsp-library-bindings.mjs. Do not edit.
2
2
  import { Effect } from './effect.js';
3
3
 
4
- export type EffectType = "LevelMeter" | "Oscilloscope" | "Spectrogram" | "SpectrumAnalyzer" | "StereoMeter" | "ChannelDivider" | "DCOffset" | "FIRCrossover" | "Matrix" | "MultiChannelPanel" | "Mute" | "PolarityInversion" | "StereoBalance" | "Volume" | "Delay" | "TimeAlignment" | "AutoLeveler" | "BrickwallLimiter" | "Compressor" | "Expander" | "Gate" | "MultibandCompressor" | "MultibandExpander" | "MultibandTransient" | "PowerAmpSag" | "TransientShaper" | "BandPassFilter" | "CombFilter" | "EarphoneCableSim" | "FifteenBandGEQ" | "FifteenBandPEQ" | "FiveBandDynamicEQ" | "FiveBandFIRPEQ" | "FiveBandPEQ" | "GroupDelayEQ" | "HiPassFilter" | "LoPassFilter" | "LoudnessEqualizer" | "NarrowRange" | "RoomEQ" | "TiltEQ" | "ToneControl" | "AMRadioSimulator" | "BitCrusher" | "BluetoothSBCSimulator" | "CassetteArtifacts" | "DigitalErrorEmulator" | "DSD64IMDSimulator" | "FMRadioSimulator" | "G726ADPCMSimulator" | "GSMFullRateSimulator" | "HumGenerator" | "MP3CodecSimulator" | "NoiseBlender" | "SimpleJitter" | "SWRadioSimulator" | "TapeArtifacts" | "VinylArtifacts" | "VinylSimulator" | "AutoFilter" | "AutoPan" | "Chorus" | "DopplerDistortion" | "FrequencyShifter" | "Phaser" | "PitchShifter" | "RotarySpeaker" | "Tremolo" | "WowFlutter" | "Oscillator" | "HornResonator" | "HornResonatorPlus" | "ModalResonator" | "DattorroPlateReverb" | "FDNReverb" | "IRReverb" | "RSReverb" | "DynamicSaturation" | "Exciter" | "HardClipping" | "HarmonicDistortion" | "MultibandSaturation" | "Saturation" | "SubSynth" | "TubeSimulator" | "CrossfeedFilter" | "MSMatrix" | "MultibandBalance" | "PhaseSelectEQ" | "StereoBlend";
5
- type RequiredAssetEffectType = "FIRCrossover" | "FiveBandFIRPEQ" | "GroupDelayEQ" | "RoomEQ" | "IRReverb";
6
- export type EffectChannel = "all" | "stereo" | "left" | "right" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "34" | "56" | "78";
4
+ export type EffectType = "LevelMeter" | "Oscilloscope" | "Spectrogram" | "SpectrumAnalyzer" | "StereoMeter" | "ChannelDivider" | "DCOffset" | "FIRCrossover" | "Matrix" | "MultiChannelPanel" | "Mute" | "PolarityInversion" | "StereoBalance" | "Volume" | "Delay" | "TimeAlignment" | "AutoLeveler" | "BrickwallLimiter" | "Compressor" | "Expander" | "Gate" | "MultibandCompressor" | "MultibandExpander" | "MultibandTransient" | "PowerAmpSag" | "TransientShaper" | "BandPassFilter" | "CombFilter" | "EarphoneCableSim" | "FifteenBandGEQ" | "FifteenBandPEQ" | "FiveBandDynamicEQ" | "FiveBandFIRPEQ" | "FiveBandPEQ" | "GroupDelayEQ" | "GroupDelayPEQ" | "HiPassFilter" | "LoPassFilter" | "LoudnessEqualizer" | "NarrowRange" | "RoomEQ" | "TiltEQ" | "ToneControl" | "AMRadioSimulator" | "BitCrusher" | "BluetoothSBCSimulator" | "CassetteArtifacts" | "DigitalErrorEmulator" | "DSD64IMDSimulator" | "FMRadioSimulator" | "G726ADPCMSimulator" | "GSMFullRateSimulator" | "HumGenerator" | "MDSimulator" | "MP3CodecSimulator" | "NoiseBlender" | "SimpleJitter" | "SWRadioSimulator" | "TapeArtifacts" | "VinylArtifacts" | "VinylSimulator" | "AutoFilter" | "AutoPan" | "Chorus" | "DopplerDistortion" | "FrequencyShifter" | "Phaser" | "PitchShifter" | "RotarySpeaker" | "Tremolo" | "WowFlutter" | "Oscillator" | "HornResonator" | "HornResonatorPlus" | "ModalResonator" | "DattorroPlateReverb" | "FDNReverb" | "IRReverb" | "RSReverb" | "DynamicSaturation" | "Exciter" | "HardClipping" | "HarmonicDistortion" | "MultibandSaturation" | "Saturation" | "SubSynth" | "TubeSimulator" | "CrossfeedFilter" | "MSMatrix" | "MultibandBalance" | "PhaseSelectEQ" | "StereoBlend";
5
+ type RequiredAssetEffectType = "FIRCrossover" | "FiveBandFIRPEQ" | "GroupDelayEQ" | "GroupDelayPEQ" | "RoomEQ" | "IRReverb";
6
+ export type EffectChannel = "all" | "stereo" | "left" | "right" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "34" | "56" | "78" | "910" | "1112" | "1314" | "1516";
7
7
 
8
8
  export interface CommonEffectOptions {
9
9
  readonly id?: string;
@@ -139,11 +139,11 @@ export declare class Matrix extends Effect {
139
139
  export declare function createMatrix(options?: MatrixOptions): Matrix;
140
140
 
141
141
  export interface MultiChannelPanelOptions extends CommonEffectOptions {
142
- readonly mute?: readonly [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean];
143
- readonly solo?: readonly [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean];
144
- readonly volume?: readonly [number, number, number, number, number, number, number, number];
145
- readonly delay?: readonly [number, number, number, number, number, number, number, number];
146
- readonly link?: readonly [boolean, boolean, boolean, boolean, boolean, boolean, boolean];
142
+ readonly mute?: readonly [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean];
143
+ readonly solo?: readonly [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean];
144
+ readonly volume?: readonly [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
145
+ readonly delay?: readonly [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
146
+ readonly link?: readonly [boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean];
147
147
  readonly assets?: never;
148
148
  }
149
149
 
@@ -555,6 +555,19 @@ export declare class GroupDelayEQ extends Effect {
555
555
 
556
556
  export declare function createGroupDelayEQ(options: GroupDelayEQOptions): GroupDelayEQ;
557
557
 
558
+ export interface GroupDelayPEQOptions extends CommonEffectOptions {
559
+ readonly latencyMode?: "0" | "128" | "256" | "512" | "1024";
560
+ readonly filterDelaySamples?: number;
561
+ readonly assets: IRReverbAssets;
562
+ }
563
+
564
+ export declare class GroupDelayPEQ extends Effect {
565
+ static readonly effectType: "GroupDelayPEQ";
566
+ constructor(options: GroupDelayPEQOptions);
567
+ }
568
+
569
+ export declare function createGroupDelayPEQ(options: GroupDelayPEQOptions): GroupDelayPEQ;
570
+
558
571
  export interface HiPassFilterOptions extends CommonEffectOptions {
559
572
  readonly frequency?: number;
560
573
  readonly slope?: 0 | -12 | -24 | -36 | -48 | -60 | -72 | -84 | -96;
@@ -853,6 +866,20 @@ export declare class HumGenerator extends Effect {
853
866
 
854
867
  export declare function createHumGenerator(options?: HumGeneratorOptions): HumGenerator;
855
868
 
869
+ export interface MDSimulatorOptions extends CommonEffectOptions {
870
+ readonly mode?: "SP (292 kbps)" | "LP2 (132 kbps)" | "LP4 (66 kbps)";
871
+ readonly outputGain?: number;
872
+ readonly mix?: number;
873
+ readonly assets?: never;
874
+ }
875
+
876
+ export declare class MDSimulator extends Effect {
877
+ static readonly effectType: "MDSimulator";
878
+ constructor(options?: MDSimulatorOptions);
879
+ }
880
+
881
+ export declare function createMDSimulator(options?: MDSimulatorOptions): MDSimulator;
882
+
856
883
  export interface MP3CodecSimulatorOptions extends CommonEffectOptions {
857
884
  readonly codecRate?: "22.05 kHz (MPEG-2)" | "44.1 kHz (MPEG-1)";
858
885
  readonly bitrate?: "32" | "48" | "64" | "80" | "96" | "112" | "128" | "160" | "192" | "224" | "256" | "320";
@@ -1555,6 +1582,11 @@ export interface PhaseSelectEQOptions extends CommonEffectOptions {
1555
1582
  readonly corePhaseHigh?: readonly [number, number, number, number, number];
1556
1583
  readonly outerPhaseHigh?: readonly [number, number, number, number, number];
1557
1584
  readonly gain?: readonly [number, number, number, number, number];
1585
+ readonly regionSolo?: readonly [boolean, boolean, boolean, boolean, boolean];
1586
+ readonly outerBalanceLow?: readonly [number, number, number, number, number];
1587
+ readonly coreBalanceLow?: readonly [number, number, number, number, number];
1588
+ readonly coreBalanceHigh?: readonly [number, number, number, number, number];
1589
+ readonly outerBalanceHigh?: readonly [number, number, number, number, number];
1558
1590
  readonly assets?: never;
1559
1591
  }
1560
1592
 
@@ -1613,6 +1645,7 @@ export interface EffectOptionsByType {
1613
1645
  readonly FiveBandFIRPEQ: FiveBandFIRPEQOptions;
1614
1646
  readonly FiveBandPEQ: FiveBandPEQOptions;
1615
1647
  readonly GroupDelayEQ: GroupDelayEQOptions;
1648
+ readonly GroupDelayPEQ: GroupDelayPEQOptions;
1616
1649
  readonly HiPassFilter: HiPassFilterOptions;
1617
1650
  readonly LoPassFilter: LoPassFilterOptions;
1618
1651
  readonly LoudnessEqualizer: LoudnessEqualizerOptions;
@@ -1630,6 +1663,7 @@ export interface EffectOptionsByType {
1630
1663
  readonly G726ADPCMSimulator: G726ADPCMSimulatorOptions;
1631
1664
  readonly GSMFullRateSimulator: GSMFullRateSimulatorOptions;
1632
1665
  readonly HumGenerator: HumGeneratorOptions;
1666
+ readonly MDSimulator: MDSimulatorOptions;
1633
1667
  readonly MP3CodecSimulator: MP3CodecSimulatorOptions;
1634
1668
  readonly NoiseBlender: NoiseBlenderOptions;
1635
1669
  readonly SimpleJitter: SimpleJitterOptions;
@@ -1706,6 +1740,7 @@ export interface EffectClassByType {
1706
1740
  readonly FiveBandFIRPEQ: FiveBandFIRPEQ;
1707
1741
  readonly FiveBandPEQ: FiveBandPEQ;
1708
1742
  readonly GroupDelayEQ: GroupDelayEQ;
1743
+ readonly GroupDelayPEQ: GroupDelayPEQ;
1709
1744
  readonly HiPassFilter: HiPassFilter;
1710
1745
  readonly LoPassFilter: LoPassFilter;
1711
1746
  readonly LoudnessEqualizer: LoudnessEqualizer;
@@ -1723,6 +1758,7 @@ export interface EffectClassByType {
1723
1758
  readonly G726ADPCMSimulator: G726ADPCMSimulator;
1724
1759
  readonly GSMFullRateSimulator: GSMFullRateSimulator;
1725
1760
  readonly HumGenerator: HumGenerator;
1761
+ readonly MDSimulator: MDSimulator;
1726
1762
  readonly MP3CodecSimulator: MP3CodecSimulator;
1727
1763
  readonly NoiseBlender: NoiseBlender;
1728
1764
  readonly SimpleJitter: SimpleJitter;