@openmixer/omx-contract 2.8.0 → 2.10.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.8.0 omx-contract`), else the npm tarball, unpacked, and
52
+ that version (`pkg-config --exact-version=2.10.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).
@@ -110,11 +110,11 @@
110
110
  "name": "detectorOversampling",
111
111
  "kind": "choice",
112
112
  "global": "DETECTOR_OVERSAMPLINGS",
113
- "doc": "The compressor's detector oversampling: `auto` runs the control path at 4x only while the attack is faster than DETECTOR_OVERSAMPLE_AUTO_MS, `off` never, `x4` always (omx-dsp's OMX_DYN_OVS_AUTO, _OFF and _X4, in that order). The console's comp row carries it as the operator's choice (`CompState.detectorOversampling`, spelled auto, off, 4x) and comes up `auto`.",
113
+ "doc": "The compressor's detector oversampling: `auto` runs the control path at 4x only while the attack is faster than DETECTOR_OVERSAMPLE_AUTO_MS, `off` never, `4x` always (omx-dsp's OMX_DYN_OVS_AUTO, _OFF and _X4, in that order, so the index mapping holds). The ids are the console's wire vocabulary (`CompState.detectorOversampling`, what the dynamics row's OPTIONS publishes and a session stores), so the console re-exports this set; it comes up `auto`.",
114
114
  "ids": [
115
115
  "auto",
116
116
  "off",
117
- "x4"
117
+ "4x"
118
118
  ],
119
119
  "default": "auto",
