@openmixer/omx-contract 1.1.0 → 1.2.1

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.
@@ -2,6 +2,17 @@
2
2
  // Copyright (C) 2026 Pau Aliagas <linuxnow@gmail.com>
3
3
  // GENERATED by `omx-contract render --target ts` from FreeMixer/omx-contract's data/ — do not edit.
4
4
 
5
+ /**
6
+ * The PAN travel — −1 (hard left) … 0 (center) … +1 (hard right). A property of the pan law itself, not of any desk, so it is declared once. Continuous: a pan position has no quantum, and panGains clamps to these bounds.
7
+ * @see data/kernels/balance.json
8
+ */
9
+ export const PAN_RANGE = {
10
+ "min": -1,
11
+ "max": 1,
12
+ "step": 0,
13
+ "unit": ""
14
+ };
15
+
5
16
  /**
6
17
  * The chorus's right-leg phase offset, in TURNS of its one oscillator (§2, §3a; the native-FX catalogue's M32 Dimension row). The right leg's voice k reads the LFO at k/N + spread: 0 is both legs one phase (the stage without the field, bit for bit), 0.25 quadrature, 0.5 the Dimension's opposed sweep. A fraction of a cycle carries no engineering symbol, so the unit is ''.
7
18
  * @see data/kernels/chorus.json
@@ -15,6 +26,58 @@ export const CHORUS_SPREAD_RANGE = {
15
26
  "defaultFrom": "desk"
16
27
  };
17
28
 
29
+ /**
30
+ * The chorus sweep's speed (§3a). Above ~3 Hz it stops being a chorus and becomes a vibrato.
31
+ * @see data/kernels/chorus.json
32
+ */
33
+ export const CHORUS_RATE_RANGE = {
34
+ "min": 0.05,
35
+ "max": 8,
36
+ "step": 0.01,
37
+ "unit": "Hz",
38
+ "default": 0.6,
39
+ "defaultFrom": "desk"
40
+ };
41
+
42
+ /**
43
+ * The chorus's peak-to-peak excursion above its declared 10 ms base (§3a).
44
+ * @see data/kernels/chorus.json
45
+ */
46
+ export const CHORUS_DEPTH_RANGE = {
47
+ "min": 0,
48
+ "max": 12,
49
+ "step": 0.1,
50
+ "unit": "ms",
51
+ "default": 4,
52
+ "defaultFrom": "desk"
53
+ };
54
+
55
+ /**
56
+ * The chorus's tap count — one oscillator read at k/N (§3a).
57
+ * @see data/kernels/chorus.json
58
+ */
59
+ export const CHORUS_VOICES_RANGE = {
60
+ "min": 1,
61
+ "max": 4,
62
+ "step": 1,
63
+ "unit": "",
64
+ "default": 3,
65
+ "defaultFrom": "desk"
66
+ };
67
+
68
+ /**
69
+ * The chorus's wet/dry, as an instance of DRIVE_MIX_RANGE — the same percent travel, its own come-up value: 35 %, a colour under the dry on a strip (§3a). The REVERB_LOWCUT_RANGE-over- REVERB_CUT_RANGE shape: one travel, one declared default per field that reads it.
70
+ * @see data/kernels/chorus.json
71
+ */
72
+ export const CHORUS_MIX_RANGE = {
73
+ "min": 0,
74
+ "max": 100,
75
+ "step": 0.1,
76
+ "unit": "%",
77
+ "default": 35,
78
+ "defaultFrom": "desk"
79
+ };
80
+
18
81
  /**
19
82
  * The legal range of each compressor field (engineering units). The widget clamps drags to these, `normalizeComp` enforces them, the row's codec refuses by them and the travel sheet publishes them. `default`/`defaultFrom` are the come-up values `defaultCompState` seeds a fresh strip with, read BACK from here rather than restated there.
20
83
  * @see data/kernels/comp.json
@@ -259,6 +322,71 @@ export const FX_DELAY_PINGPONG_DEFAULT = false;
259
322
  */
260
323
  export const DRIVE_BIAS_MAX = 0.7071067811865476;
261
324
 
