@effetune/dsp 0.5.0 → 0.6.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 CHANGED
@@ -3,8 +3,8 @@
3
3
  <!-- BEGIN DSP-LIBRARY-JAVASCRIPT-SUMMARY -->
4
4
  EffeTune DSP provides the same MIT-licensed C++ audio kernels used by EffeTune
5
5
  as a self-contained WebAssembly package for Node.js and evergreen browsers.
6
- Version 0.5.0 exposes all 90 catalog types through the generic Chain and
7
- `createEffect` APIs and 90 generated named convenience classes,
6
+ Version 0.6.0 exposes all 92 catalog types through the generic Chain and
7
+ `createEffect` APIs and 92 generated named convenience classes,
8
8
  decoded analyzer telemetry, versioned semantic presets, deterministic seeds, and an AudioWorklet wrapper.
9
9
  <!-- END DSP-LIBRARY-JAVASCRIPT-SUMMARY -->
10
10
 
@@ -139,8 +139,9 @@ seed, and DSP state from stream creation.
139
139
  assets to be staged again. Open a new stream after changing
140
140
  `IRReverb.channelMode`, `latency`, or `convolutionRate`;
141
141
  `FIRCrossover.bandCount`, `latencyMode`, or `filterDelaySamples`; or
142
- `latencyMode` / `filterDelaySamples` on `FiveBandFIRPEQ`, `GroupDelayEQ`, or
143
- `RoomEQ`. The same restriction applies to `EffeTuneNode.setParam()`.
142
+ `latencyMode` / `filterDelaySamples` on `FiveBandFIRPEQ`, `GroupDelayEQ`,
143
+ `GroupDelayPEQ`, or `RoomEQ`. The same restriction applies to
144
+ `EffeTuneNode.setParam()`.
144
145
 
145
146
  Canonical presets use semantic long parameter names:
146
147
 
@@ -167,16 +168,17 @@ Move or copy the desired effects into one serial path in the app and export it
167
168
  again, or reproduce the branching in the host around separate Chains.
168
169
  Unsupported fields produce a validation error.
169
170
 
170
- FIR Crossover, Five Band FIR PEQ, Group Delay EQ, IR Reverb, and Room EQ
171
- require an `assets.impulseResponse` reference and an `assetResolver`. The four
172
- FIR filter effects use prepared coefficient impulses at the processing sample
173
- rate. Use the public `encodeEta1({ channels, sampleRate, topology, paths })`
171
+ FIR Crossover, Five Band FIR PEQ, Group Delay EQ, Group Delay PEQ, IR Reverb,
172
+ and Room EQ require an `assets.impulseResponse` reference and an
173
+ `assetResolver`. The five FIR filter effects use prepared coefficient impulses
174
+ at the processing sample rate. Use the public
175
+ `encodeEta1({ channels, sampleRate, topology, paths })`
174
176
  helper to encode raw planar float32 arrays for a resolver. Bundle manifests
175
177
  verify exact byte length and SHA-256 before accepting an ETA1 payload. The
176
178
  complete payload and convolution footprint must fit the 32 MiB kernel cap.
177
179
 
178
180
  `EFFECT_CATALOG` and `getEffectCatalog()` expose the machine-readable semantic
179
- catalog for all 90 root classes and their `create<Type>()` factories. The
181
+ catalog for all 92 root classes and their `create<Type>()` factories. The
180
182
  catalog contains channel choices, parameters, required assets, telemetry, and
181
183
  latency declarations, but no private implementation mapping.
182
184
 
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "abiVersion": 1,
3
- "sourceDigest": "sha256:00067361c0a5d99d45cf1d82c9bf6551d0403f895a8fa49ca21a6c79baf5c4d1",
3
+ "sourceDigest": "sha256:c00f5411a8fe68c2139dd6a5903e1f480229387a9e7057bd6e246fc2676cddec",
4
4
  "emsdkVersion": "6.0.2",
