@openmixer/omx-contract 2.4.0 → 2.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/README.md
CHANGED
|
@@ -49,7 +49,7 @@ pkg-config --cflags omx-contract
|
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
Pin one version and build against its renders instead of keeping a copy: the installed package at exactly
|
|
52
|
-
that version (`pkg-config --exact-version=2.
|
|
52
|
+
that version (`pkg-config --exact-version=2.5.0 omx-contract`), else the npm tarball, unpacked, and
|
|
53
53
|
`omx-contract render --target c --out build/omx-contract/include`. A kernel's controls and readouts, in their
|
|
54
54
|
order, are in `share/omx-contract/omx-contract.json`; how a declaration is written is in
|
|
55
55
|
[docs/kernel-files.md](docs/kernel-files.md), and what a readout is in [docs/readouts.md](docs/readouts.md).
|
package/data/kernels/comp.json
CHANGED
|
@@ -122,6 +122,17 @@
|
|
|
122
122
|
"Off",
|
|
123
123
|
"4x"
|
|
124
124
|
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "detectorTopology",
|
|
128
|
+
"kind": "choice",
|
|
129
|
+
"global": "DETECTOR_TOPOLOGY",
|
|
130
|
+
"doc": "Where the compressor's detector listens: `feedforward` hears the slot's input (or its key), `feedback` hears the slot's own pre-make-up output DYN_FB_LOOP_DELAY_SAMPLES late, through one envelope stage, and a keyed slot stays feed-forward (omx-dsp's OMX_DYN_TOPOLOGY_FEEDFORWARD 0 and _FEEDBACK 1, in that order; the set is named for its control, so C spells them OMX_DETECTOR_TOPOLOGY_*). The console's comp row carries it (`detectorTopology`, openmixer's ssl-bus-compressor spec §3a) and comes up `feedforward`, so a zeroed atom is the compressor every slot runs.",
|
|
131
|
+
"ids": [
|
|
132
|
+
"feedforward",
|
|
133
|
+
"feedback"
|
|
134
|
+
],
|
|
135
|
+
"default": "feedforward"
|
|
125
136
|
}
|
|
126
137
|
],
|
|
127
138
|
"readouts": [
|
|
@@ -160,6 +171,12 @@
|
|
|
160
171
|
}
|
|
161
172
|
}
|
|
162
173
|
}
|
|
174
|
+
},
|
|
175
|
+
"DYN_FB_LOOP_DELAY_SAMPLES": {
|
|
176
|
+
"kind": "scalar",
|
|
177
|
+
"doc": "The feedback detector's loop delay, in samples: the output y[n] depends on the gain at n, so the detector can only have heard y[n - 1]. Not a latency: the audio is never delayed by it. omx-dsp's feedback state holds exactly this many output samples per leg.",
|
|
178
|
+
"unit": "",
|
|
179
|
+
"value": 1
|
|
163
180
|
}
|
|
164
181
|
}
|
|
165
182
|
}
|
|
@@ -254,6 +254,12 @@ export declare const COMP_KINDS: readonly ["comp", "limiter"];
|
|
|
254
254
|
*/
|
|
255
255
|
export declare const DETECTOR_OVERSAMPLINGS: readonly ["auto", "off", "x4"];
|
|
256
256
|
|
|
257
|
+
/**
|
|
258
|
+
* Where the compressor's detector listens: `feedforward` hears the slot's input (or its key), `feedback` hears the slot's own pre-make-up output DYN_FB_LOOP_DELAY_SAMPLES late, through one envelope stage, and a keyed slot stays feed-forward (omx-dsp's OMX_DYN_TOPOLOGY_FEEDFORWARD 0 and _FEEDBACK 1, in that order; the set is named for its control, so C spells them OMX_DETECTOR_TOPOLOGY_*). The console's comp row carries it (`detectorTopology`, openmixer's ssl-bus-compressor spec §3a) and comes up `feedforward`, so a zeroed atom is the compressor every slot runs.
|
|
259
|
+
* @see data/kernels/comp.json
|
|
260
|
+
*/
|
|
261
|
+
export declare const DETECTOR_TOPOLOGY: readonly ["feedforward", "feedback"];
|
|
262
|
+
|
|
257
263
|
/**
|
|
258
264
|
* The program-dependent release's model constants — the LA-2A's opto cell as DATA (`docs/design/specs/2026-09-26-compressor-models.md` §3b). `chargeMs`/`dischargeMs` are the word's memory constants, shared by every profile; each profile's `fastMs`, `slowMinMs`, `slowMaxMs` and `share` fit the unit's published two-stage recovery. Not operator controls: generated into `omx_contract_limits.h` as `OMX_PROGRAM_RELEASE_*`, which libomxdsp's `omx_env_program_release` reads.
|
|
259
265
|
* @see data/kernels/comp.json
|
|
@@ -271,6 +277,12 @@ export declare const PROGRAM_RELEASE: {
|
|
|
271
277
|
};
|
|
272
278
|
};
|
|
273
279
|
|
|
280
|
+
/**
|
|
281
|
+
* The feedback detector's loop delay, in samples: the output y[n] depends on the gain at n, so the detector can only have heard y[n - 1]. Not a latency: the audio is never delayed by it. omx-dsp's feedback state holds exactly this many output samples per leg.
|
|
282
|
+
* @see data/kernels/comp.json
|
|
283
|
+
*/
|
|
284
|
+
export declare const DYN_FB_LOOP_DELAY_SAMPLES: 1;
|
|
285
|
+
|
|
274
286
|
/**
|
|
275
287
|
* The detector band's CENTRE, in Hz. Sibilance lives at 5–10 kHz on most voices; 7 kHz with the default width covers 4 950–9 900 Hz, which is where an "s" and a "t" sit on a close vocal mic. The travel is wider than the come-up on both sides on purpose: a bright female vocal wants the band up near 9 kHz and a chesty male one down at 5, and a surface narrower than the row removes reach the console genuinely has (the same reasoning core's `REVERB_CUT_RANGE` records).
|
|
276
288
|
* @see data/kernels/deesser.json
|
package/dist/ts/omx-contract.js
CHANGED
|
@@ -264,6 +264,15 @@ export const DETECTOR_OVERSAMPLINGS = [
|
|
|
264
264
|
"x4"
|
|
265
265
|
];
|
|
266
266
|
|
|
267
|
+
/**
|
|
268
|
+
* Where the compressor's detector listens: `feedforward` hears the slot's input (or its key), `feedback` hears the slot's own pre-make-up output DYN_FB_LOOP_DELAY_SAMPLES late, through one envelope stage, and a keyed slot stays feed-forward (omx-dsp's OMX_DYN_TOPOLOGY_FEEDFORWARD 0 and _FEEDBACK 1, in that order; the set is named for its control, so C spells them OMX_DETECTOR_TOPOLOGY_*). The console's comp row carries it (`detectorTopology`, openmixer's ssl-bus-compressor spec §3a) and comes up `feedforward`, so a zeroed atom is the compressor every slot runs.
|
|
269
|
+
* @see data/kernels/comp.json
|
|
270
|
+
*/
|
|
271
|
+
export const DETECTOR_TOPOLOGY = [
|
|
272
|
+
"feedforward",
|
|
273
|
+
"feedback"
|
|
274
|
+
];
|
|
275
|
+
|
|
267
276
|
/**
|
|
268
277
|
* The program-dependent release's model constants — the LA-2A's opto cell as DATA (`docs/design/specs/2026-09-26-compressor-models.md` §3b). `chargeMs`/`dischargeMs` are the word's memory constants, shared by every profile; each profile's `fastMs`, `slowMinMs`, `slowMaxMs` and `share` fit the unit's published two-stage recovery. Not operator controls: generated into `omx_contract_limits.h` as `OMX_PROGRAM_RELEASE_*`, which libomxdsp's `omx_env_program_release` reads.
|
|
269
278
|
* @see data/kernels/comp.json
|
|
@@ -281,6 +290,12 @@ export const PROGRAM_RELEASE = {
|
|
|
281
290
|
}
|
|
282
291
|
};
|
|
283
292
|
|
|
293
|
+
/**
|
|
294
|
+
* The feedback detector's loop delay, in samples: the output y[n] depends on the gain at n, so the detector can only have heard y[n - 1]. Not a latency: the audio is never delayed by it. omx-dsp's feedback state holds exactly this many output samples per leg.
|
|
295
|
+
* @see data/kernels/comp.json
|
|
296
|
+
*/
|
|
297
|
+
export const DYN_FB_LOOP_DELAY_SAMPLES = 1;
|
|
298
|
+
|
|
284
299
|
/**
|
|
285
300
|
* The detector band's CENTRE, in Hz. Sibilance lives at 5–10 kHz on most voices; 7 kHz with the default width covers 4 950–9 900 Hz, which is where an "s" and a "t" sit on a close vocal mic. The travel is wider than the come-up on both sides on purpose: a bright female vocal wants the band up near 9 kHz and a chesty male one down at 5, and a surface narrower than the row removes reach the console genuinely has (the same reasoning core's `REVERB_CUT_RANGE` records).
|
|
286
301
|
* @see data/kernels/deesser.json
|
|
@@ -279,6 +279,7 @@
|
|
|
279
279
|
#define OMX_DRIVE_TRIM_RANGE_STEP 0.1f
|
|
280
280
|
#define OMX_DRIVE_TRIM_RANGE_STEP_DOUBLE 0.1
|
|
281
281
|
#define OMX_DSP_KNOB_REFERENCE_RATE 96000
|
|
282
|
+
#define OMX_DYN_FB_LOOP_DELAY_SAMPLES 1
|
|
282
283
|
#define OMX_EQ_BAND_COUNTS_CHANNEL_DEFAULT 4
|
|
283
284
|
#define OMX_EQ_BAND_COUNTS_CHANNEL_MAX 24
|
|
284
285
|
#define OMX_EQ_BAND_COUNTS_EQ16_DEFAULT 16
|
|
@@ -652,6 +653,12 @@ enum omx_detector_oversamplings {
|
|
|
652
653
|
};
|
|
653
654
|
#define OMX_DETECTOR_OVERSAMPLINGS_COUNT 3u
|
|
654
655
|
#define OMX_DETECTOR_OVERSAMPLINGS_DEFAULT OMX_DETECTOR_OVERSAMPLINGS_AUTO
|
|
656
|
+
enum omx_detector_topology {
|
|
657
|
+
OMX_DETECTOR_TOPOLOGY_FEEDFORWARD = 0,
|
|
658
|
+
OMX_DETECTOR_TOPOLOGY_FEEDBACK = 1,
|
|
659
|
+
};
|
|
660
|
+
#define OMX_DETECTOR_TOPOLOGY_COUNT 2u
|
|
661
|
+
#define OMX_DETECTOR_TOPOLOGY_DEFAULT OMX_DETECTOR_TOPOLOGY_FEEDFORWARD
|
|
655
662
|
enum omx_drive_auto_gains {
|
|
656
663
|
OMX_DRIVE_AUTO_GAINS_OFF = 0,
|
|
657
664
|
OMX_DRIVE_AUTO_GAINS_ON = 1,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openmixer/omx-contract",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "The FreeMixer declarations as data: a JSON Schema, the data, and one CLI that renders them into C, TypeScript and JSON",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "GPL-3.0-or-later",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openmixer/omx-contract",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"items": {
|
|
5
5
|
"PAN_RANGE": {
|
|
6
6
|
"rel": "data/kernels/balance.json",
|
|
@@ -299,6 +299,16 @@
|
|
|
299
299
|
"x4"
|
|
300
300
|
]
|
|
301
301
|
},
|
|
302
|
+
"DETECTOR_TOPOLOGY": {
|
|
303
|
+
"rel": "data/kernels/comp.json",
|
|
304
|
+
"kind": "set",
|
|
305
|
+
"doc": "Where the compressor's detector listens: `feedforward` hears the slot's input (or its key), `feedback` hears the slot's own pre-make-up output DYN_FB_LOOP_DELAY_SAMPLES late, through one envelope stage, and a keyed slot stays feed-forward (omx-dsp's OMX_DYN_TOPOLOGY_FEEDFORWARD 0 and _FEEDBACK 1, in that order; the set is named for its control, so C spells them OMX_DETECTOR_TOPOLOGY_*). The console's comp row carries it (`detectorTopology`, openmixer's ssl-bus-compressor spec §3a) and comes up `feedforward`, so a zeroed atom is the compressor every slot runs.",
|
|
306
|
+
"default": "feedforward",
|
|
307
|
+
"value": [
|
|
308
|
+
"feedforward",
|
|
309
|
+
"feedback"
|
|
310
|
+
]
|
|
311
|
+
},
|
|
302
312
|
"PROGRAM_RELEASE": {
|
|
303
313
|
"rel": "data/kernels/comp.json",
|
|
304
314
|
"kind": "sheet",
|
|
@@ -316,6 +326,13 @@
|
|
|
316
326
|
}
|
|
317
327
|
}
|
|
318
328
|
},
|
|
329
|
+
"DYN_FB_LOOP_DELAY_SAMPLES": {
|
|
330
|
+
"rel": "data/kernels/comp.json",
|
|
331
|
+
"kind": "scalar",
|
|
332
|
+
"doc": "The feedback detector's loop delay, in samples: the output y[n] depends on the gain at n, so the detector can only have heard y[n - 1]. Not a latency: the audio is never delayed by it. omx-dsp's feedback state holds exactly this many output samples per leg.",
|
|
333
|
+
"unit": "",
|
|
334
|
+
"value": 1
|
|
335
|
+
},
|
|
319
336
|
"DEESS_FREQ_RANGE": {
|
|
320
337
|
"rel": "data/kernels/deesser.json",
|
|
321
338
|
"kind": "travels",
|
|
@@ -2646,6 +2663,11 @@
|
|
|
2646
2663
|
"name": "detectorOversampling",
|
|
2647
2664
|
"kind": "choice",
|
|
2648
2665
|
"global": "DETECTOR_OVERSAMPLINGS"
|
|
2666
|
+
},
|
|
2667
|
+
{
|
|
2668
|
+
"name": "detectorTopology",
|
|
2669
|
+
"kind": "choice",
|
|
2670
|
+
"global": "DETECTOR_TOPOLOGY"
|
|
2649
2671
|
}
|
|
2650
2672
|
],
|
|
2651
2673
|
"readouts": [
|