325
+ /**
326
+ * The PRE-CURVE gain, in dB. 0 dB is unity into the curve, so a stage switched on at its defaults changes almost nothing — which is what an `on` switch should mean. The ceiling is where every curve is saturating hard on any signal a console carries.
327
+ * @see data/kernels/drive.json
328
+ */
329
+ export const DRIVE_AMOUNT_RANGE = {
330
+ "min": 0,
331
+ "max": 36,
332
+ "step": 0.1,
333
+ "unit": "dB",
334
+ "default": 0,
335
+ "defaultFrom": "desk"
336
+ };
337
+
338
+ /**
339
+ * The EVEN/ODD harmonic balance. −1 is pure odd (the curve itself), +1 is pure even, 0 an equal blend — the kernel splits its own distortion residue into an odd and an even half and fades between them, so the two ends are exact rather than approximate (`mix_drive.h`, measured: H2 at −317 dBc at −1, H3 at −118 dBc at +1). Unitless, and signed by construction. NOT NORMALIZED_RANGE: this is a BALANCE with a meaningful centre, and a 0..1 travel would put its centre at 0.5 and its neutral nowhere.
340
+ * @see data/kernels/drive.json
341
+ */
342
+ export const DRIVE_CHARACTER_RANGE = {
343
+ "min": -1,
344
+ "max": 1,
345
+ "step": 0.01,
346
+ "unit": "",
347
+ "default": 0,
348
+ "defaultFrom": "desk"
349
+ };
350
+
351
+ /**
352
+ * The band split / tilt corner, in Hz. ONE travel for all three band modes, because the C imposes one constraint on all of them: it is the corner of a single biquad, and the split's other half is `x − LP(x)`. The full audio band, not the channel filters' narrower HPF/LPF pair — the same reasoning REVERB_CUT_RANGE records: a surface narrower than the row removes reach the console genuinely has.
353
+ * @see data/kernels/drive.json
354
+ */
355
+ export const DRIVE_BAND_FREQ_RANGE = {
356
+ "min": 20,
357
+ "max": 20000,
358
+ "step": 1,
359
+ "unit": "Hz",
360
+ "default": 2000,
361
+ "defaultFrom": "desk"
362
+ };
363
+
364
+ /**
365
+ * The wet/dry, as a PERCENT — the unit a drive control is read in on every desk that has one. Deliberately not NORMALIZED_RANGE (which is unitless 0..1): a mix a surface must label "0.35" when the operator thinks in "35 %" is a control whose declaration is fighting its reader. The kernel divides by 100 where it resolves the atom, in one place. The come-up is 100 %, not the reverb's modest 30: a saturator's insert use is IN the path. The `exciter` curve seeds itself lower (DRIVE_EXCITER_SEED), because that is a property of the TOPOLOGY and not of the travel.
366
+ * @see data/kernels/drive.json
367
+ */
368
+ export const DRIVE_MIX_RANGE = {
369
+ "min": 0,
370
+ "max": 100,
371
+ "step": 0.1,
372
+ "unit": "%",
373
+ "default": 100,
374
+ "defaultFrom": "desk"
375
+ };
376
+
377
+ /**
378
+ * The POST-stage make-up, in dB. Symmetric enough either way that an operator can null the stage in and out against the bypass, which is how a colour stage is actually judged.
379
+ * @see data/kernels/drive.json
380
+ */
381
+ export const DRIVE_TRIM_RANGE = {
382
+ "min": -24,
383
+ "max": 12,
384
+ "step": 0.1,
385
+ "unit": "dB",
386
+ "default": 0,
387
+ "defaultFrom": "desk"
388
+ };
389
+
262
390
  /**
263
391
  * The maximum number of parametric bands a channel EQ may hold — the operator can add up to this many. Generated into `omx_contract_limits.h` as `OMX_EQ_MAX_BANDS`, which `omx_biquad.h` reads (`output-delay-ceiling.test.ts` reads the header): the native lane allocates exactly this many biquad slots per channel and silently clamps above it, so the model, the wire, and the DSP agree by test, not by memory.
264
392
  * @see data/kernels/eq.json
@@ -309,6 +437,72 @@ export const ISO_THIRD_OCTAVE_CENTRES_HZ = [
309
437
  */
310
438
  export const GEQ_BANDS = 31;
311
439
 