5
5
  "g726PerformanceInput": {
6
6
  "contract": "g726-production-performance-input-sha256-v2",
7
7
  "hashAlgorithm": "SHA-256 over the contract and ordered UTF-8 components as id\\0content\\0; CRLF and CR normalize to LF",
8
- "digest": "sha256:b50736a00940789be0f1ac4cfb8ab918c1ac1226fb9223703c0847d50b82d9e6",
8
+ "digest": "sha256:0dab4b4c5ba1de2a9998e5f2e8bee1b3d31b654b1029fa1be0c677ef6aa295d1",
9
9
  "inputs": [
10
10
  {
11
11
  "id": "dsp/core/abi.cpp",
@@ -35,7 +35,7 @@
35
35
  {
36
36
  "id": "dsp/core/engine.cpp",
37
37
  "kind": "file",
38
- "sha256": "sha256:be4717516d9fb48de4a4fb68f5338a490ac4a060c571a22237514f311c2c1126"
38
+ "sha256": "sha256:2d492ff232ddc0d6b64843dba7a08d3f2834c9bb4b0ee923d9a93e2b71c29ec2"
39
39
  },
40
40
  {
41
41
  "id": "dsp/core/engine.h",
@@ -115,7 +115,7 @@
115
115
  {
116
116
  "id": "dsp/plugins/lofi/g726_adpcm_simulator/params.json",
117
117
  "kind": "file",
118
- "sha256": "sha256:fccbe3d6b852a1f29f86a1f3d1cc6acf855dbfa7d4472cbb2c211abd52ccd61f"
118
+ "sha256": "sha256:d7ecbfdc5d087b12319c3501e685021b148cd0e21e4f87b36463cbffbabbc879"
119
119
  },
120
120
  {
121
121
  "id": "dsp/registry.inc#G726ADPCMSimulatorPlugin-entry",
@@ -160,7 +160,7 @@
160
160
  {
161
161
  "id": "tools/dsp-parity/runners.mjs",
162
162
  "kind": "file",
163
- "sha256": "sha256:2149fe3fd23139997563d401277b0ea5cdc1b893d310f970fc4e5f9b8517d11c"
163
+ "sha256": "sha256:fe1da8063d168c1b9f142a6217a097230bbf8783bd1d8f4bcb8ac807d78d862f"
164
164
  },
165
165
  {
166
166
  "id": "tools/dsp-parity/stimuli.mjs",
@@ -622,6 +622,19 @@
622
622
  }
623
623
  ]
624
624
  },
625
+ {
626
+ "name": "GroupDelayPEQPlugin",
627
+ "hash": 2941825417,
628
+ "byteCapacity": 0,
629
+ "assets": [
630
+ {
631
+ "slot": 0,
632
+ "format": "ET_ASSET_F32_MULTICH",
633
+ "capacity": "32 MiB convolution cap",
634
+ "byteCapacity": 33554432
635
+ }
636
+ ]
637
+ },
625
638
  {
626
639
  "name": "HiPassFilterPlugin",
627
640
  "hash": 299011831,
@@ -731,6 +744,12 @@
731
744
  "byteCapacity": 0,
732
745
  "assets": []
733
746
  },
747
+ {
748
+ "name": "MDSimulatorPlugin",
749
+ "hash": 2124600068,
750
+ "byteCapacity": 0,
751
+ "assets": []
752
+ },
734
753
  {
735
754
  "name": "MP3CodecSimulatorPlugin",
736
755
  "hash": 3523139611,
@@ -968,7 +987,7 @@
968
987
  },
969
988
  {
970
989
  "name": "PhaseSelectEqPlugin",
971
- "hash": 4158366201,
990
+ "hash": 1371985786,
972
991
  "byteCapacity": 0,
973
992
  "assets": []
974
993
  },
@@ -980,7 +999,7 @@
980
999
  }
981
1000
  ],
982
1001
  "sizes": {
983
- "baseline": 975148,
984
- "simd": 1071488
1002
+ "baseline": 1167544,
1003
+ "simd": 1286159
985
1004
  }
986
1005
  }
Binary file
Binary file
package/dist/assets.js CHANGED
@@ -705,6 +705,29 @@ function prepareFirFilterAsset(effect, resolvedAssets, {
705
705
  path.irChannel !== paths[index].irChannel))) {
706
706
  throw new AssetError(`${effect.id} filter paths do not match its band layout.`);
707
707
  }
