@openmixer/omx-contract 1.0.0 → 1.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 +10 -6
- package/data/kernels/balance.json +19 -0
- package/data/kernels/chorus.json +48 -0
- package/data/kernels/deesser.json +93 -0
- package/data/kernels/drive.json +90 -0
- package/data/kernels/eq.json +60 -0
- package/data/kernels/flanger.json +51 -0
- package/data/kernels/geq.json +33 -0
- package/data/kernels/phaser.json +109 -0
- package/data/kernels/reverb.json +135 -0
- package/data/kernels/rotary.json +186 -0
- package/data/kernels/tremolo.json +54 -0
- package/data/primitives.json +74 -0
- package/dist/ts/omx-contract.d.ts +1051 -80
- package/dist/ts/omx-contract.js +1063 -91
- package/include/omxcontract/omx_contract_limits.h +317 -0
- package/lib/data.mjs +2 -25
- package/lib/fmt.mjs +1 -3
- package/lib/semver.mjs +17 -16
- package/lib/validate.mjs +1 -16
- package/package.json +1 -1
- package/render/c.mjs +6 -16
- package/render/doors.mjs +2 -3
- package/render/ts.mjs +1 -2
- package/schema/omx-contract.schema.json +6 -36
- package/share/omx-contract/omx-contract.json +1149 -61
- package/data/plugins/delay.json +0 -48
- package/include/omxcontract/params/omx_delay_params.h +0 -47
- package/include/omxcontract/params/omx_plugin_param.h +0 -25
package/data/kernels/reverb.json
CHANGED
|
@@ -11,5 +11,140 @@
|
|
|
11
11
|
"default": 100,
|
|
12
12
|
"defaultFrom": "desk"
|
|
13
13
|
}
|
|
14
|
+
},
|
|
15
|
+
"REVERB_MIX_RANGE": {
|
|
16
|
+
"kind": "travels",
|
|
17
|
+
"doc": "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.",
|
|
18
|
+
"travel": {
|
|
19
|
+
"min": 0,
|
|
20
|
+
"max": 1,
|
|
21
|
+
"step": 0,
|
|
22
|
+
"unit": "",
|
|
23
|
+
"default": 0.3,
|
|
24
|
+
"defaultFrom": "desk",
|
|
25
|
+
"byKind": {
|
|
26
|
+
"fxReturn": 1
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"REVERB_SIZE_RANGE": {
|
|
31
|
+
"kind": "travels",
|
|
32
|
+
"doc": "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.",
|
|
33
|
+
"travel": {
|
|
34
|
+
"min": 0,
|
|
35
|
+
"max": 1,
|
|
36
|
+
"step": 0,
|
|
37
|
+
"unit": "",
|
|
38
|
+
"default": 0.7,
|
|
39
|
+
"defaultFrom": "desk"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"REVERB_DAMPING_RANGE": {
|
|
43
|
+
"kind": "travels",
|
|
44
|
+
"doc": "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).",
|
|
45
|
+
"travel": {
|
|
46
|
+
"min": 0,
|
|
47
|
+
"max": 1,
|
|
48
|
+
"step": 0,
|
|
49
|
+
"unit": "",
|
|
50
|
+
"default": 0.5,
|
|
51
|
+
"defaultFrom": "desk"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"REVERB_WIDTH_RANGE": {
|
|
55
|
+
"kind": "travels",
|
|
56
|
+
"doc": "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).",
|
|
57
|
+
"travel": {
|
|
58
|
+
"min": 0,
|
|
59
|
+
"max": 1,
|
|
60
|
+
"step": 0,
|
|
61
|
+
"unit": "",
|
|
62
|
+
"default": 1,
|
|
63
|
+
"defaultFrom": "desk"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"REVERB_PREDELAY_RANGE": {
|
|
67
|
+
"kind": "travels",
|
|
68
|
+
"doc": "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.",
|
|
69
|
+
"travel": {
|
|
70
|
+
"min": 0,
|
|
71
|
+
"max": 100,
|
|
72
|
+
"step": 1,
|
|
73
|
+
"unit": "ms",
|
|
74
|
+
"default": 0,
|
|
75
|
+
"defaultFrom": "desk"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"REVERB_LOWCUT_RANGE": {
|
|
79
|
+
"kind": "travels",
|
|
80
|
+
"doc": "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.",
|
|
81
|
+
"travel": {
|
|
82
|
+
"min": 0,
|
|
83
|
+
"max": 20000,
|
|
84
|
+
"step": 10,
|
|
85
|
+
"unit": "Hz",
|
|
86
|
+
"default": 0,
|
|
87
|
+
"defaultFrom": "desk"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"REVERB_HIGHCUT_RANGE": {
|
|
91
|
+
"kind": "travels",
|
|
92
|
+
"doc": "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.",
|
|
93
|
+
"travel": {
|
|
94
|
+
"min": 0,
|
|
95
|
+
"max": 20000,
|
|
96
|
+
"step": 10,
|
|
97
|
+
"unit": "Hz",
|
|
98
|
+
"default": 20000,
|
|
99
|
+
"defaultFrom": "desk"
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"REVERB_REVERSE_RANGE": {
|
|
103
|
+
"kind": "travels",
|
|
104
|
+
"doc": "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.",
|
|
105
|
+
"travel": {
|
|
106
|
+
"min": 50,
|
|
107
|
+
"max": 500,
|
|
108
|
+
"step": 10,
|
|
109
|
+
"unit": "ms",
|
|
110
|
+
"default": 300,
|
|
111
|
+
"defaultFrom": "desk"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"REVERB_HOLD_RANGE": {
|
|
115
|
+
"kind": "travels",
|
|
116
|
+
"doc": "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.",
|
|
117
|
+
"travel": {
|
|
118
|
+
"min": 10,
|
|
119
|
+
"max": 2000,
|
|
120
|
+
"step": 10,
|
|
121
|
+
"unit": "ms",
|
|
122
|
+
"default": 120,
|
|
123
|
+
"defaultFrom": "desk"
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"REVERB_RELEASE_RANGE": {
|
|
127
|
+
"kind": "travels",
|
|
128
|
+
"doc": "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.",
|
|
129
|
+
"travel": {
|
|
130
|
+
"min": 1,
|
|
131
|
+
"max": 500,
|
|
132
|
+
"step": 1,
|
|
133
|
+
"unit": "ms",
|
|
134
|
+
"default": 20,
|
|
135
|
+
"defaultFrom": "desk"
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"REVERB_GATE_THRESHOLD_RANGE": {
|
|
139
|
+
"kind": "travels",
|
|
140
|
+
"doc": "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.",
|
|
141
|
+
"travel": {
|
|
142
|
+
"min": -80,
|
|
143
|
+
"max": 0,
|
|
144
|
+
"step": 1,
|
|
145
|
+
"unit": "dBFS",
|
|
146
|
+
"default": -40,
|
|
147
|
+
"defaultFrom": "desk"
|
|
148
|
+
}
|
|
14
149
|
}
|
|
15
150
|
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../schema/omx-contract.schema.json",
|
|
3
|
+
"ROTARY_HORN_SLOW_RANGE": {
|
|
4
|
+
"kind": "travels",
|
|
5
|
+
"doc": "The horn's chorale (slow) rate, Hz.",
|
|
6
|
+
"travel": {
|
|
7
|
+
"min": 0.1,
|
|
8
|
+
"max": 2,
|
|
9
|
+
"step": 0.01,
|
|
10
|
+
"unit": "Hz",
|
|
11
|
+
"default": 0.8,
|
|
12
|
+
"defaultFrom": "desk"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"ROTARY_HORN_FAST_RANGE": {
|
|
16
|
+
"kind": "travels",
|
|
17
|
+
"doc": "The horn's tremolo (fast) rate, Hz.",
|
|
18
|
+
"travel": {
|
|
19
|
+
"min": 3,
|
|
20
|
+
"max": 10,
|
|
21
|
+
"step": 0.01,
|
|
22
|
+
"unit": "Hz",
|
|
23
|
+
"default": 6.8,
|
|
24
|
+
"defaultFrom": "desk"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"ROTARY_DRUM_SLOW_RANGE": {
|
|
28
|
+
"kind": "travels",
|
|
29
|
+
"doc": "The drum's chorale (slow) rate, Hz.",
|
|
30
|
+
"travel": {
|
|
31
|
+
"min": 0.1,
|
|
32
|
+
"max": 2,
|
|
33
|
+
"step": 0.01,
|
|
34
|
+
"unit": "Hz",
|
|
35
|
+
"default": 0.7,
|
|
36
|
+
"defaultFrom": "desk"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"ROTARY_DRUM_FAST_RANGE": {
|
|
40
|
+
"kind": "travels",
|
|
41
|
+
"doc": "The drum's tremolo (fast) rate, Hz.",
|
|
42
|
+
"travel": {
|
|
43
|
+
"min": 3,
|
|
44
|
+
"max": 10,
|
|
45
|
+
"step": 0.01,
|
|
46
|
+
"unit": "Hz",
|
|
47
|
+
"default": 5.9,
|
|
48
|
+
"defaultFrom": "desk"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"ROTARY_ACCEL_RANGE": {
|
|
52
|
+
"kind": "travels",
|
|
53
|
+
"doc": "The scale on every speed-change time constant (`ROTARY_*_ACCEL_MS`/`_DECEL_MS`): 2 is twice as slow.",
|
|
54
|
+
"travel": {
|
|
55
|
+
"min": 0.25,
|
|
56
|
+
"max": 4,
|
|
57
|
+
"step": 0.01,
|
|
58
|
+
"unit": "x",
|
|
59
|
+
"default": 1,
|
|
60
|
+
"defaultFrom": "desk"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"ROTARY_BALANCE_RANGE": {
|
|
64
|
+
"kind": "travels",
|
|
65
|
+
"doc": "The drum/horn balance, percent: −100 drum only, +100 horn only; the law attenuates, never boosts.",
|
|
66
|
+
"travel": {
|
|
67
|
+
"min": -100,
|
|
68
|
+
"max": 100,
|
|
69
|
+
"step": 1,
|
|
70
|
+
"unit": "%",
|
|
71
|
+
"default": 0,
|
|
72
|
+
"defaultFrom": "desk"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"ROTARY_MIX_RANGE": {
|
|
76
|
+
"kind": "travels",
|
|
77
|
+
"doc": "The rotary's wet/dry, as an instance of DRIVE_MIX_RANGE: 100 %, because a rotary on an insert IS the sound (it replaces the cabinet) and an `fxReturn` wants it wet too (§3).",
|
|
78
|
+
"travel": {
|
|
79
|
+
"min": 0,
|
|
80
|
+
"max": 100,
|
|
81
|
+
"step": 0.1,
|
|
82
|
+
"unit": "%",
|
|
83
|
+
"default": 100,
|
|
84
|
+
"defaultFrom": "desk"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"ROTARY_TRAVELS": {
|
|
88
|
+
"kind": "travels",
|
|
89
|
+
"doc": "The rotary's numeric travels, field → declaration: the ONE map the row's state, its bounds, its OPTIONS and its controller read (`speed` is a member set, ROTARY_SPEEDS, beside it).",
|
|
90
|
+
"fields": {
|
|
91
|
+
"hornSlowHz": {
|
|
92
|
+
"ref": "ROTARY_HORN_SLOW_RANGE"
|
|
93
|
+
},
|
|
94
|
+
"hornFastHz": {
|
|
95
|
+
"ref": "ROTARY_HORN_FAST_RANGE"
|
|
96
|
+
},
|
|
97
|
+
"drumSlowHz": {
|
|
98
|
+
"ref": "ROTARY_DRUM_SLOW_RANGE"
|
|
99
|
+
},
|
|
100
|
+
"drumFastHz": {
|
|
101
|
+
"ref": "ROTARY_DRUM_FAST_RANGE"
|
|
102
|
+
},
|
|
103
|
+
"accel": {
|
|
104
|
+
"ref": "ROTARY_ACCEL_RANGE"
|
|
105
|
+
},
|
|
106
|
+
"balance": {
|
|
107
|
+
"ref": "ROTARY_BALANCE_RANGE"
|
|
108
|
+
},
|
|
109
|
+
"mix": {
|
|
110
|
+
"ref": "ROTARY_MIX_RANGE"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"ROTARY_CROSSOVER_HZ": {
|
|
115
|
+
"kind": "scalar",
|
|
116
|
+
"doc": "The complementary split's low-pass corner, Hz: the Leslie 122's passive crossover.",
|
|
117
|
+
"unit": "Hz",
|
|
118
|
+
"value": 800
|
|
119
|
+
},
|
|
120
|
+
"ROTARY_BASE_MS": {
|
|
121
|
+
"kind": "scalar",
|
|
122
|
+
"doc": "The shortest Doppler read, ms — above the order-3 read's one-sample reach at every rate.",
|
|
123
|
+
"unit": "ms",
|
|
124
|
+
"value": 0.1
|
|
125
|
+
},
|
|
126
|
+
"ROTARY_HORN_DOPPLER_MS": {
|
|
127
|
+
"kind": "scalar",
|
|
128
|
+
"doc": "The horn's Doppler excursion `D_horn`, ms: a 0.15 m radius over 343 m/s.",
|
|
129
|
+
"unit": "ms",
|
|
130
|
+
"value": 0.44
|
|
131
|
+
},
|
|
132
|
+
"ROTARY_DRUM_DOPPLER_MS": {
|
|
133
|
+
"kind": "scalar",
|
|
134
|
+
"doc": "The drum's Doppler excursion `D_drum`, ms: its baffle turns over a fixed woofer.",
|
|
135
|
+
"unit": "ms",
|
|
136
|
+
"value": 0.29
|
|
137
|
+
},
|
|
138
|
+
"ROTARY_HORN_AM": {
|
|
139
|
+
"kind": "scalar",
|
|
140
|
+
"doc": "The horn's amplitude swing `m_horn` (a −6 dB directivity dip), a ratio.",
|
|
141
|
+
"unit": "",
|
|
142
|
+
"value": 0.5
|
|
143
|
+
},
|
|
144
|
+
"ROTARY_DRUM_AM": {
|
|
145
|
+
"kind": "scalar",
|
|
146
|
+
"doc": "The drum baffle's amplitude swing `m_drum`, a ratio.",
|
|
147
|
+
"unit": "",
|
|
148
|
+
"value": 0.3
|
|
149
|
+
},
|
|
150
|
+
"ROTARY_HORN_ACCEL_MS": {
|
|
151
|
+
"kind": "scalar",
|
|
152
|
+
"doc": "The horn rotor's speed-up time constant, ms (at `accel` 1).",
|
|
153
|
+
"unit": "ms",
|
|
154
|
+
"value": 330
|
|
155
|
+
},
|
|
156
|
+
"ROTARY_HORN_DECEL_MS": {
|
|
157
|
+
"kind": "scalar",
|
|
158
|
+
"doc": "The horn rotor's slow-down time constant, ms (at `accel` 1).",
|
|
159
|
+
"unit": "ms",
|
|
160
|
+
"value": 500
|
|
161
|
+
},
|
|
162
|
+
"ROTARY_DRUM_ACCEL_MS": {
|
|
163
|
+
"kind": "scalar",
|
|
164
|
+
"doc": "The drum rotor's speed-up time constant, ms (at `accel` 1).",
|
|
165
|
+
"unit": "ms",
|
|
166
|
+
"value": 1700
|
|
167
|
+
},
|
|
168
|
+
"ROTARY_DRUM_DECEL_MS": {
|
|
169
|
+
"kind": "scalar",
|
|
170
|
+
"doc": "The drum rotor's slow-down time constant, ms (at `accel` 1).",
|
|
171
|
+
"unit": "ms",
|
|
172
|
+
"value": 1800
|
|
173
|
+
},
|
|
174
|
+
"ROTARY_STOP_EPS": {
|
|
175
|
+
"kind": "scalar",
|
|
176
|
+
"doc": "Below this rate, Hz, a rotor coasting toward `stop` is snapped to exactly 0.",
|
|
177
|
+
"unit": "",
|
|
178
|
+
"value": 0.0001
|
|
179
|
+
},
|
|
180
|
+
"ROTARY_RING_FLOATS": {
|
|
181
|
+
"kind": "scalar",
|
|
182
|
+
"doc": "One inline ring per rotor per leg, floats — at least the 192 kHz need of the horn's sweep.",
|
|
183
|
+
"unit": "",
|
|
184
|
+
"value": 256
|
|
185
|
+
}
|
|
186
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../schema/omx-contract.schema.json",
|
|
3
|
+
"TREMOLO_RATE_RANGE": {
|
|
4
|
+
"kind": "travels",
|
|
5
|
+
"doc": "The tremolo's LFO rate (the catalogue row's 0.1..20 Hz); 4 Hz is the classic amp tremolo.",
|
|
6
|
+
"travel": {
|
|
7
|
+
"min": 0.1,
|
|
8
|
+
"max": 20,
|
|
9
|
+
"step": 0.01,
|
|
10
|
+
"unit": "Hz",
|
|
11
|
+
"default": 4,
|
|
12
|
+
"defaultFrom": "desk"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"TREMOLO_DEPTH_RANGE": {
|
|
16
|
+
"kind": "travels",
|
|
17
|
+
"doc": "The tremolo's modulation depth: the gain's trough is `1 − mix·depth`.",
|
|
18
|
+
"travel": {
|
|
19
|
+
"min": 0,
|
|
20
|
+
"max": 100,
|
|
21
|
+
"step": 0.1,
|
|
22
|
+
"unit": "%",
|
|
23
|
+
"default": 50,
|
|
24
|
+
"defaultFrom": "desk"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"TREMOLO_MIX_RANGE": {
|
|
28
|
+
"kind": "travels",
|
|
29
|
+
"doc": "The tremolo's wet/dry, as an instance of DRIVE_MIX_RANGE: 100 %. The kernel folds the wet/dry into its one gain, so a strip tremolo IS the sound (as the rotary's mix 100 % is).",
|
|
30
|
+
"travel": {
|
|
31
|
+
"min": 0,
|
|
32
|
+
"max": 100,
|
|
33
|
+
"step": 0.1,
|
|
34
|
+
"unit": "%",
|
|
35
|
+
"default": 100,
|
|
36
|
+
"defaultFrom": "desk"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"TREMOLO_TRAVELS": {
|
|
40
|
+
"kind": "travels",
|
|
41
|
+
"doc": "The tremolo's numeric travels, field → declaration: the ONE map the row's state, its bounds, its OPTIONS and its controller read (`mode` is a member set, TREMOLO_MODES, beside it).",
|
|
42
|
+
"fields": {
|
|
43
|
+
"rateHz": {
|
|
44
|
+
"ref": "TREMOLO_RATE_RANGE"
|
|
45
|
+
},
|
|
46
|
+
"depth": {
|
|
47
|
+
"ref": "TREMOLO_DEPTH_RANGE"
|
|
48
|
+
},
|
|
49
|
+
"mix": {
|
|
50
|
+
"ref": "TREMOLO_MIX_RANGE"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
package/data/primitives.json
CHANGED
|
@@ -43,5 +43,79 @@
|
|
|
43
43
|
"ref": "FDELAY_MOD_READ_ORDER"
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
+
},
|
|
47
|
+
"GATE_CONTINUOUS_TRAVELS": {
|
|
48
|
+
"kind": "travels",
|
|
49
|
+
"doc": "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.",
|
|
50
|
+
"fields": {
|
|
51
|
+
"thresholdDb": {
|
|
52
|
+
"min": -80,
|
|
53
|
+
"max": 0,
|
|
54
|
+
"step": 0,
|
|
55
|
+
"unit": "dB",
|
|
56
|
+
"default": -40,
|
|
57
|
+
"defaultFrom": "desk"
|
|
58
|
+
},
|
|
59
|
+
"rangeDb": {
|
|
60
|
+
"min": -90,
|
|
61
|
+
"max": 0,
|
|
62
|
+
"step": 0,
|
|
63
|
+
"unit": "dB",
|
|
64
|
+
"default": -90,
|
|
65
|
+
"defaultFrom": "desk"
|
|
66
|
+
},
|
|
67
|
+
"releaseMs": {
|
|
68
|
+
"min": 0,
|
|
69
|
+
"max": 5000,
|
|
70
|
+
"step": 0,
|
|
71
|
+
"unit": "ms",
|
|
72
|
+
"default": 100,
|
|
73
|
+
"defaultFrom": "desk"
|
|
74
|
+
},
|
|
75
|
+
"ratio": {
|
|
76
|
+
"min": 1,
|
|
77
|
+
"max": 100,
|
|
78
|
+
"step": 0,
|
|
79
|
+
"unit": "",
|
|
80
|
+
"default": 16,
|
|
81
|
+
"defaultFrom": "desk"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"COMP_CONTINUOUS_TRAVELS": {
|
|
86
|
+
"kind": "travels",
|
|
87
|
+
"doc": "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.",
|
|
88
|
+
"fields": {
|
|
89
|
+
"thresholdDb": {
|
|
90
|
+
"min": -60,
|
|
91
|
+
"max": 0,
|
|
92
|
+
"step": 0,
|
|
93
|
+
"unit": "dB",
|
|
94
|
+
"default": -18,
|
|
95
|
+
"defaultFrom": "desk"
|
|
96
|
+
},
|
|
97
|
+
"releaseMs": {
|
|
98
|
+
"min": 5,
|
|
99
|
+
"max": 3000,
|
|
100
|
+
"step": 0,
|
|
101
|
+
"unit": "ms",
|
|
102
|
+
"default": 200,
|
|
103
|
+
"defaultFrom": "desk"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"TRIM_TRAVELS": {
|
|
108
|
+
"kind": "travels",
|
|
109
|
+
"doc": "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.",
|
|
110
|
+
"fields": {
|
|
111
|
+
"trimDb": {
|
|
112
|
+
"min": -24,
|
|
113
|
+
"max": 24,
|
|
114
|
+
"step": 0.1,
|
|
115
|
+
"unit": "dB",
|
|
116
|
+
"default": 0,
|
|
117
|
+
"defaultFrom": "desk"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
46
120
|
}
|
|
47
121
|
}
|