@effetune/dsp 0.4.0 → 0.5.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/errors.js CHANGED
@@ -2,6 +2,10 @@ export class EffeTuneError extends Error {
2
2
  constructor(message, options) {
3
3
  super(message, options);
4
4
  this.name = new.target.name;
5
+ if (options?.code !== undefined) this.code = options.code;
6
+ if (options?.path !== undefined) this.path = options.path;
7
+ if (options?.nodeId !== undefined) this.nodeId = options.nodeId;
8
+ if (options?.edgeId !== undefined) this.edgeId = options.edgeId;
5
9
  }
6
10
  }
7
11
 
@@ -29,3 +33,20 @@ export function errorFromMessage(errorType, message, fallback) {
29
33
  const ErrorType = ERROR_TYPES[errorType] ?? EffeTuneRuntimeError;
30
34
  return new ErrorType(message || fallback);
31
35
  }
36
+
37
+ // Chain-level validation reports the human-readable message; Graph document
38
+ // normalization needs the machine-readable cause to classify the failure. The
39
+ // detail rides on a symbol key so Chain behaviour, serialization and existing
40
+ // error shapes stay unchanged.
41
+ export const VALIDATION_DETAIL = Symbol.for('effetune.validationDetail');
42
+
43
+ export function withValidationDetail(error, detail) {
44
+ if (error instanceof EffeTuneError && error[VALIDATION_DETAIL] === undefined) {
45
+ error[VALIDATION_DETAIL] = detail;
46
+ }
47
+ return error;
48
+ }
49
+
50
+ export function validationDetail(error) {
51
+ return error?.[VALIDATION_DETAIL];
52
+ }
@@ -1,7 +1,7 @@
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" | "DopplerDistortion" | "PitchShifter" | "Tremolo" | "WowFlutter" | "Oscillator" | "HornResonator" | "HornResonatorPlus" | "ModalResonator" | "DattorroPlateReverb" | "FDNReverb" | "IRReverb" | "RSReverb" | "DynamicSaturation" | "Exciter" | "HardClipping" | "HarmonicDistortion" | "MultibandSaturation" | "Saturation" | "SubSynth" | "TubeSimulator" | "CrossfeedFilter" | "MSMatrix" | "MultibandBalance" | "StereoBlend";
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
5
  type RequiredAssetEffectType = "FIRCrossover" | "FiveBandFIRPEQ" | "GroupDelayEQ" | "RoomEQ" | "IRReverb";
6
6
  export type EffectChannel = "all" | "stereo" | "left" | "right" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "34" | "56" | "78";
7
7
 
