@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/README.md +17 -15
- package/dist/assets/effetune-dsp.meta.json +32 -13
- package/dist/assets/effetune-dsp.simd.wasm +0 -0
- package/dist/assets/effetune-dsp.wasm +0 -0
- package/dist/assets.js +34 -11
- package/dist/catalog/effects-v1.json +233 -13
- package/dist/denormal-noise.js +15 -0
- package/dist/effect.js +29 -2
- package/dist/generated-effects.d.ts +44 -8
- package/dist/generated-effects.js +29 -3
- package/dist/graph-engine.js +7 -7
- package/dist/graph.js +4 -4
- package/dist/index.d.ts +6 -0
- package/dist/index.js +4 -0
- package/dist/internal/dsp-params.generated.js +244 -128
- package/dist/internal/ir-asset-payload.js +4 -4
- package/dist/internal/ir-plugin-contract.js +10 -6
- package/dist/preset.js +6 -2
- package/dist/runtime.js +6 -6
- package/dist/schemas/bundle-v1.schema.json +7 -7
- package/dist/schemas/chain-v1.schema.json +275 -15
- package/dist/schemas/graph-v1.schema.json +275 -15
- package/dist/semantics.js +13 -19
- package/dist/telemetry.js +1 -1
- package/dist/worklet.js +11 -4
- package/package.json +1 -1
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;
|