440
+ /**
441
+ * The frequency band a parametric band can be dragged across.
442
+ * @see data/kernels/eq.json
443
+ */
444
+ export const EQ_FREQ_RANGE = {
445
+ "min": 20,
446
+ "max": 20000,
447
+ "step": 10,
448
+ "unit": "Hz"
449
+ };
450
+
451
+ /**
452
+ * The parametric-band gain travel, in dB. The ± scalar `clampEqGain` enforces is READ off this (`core/src/eq.ts` derives `EQ_GAIN_LIMIT_DB` from `max`), so the bound is stated once and a surface cannot draw a wider knob than the clamp will honour.
453
+ * @see data/kernels/eq.json
454
+ */
455
+ export const EQ_GAIN_RANGE = {
456
+ "min": -15,
457
+ "max": 15,
458
+ "step": 0.5,
459
+ "unit": "dB"
460
+ };
461
+
462
+ /**
463
+ * The Q (resonance) extent of a parametric band.
464
+ * @see data/kernels/eq.json
465
+ */
466
+ export const EQ_Q_RANGE = {
467
+ "min": 0.3,
468
+ "max": 8,
469
+ "step": 0.1,
470
+ "unit": ""
471
+ };
472
+
473
+ /**
474
+ * The Q extent of a NOTCH band. Wider than EQ_Q_RANGE on purpose (#116, operator decision): an ultra-narrow surgical cut is the notch shape's whole point — the FBS ring-out pool plants dbx-AFS-style ring killers at Q ≈ 116 (~1/80 octave), inaudible on program yet fatal to a single ringing frequency. Gain-carrying shapes stay bounded at EQ_Q_RANGE — a Q-116 bell is a resonator, not an EQ move.
475
+ * @see data/kernels/eq.json
476
+ */
477
+ export const EQ_NOTCH_Q_RANGE = {
478
+ "min": 0.3,
479
+ "max": 116,
480
+ "step": 1,
481
+ "unit": ""
482
+ };
483
+
484
+ /**
485
+ * Where the HPF cutoff can sit (low end); mirrors the drawn low-frequency handle.
486
+ * @see data/kernels/eq.json
487
+ */
488
+ export const HPF_FREQ_RANGE = {
489
+ "min": 20,
490
+ "max": 1000,
491
+ "step": 10,
492
+ "unit": "Hz"
493
+ };
494
+
495
+ /**
496
+ * Where the LPF cutoff can sit (high end).
497
+ * @see data/kernels/eq.json
498
+ */
499
+ export const LPF_FREQ_RANGE = {
500
+ "min": 1000,
501
+ "max": 20000,
502
+ "step": 10,
503
+ "unit": "Hz"
504
+ };
505
+
312
506
  /**
313
507
  * The flanger's jet sweep (§3b).
314
508
  * @see data/kernels/flanger.json
@@ -685,6 +879,152 @@ export const REVERB_PLATE_MOD_DEPTH_RANGE = {
685
879
  "defaultFrom": "desk"
686
880
  };
687
881
 
882
+ /**
883
+ * The REVERB's wet/dry. An insert keeps the dry signal (0.3); an `fxReturn` is wet-only (1), so the return carries only the effect. Both numbers live HERE and nowhere else: the row's `mix` limit, `ReverbController`'s seed and its fresh state read them through limitForKind.
884
+ * @see data/kernels/reverb.json
885
+ */
886
+ export const REVERB_MIX_RANGE = {
887
+ "min": 0,
888
+ "max": 1,
889
+ "step": 0,
890
+ "unit": "",
891
+ "default": 0.3,
892
+ "defaultFrom": "desk",
893
+ "byKind": {
894
+ "fxReturn": 1
895
+ }
896
+ };
897
+
898
+ /**
899
+ * The reverb's SIZE/DAMPING/WIDTH — each a NORMALIZED_RANGE instance with its own come-up value, matching `DEFAULT_REVERB_STATE`. Three separate constants rather than one shared default on `NORMALIZED_RANGE`: that range is the bare 0..1 REPRESENTATION, reused by fields across the whole console whose come-up values disagree (a fader position is not a reverb's damping), so a default belongs on the NAMED field, never on the shape it borrows.
900
+ * @see data/kernels/reverb.json
901
+ */
902
+ export const REVERB_SIZE_RANGE = {
903
+ "min": 0,
904
+ "max": 1,
905
+ "step": 0,
906
+ "unit": "",
907
+ "default": 0.7,
908
+ "defaultFrom": "desk"
909
+ };
910
+
911
+ /**
912
+ * The reverb's DAMPING — a NORMALIZED_RANGE instance with its own come-up value, matching `DEFAULT_REVERB_STATE`. Declared with SIZE and WIDTH (see REVERB_SIZE_RANGE for why each is a named constant rather than a default on the shared 0..1 shape).
913
+ * @see data/kernels/reverb.json
914
+ */
915
+ export const REVERB_DAMPING_RANGE = {
916
+ "min": 0,
917
+ "max": 1,
918
+ "step": 0,
919
+ "unit": "",
920
+ "default": 0.5,
921
+ "defaultFrom": "desk"
922
+ };
923
+
924
+ /**
925
+ * The reverb's stereo WIDTH — a NORMALIZED_RANGE instance with its own come-up value, matching `DEFAULT_REVERB_STATE`. Declared with SIZE and DAMPING (see REVERB_SIZE_RANGE for why each is a named constant rather than a default on the shared 0..1 shape).
926
+ * @see data/kernels/reverb.json
927
+ */
928
+ export const REVERB_WIDTH_RANGE = {
929
+ "min": 0,
930
+ "max": 1,
931
+ "step": 0,
932
+ "unit": "",
933
+ "default": 1,
934
+ "defaultFrom": "desk"
935
+ };
936
+
937
+ /**
938
+ * The reverb's PRE-DELAY travel — the gap before the first reflection, in milliseconds. Declared here so the unit crosses with the bounds: a `finiteNumber(0, 100)` codec publishes `unit: ''`, and a surface binding that draws a millisecond control it cannot label. The panel knowing better than the wire is the wrong way round.
939
+ * @see data/kernels/reverb.json
940
+ */
941
+ export const REVERB_PREDELAY_RANGE = {
942
+ "min": 0,
943
+ "max": 100,
944
+ "step": 1,
945
+ "unit": "ms",
946
+ "default": 0,
947
+ "defaultFrom": "desk"
948
+ };
949
+
950
+ /**
951
+ * The reverb's LOW cut, as an instance of REVERB_CUT_RANGE — same bounds, its own come-up value. `0` reads as "none" (`mix_reverb.h`), which is also `DEFAULT_REVERB_STATE`'s seed, so a fresh reverb's low cut and its declared default are the same fact stated once. Split from REVERB_CUT_RANGE rather than adding `default` there: the low and high cut share ONE travel (the C imposes one constraint on both) but do NOT share one come-up value, and a `default` on the shared range could only be honest for one of the two fields that read it.
952
+ * @see data/kernels/reverb.json
953
+ */
954
+ export const REVERB_LOWCUT_RANGE = {
955
+ "min": 0,
956
+ "max": 20000,
957
+ "step": 10,
958
+ "unit": "Hz",
959
+ "default": 0,
960
+ "defaultFrom": "desk"
961
+ };
962
+
963
+ /**
964
+ * The reverb's HIGH cut, as an instance of REVERB_CUT_RANGE — same bounds, its own come-up value. The top of the travel reads as "open" (`mix_reverb.h`), matching `DEFAULT_REVERB_STATE`'s seed.
965
+ * @see data/kernels/reverb.json
966
+ */
967
+ export const REVERB_HIGHCUT_RANGE = {
968
+ "min": 0,
969
+ "max": 20000,
970
+ "step": 10,
971
+ "unit": "Hz",
972
+ "default": 20000,
973
+ "defaultFrom": "desk"
974
+ };
975
+
976
+ /**
977
+ * REVERSE's MIRROR WINDOW — how long a slice of the wet is played backward, in milliseconds (`2026-07-15-native-delay-reverb.md`, Amendment 2026-09-17 §B). A DECLARED travel and never derived from `size`'s RT60: an RT60 of seconds cannot be buffered at 192 kHz, and a window silently clamped to fit is the silent-clamp defect. The ceiling is what `mix_reverb.h`'s pool budgets a ring for (`OMX_REVERB_REVERSE_MAX_MS`), so the console offers exactly the travel the kernel accepts — nothing wider, nothing narrower.
978
+ * @see data/kernels/reverb.json
979
+ */
980
+ export const REVERB_REVERSE_RANGE = {
981
+ "min": 50,
982
+ "max": 500,
983
+ "step": 10,
984
+ "unit": "ms",
985
+ "default": 300,
986
+ "defaultFrom": "desk"
987
+ };
988
+
989
+ /**
990
+ * GATED's HOLD — how long the wet stays at full level after the key falls away, in milliseconds. The Phil-Collins tail is cut where the operator puts the cut, so this is the control that decides the effect's length; `size` still decides what is being cut off.
991
+ * @see data/kernels/reverb.json
992
+ */
993
+ export const REVERB_HOLD_RANGE = {
994
+ "min": 10,
995
+ "max": 2000,
996
+ "step": 10,
997
+ "unit": "ms",
998
+ "default": 120,
999
+ "defaultFrom": "desk"
1000
+ };
1001
+
1002
+ /**
1003
+ * GATED's RELEASE — how long the held wet takes to reach zero, in milliseconds. A straight line down, short by design: a long release is a reverb tail again, which is the thing a gated reverb exists to remove.
1004
+ * @see data/kernels/reverb.json
1005
+ */
1006
+ export const REVERB_RELEASE_RANGE = {
1007
+ "min": 1,
1008
+ "max": 500,
1009
+ "step": 1,
1010
+ "unit": "ms",
1011
+ "default": 20,
1012
+ "defaultFrom": "desk"
1013
+ };
1014
+
1015
+ /**
1016
+ * GATED's ARM THRESHOLD — the level the reverb's own mono feed must reach to arm the hold, in dBFS. Declared, because the alternative is a hidden onset detector: the kernel compares `|input|` against exactly this number and nothing else.
1017
+ * @see data/kernels/reverb.json
1018
+ */
1019
+ export const REVERB_GATE_THRESHOLD_RANGE = {
1020
+ "min": -80,
1021
+ "max": 0,
1022
+ "step": 1,
1023
+ "unit": "dBFS",
1024
+ "default": -40,
1025
+ "defaultFrom": "desk"
1026
+ };
1027
+
688
1028
  /**
689
1029
  * The horn's chorale (slow) rate, Hz.
690
1030
  * @see data/kernels/rotary.json
@@ -1088,6 +1428,83 @@ export const FDELAY_MOD_READ_ORDER = 3;
1088
1428
  */
