@openmixer/omx-contract 2.1.0 → 2.2.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 +17 -2
- package/data/kernels/comp.json +31 -0
- package/data/kernels/delay.json +16 -0
- package/data/kernels/drive.json +44 -0
- package/data/kernels/eq.json +105 -49
- package/data/kernels/geq.json +2 -1
- package/dist/ts/omx-contract.d.ts +84 -30
- package/dist/ts/omx-contract.js +120 -37
- package/include/omxcontract/omx_contract_limits.h +55 -0
- package/lib/data.mjs +46 -12
- package/lib/validate.mjs +37 -4
- package/package.json +1 -1
- package/schema/omx-contract.schema.json +2 -2
- package/share/omx-contract/omx-contract.json +257 -70
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openmixer/omx-contract",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"items": {
|
|
5
5
|
"PAN_RANGE": {
|
|
6
6
|
"rel": "data/kernels/balance.json",
|
|
@@ -269,6 +269,36 @@
|
|
|
269
269
|
}
|
|
270
270
|
}
|
|
271
271
|
},
|
|
272
|
+
"COMP_KINDS": {
|
|
273
|
+
"rel": "data/kernels/comp.json",
|
|
274
|
+
"kind": "set",
|
|
275
|
+
"doc": "The compressor's character, which picks its detector: `comp` runs the RMS detector, `limiter` the peak detector. The console's comp row carries it (`CompState.kind`, `COMP_KINDS`) and comes up as `comp`.",
|
|
276
|
+
"default": "comp",
|
|
277
|
+
"labels": [
|
|
278
|
+
"Compressor",
|
|
279
|
+
"Limiter"
|
|
280
|
+
],
|
|
281
|
+
"value": [
|
|
282
|
+
"comp",
|
|
283
|
+
"limiter"
|
|
284
|
+
]
|
|
285
|
+
},
|
|
286
|
+
"DETECTOR_OVERSAMPLINGS": {
|
|
287
|
+
"rel": "data/kernels/comp.json",
|
|
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`.",
|
|
290
|
+
"default": "auto",
|
|
291
|
+
"labels": [
|
|
292
|
+
"Auto",
|
|
293
|
+
"Off",
|
|
294
|
+
"4x"
|
|
295
|
+
],
|
|
296
|
+
"value": [
|
|
297
|
+
"auto",
|
|
298
|
+
"off",
|
|
299
|
+
"x4"
|
|
300
|
+
]
|
|
301
|
+
},
|
|
272
302
|
"PROGRAM_RELEASE": {
|
|
273
303
|
"rel": "data/kernels/comp.json",
|
|
274
304
|
"kind": "sheet",
|
|
@@ -465,6 +495,20 @@
|
|
|
465
495
|
}
|
|
466
496
|
}
|
|
467
497
|
},
|
|
498
|
+
"DELAY_PINGPONGS": {
|
|
499
|
+
"rel": "data/kernels/delay.json",
|
|
500
|
+
"kind": "set",
|
|
501
|
+
"doc": "The FX delay's PING-PONG switch: on cross-feeds the two legs' feedback, so each leg's repeats come from the other leg's damped tap and the echoes bounce L<->R (`omx_delay.h`'s `struct omx_fx_delay.pingpong`, read where the feedback is formed). A live control on the console's delay row (`DelayState.pingpong`) and on the omx-delay plugin. Its come-up value is FX_DELAY_PINGPONG_DEFAULT, by reference, so the default keeps one home.",
|
|
502
|
+
"default": "off",
|
|
503
|
+
"labels": [
|
|
504
|
+
"Off",
|
|
505
|
+
"On"
|
|
506
|
+
],
|
|
507
|
+
"value": [
|
|
508
|
+
"off",
|
|
509
|
+
"on"
|
|
510
|
+
]
|
|
511
|
+
},
|
|
468
512
|
"FX_DELAY_PINGPONG_DEFAULT": {
|
|
469
513
|
"rel": "data/kernels/delay.json",
|
|
470
514
|
"kind": "scalar",
|
|
@@ -594,6 +638,50 @@
|
|
|
594
638
|
"tilt"
|
|
595
639
|
]
|
|
596
640
|
},
|
|
641
|
+
"DRIVE_AUTO_GAINS": {
|
|
642
|
+
"rel": "data/kernels/drive.json",
|
|
643
|
+
"kind": "set",
|
|
644
|
+
"doc": "The drive's AUTO-GAIN switch: on, the stage measures its own level change and matches it out (`omx_drive.h`'s `struct omx_drive.auto_gain`, drive-stage spec §4d), so turning the drive up adds colour rather than loudness. A field of the console's drive row (`DriveState.autoGain`), on at come-up there and in omx-dsp's drive face.",
|
|
645
|
+
"default": "on",
|
|
646
|
+
"labels": [
|
|
647
|
+
"Off",
|
|
648
|
+
"On"
|
|
649
|
+
],
|
|
650
|
+
"value": [
|
|
651
|
+
"off",
|
|
652
|
+
"on"
|
|
653
|
+
]
|
|
654
|
+
},
|
|
655
|
+
"DRIVE_STEREO_LINKS": {
|
|
656
|
+
"rel": "data/kernels/drive.json",
|
|
657
|
+
"kind": "set",
|
|
658
|
+
"doc": "The drive's STEREO LINK switch: on, ONE auto-gain path is driven by both legs' summed energy, so the image cannot shift under the level match; off, each leg matches its own (`omx_drive.h`'s `struct omx_drive.stereo_link`, spec §4e). A field of the console's drive row (`DriveState.stereoLink`), on at come-up there and in omx-dsp's drive face.",
|
|
659
|
+
"default": "on",
|
|
660
|
+
"labels": [
|
|
661
|
+
"Off",
|
|
662
|
+
"On"
|
|
663
|
+
],
|
|
664
|
+
"value": [
|
|
665
|
+
"off",
|
|
666
|
+
"on"
|
|
667
|
+
]
|
|
668
|
+
},
|
|
669
|
+
"DRIVE_HF_ROLLOFFS": {
|
|
670
|
+
"rel": "data/kernels/drive.json",
|
|
671
|
+
"kind": "set",
|
|
672
|
+
"doc": "The drive's post-curve HIGH-FREQUENCY ROLL-OFF corner, in Hz: the id is the corner, and 0 names no roll-off (the section does not run: `omx_drive.h`'s `struct omx_drive.hf_on` is 0). The console's drive row offers off, 12000 and 16000 (`DriveState.hfRolloff`, `DRIVE_HF_ROLLOFFS`) and comes up off, as omx-dsp's drive face does.",
|
|
673
|
+
"default": 0,
|
|
674
|
+
"labels": [
|
|
675
|
+
"Off",
|
|
676
|
+
"12 kHz",
|
|
677
|
+
"16 kHz"
|
|
678
|
+
],
|
|
679
|
+
"value": [
|
|
680
|
+
0,
|
|
681
|
+
12000,
|
|
682
|
+
16000
|
|
683
|
+
]
|
|
684
|
+
},
|
|
597
685
|
"DRIVE_BIAS_MAX": {
|
|
598
686
|
"rel": "data/kernels/drive.json",
|
|
599
687
|
"kind": "scalar",
|
|
@@ -601,6 +689,90 @@
|
|
|
601
689
|
"unit": "",
|
|
602
690
|
"value": 0.7071067811865476
|
|
603
691
|
},
|
|
692
|
+
"EQ_HPF_ONS": {
|
|
693
|
+
"rel": "data/kernels/eq.json",
|
|
694
|
+
"kind": "set",
|
|
695
|
+
"doc": "The HPF's switch: off, the filter is not in the EQ's bank at all; on, its one or two Butterworth sections run after the bands. It comes up off, on the console's channel EQ and in omx-dsp's EQ face (see EQ_PASS_FILTER_DEFAULTS).",
|
|
696
|
+
"default": "off",
|
|
697
|
+
"labels": [
|
|
698
|
+
"Off",
|
|
699
|
+
"On"
|
|
700
|
+
],
|
|
701
|
+
"value": [
|
|
702
|
+
"off",
|
|
703
|
+
"on"
|
|
704
|
+
]
|
|
705
|
+
},
|
|
706
|
+
"HPF_FREQ_RANGE": {
|
|
707
|
+
"rel": "data/kernels/eq.json",
|
|
708
|
+
"kind": "travels",
|
|
709
|
+
"doc": "Where the HPF cutoff can sit (low end); mirrors the drawn low-frequency handle.",
|
|
710
|
+
"shape": "travel",
|
|
711
|
+
"value": {
|
|
712
|
+
"min": 20,
|
|
713
|
+
"max": 1000,
|
|
714
|
+
"step": 10,
|
|
715
|
+
"unit": "Hz"
|
|
716
|
+
}
|
|
717
|
+
},
|
|
718
|
+
"FILTER_SLOPES": {
|
|
719
|
+
"rel": "data/kernels/eq.json",
|
|
720
|
+
"kind": "set",
|
|
721
|
+
"doc": "The pass-filter slopes the EQ offers, in dB per octave: the HPF's slope, and by use the LPF's. The id is the slope: 12 is one maximally flat section, 24 the two-section Butterworth.",
|
|
722
|
+
"default": 12,
|
|
723
|
+
"value": [
|
|
724
|
+
12,
|
|
725
|
+
24
|
|
726
|
+
]
|
|
727
|
+
},
|
|
728
|
+
"EQ_LPF_ONS": {
|
|
729
|
+
"rel": "data/kernels/eq.json",
|
|
730
|
+
"kind": "set",
|
|
731
|
+
"doc": "The LPF's switch: off, the filter is not in the EQ's bank at all; on, its one or two Butterworth sections run after the bands and the HPF. It comes up off, on the console's channel EQ and in omx-dsp's EQ face (see EQ_PASS_FILTER_DEFAULTS).",
|
|
732
|
+
"default": "off",
|
|
733
|
+
"labels": [
|
|
734
|
+
"Off",
|
|
735
|
+
"On"
|
|
736
|
+
],
|
|
737
|
+
"value": [
|
|
738
|
+
"off",
|
|
739
|
+
"on"
|
|
740
|
+
]
|
|
741
|
+
},
|
|
742
|
+
"LPF_FREQ_RANGE": {
|
|
743
|
+
"rel": "data/kernels/eq.json",
|
|
744
|
+
"kind": "travels",
|
|
745
|
+
"doc": "Where the LPF cutoff can sit (high end).",
|
|
746
|
+
"shape": "travel",
|
|
747
|
+
"value": {
|
|
748
|
+
"min": 1000,
|
|
749
|
+
"max": 20000,
|
|
750
|
+
"step": 10,
|
|
751
|
+
"unit": "Hz"
|
|
752
|
+
}
|
|
753
|
+
},
|
|
754
|
+
"EQ_BAND_TYPES": {
|
|
755
|
+
"rel": "data/kernels/eq.json",
|
|
756
|
+
"kind": "set",
|
|
757
|
+
"doc": "The generic EQ band shapes, in the order a picker offers them and in the order of the integer a plugin host sees on a band type port. The id is the name; the position is the value. A bell is the shape a band added by the operator starts as.",
|
|
758
|
+
"default": "bell",
|
|
759
|
+
"labels": [
|
|
760
|
+
"Bell",
|
|
761
|
+
"Low Shelf",
|
|
762
|
+
"High Shelf",
|
|
763
|
+
"Notch",
|
|
764
|
+
"All-pass 1st",
|
|
765
|
+
"All-pass 2nd"
|
|
766
|
+
],
|
|
767
|
+
"value": [
|
|
768
|
+
"bell",
|
|
769
|
+
"lowShelf",
|
|
770
|
+
"highShelf",
|
|
771
|
+
"notch",
|
|
772
|
+
"allpass1",
|
|
773
|
+
"allpass2"
|
|
774
|
+
]
|
|
775
|
+
},
|
|
604
776
|
"EQ_FREQ_RANGE": {
|
|
605
777
|
"rel": "data/kernels/eq.json",
|
|
606
778
|
"kind": "travels",
|
|
@@ -649,60 +821,17 @@
|
|
|
649
821
|
"unit": ""
|
|
650
822
|
}
|
|
651
823
|
},
|
|
652
|
-
"
|
|
653
|
-
"rel": "data/kernels/eq.json",
|
|
654
|
-
"kind": "travels",
|
|
655
|
-
"doc": "Where the HPF cutoff can sit (low end); mirrors the drawn low-frequency handle.",
|
|
656
|
-
"shape": "travel",
|
|
657
|
-
"value": {
|
|
658
|
-
"min": 20,
|
|
659
|
-
"max": 1000,
|
|
660
|
-
"step": 10,
|
|
661
|
-
"unit": "Hz"
|
|
662
|
-
}
|
|
663
|
-
},
|
|
664
|
-
"LPF_FREQ_RANGE": {
|
|
665
|
-
"rel": "data/kernels/eq.json",
|
|
666
|
-
"kind": "travels",
|
|
667
|
-
"doc": "Where the LPF cutoff can sit (high end).",
|
|
668
|
-
"shape": "travel",
|
|
669
|
-
"value": {
|
|
670
|
-
"min": 1000,
|
|
671
|
-
"max": 20000,
|
|
672
|
-
"step": 10,
|
|
673
|
-
"unit": "Hz"
|
|
674
|
-
}
|
|
675
|
-
},
|
|
676
|
-
"EQ_BAND_TYPES": {
|
|
824
|
+
"EQ_BAND_ONS": {
|
|
677
825
|
"rel": "data/kernels/eq.json",
|
|
678
826
|
"kind": "set",
|
|
679
|
-
"doc": "
|
|
680
|
-
"default": "bell",
|
|
827
|
+
"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.",
|
|
681
828
|
"labels": [
|
|
682
|
-
"
|
|
683
|
-
"
|
|
684
|
-
"High Shelf",
|
|
685
|
-
"Notch",
|
|
686
|
-
"All-pass 1st",
|
|
687
|
-
"All-pass 2nd"
|
|
829
|
+
"Off",
|
|
830
|
+
"On"
|
|
688
831
|
],
|
|
689
832
|
"value": [
|
|
690
|
-
"
|
|
691
|
-
"
|
|
692
|
-
"highShelf",
|
|
693
|
-
"notch",
|
|
694
|
-
"allpass1",
|
|
695
|
-
"allpass2"
|
|
696
|
-
]
|
|
697
|
-
},
|
|
698
|
-
"FILTER_SLOPES": {
|
|
699
|
-
"rel": "data/kernels/eq.json",
|
|
700
|
-
"kind": "set",
|
|
701
|
-
"doc": "The pass-filter slopes the EQ offers, in dB per octave. The id is the slope: 12 is one maximally flat section, 24 the two-section Butterworth.",
|
|
702
|
-
"default": 12,
|
|
703
|
-
"value": [
|
|
704
|
-
12,
|
|
705
|
-
24
|
|
833
|
+
"off",
|
|
834
|
+
"on"
|
|
706
835
|
]
|
|
707
836
|
},
|
|
708
837
|
"EQ_MAX_BANDS": {
|
|
@@ -2486,6 +2615,16 @@
|
|
|
2486
2615
|
"kind": "travel",
|
|
2487
2616
|
"global": "COMP_LIMITS",
|
|
2488
2617
|
"table": "COMP_LIMITS"
|
|
2618
|
+
},
|
|
2619
|
+
{
|
|
2620
|
+
"name": "kind",
|
|
2621
|
+
"kind": "choice",
|
|
2622
|
+
"global": "COMP_KINDS"
|
|
2623
|
+
},
|
|
2624
|
+
{
|
|
2625
|
+
"name": "detectorOversampling",
|
|
2626
|
+
"kind": "choice",
|
|
2627
|
+
"global": "DETECTOR_OVERSAMPLINGS"
|
|
2489
2628
|
}
|
|
2490
2629
|
]
|
|
2491
2630
|
},
|
|
@@ -2554,6 +2693,11 @@
|
|
|
2554
2693
|
"name": "mix",
|
|
2555
2694
|
"kind": "travel",
|
|
2556
2695
|
"global": "DELAY_MIX_RANGE"
|
|
2696
|
+
},
|
|
2697
|
+
{
|
|
2698
|
+
"name": "pingpong",
|
|
2699
|
+
"kind": "choice",
|
|
2700
|
+
"global": "DELAY_PINGPONGS"
|
|
2557
2701
|
}
|
|
2558
2702
|
]
|
|
2559
2703
|
},
|
|
@@ -2593,50 +2737,92 @@
|
|
|
2593
2737
|
"name": "band",
|
|
2594
2738
|
"kind": "choice",
|
|
2595
2739
|
"global": "DRIVE_BANDS"
|
|
2740
|
+
},
|
|
2741
|
+
{
|
|
2742
|
+
"name": "autoGain",
|
|
2743
|
+
"kind": "choice",
|
|
2744
|
+
"global": "DRIVE_AUTO_GAINS"
|
|
2745
|
+
},
|
|
2746
|
+
{
|
|
2747
|
+
"name": "stereoLink",
|
|
2748
|
+
"kind": "choice",
|
|
2749
|
+
"global": "DRIVE_STEREO_LINKS"
|
|
2750
|
+
},
|
|
2751
|
+
{
|
|
2752
|
+
"name": "hfRolloff",
|
|
2753
|
+
"kind": "choice",
|
|
2754
|
+
"global": "DRIVE_HF_ROLLOFFS"
|
|
2596
2755
|
}
|
|
2597
2756
|
]
|
|
2598
2757
|
},
|
|
2599
2758
|
"eq": {
|
|
2600
2759
|
"controls": [
|
|
2601
2760
|
{
|
|
2602
|
-
"name": "
|
|
2603
|
-
"kind": "
|
|
2604
|
-
"global": "
|
|
2605
|
-
},
|
|
2606
|
-
{
|
|
2607
|
-
"name": "gain",
|
|
2608
|
-
"kind": "travel",
|
|
2609
|
-
"global": "EQ_GAIN_RANGE"
|
|
2761
|
+
"name": "hpfOn",
|
|
2762
|
+
"kind": "choice",
|
|
2763
|
+
"global": "EQ_HPF_ONS"
|
|
2610
2764
|
},
|
|
2611
2765
|
{
|
|
2612
|
-
"name": "
|
|
2766
|
+
"name": "hpfFreq",
|
|
2613
2767
|
"kind": "travel",
|
|
2614
|
-
"global": "
|
|
2768
|
+
"global": "HPF_FREQ_RANGE"
|
|
2615
2769
|
},
|
|
2616
2770
|
{
|
|
2617
|
-
"name": "
|
|
2618
|
-
"kind": "
|
|
2619
|
-
"global": "
|
|
2771
|
+
"name": "hpfSlope",
|
|
2772
|
+
"kind": "choice",
|
|
2773
|
+
"global": "FILTER_SLOPES"
|
|
2620
2774
|
},
|
|
2621
2775
|
{
|
|
2622
|
-
"name": "
|
|
2623
|
-
"kind": "
|
|
2624
|
-
"global": "
|
|
2776
|
+
"name": "lpfOn",
|
|
2777
|
+
"kind": "choice",
|
|
2778
|
+
"global": "EQ_LPF_ONS"
|
|
2625
2779
|
},
|
|
2626
2780
|
{
|
|
2627
2781
|
"name": "lpfFreq",
|
|
2628
2782
|
"kind": "travel",
|
|
2629
2783
|
"global": "LPF_FREQ_RANGE"
|
|
2630
2784
|
},
|
|
2785
|
+
{
|
|
2786
|
+
"name": "lpfSlope",
|
|
2787
|
+
"kind": "choice",
|
|
2788
|
+
"global": "FILTER_SLOPES"
|
|
2789
|
+
},
|
|
2631
2790
|
{
|
|
2632
2791
|
"name": "bandType",
|
|
2633
2792
|
"kind": "choice",
|
|
2634
|
-
"global": "EQ_BAND_TYPES"
|
|
2793
|
+
"global": "EQ_BAND_TYPES",
|
|
2794
|
+
"count": "EQ_BAND_COUNTS"
|
|
2635
2795
|
},
|
|
2636
2796
|
{
|
|
2637
|
-
"name": "
|
|
2797
|
+
"name": "freq",
|
|
2798
|
+
"kind": "travel",
|
|
2799
|
+
"global": "EQ_FREQ_RANGE",
|
|
2800
|
+
"count": "EQ_BAND_COUNTS"
|
|
2801
|
+
},
|
|
2802
|
+
{
|
|
2803
|
+
"name": "gain",
|
|
2804
|
+
"kind": "travel",
|
|
2805
|
+
"global": "EQ_GAIN_RANGE",
|
|
2806
|
+
"count": "EQ_BAND_COUNTS"
|
|
2807
|
+
},
|
|
2808
|
+
{
|
|
2809
|
+
"name": "q",
|
|
2810
|
+
"kind": "travel",
|
|
2811
|
+
"global": "EQ_Q_RANGE",
|
|
2812
|
+
"count": "EQ_BAND_COUNTS",
|
|
2813
|
+
"when": [
|
|
2814
|
+
{
|
|
2815
|
+
"control": "bandType",
|
|
2816
|
+
"is": "notch",
|
|
2817
|
+
"global": "EQ_NOTCH_Q_RANGE"
|
|
2818
|
+
}
|
|
2819
|
+
]
|
|
2820
|
+
},
|
|
2821
|
+
{
|
|
2822
|
+
"name": "bandOn",
|
|
2638
2823
|
"kind": "choice",
|
|
2639
|
-
"global": "
|
|
2824
|
+
"global": "EQ_BAND_ONS",
|
|
2825
|
+
"count": "EQ_BAND_COUNTS"
|
|
2640
2826
|
}
|
|
2641
2827
|
]
|
|
2642
2828
|
},
|
|
@@ -2735,7 +2921,8 @@
|
|
|
2735
2921
|
{
|
|
2736
2922
|
"name": "band",
|
|
2737
2923
|
"kind": "travel",
|
|
2738
|
-
"global": "GEQ_BAND_RANGE"
|
|
2924
|
+
"global": "GEQ_BAND_RANGE",
|
|
2925
|
+
"count": "GEQ_BANDS"
|
|
2739
2926
|
}
|
|
2740
2927
|
]
|
|
2741
2928
|
},
|