708
+ } else if (effect.type === 'RoomEQ') {
709
+ const explicitTopology = asset.format.topology;
710
+ if (explicitTopology === IR_ASSET_TOPOLOGY.mono ||
711
+ (explicitTopology === IR_ASSET_TOPOLOGY.unspecified && asset.format.channels === 1)) {
712
+ topology = IR_ASSET_TOPOLOGY.mono;
713
+ } else if (explicitTopology === IR_ASSET_TOPOLOGY.independent ||
714
+ (explicitTopology === IR_ASSET_TOPOLOGY.unspecified &&
715
+ asset.format.channels === processingChannels)) {
716
+ topology = IR_ASSET_TOPOLOGY.independent;
717
+ } else {
718
+ throw new AssetError(
719
+ `${effect.id} requires either one shared filter channel or one filter channel per processing channel.`
720
+ );
721
+ }
722
+ assetChannels = asset.format.channels;
723
+ paths = [];
724
+ inputCount = 0;
725
+ if ((topology === IR_ASSET_TOPOLOGY.mono && assetChannels !== 1) ||
726
+ (topology === IR_ASSET_TOPOLOGY.independent && assetChannels !== processingChannels)) {
727
+ throw new AssetError(
728
+ `${effect.id} requires either one shared filter channel or one filter channel per processing channel.`
729
+ );
730
+ }
708
731
  } else {
709
732
  topology = IR_ASSET_TOPOLOGY.mono;
710
733
  assetChannels = 1;
@@ -2217,6 +2217,49 @@
2217
2217
  }
2218
2218
  ]
2219
2219
  },
2220
+ {
2221
+ "type": "GroupDelayPEQ",
2222
+ "parameters": [
2223
+ {
2224
+ "name": "latencyMode",
2225
+ "type": "string",
2226
+ "count": 1,
2227
+ "default": "128",
2228
+ "values": [
2229
+ "0",
2230
+ "128",
2231
+ "256",
2232
+ "512",
2233
+ "1024"
2234
+ ]
2235
+ },
2236
+ {
2237
+ "name": "filterDelaySamples",
2238
+ "type": "integer",
2239
+ "count": 1,
2240
+ "default": 8192,
2241
+ "minimum": 0,
2242
+ "maximum": 65536
2243
+ }
2244
+ ],
2245
+ "seeded": true,
2246
+ "telemetry": [],
2247
+ "latency": {
2248
+ "kind": "dynamic",
2249
+ "dependsOn": [
2250
+ "latencyMode",
2251
+ "filterDelaySamples",
2252
+ "impulseResponse"
2253
+ ]
2254
+ },
2255
+ "assets": [
2256
+ {
2257
+ "name": "impulseResponse",
2258
+ "kind": "impulseResponse",
2259
+ "required": true
2260
+ }
2261
+ ]
2262
+ },
2220
2263
  {
2221
2264
  "type": "HiPassFilter",
2222
2265
  "parameters": [
@@ -3517,6 +3560,59 @@
3517
3560
  },
3518
3561
  "assets": []
3519
3562
  },