1089
1429
  export const FDELAY_READ_L1_NORM = 1.25;
1090
1430
 
1431
+ /**
1432
+ * The gate's threshold, range, release and ratio as a plugin host draws them: GATE_LIMITS' bounds, units and defaults with no step. The console's row quantises these four to whole steps (1 dB, 10 ms, 1:1), and a travel whose step is 1 or more reads as an integer control; the omx-strip plugin has always offered them continuous, so it reads this table instead. Every number but the step is GATE_LIMITS', held equal by test/continuous-travels.test.mjs. Not rendered to C: no C reader needs a second spelling of the gate's bounds.
1433
+ * @see data/primitives.json
1434
+ */
1435
+ export const GATE_CONTINUOUS_TRAVELS = {
1436
+ "thresholdDb": {
1437
+ "min": -80,
1438
+ "max": 0,
1439
+ "step": 0,
1440
+ "unit": "dB",
1441
+ "default": -40,
1442
+ "defaultFrom": "desk"
1443
+ },
1444
+ "rangeDb": {
1445
+ "min": -90,
1446
+ "max": 0,
1447
+ "step": 0,
1448
+ "unit": "dB",
1449
+ "default": -90,
1450
+ "defaultFrom": "desk"
1451
+ },
1452
+ "releaseMs": {
1453
+ "min": 0,
1454
+ "max": 5000,
1455
+ "step": 0,
1456
+ "unit": "ms",
1457
+ "default": 100,
1458
+ "defaultFrom": "desk"
1459
+ },
1460
+ "ratio": {
1461
+ "min": 1,
1462
+ "max": 100,
1463
+ "step": 0,
1464
+ "unit": "",
1465
+ "default": 16,
1466
+ "defaultFrom": "desk"
1467
+ }
1468
+ };
1469
+
1470
+ /**
1471
+ * The compressor's threshold and release as a plugin host draws them: COMP_LIMITS' bounds, units and defaults with no step. The console's row quantises them to whole steps (1 dB, 10 ms), and a travel whose step is 1 or more reads as an integer control; the omx-strip plugin has always offered them continuous, so it reads this table instead. Every number but the step is COMP_LIMITS', held equal by test/continuous-travels.test.mjs. Not rendered to C: no C reader needs a second spelling of the compressor's bounds.
1472
+ * @see data/primitives.json
1473
+ */
1474
+ export const COMP_CONTINUOUS_TRAVELS = {
1475
+ "thresholdDb": {
1476
+ "min": -60,
1477
+ "max": 0,
1478
+ "step": 0,
1479
+ "unit": "dB",
1480
+ "default": -18,
1481
+ "defaultFrom": "desk"
1482
+ },
1483
+ "releaseMs": {
1484
+ "min": 5,
1485
+ "max": 3000,
1486
+ "step": 0,
1487
+ "unit": "ms",
1488
+ "default": 200,
1489
+ "defaultFrom": "desk"
1490
+ }
1491
+ };
1492
+
1493
+ /**
1494
+ * The digital input trim as a travel: openmixer's TRIM_RANGE (packages/declarations, -24..+24 dB in 0.1 dB steps, spelled minDb/maxDb/stepDb there and OMX_TRIM_RANGE_*_DB in omx-dsp's header), coming up at 0 dB, the trim a channel has when none is set. The omx-strip plugin's trim reads it. A table with the one field `trimDb`, the name the trim row and the plugin store; not rendered to C, which already spells TRIM_RANGE its own way.
1495
+ * @see data/primitives.json
1496
+ */
1497
+ export const TRIM_TRAVELS = {
1498
+ "trimDb": {
1499
+ "min": -24,
1500
+ "max": 24,
1501
+ "step": 0.1,
1502
+ "unit": "dB",
1503
+ "default": 0,
1504
+ "defaultFrom": "desk"
1505
+ }
1506
+ };
1507
+
1091
1508
  /**
1092
1509
  * The standard sample rates (Hz) the desk recognises — the pro-audio superset. One source of truth for the clock controller's `clock.allowed-rates` seed, the force row's validation ceiling and the device-rate probe fallback. What the operator is OFFERED is always the DEVICE's own `supportedRates` (`2026-07-15-clock-rate-honest-force-rate.md`) — this is the ceiling a write is refused by, never a menu.
1093
1510
  * @see data/rates.json
@@ -101,22 +101,62 @@
101
101
 
102
102
  /* The second C spelling of a travel, its item's `c.alias` { fact, field }:
103
103
  * OMX_<FACT>_<FIELD>_MIN/_MAX/_DEFAULT. Removed by a MAJOR release once no consumer reads it. */