120
120
  "labels": [
@@ -147,11 +147,12 @@
147
147
  {
148
148
  "name": "bandOn",
149
149
  "kind": "choice",
150
- "doc": "A band's switch. Off, the band is not in the EQ's bank (the slots close up); on, it runs, parked when it is a gain-carrying shape at 0 dB. No come-up value is declared, because the strips differ: the console's channel EQ brings its default bands up on, an omx-eq plugin brings every band up off so a racked instance is a wire.",
150
+ "doc": "A band's switch. Off, the band is not in the EQ's bank (the slots close up); on, it runs, parked when it is a gain-carrying shape at 0 dB. A band comes up off (operator ruling, 2026-10-13): an omx-eq plugin brings every band up off so a racked instance is a wire, and the console's channel EQ reads its come-up value here. A stored session keeps its own band states; only a fresh band comes up off.",
151
151
  "ids": [
152
152
  "off",
153
153
  "on"
154
154
  ],
155
+ "default": "off",
155
156
  "labels": [
156
157
  "Off",
157
158
  "On"
@@ -249,10 +249,10 @@ export declare const COMP_LIMITS: {
249
249
  export declare const COMP_KINDS: readonly ["comp", "limiter"];
250
250
 
251
251
  /**
252
- * The compressor's detector oversampling: `auto` runs the control path at 4x only while the attack is faster than DETECTOR_OVERSAMPLE_AUTO_MS, `off` never, `x4` always (omx-dsp's OMX_DYN_OVS_AUTO, _OFF and _X4, in that order). The console's comp row carries it as the operator's choice (`CompState.detectorOversampling`, spelled auto, off, 4x) and comes up `auto`.
252
+ * The compressor's detector oversampling: `auto` runs the control path at 4x only while the attack is faster than DETECTOR_OVERSAMPLE_AUTO_MS, `off` never, `4x` always (omx-dsp's OMX_DYN_OVS_AUTO, _OFF and _X4, in that order, so the index mapping holds). The ids are the console's wire vocabulary (`CompState.detectorOversampling`, what the dynamics row's OPTIONS publishes and a session stores), so the console re-exports this set; it comes up `auto`.
253
253
  * @see data/kernels/comp.json
254
254
  */
255
- export declare const DETECTOR_OVERSAMPLINGS: readonly ["auto", "off", "x4"];
255
+ export declare const DETECTOR_OVERSAMPLINGS: readonly ["auto", "off", "4x"];
256
256
 
257
257
  /**
258
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`, the SSL bus compressor design §3a) and comes up `feedforward`, so a zeroed atom is the compressor every slot runs.
@@ -651,7 +651,7 @@ export declare const EQ_NOTCH_Q_RANGE: {
651
651
  };
652
652
 
653
653
  /**
654
- * A band's switch. Off, the band is not in the EQ's bank (the slots close up); on, it runs, parked when it is a gain-carrying shape at 0 dB. No come-up value is declared, because the strips differ: the console's channel EQ brings its default bands up on, an omx-eq plugin brings every band up off so a racked instance is a wire.
654
+ * A band's switch. Off, the band is not in the EQ's bank (the slots close up); on, it runs, parked when it is a gain-carrying shape at 0 dB. A band comes up off (operator ruling, 2026-10-13): an omx-eq plugin brings every band up off so a racked instance is a wire, and the console's channel EQ reads its come-up value here. A stored session keeps its own band states; only a fresh band comes up off.
655
655
  * @see data/kernels/eq.json
656
656
  */
657
657
  export declare const EQ_BAND_ONS: readonly ["off", "on"];
@@ -255,13 +255,13 @@ export const COMP_KINDS = [
255
255
  ];
256
256
 
257
257
  /**
258
- * The compressor's detector oversampling: `auto` runs the control path at 4x only while the attack is faster than DETECTOR_OVERSAMPLE_AUTO_MS, `off` never, `x4` always (omx-dsp's OMX_DYN_OVS_AUTO, _OFF and _X4, in that order). The console's comp row carries it as the operator's choice (`CompState.detectorOversampling`, spelled auto, off, 4x) and comes up `auto`.
258
+ * The compressor's detector oversampling: `auto` runs the control path at 4x only while the attack is faster than DETECTOR_OVERSAMPLE_AUTO_MS, `off` never, `4x` always (omx-dsp's OMX_DYN_OVS_AUTO, _OFF and _X4, in that order, so the index mapping holds). The ids are the console's wire vocabulary (`CompState.detectorOversampling`, what the dynamics row's OPTIONS publishes and a session stores), so the console re-exports this set; it comes up `auto`.
259
259
  * @see data/kernels/comp.json
260
260
  */
261
261
  export const DETECTOR_OVERSAMPLINGS = [
262
262
  "auto",
263
263
  "off",
264
- "x4"
264
+ "4x"
265
265
  ];
266
266
 
267
267
  /**
@@ -710,7 +710,7 @@ export const EQ_NOTCH_Q_RANGE = {
710
710
  };
711
711
 
712
712
  /**
713
- * A band's switch. Off, the band is not in the EQ's bank (the slots close up); on, it runs, parked when it is a gain-carrying shape at 0 dB. No come-up value is declared, because the strips differ: the console's channel EQ brings its default bands up on, an omx-eq plugin brings every band up off so a racked instance is a wire.
713
+ * A band's switch. Off, the band is not in the EQ's bank (the slots close up); on, it runs, parked when it is a gain-carrying shape at 0 dB. A band comes up off (operator ruling, 2026-10-13): an omx-eq plugin brings every band up off so a racked instance is a wire, and the console's channel EQ reads its come-up value here. A stored session keeps its own band states; only a fresh band comes up off.
714
714
  * @see data/kernels/eq.json
715
715
  */
716
716
  export const EQ_BAND_ONS = [
@@ -659,7 +659,7 @@ enum omx_delay_pingpongs {
659
659
  enum omx_detector_oversamplings {
660
660
  OMX_DETECTOR_OVERSAMPLINGS_AUTO = 0,
661
661
  OMX_DETECTOR_OVERSAMPLINGS_OFF = 1,
662
- OMX_DETECTOR_OVERSAMPLINGS_X4 = 2,
662
+ OMX_DETECTOR_OVERSAMPLINGS_4X = 2,
663
663
  };
664
664
  #define OMX_DETECTOR_OVERSAMPLINGS_COUNT 3u
665
665
  #define OMX_DETECTOR_OVERSAMPLINGS_DEFAULT OMX_DETECTOR_OVERSAMPLINGS_AUTO
@@ -714,6 +714,7 @@ enum omx_eq_band_ons {
714
714
  OMX_EQ_BAND_ONS_ON = 1,
715
715
  };
716
716
  #define OMX_EQ_BAND_ONS_COUNT 2u
717
+ #define OMX_EQ_BAND_ONS_DEFAULT OMX_EQ_BAND_ONS_OFF
717
718
  enum omx_eq_band_types {
718
719
  OMX_EQ_BAND_TYPES_BELL = 0,
719
720
  OMX_EQ_BAND_TYPES_LOW_SHELF = 1,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmixer/omx-contract",
3
- "version": "2.8.0",
3
+ "version": "2.10.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",
@@ -181,7 +181,7 @@
181
181
  },
182
182
  "set": {
183
183
  "type": "object",
184
- "description": "Ordered ids with an optional default and labels. The ids and their order are the contract: all strings (the id is the name, its position the value) or all non-negative integers (the id is the value). Labels are face text and optional. The default may be a reference to the scalar that states it: a boolean names the second id of a two-id switch when true, the first when false.",
184
+ "description": "Ordered ids with an optional default and labels. The ids and their order are the contract: all strings of letters and digits (the id is the name, its position the value; an id may start with a digit, as 4x does) or all non-negative integers (the id is the value). Labels are face text and optional. The default may be a reference to the scalar that states it: a boolean names the second id of a two-id switch when true, the first when false.",
185
185
  "properties": {
186
186
  "kind": { "const": "set" },
187
187
  "since": { "$ref": "#/$defs/since" },
@@ -189,11 +189,11 @@
189
189
  "why": { "$ref": "#/$defs/text" },
190
190
  "ids": {
191
191
  "oneOf": [
192
- { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9]*$" }, "minItems": 1, "uniqueItems": true },
192
+ { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z0-9]+$" }, "minItems": 1, "uniqueItems": true },
193
193
  { "type": "array", "items": { "type": "integer", "minimum": 0 }, "minItems": 1, "uniqueItems": true }
194
194
  ]
195
195
  },
196
- "default": { "oneOf": [{ "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9]*$" }, { "type": "integer", "minimum": 0 }, { "$ref": "#/$defs/ref" }] },
196
+ "default": { "oneOf": [{ "type": "string", "pattern": "^[A-Za-z0-9]+$" }, { "type": "integer", "minimum": 0 }, { "$ref": "#/$defs/ref" }] },
197
197
  "labels": { "type": "array", "items": { "$ref": "#/$defs/text" }, "minItems": 1 }
198
198
  },
199
199
  "required": ["kind", "doc", "ids"],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmixer/omx-contract",
3
- "version": "2.8.0",
3
+ "version": "2.10.0",
4
4
  "items": {
5
5
  "PAN_RANGE": {
6
6
  "rel": "data/kernels/balance.json",
@@ -286,7 +286,7 @@
286
286
  "DETECTOR_OVERSAMPLINGS": {
287
287
  "rel": "data/kernels/comp.json",
288
288
  "kind": "set",
289
- "doc": "The compressor's detector oversampling: `auto` runs the control path at 4x only while the attack is faster than DETECTOR_OVERSAMPLE_AUTO_MS, `off` never, `x4` always (omx-dsp's OMX_DYN_OVS_AUTO, _OFF and _X4, in that order). The console's comp row carries it as the operator's choice (`CompState.detectorOversampling`, spelled auto, off, 4x) and comes up `auto`.",
289
+ "doc": "The compressor's detector oversampling: `auto` runs the control path at 4x only while the attack is faster than DETECTOR_OVERSAMPLE_AUTO_MS, `off` never, `4x` always (omx-dsp's OMX_DYN_OVS_AUTO, _OFF and _X4, in that order, so the index mapping holds). The ids are the console's wire vocabulary (`CompState.detectorOversampling`, what the dynamics row's OPTIONS publishes and a session stores), so the console re-exports this set; it comes up `auto`.",
290
290
  "default": "auto",
291
291
  "labels": [
292
292
  "Auto",
@@ -296,7 +296,7 @@
296
296
  "value": [
297
297
  "auto",
298
298
  "off",
299
- "x4"
299
+ "4x"
300
300
  ]
301
301
  },
302
302
  "DETECTOR_TOPOLOGY": {
@@ -857,7 +857,8 @@
857
857
  "EQ_BAND_ONS": {
858
858
  "rel": "data/kernels/eq.json",
859
859
  "kind": "set",
860
- "doc": "A band's switch. Off, the band is not in the EQ's bank (the slots close up); on, it runs, parked when it is a gain-carrying shape at 0 dB. No come-up value is declared, because the strips differ: the console's channel EQ brings its default bands up on, an omx-eq plugin brings every band up off so a racked instance is a wire.",
860
+ "doc": "A band's switch. Off, the band is not in the EQ's bank (the slots close up); on, it runs, parked when it is a gain-carrying shape at 0 dB. A band comes up off (operator ruling, 2026-10-13): an omx-eq plugin brings every band up off so a racked instance is a wire, and the console's channel EQ reads its come-up value here. A stored session keeps its own band states; only a fresh band comes up off.",
861
+ "default": "off",
861
862
  "labels": [
862
863
  "Off",
863
864
  "On"