@@ -1004,6 +1004,66 @@ export declare class VinylSimulator extends Effect {
1004
1004
 
1005
1005
  export declare function createVinylSimulator(options?: VinylSimulatorOptions): VinylSimulator;
1006
1006
 
1007
+ export interface AutoFilterOptions extends CommonEffectOptions {
1008
+ readonly mode?: "LFO" | "Envelope";
1009
+ readonly filterType?: "Low-pass" | "Band-pass" | "High-pass";
1010
+ readonly minimumFrequency?: number;
1011
+ readonly maximumFrequency?: number;
1012
+ readonly resonance?: number;
1013
+ readonly mix?: number;
1014
+ readonly rate?: number;
1015
+ readonly waveform?: "Sine" | "Triangle";
1016
+ readonly stereoPhase?: number;
1017
+ readonly sensitivity?: number;
1018
+ readonly attack?: number;
1019
+ readonly release?: number;
1020
+ readonly direction?: "Up" | "Down";
1021
+ readonly assets?: never;
1022
+ }
1023
+
1024
+ export declare class AutoFilter extends Effect {
1025
+ static readonly effectType: "AutoFilter";
1026
+ constructor(options?: AutoFilterOptions);
1027
+ }
1028
+
1029
+ export declare function createAutoFilter(options?: AutoFilterOptions): AutoFilter;
1030
+
1031
+ export interface AutoPanOptions extends CommonEffectOptions {
1032
+ readonly rate?: number;
1033
+ readonly depth?: number;
1034
+ readonly center?: number;
1035
+ readonly width?: number;
1036
+ readonly waveform?: "Sine" | "Triangle";
1037
+ readonly phase?: number;
1038
+ readonly assets?: never;
1039
+ }
1040
+
1041
+ export declare class AutoPan extends Effect {
1042
+ static readonly effectType: "AutoPan";
1043
+ constructor(options?: AutoPanOptions);
1044
+ }
1045
+
1046
+ export declare function createAutoPan(options?: AutoPanOptions): AutoPan;
1047
+
1048
+ export interface ChorusOptions extends CommonEffectOptions {
1049
+ readonly mode?: "Chorus" | "Stereo Chorus" | "Ensemble" | "Flanger" | "Vibrato";
1050
+ readonly rate?: number;
1051
+ readonly delay?: number;
1052
+ readonly depth?: number;
1053
+ readonly voices?: number;
1054
+ readonly stereoSpread?: number;
1055
+ readonly feedback?: number;
1056
+ readonly mix?: number;
1057
+ readonly assets?: never;
1058
+ }
1059
+
1060
+ export declare class Chorus extends Effect {
1061
+ static readonly effectType: "Chorus";
1062
+ constructor(options?: ChorusOptions);
1063
+ }
1064
+
1065
+ export declare function createChorus(options?: ChorusOptions): Chorus;
1066
+
1007
1067
  export interface DopplerDistortionOptions extends CommonEffectOptions {
1008
1068
  readonly coilForce?: number;
1009
1069
  readonly speakerMass?: number;
@@ -1019,6 +1079,46 @@ export declare class DopplerDistortion extends Effect {
1019
1079
 
1020
1080
  export declare function createDopplerDistortion(options?: DopplerDistortionOptions): DopplerDistortion;
1021
1081
 
1082
+ export interface FrequencyShifterOptions extends CommonEffectOptions {
1083
+ readonly mode?: "Shift" | "Ring Mod" | "Barber-pole";
1084
+ readonly shift?: number;
1085
+ readonly carrierFrequency?: number;
1086
+ readonly minimumShift?: number;
1087
+ readonly maximumShift?: number;
1088
+ readonly rate?: number;
1089
+ readonly direction?: "Up" | "Down";
1090
+ readonly stereoPhase?: number;
1091
+ readonly mix?: number;
1092
+ readonly assets?: never;
1093
+ }
1094
+
1095
+ export declare class FrequencyShifter extends Effect {
1096
+ static readonly effectType: "FrequencyShifter";
1097
+ constructor(options?: FrequencyShifterOptions);
1098
+ }
1099
+
1100
+ export declare function createFrequencyShifter(options?: FrequencyShifterOptions): FrequencyShifter;
1101
+
1102
+ export interface PhaserOptions extends CommonEffectOptions {
1103
+ readonly mode?: "Classic" | "Barber-pole";
1104
+ readonly rate?: number;
1105
+ readonly centerFrequency?: number;
1106
+ readonly range?: number;
1107
+ readonly stages?: 2 | 4 | 6 | 8 | 10 | 12;
1108
+ readonly feedback?: number;
1109
+ readonly stereoPhase?: number;
1110
+ readonly direction?: "Up" | "Down";
1111
+ readonly mix?: number;
1112
+ readonly assets?: never;
1113
+ }
1114
+
1115
+ export declare class Phaser extends Effect {
1116
+ static readonly effectType: "Phaser";
1117
+ constructor(options?: PhaserOptions);
1118
+ }
1119
+
1120
+ export declare function createPhaser(options?: PhaserOptions): Phaser;
1121
+
1022
1122
  export interface PitchShifterOptions extends CommonEffectOptions {
1023
1123
  readonly pitchShift?: number;
1024
1124
  readonly fineTune?: number;
@@ -1034,6 +1134,26 @@ export declare class PitchShifter extends Effect {
1034
1134
 
1035
1135
  export declare function createPitchShifter(options?: PitchShifterOptions): PitchShifter;
1036
1136
 
1137
+ export interface RotarySpeakerOptions extends CommonEffectOptions {
1138
+ readonly speedState?: "Stop" | "Slow" | "Fast";
1139
+ readonly speed?: number;
1140
+ readonly acceleration?: number;
1141
+ readonly crossover?: number;
1142
+ readonly rotorBalance?: number;
1143
+ readonly stereoWidth?: number;
1144
+ readonly dopplerDepth?: number;
1145
+ readonly amplitudeDepth?: number;
1146
+ readonly mix?: number;
1147
+ readonly assets?: never;
1148
+ }
1149
+
1150
+ export declare class RotarySpeaker extends Effect {
1151
+ static readonly effectType: "RotarySpeaker";
1152
+ constructor(options?: RotarySpeakerOptions);
1153
+ }
1154
+
1155
+ export declare function createRotarySpeaker(options?: RotarySpeakerOptions): RotarySpeaker;
1156
+
1037
1157
  export interface TremoloOptions extends CommonEffectOptions {
1038
1158
  readonly rate?: number;
1039
1159
  readonly depth?: number;
@@ -1195,6 +1315,7 @@ export interface IRReverbOptions extends CommonEffectOptions {
1195
1315
  readonly latency?: 0 | 128 | 256 | 512 | 1024;
1196
1316
  readonly convolutionRate?: "auto" | "full" | "half" | "quarter";
1197
1317
  readonly wetLevel?: number;
1318
+ readonly dryEnabled?: boolean;
1198
1319
  readonly dryLevel?: number;
1199
1320
  readonly preDelay?: number;
1200
1321
  readonly assets: IRReverbAssets;
@@ -1345,7 +1466,7 @@ export declare function createSubSynth(options?: SubSynthOptions): SubSynth;
1345
1466
 
1346
1467
  export interface TubeSimulatorOptions extends CommonEffectOptions {
1347
1468
  readonly inputVolume?: number;
1348
- readonly tube?: "12AX7" | "12AT7" | "12AU7";
1469
+ readonly tube?: "12AX7" | "12AT7" | "12AU7" | "Bypass";
1349
1470
  readonly bias?: number;
1350
1471
  readonly plateVoltage?: number;
1351
1472
  readonly sourceImpedance?: number;
@@ -1354,8 +1475,8 @@ export interface TubeSimulatorOptions extends CommonEffectOptions {
1354
1475
  readonly mix?: number;
1355
1476
  readonly inputReference?: number;
1356
1477
  readonly negativeFeedback?: number;
1357
- readonly outputStage?: "Line" | "Power";
1358
- readonly powerTube?: "EL84" | "EL34";
1478
+ readonly outputStage?: "Line" | "Power" | "SingleEnded";
1479
+ readonly powerTube?: "EL84" | "EL34" | "6L6GC" | "KT88";
1359
1480
  readonly powerBPlus?: number;
1360
1481
  readonly cathodeResistor?: number;
1361
1482
  readonly screenTap?: "0" | "20" | "43";
@@ -1364,6 +1485,10 @@ export interface TubeSimulatorOptions extends CommonEffectOptions {
1364
1485
  readonly actualSpeakerLoad?: number;
1365
1486
  readonly safetyTrim?: number;
1366
1487
  readonly autoGainReduction?: boolean;
1488
+ readonly seTube?: "300B" | "2A3";
1489
+ readonly seBPlus?: number;
1490
+ readonly seCathodeResistor?: number;
1491
+ readonly sePrimaryImpedance?: "2.5" | "3.5" | "5.0";
1367
1492
  readonly assets?: never;
1368
1493
  }
1369
1494
 
@@ -1419,6 +1544,27 @@ export declare class MultibandBalance extends Effect {
1419
1544
 
1420
1545
  export declare function createMultibandBalance(options?: MultibandBalanceOptions): MultibandBalance;
1421
1546
 
1547
+ export interface PhaseSelectEQOptions extends CommonEffectOptions {
1548
+ readonly regionEnabled?: readonly [boolean, boolean, boolean, boolean, boolean];
1549
+ readonly outerFrequencyLow?: readonly [number, number, number, number, number];
1550
+ readonly coreFrequencyLow?: readonly [number, number, number, number, number];
1551
+ readonly coreFrequencyHigh?: readonly [number, number, number, number, number];
1552
+ readonly outerFrequencyHigh?: readonly [number, number, number, number, number];
1553
+ readonly outerPhaseLow?: readonly [number, number, number, number, number];
1554
+ readonly corePhaseLow?: readonly [number, number, number, number, number];
1555
+ readonly corePhaseHigh?: readonly [number, number, number, number, number];
1556
+ readonly outerPhaseHigh?: readonly [number, number, number, number, number];
1557
+ readonly gain?: readonly [number, number, number, number, number];
1558
+ readonly assets?: never;
1559
+ }
1560
+
1561
+ export declare class PhaseSelectEQ extends Effect {
1562
+ static readonly effectType: "PhaseSelectEQ";
1563
+ constructor(options?: PhaseSelectEQOptions);
1564
+ }
1565
+
1566
+ export declare function createPhaseSelectEQ(options?: PhaseSelectEQOptions): PhaseSelectEQ;
1567
+
1422
1568
  export interface StereoBlendOptions extends CommonEffectOptions {
1423
1569
  readonly stereo?: number;
1424
1570
  readonly assets?: never;
@@ -1491,8 +1637,14 @@ export interface EffectOptionsByType {
1491
1637
  readonly TapeArtifacts: TapeArtifactsOptions;
1492
1638
  readonly VinylArtifacts: VinylArtifactsOptions;
1493
1639
  readonly VinylSimulator: VinylSimulatorOptions;
1640
+ readonly AutoFilter: AutoFilterOptions;
1641
+ readonly AutoPan: AutoPanOptions;
1642
+ readonly Chorus: ChorusOptions;
1494
1643
  readonly DopplerDistortion: DopplerDistortionOptions;
1644
+ readonly FrequencyShifter: FrequencyShifterOptions;
1645
+ readonly Phaser: PhaserOptions;
1495
1646
  readonly PitchShifter: PitchShifterOptions;
1647
+ readonly RotarySpeaker: RotarySpeakerOptions;
1496
1648
  readonly Tremolo: TremoloOptions;
1497
1649
  readonly WowFlutter: WowFlutterOptions;
1498
1650
  readonly Oscillator: OscillatorOptions;
@@ -1514,6 +1666,7 @@ export interface EffectOptionsByType {
1514
1666
  readonly CrossfeedFilter: CrossfeedFilterOptions;
1515
1667
  readonly MSMatrix: MSMatrixOptions;
1516
1668
  readonly MultibandBalance: MultibandBalanceOptions;
1669
+ readonly PhaseSelectEQ: PhaseSelectEQOptions;
1517
1670
  readonly StereoBlend: StereoBlendOptions;
1518
1671
  }
1519
1672
 
@@ -1577,8 +1730,14 @@ export interface EffectClassByType {
1577
1730
  readonly TapeArtifacts: TapeArtifacts;
1578
1731
  readonly VinylArtifacts: VinylArtifacts;
1579
1732
  readonly VinylSimulator: VinylSimulator;
1733
+ readonly AutoFilter: AutoFilter;
1734
+ readonly AutoPan: AutoPan;
1735
+ readonly Chorus: Chorus;
1580
1736
  readonly DopplerDistortion: DopplerDistortion;
1737
+ readonly FrequencyShifter: FrequencyShifter;
1738
+ readonly Phaser: Phaser;
1581
1739
  readonly PitchShifter: PitchShifter;
1740
+ readonly RotarySpeaker: RotarySpeaker;
1582
1741
  readonly Tremolo: Tremolo;
1583
1742
  readonly WowFlutter: WowFlutter;
1584
1743
  readonly Oscillator: Oscillator;
@@ -1600,6 +1759,7 @@ export interface EffectClassByType {
1600
1759
  readonly CrossfeedFilter: CrossfeedFilter;
1601
1760
  readonly MSMatrix: MSMatrix;
1602
1761
  readonly MultibandBalance: MultibandBalance;
1762
+ readonly PhaseSelectEQ: PhaseSelectEQ;
1603
1763
  readonly StereoBlend: StereoBlend;
1604
1764
  }
1605
1765