104
+ #define OMX_PAN_PAN_MIN -1.0f
105
+ #define OMX_PAN_PAN_MAX 1.0f
106
+
104
107
  #define OMX_DELAY_TIME_MS_MIN 0.0f
105
108
  #define OMX_DELAY_TIME_MS_MAX 2000.0f
106
109
  #define OMX_DELAY_TIME_MS_DEFAULT 300.0f
107
110
 
111
+ #define OMX_DRIVE_DRIVE_DB_MIN 0.0f
112
+ #define OMX_DRIVE_DRIVE_DB_MAX 36.0f
113
+ #define OMX_DRIVE_DRIVE_DB_DEFAULT 0.0f
114
+ #define OMX_DRIVE_CHARACTER_MIN -1.0f
115
+ #define OMX_DRIVE_CHARACTER_MAX 1.0f
116
+ #define OMX_DRIVE_CHARACTER_DEFAULT 0.0f
117
+ #define OMX_DRIVE_BAND_HZ_MIN 20.0f
118
+ #define OMX_DRIVE_BAND_HZ_MAX 20000.0f
119
+ #define OMX_DRIVE_BAND_HZ_DEFAULT 2000.0f
120
+ #define OMX_DRIVE_MIX_MIN 0.0f
121
+ #define OMX_DRIVE_MIX_MAX 100.0f
122
+ #define OMX_DRIVE_MIX_DEFAULT 100.0f
123
+ #define OMX_DRIVE_TRIM_DB_MIN -24.0f
124
+ #define OMX_DRIVE_TRIM_DB_MAX 12.0f
125
+ #define OMX_DRIVE_TRIM_DB_DEFAULT 0.0f
126
+
108
127
  /* Every scalar, sheet leaf and single travel's numbers, one block sorted by macro. An integer value
109
128
  * is an integer literal, any other a float literal AND its OMX_<macro>_DOUBLE spelling. */