3563
+ {
3564
+ "type": "MDSimulator",
3565
+ "parameters": [
3566
+ {
3567
+ "name": "mode",
3568
+ "type": "string",
3569
+ "count": 1,
3570
+ "default": "SP (292 kbps)",
3571
+ "values": [
3572
+ "SP (292 kbps)",
3573
+ "LP2 (132 kbps)",
3574
+ "LP4 (66 kbps)"
3575
+ ]
3576
+ },
3577
+ {
3578
+ "name": "outputGain",
3579
+ "type": "number",
3580
+ "count": 1,
3581
+ "default": 0,
3582
+ "unit": "dB",
3583
+ "minimum": -24,
3584
+ "maximum": 12
3585
+ },
3586
+ {
3587
+ "name": "mix",
3588
+ "type": "number",
3589
+ "count": 1,
3590
+ "default": 100,
3591
+ "unit": "%",
3592
+ "minimum": 0,
3593
+ "maximum": 100
3594
+ }
3595
+ ],
3596
+ "seeded": false,
3597
+ "sampleRates": [
3598
+ 44100,
3599
+ 48000,
3600
+ 88200,
3601
+ 96000,
3602
+ 176400,
3603
+ 192000,
3604
+ 352800,
3605
+ 384000
3606
+ ],
3607
+ "telemetry": [],
3608
+ "latency": {
3609
+ "kind": "sampleRateDependent",
3610
+ "dependsOn": [
3611
+ "sampleRate"
3612
+ ]
3613
+ },
3614
+ "assets": []
3615
+ },
3520
3616
  {
3521
3617
  "type": "MP3CodecSimulator",
3522
3618
  "parameters": [
@@ -6865,6 +6961,78 @@
6865
6961
  "unit": "%",
6866
6962
  "minimum": 0,
6867
6963
  "maximum": 200
6964
+ },
6965
+ {
6966
+ "name": "regionSolo",
6967
+ "type": "boolean",
6968
+ "count": 5,
6969
+ "default": [
6970
+ false,
6971
+ false,
6972
+ false,
6973
+ false,
6974
+ false
6975
+ ]
6976
+ },
6977
+ {
6978
+ "name": "outerBalanceLow",
6979
+ "type": "number",
6980
+ "count": 5,
6981
+ "default": [
6982
+ -100,
6983
+ -100,
6984
+ -100,
6985
+ -100,
6986
+ -100
6987
+ ],
6988
+ "unit": "%",
6989
+ "minimum": -100,
6990
+ "maximum": 100
6991
+ },
6992
+ {
6993
+ "name": "coreBalanceLow",
6994
+ "type": "number",
6995
+ "count": 5,
6996
+ "default": [
6997
+ -100,
6998
+ -100,
6999
+ -100,
7000
+ -100,
7001
+ -100
7002
+ ],
7003
+ "unit": "%",
7004
+ "minimum": -100,
7005
+ "maximum": 100
7006
+ },
7007
+ {
7008
+ "name": "coreBalanceHigh",
7009
+ "type": "number",
7010
+ "count": 5,
7011
+ "default": [
7012
+ 100,
7013
+ 100,
7014
+ 100,
7015
+ 100,
7016
+ 100
7017
+ ],
7018
+ "unit": "%",
7019
+ "minimum": -100,
7020
+ "maximum": 100
7021
+ },
7022
+ {
7023
+ "name": "outerBalanceHigh",
7024
+ "type": "number",
7025
+ "count": 5,
7026
+ "default": [
7027
+ 100,
7028
+ 100,
7029
+ 100,
7030
+ 100,
7031
+ 100
7032
+ ],
7033
+ "unit": "%",
7034
+ "minimum": -100,
7035
+ "maximum": 100
6868
7036
  }
6869
7037
  ],
6870
7038
  "seeded": false,
@@ -6899,7 +7067,7 @@
6899
7067
  }
6900
7068
  ],
6901
7069
  "contractDigests": {
6902
- "publicCatalogSha256": "1f7621279e4fd1cae842bda2498e76f8afbdd2c05990b246732947b520818d62",
6903
- "privateLayoutSha256": "e63194ca2bd43f224ade8e5b387a89f68678c9e8c838f4a8faca600a61521c84"
7070
+ "publicCatalogSha256": "3c5f527bbc305e612b94c8e56e7a9eb7bc42ed35574354bb2f60f42e5dfc96af",
7071
+ "privateLayoutSha256": "10371b5016b454f9e056d84f4a43d050e01a6b40ba0d9eb8dd3939f4fba2550c"
6904
7072
  }
6905
7073
  }
@@ -0,0 +1,15 @@
1
+ export const DENORMAL_NOISE_AMPLITUDE = 1e-19;
2
+
3
+ export function addDenormalNoise(audio, channelCount, frameCount, frameOrigin) {
4
+ const first = (frameOrigin & 1) === 0
5
+ ? DENORMAL_NOISE_AMPLITUDE
6
+ : -DENORMAL_NOISE_AMPLITUDE;
7
+ for (let channel = 0; channel < channelCount; channel++) {
8
+ const offset = channel * frameCount;
9
+ let noise = first;
10
+ for (let frame = 0; frame < frameCount; frame++) {
11
+ audio[offset + frame] += noise;
12
+ noise = -noise;
13
+ }
14
+ }
15
+ }
package/dist/effect.js CHANGED
@@ -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
  ]);
@@ -1,8 +1,8 @@
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";
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
6
  export type EffectChannel = "all" | "stereo" | "left" | "right" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "34" | "56" | "78";
7
7
 
8
8
  export interface CommonEffectOptions {
@@ -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;