110
129
  #define OMX_ALLPASS_UNITY_TOLERANCE 0.0001f
111
130
  #define OMX_ALLPASS_UNITY_TOLERANCE_DOUBLE 0.0001
112
131
  #define OMX_BUTTERWORTH_Q 0.7071067811865476f
113
132
  #define OMX_BUTTERWORTH_Q_DOUBLE 0.7071067811865476
133
+ #define OMX_CHORUS_DEPTH_RANGE_DEFAULT 4
134
+ #define OMX_CHORUS_DEPTH_RANGE_MAX 12
135
+ #define OMX_CHORUS_DEPTH_RANGE_MIN 0
136
+ #define OMX_CHORUS_DEPTH_RANGE_STEP 0.1f
137
+ #define OMX_CHORUS_DEPTH_RANGE_STEP_DOUBLE 0.1
138
+ #define OMX_CHORUS_MIX_RANGE_DEFAULT 35
139
+ #define OMX_CHORUS_MIX_RANGE_MAX 100
140
+ #define OMX_CHORUS_MIX_RANGE_MIN 0
141
+ #define OMX_CHORUS_MIX_RANGE_STEP 0.1f
142
+ #define OMX_CHORUS_MIX_RANGE_STEP_DOUBLE 0.1
143
+ #define OMX_CHORUS_RATE_RANGE_DEFAULT 0.6f
144
+ #define OMX_CHORUS_RATE_RANGE_DEFAULT_DOUBLE 0.6
145
+ #define OMX_CHORUS_RATE_RANGE_MAX 8
146
+ #define OMX_CHORUS_RATE_RANGE_MIN 0.05f
147
+ #define OMX_CHORUS_RATE_RANGE_MIN_DOUBLE 0.05
148
+ #define OMX_CHORUS_RATE_RANGE_STEP 0.01f
149
+ #define OMX_CHORUS_RATE_RANGE_STEP_DOUBLE 0.01
114
150
  #define OMX_CHORUS_SPREAD_RANGE_DEFAULT 0
115
151
  #define OMX_CHORUS_SPREAD_RANGE_MAX 0.5f
116
152
  #define OMX_CHORUS_SPREAD_RANGE_MAX_DOUBLE 0.5
117
153
  #define OMX_CHORUS_SPREAD_RANGE_MIN 0
118
154
  #define OMX_CHORUS_SPREAD_RANGE_STEP 0.01f
119
155
  #define OMX_CHORUS_SPREAD_RANGE_STEP_DOUBLE 0.01
156
+ #define OMX_CHORUS_VOICES_RANGE_DEFAULT 3
157
+ #define OMX_CHORUS_VOICES_RANGE_MAX 4
158
+ #define OMX_CHORUS_VOICES_RANGE_MIN 1
159
+ #define OMX_CHORUS_VOICES_RANGE_STEP 1
120
160
  #define OMX_DEESS_ATTACK_RANGE_DEFAULT 1
121
161
  #define OMX_DEESS_ATTACK_RANGE_MAX 50
122
162
  #define OMX_DEESS_ATTACK_RANGE_MIN 0.1f
@@ -164,10 +204,50 @@
164
204
  #define OMX_DELAY_TONE_RANGE_MAX 1
165
205
  #define OMX_DELAY_TONE_RANGE_MIN 0
166
206
  #define OMX_DELAY_TONE_RANGE_STEP 0
207
+ #define OMX_DRIVE_AMOUNT_RANGE_DEFAULT 0
208
+ #define OMX_DRIVE_AMOUNT_RANGE_MAX 36
209
+ #define OMX_DRIVE_AMOUNT_RANGE_MIN 0
210
+ #define OMX_DRIVE_AMOUNT_RANGE_STEP 0.1f
211
+ #define OMX_DRIVE_AMOUNT_RANGE_STEP_DOUBLE 0.1
212
+ #define OMX_DRIVE_BAND_FREQ_RANGE_DEFAULT 2000
213
+ #define OMX_DRIVE_BAND_FREQ_RANGE_MAX 20000
214
+ #define OMX_DRIVE_BAND_FREQ_RANGE_MIN 20
215
+ #define OMX_DRIVE_BAND_FREQ_RANGE_STEP 1
167
216
  #define OMX_DRIVE_BIAS_MAX 0.7071067811865476f
168
217
  #define OMX_DRIVE_BIAS_MAX_DOUBLE 0.7071067811865476
218
+ #define OMX_DRIVE_CHARACTER_RANGE_DEFAULT 0
219
+ #define OMX_DRIVE_CHARACTER_RANGE_MAX 1
220
+ #define OMX_DRIVE_CHARACTER_RANGE_MIN -1
221
+ #define OMX_DRIVE_CHARACTER_RANGE_STEP 0.01f
222
+ #define OMX_DRIVE_CHARACTER_RANGE_STEP_DOUBLE 0.01
223
+ #define OMX_DRIVE_MIX_RANGE_DEFAULT 100
224
+ #define OMX_DRIVE_MIX_RANGE_MAX 100
225
+ #define OMX_DRIVE_MIX_RANGE_MIN 0
226
+ #define OMX_DRIVE_MIX_RANGE_STEP 0.1f
227
+ #define OMX_DRIVE_MIX_RANGE_STEP_DOUBLE 0.1
228
+ #define OMX_DRIVE_TRIM_RANGE_DEFAULT 0
229
+ #define OMX_DRIVE_TRIM_RANGE_MAX 12
230
+ #define OMX_DRIVE_TRIM_RANGE_MIN -24
231
+ #define OMX_DRIVE_TRIM_RANGE_STEP 0.1f
232
+ #define OMX_DRIVE_TRIM_RANGE_STEP_DOUBLE 0.1
169
233
  #define OMX_DSP_KNOB_REFERENCE_RATE 96000
234
+ #define OMX_EQ_FREQ_RANGE_MAX 20000
235
+ #define OMX_EQ_FREQ_RANGE_MIN 20
236
+ #define OMX_EQ_FREQ_RANGE_STEP 10
237
+ #define OMX_EQ_GAIN_RANGE_MAX 15
238
+ #define OMX_EQ_GAIN_RANGE_MIN -15
239
+ #define OMX_EQ_GAIN_RANGE_STEP 0.5f
240
+ #define OMX_EQ_GAIN_RANGE_STEP_DOUBLE 0.5
170
241
  #define OMX_EQ_MAX_BANDS 24
242
+ #define OMX_EQ_NOTCH_Q_RANGE_MAX 116
243
+ #define OMX_EQ_NOTCH_Q_RANGE_MIN 0.3f
244
+ #define OMX_EQ_NOTCH_Q_RANGE_MIN_DOUBLE 0.3
245
+ #define OMX_EQ_NOTCH_Q_RANGE_STEP 1
246
+ #define OMX_EQ_Q_RANGE_MAX 8
247
+ #define OMX_EQ_Q_RANGE_MIN 0.3f
248
+ #define OMX_EQ_Q_RANGE_MIN_DOUBLE 0.3
249
+ #define OMX_EQ_Q_RANGE_STEP 0.1f
250
+ #define OMX_EQ_Q_RANGE_STEP_DOUBLE 0.1
171
251
  #define OMX_FDELAY_MOD_READ_ORDER 3
172
252
  #define OMX_FDELAY_READ_L1_NORM 1.25f
173
253
  #define OMX_FDELAY_READ_L1_NORM_DOUBLE 1.25
@@ -216,6 +296,15 @@
216
296
  #define OMX_GEQ_BAND_RANGE_STEP_DOUBLE 0.5
217
297
  #define OMX_GEQ_DESIGN_GAIN_MAX_DB 30
218
298
  #define OMX_GEQ_PROTO_DB 12
299
+ #define OMX_HPF_FREQ_RANGE_MAX 1000
300
+ #define OMX_HPF_FREQ_RANGE_MIN 20
301
+ #define OMX_HPF_FREQ_RANGE_STEP 10
302
+ #define OMX_LPF_FREQ_RANGE_MAX 20000
303
+ #define OMX_LPF_FREQ_RANGE_MIN 1000
304
+ #define OMX_LPF_FREQ_RANGE_STEP 10
305
+ #define OMX_PAN_RANGE_MAX 1
306
+ #define OMX_PAN_RANGE_MIN -1
307
+ #define OMX_PAN_RANGE_STEP 0
219
308
  #define OMX_PHASER_BASE_RANGE_DEFAULT 200
220
309
  #define OMX_PHASER_BASE_RANGE_MAX 2000
221
310
  #define OMX_PHASER_BASE_RANGE_MIN 50
@@ -260,10 +349,58 @@
260
349
  #define OMX_PROGRAM_RELEASE_PROFILES_OPTO_SHARE_DOUBLE 0.5
261
350
  #define OMX_PROGRAM_RELEASE_PROFILES_OPTO_SLOW_MAX_MS 1100
262
351
  #define OMX_PROGRAM_RELEASE_PROFILES_OPTO_SLOW_MIN_MS 110
352
+ #define OMX_REVERB_DAMPING_RANGE_DEFAULT 0.5f
353
+ #define OMX_REVERB_DAMPING_RANGE_DEFAULT_DOUBLE 0.5
354
+ #define OMX_REVERB_DAMPING_RANGE_MAX 1
355
+ #define OMX_REVERB_DAMPING_RANGE_MIN 0
356
+ #define OMX_REVERB_DAMPING_RANGE_STEP 0
357
+ #define OMX_REVERB_GATE_THRESHOLD_RANGE_DEFAULT -40
358
+ #define OMX_REVERB_GATE_THRESHOLD_RANGE_MAX 0
359
+ #define OMX_REVERB_GATE_THRESHOLD_RANGE_MIN -80
360
+ #define OMX_REVERB_GATE_THRESHOLD_RANGE_STEP 1
361
+ #define OMX_REVERB_HIGHCUT_RANGE_DEFAULT 20000
362
+ #define OMX_REVERB_HIGHCUT_RANGE_MAX 20000
363
+ #define OMX_REVERB_HIGHCUT_RANGE_MIN 0
364
+ #define OMX_REVERB_HIGHCUT_RANGE_STEP 10
365
+ #define OMX_REVERB_HOLD_RANGE_DEFAULT 120
366
+ #define OMX_REVERB_HOLD_RANGE_MAX 2000
367
+ #define OMX_REVERB_HOLD_RANGE_MIN 10
368
+ #define OMX_REVERB_HOLD_RANGE_STEP 10
369
+ #define OMX_REVERB_LOWCUT_RANGE_DEFAULT 0
370
+ #define OMX_REVERB_LOWCUT_RANGE_MAX 20000
371
+ #define OMX_REVERB_LOWCUT_RANGE_MIN 0
372
+ #define OMX_REVERB_LOWCUT_RANGE_STEP 10
373
+ #define OMX_REVERB_MIX_RANGE_BY_KIND_FX_RETURN 1
374
+ #define OMX_REVERB_MIX_RANGE_DEFAULT 0.3f
375
+ #define OMX_REVERB_MIX_RANGE_DEFAULT_DOUBLE 0.3
376
+ #define OMX_REVERB_MIX_RANGE_MAX 1
377
+ #define OMX_REVERB_MIX_RANGE_MIN 0
378
+ #define OMX_REVERB_MIX_RANGE_STEP 0
263
379
  #define OMX_REVERB_PLATE_MOD_DEPTH_RANGE_DEFAULT 100
264
380
  #define OMX_REVERB_PLATE_MOD_DEPTH_RANGE_MAX 400
265
381
  #define OMX_REVERB_PLATE_MOD_DEPTH_RANGE_MIN 0
266
382
  #define OMX_REVERB_PLATE_MOD_DEPTH_RANGE_STEP 1
383
+ #define OMX_REVERB_PREDELAY_RANGE_DEFAULT 0
384
+ #define OMX_REVERB_PREDELAY_RANGE_MAX 100
385
+ #define OMX_REVERB_PREDELAY_RANGE_MIN 0
386
+ #define OMX_REVERB_PREDELAY_RANGE_STEP 1
387
+ #define OMX_REVERB_RELEASE_RANGE_DEFAULT 20
388
+ #define OMX_REVERB_RELEASE_RANGE_MAX 500
389
+ #define OMX_REVERB_RELEASE_RANGE_MIN 1
390
+ #define OMX_REVERB_RELEASE_RANGE_STEP 1
391
+ #define OMX_REVERB_REVERSE_RANGE_DEFAULT 300
392
+ #define OMX_REVERB_REVERSE_RANGE_MAX 500
393
+ #define OMX_REVERB_REVERSE_RANGE_MIN 50
394
+ #define OMX_REVERB_REVERSE_RANGE_STEP 10
395
+ #define OMX_REVERB_SIZE_RANGE_DEFAULT 0.7f
396
+ #define OMX_REVERB_SIZE_RANGE_DEFAULT_DOUBLE 0.7
397
+ #define OMX_REVERB_SIZE_RANGE_MAX 1
398
+ #define OMX_REVERB_SIZE_RANGE_MIN 0
399
+ #define OMX_REVERB_SIZE_RANGE_STEP 0
400
+ #define OMX_REVERB_WIDTH_RANGE_DEFAULT 1
401
+ #define OMX_REVERB_WIDTH_RANGE_MAX 1
402
+ #define OMX_REVERB_WIDTH_RANGE_MIN 0
403
+ #define OMX_REVERB_WIDTH_RANGE_STEP 0
267
404
  #define OMX_ROTARY_ACCEL_RANGE_DEFAULT 1
268
405
  #define OMX_ROTARY_ACCEL_RANGE_MAX 4
269
406
  #define OMX_ROTARY_ACCEL_RANGE_MIN 0.25f
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmixer/omx-contract",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
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",