@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
|
@@ -101,22 +101,98 @@
|
|
|
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
|
|
160
|
+
#define OMX_DEESS_ATTACK_RANGE_DEFAULT 1
|
|
161
|
+
#define OMX_DEESS_ATTACK_RANGE_MAX 50
|
|
162
|
+
#define OMX_DEESS_ATTACK_RANGE_MIN 0.1f
|
|
163
|
+
#define OMX_DEESS_ATTACK_RANGE_MIN_DOUBLE 0.1
|
|
164
|
+
#define OMX_DEESS_ATTACK_RANGE_STEP 0.1f
|
|
165
|
+
#define OMX_DEESS_ATTACK_RANGE_STEP_DOUBLE 0.1
|
|
166
|
+
#define OMX_DEESS_FREQ_RANGE_DEFAULT 7000
|
|
167
|
+
#define OMX_DEESS_FREQ_RANGE_MAX 16000
|
|
168
|
+
#define OMX_DEESS_FREQ_RANGE_MIN 2000
|
|
169
|
+
#define OMX_DEESS_FREQ_RANGE_STEP 10
|
|
170
|
+
#define OMX_DEESS_KNEE_DB 6
|
|
171
|
+
#define OMX_DEESS_RANGE_RANGE_DEFAULT -12
|
|
172
|
+
#define OMX_DEESS_RANGE_RANGE_MAX 0
|
|
173
|
+
#define OMX_DEESS_RANGE_RANGE_MIN -24
|
|
174
|
+
#define OMX_DEESS_RANGE_RANGE_STEP 0.5f
|
|
175
|
+
#define OMX_DEESS_RANGE_RANGE_STEP_DOUBLE 0.5
|
|
176
|
+
#define OMX_DEESS_RATIO_RANGE_DEFAULT 4
|
|
177
|
+
#define OMX_DEESS_RATIO_RANGE_MAX 20
|
|
178
|
+
#define OMX_DEESS_RATIO_RANGE_MIN 1
|
|
179
|
+
#define OMX_DEESS_RATIO_RANGE_STEP 0.1f
|
|
180
|
+
#define OMX_DEESS_RATIO_RANGE_STEP_DOUBLE 0.1
|
|
181
|
+
#define OMX_DEESS_RELEASE_RANGE_DEFAULT 60
|
|
182
|
+
#define OMX_DEESS_RELEASE_RANGE_MAX 500
|
|
183
|
+
#define OMX_DEESS_RELEASE_RANGE_MIN 5
|
|
184
|
+
#define OMX_DEESS_RELEASE_RANGE_STEP 1
|
|
185
|
+
#define OMX_DEESS_THRESHOLD_RANGE_DEFAULT -30
|
|
186
|
+
#define OMX_DEESS_THRESHOLD_RANGE_MAX 0
|
|
187
|
+
#define OMX_DEESS_THRESHOLD_RANGE_MIN -60
|
|
188
|
+
#define OMX_DEESS_THRESHOLD_RANGE_STEP 0.5f
|
|
189
|
+
#define OMX_DEESS_THRESHOLD_RANGE_STEP_DOUBLE 0.5
|
|
190
|
+
#define OMX_DEESS_WIDTH_RANGE_DEFAULT 1
|
|
191
|
+
#define OMX_DEESS_WIDTH_RANGE_MAX 4
|
|
192
|
+
#define OMX_DEESS_WIDTH_RANGE_MIN 0.25f
|
|
193
|
+
#define OMX_DEESS_WIDTH_RANGE_MIN_DOUBLE 0.25
|
|
194
|
+
#define OMX_DEESS_WIDTH_RANGE_STEP 0.05f
|
|
195
|
+
#define OMX_DEESS_WIDTH_RANGE_STEP_DOUBLE 0.05
|
|
120
196
|
#define OMX_DELAY_MIX_RANGE_BY_KIND_FX_RETURN 1
|
|
121
197
|
#define OMX_DELAY_MIX_RANGE_DEFAULT 0.3f
|
|
122
198
|
#define OMX_DELAY_MIX_RANGE_DEFAULT_DOUBLE 0.3
|
|
@@ -128,13 +204,78 @@
|
|
|
128
204
|
#define OMX_DELAY_TONE_RANGE_MAX 1
|
|
129
205
|
#define OMX_DELAY_TONE_RANGE_MIN 0
|
|
130
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
|
|
131
216
|
#define OMX_DRIVE_BIAS_MAX 0.7071067811865476f
|
|
132
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
|
|
133
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
|
|
134
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
|
|
135
251
|
#define OMX_FDELAY_MOD_READ_ORDER 3
|
|
136
252
|
#define OMX_FDELAY_READ_L1_NORM 1.25f
|
|
137
253
|
#define OMX_FDELAY_READ_L1_NORM_DOUBLE 1.25
|
|
254
|
+
#define OMX_FLANGER_DEPTH_RANGE_DEFAULT 2
|
|
255
|
+
#define OMX_FLANGER_DEPTH_RANGE_MAX 5
|
|
256
|
+
#define OMX_FLANGER_DEPTH_RANGE_MIN 0
|
|
257
|
+
#define OMX_FLANGER_DEPTH_RANGE_STEP 0.1f
|
|
258
|
+
#define OMX_FLANGER_DEPTH_RANGE_STEP_DOUBLE 0.1
|
|
259
|
+
#define OMX_FLANGER_FEEDBACK_RANGE_DEFAULT 0.6f
|
|
260
|
+
#define OMX_FLANGER_FEEDBACK_RANGE_DEFAULT_DOUBLE 0.6
|
|
261
|
+
#define OMX_FLANGER_FEEDBACK_RANGE_MAX 0.95f
|
|
262
|
+
#define OMX_FLANGER_FEEDBACK_RANGE_MAX_DOUBLE 0.95
|
|
263
|
+
#define OMX_FLANGER_FEEDBACK_RANGE_MIN -0.95f
|
|
264
|
+
#define OMX_FLANGER_FEEDBACK_RANGE_MIN_DOUBLE -0.95
|
|
265
|
+
#define OMX_FLANGER_FEEDBACK_RANGE_STEP 0.01f
|
|
266
|
+
#define OMX_FLANGER_FEEDBACK_RANGE_STEP_DOUBLE 0.01
|
|
267
|
+
#define OMX_FLANGER_MIX_RANGE_DEFAULT 50
|
|
268
|
+
#define OMX_FLANGER_MIX_RANGE_MAX 100
|
|
269
|
+
#define OMX_FLANGER_MIX_RANGE_MIN 0
|
|
270
|
+
#define OMX_FLANGER_MIX_RANGE_STEP 0.1f
|
|
271
|
+
#define OMX_FLANGER_MIX_RANGE_STEP_DOUBLE 0.1
|
|
272
|
+
#define OMX_FLANGER_RATE_RANGE_DEFAULT 0.25f
|
|
273
|
+
#define OMX_FLANGER_RATE_RANGE_DEFAULT_DOUBLE 0.25
|
|
274
|
+
#define OMX_FLANGER_RATE_RANGE_MAX 5
|
|
275
|
+
#define OMX_FLANGER_RATE_RANGE_MIN 0.05f
|
|
276
|
+
#define OMX_FLANGER_RATE_RANGE_MIN_DOUBLE 0.05
|
|
277
|
+
#define OMX_FLANGER_RATE_RANGE_STEP 0.01f
|
|
278
|
+
#define OMX_FLANGER_RATE_RANGE_STEP_DOUBLE 0.01
|
|
138
279
|
#define OMX_FX_DELAY_FEEDBACK_RANGE_DEFAULT 0.3f
|
|
139
280
|
#define OMX_FX_DELAY_FEEDBACK_RANGE_DEFAULT_DOUBLE 0.3
|
|
140
281
|
#define OMX_FX_DELAY_FEEDBACK_RANGE_MAX 0.99f
|
|
@@ -146,6 +287,57 @@
|
|
|
146
287
|
#define OMX_FX_DELAY_TIME_RANGE_MIN 0
|
|
147
288
|
#define OMX_FX_DELAY_TIME_RANGE_STEP 1
|
|
148
289
|
#define OMX_GEQ_BANDS 31
|
|
290
|
+
#define OMX_GEQ_BAND_Q 4.3f
|
|
291
|
+
#define OMX_GEQ_BAND_Q_DOUBLE 4.3
|
|
292
|
+
#define OMX_GEQ_BAND_RANGE_DEFAULT 0
|
|
293
|
+
#define OMX_GEQ_BAND_RANGE_MAX 15
|
|
294
|
+
#define OMX_GEQ_BAND_RANGE_MIN -15
|
|
295
|
+
#define OMX_GEQ_BAND_RANGE_STEP 0.5f
|
|
296
|
+
#define OMX_GEQ_BAND_RANGE_STEP_DOUBLE 0.5
|
|
297
|
+
#define OMX_GEQ_DESIGN_GAIN_MAX_DB 30
|
|
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
|
|
308
|
+
#define OMX_PHASER_BASE_RANGE_DEFAULT 200
|
|
309
|
+
#define OMX_PHASER_BASE_RANGE_MAX 2000
|
|
310
|
+
#define OMX_PHASER_BASE_RANGE_MIN 50
|
|
311
|
+
#define OMX_PHASER_BASE_RANGE_STEP 1
|
|
312
|
+
#define OMX_PHASER_DEPTH_RANGE_DEFAULT 4
|
|
313
|
+
#define OMX_PHASER_DEPTH_RANGE_MAX 6
|
|
314
|
+
#define OMX_PHASER_DEPTH_RANGE_MIN 0
|
|
315
|
+
#define OMX_PHASER_DEPTH_RANGE_STEP 0.1f
|
|
316
|
+
#define OMX_PHASER_DEPTH_RANGE_STEP_DOUBLE 0.1
|
|
317
|
+
#define OMX_PHASER_FEEDBACK_RANGE_DEFAULT 0.4f
|
|
318
|
+
#define OMX_PHASER_FEEDBACK_RANGE_DEFAULT_DOUBLE 0.4
|
|
319
|
+
#define OMX_PHASER_FEEDBACK_RANGE_MAX 0.9f
|
|
320
|
+
#define OMX_PHASER_FEEDBACK_RANGE_MAX_DOUBLE 0.9
|
|
321
|
+
#define OMX_PHASER_FEEDBACK_RANGE_MIN -0.9f
|
|
322
|
+
#define OMX_PHASER_FEEDBACK_RANGE_MIN_DOUBLE -0.9
|
|
323
|
+
#define OMX_PHASER_FEEDBACK_RANGE_STEP 0.01f
|
|
324
|
+
#define OMX_PHASER_FEEDBACK_RANGE_STEP_DOUBLE 0.01
|
|
325
|
+
#define OMX_PHASER_MIX_RANGE_DEFAULT 50
|
|
326
|
+
#define OMX_PHASER_MIX_RANGE_MAX 100
|
|
327
|
+
#define OMX_PHASER_MIX_RANGE_MIN 0
|
|
328
|
+
#define OMX_PHASER_MIX_RANGE_STEP 0.1f
|
|
329
|
+
#define OMX_PHASER_MIX_RANGE_STEP_DOUBLE 0.1
|
|
330
|
+
#define OMX_PHASER_RATE_RANGE_DEFAULT 0.5f
|
|
331
|
+
#define OMX_PHASER_RATE_RANGE_DEFAULT_DOUBLE 0.5
|
|
332
|
+
#define OMX_PHASER_RATE_RANGE_MAX 5
|
|
333
|
+
#define OMX_PHASER_RATE_RANGE_MIN 0.05f
|
|
334
|
+
#define OMX_PHASER_RATE_RANGE_MIN_DOUBLE 0.05
|
|
335
|
+
#define OMX_PHASER_RATE_RANGE_STEP 0.01f
|
|
336
|
+
#define OMX_PHASER_RATE_RANGE_STEP_DOUBLE 0.01
|
|
337
|
+
#define OMX_PHASER_STAGES_RANGE_DEFAULT 6
|
|
338
|
+
#define OMX_PHASER_STAGES_RANGE_MAX 12
|
|
339
|
+
#define OMX_PHASER_STAGES_RANGE_MIN 2
|
|
340
|
+
#define OMX_PHASER_STAGES_RANGE_STEP 2
|
|
149
341
|
#define OMX_PITCH_PREFILTER_CEILING_HZ 20000
|
|
150
342
|
#define OMX_PITCH_PREFILTER_Q 0.7071067811865476f
|
|
151
343
|
#define OMX_PITCH_PREFILTER_Q_DOUBLE 0.7071067811865476
|
|
@@ -157,10 +349,117 @@
|
|
|
157
349
|
#define OMX_PROGRAM_RELEASE_PROFILES_OPTO_SHARE_DOUBLE 0.5
|
|
158
350
|
#define OMX_PROGRAM_RELEASE_PROFILES_OPTO_SLOW_MAX_MS 1100
|
|
159
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
|
|
160
379
|
#define OMX_REVERB_PLATE_MOD_DEPTH_RANGE_DEFAULT 100
|
|
161
380
|
#define OMX_REVERB_PLATE_MOD_DEPTH_RANGE_MAX 400
|
|
162
381
|
#define OMX_REVERB_PLATE_MOD_DEPTH_RANGE_MIN 0
|
|
163
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
|
|
404
|
+
#define OMX_ROTARY_ACCEL_RANGE_DEFAULT 1
|
|
405
|
+
#define OMX_ROTARY_ACCEL_RANGE_MAX 4
|
|
406
|
+
#define OMX_ROTARY_ACCEL_RANGE_MIN 0.25f
|
|
407
|
+
#define OMX_ROTARY_ACCEL_RANGE_MIN_DOUBLE 0.25
|
|
408
|
+
#define OMX_ROTARY_ACCEL_RANGE_STEP 0.01f
|
|
409
|
+
#define OMX_ROTARY_ACCEL_RANGE_STEP_DOUBLE 0.01
|
|
410
|
+
#define OMX_ROTARY_BALANCE_RANGE_DEFAULT 0
|
|
411
|
+
#define OMX_ROTARY_BALANCE_RANGE_MAX 100
|
|
412
|
+
#define OMX_ROTARY_BALANCE_RANGE_MIN -100
|
|
413
|
+
#define OMX_ROTARY_BALANCE_RANGE_STEP 1
|
|
414
|
+
#define OMX_ROTARY_BASE_MS 0.1f
|
|
415
|
+
#define OMX_ROTARY_BASE_MS_DOUBLE 0.1
|
|
416
|
+
#define OMX_ROTARY_CROSSOVER_HZ 800
|
|
417
|
+
#define OMX_ROTARY_DRUM_ACCEL_MS 1700
|
|
418
|
+
#define OMX_ROTARY_DRUM_AM 0.3f
|
|
419
|
+
#define OMX_ROTARY_DRUM_AM_DOUBLE 0.3
|
|
420
|
+
#define OMX_ROTARY_DRUM_DECEL_MS 1800
|
|
421
|
+
#define OMX_ROTARY_DRUM_DOPPLER_MS 0.29f
|
|
422
|
+
#define OMX_ROTARY_DRUM_DOPPLER_MS_DOUBLE 0.29
|
|
423
|
+
#define OMX_ROTARY_DRUM_FAST_RANGE_DEFAULT 5.9f
|
|
424
|
+
#define OMX_ROTARY_DRUM_FAST_RANGE_DEFAULT_DOUBLE 5.9
|
|
425
|
+
#define OMX_ROTARY_DRUM_FAST_RANGE_MAX 10
|
|
426
|
+
#define OMX_ROTARY_DRUM_FAST_RANGE_MIN 3
|
|
427
|
+
#define OMX_ROTARY_DRUM_FAST_RANGE_STEP 0.01f
|
|
428
|
+
#define OMX_ROTARY_DRUM_FAST_RANGE_STEP_DOUBLE 0.01
|
|
429
|
+
#define OMX_ROTARY_DRUM_SLOW_RANGE_DEFAULT 0.7f
|
|
430
|
+
#define OMX_ROTARY_DRUM_SLOW_RANGE_DEFAULT_DOUBLE 0.7
|
|
431
|
+
#define OMX_ROTARY_DRUM_SLOW_RANGE_MAX 2
|
|
432
|
+
#define OMX_ROTARY_DRUM_SLOW_RANGE_MIN 0.1f
|
|
433
|
+
#define OMX_ROTARY_DRUM_SLOW_RANGE_MIN_DOUBLE 0.1
|
|
434
|
+
#define OMX_ROTARY_DRUM_SLOW_RANGE_STEP 0.01f
|
|
435
|
+
#define OMX_ROTARY_DRUM_SLOW_RANGE_STEP_DOUBLE 0.01
|
|
436
|
+
#define OMX_ROTARY_HORN_ACCEL_MS 330
|
|
437
|
+
#define OMX_ROTARY_HORN_AM 0.5f
|
|
438
|
+
#define OMX_ROTARY_HORN_AM_DOUBLE 0.5
|
|
439
|
+
#define OMX_ROTARY_HORN_DECEL_MS 500
|
|
440
|
+
#define OMX_ROTARY_HORN_DOPPLER_MS 0.44f
|
|
441
|
+
#define OMX_ROTARY_HORN_DOPPLER_MS_DOUBLE 0.44
|
|
442
|
+
#define OMX_ROTARY_HORN_FAST_RANGE_DEFAULT 6.8f
|
|
443
|
+
#define OMX_ROTARY_HORN_FAST_RANGE_DEFAULT_DOUBLE 6.8
|
|
444
|
+
#define OMX_ROTARY_HORN_FAST_RANGE_MAX 10
|
|
445
|
+
#define OMX_ROTARY_HORN_FAST_RANGE_MIN 3
|
|
446
|
+
#define OMX_ROTARY_HORN_FAST_RANGE_STEP 0.01f
|
|
447
|
+
#define OMX_ROTARY_HORN_FAST_RANGE_STEP_DOUBLE 0.01
|
|
448
|
+
#define OMX_ROTARY_HORN_SLOW_RANGE_DEFAULT 0.8f
|
|
449
|
+
#define OMX_ROTARY_HORN_SLOW_RANGE_DEFAULT_DOUBLE 0.8
|
|
450
|
+
#define OMX_ROTARY_HORN_SLOW_RANGE_MAX 2
|
|
451
|
+
#define OMX_ROTARY_HORN_SLOW_RANGE_MIN 0.1f
|
|
452
|
+
#define OMX_ROTARY_HORN_SLOW_RANGE_MIN_DOUBLE 0.1
|
|
453
|
+
#define OMX_ROTARY_HORN_SLOW_RANGE_STEP 0.01f
|
|
454
|
+
#define OMX_ROTARY_HORN_SLOW_RANGE_STEP_DOUBLE 0.01
|
|
455
|
+
#define OMX_ROTARY_MIX_RANGE_DEFAULT 100
|
|
456
|
+
#define OMX_ROTARY_MIX_RANGE_MAX 100
|
|
457
|
+
#define OMX_ROTARY_MIX_RANGE_MIN 0
|
|
458
|
+
#define OMX_ROTARY_MIX_RANGE_STEP 0.1f
|
|
459
|
+
#define OMX_ROTARY_MIX_RANGE_STEP_DOUBLE 0.1
|
|
460
|
+
#define OMX_ROTARY_RING_FLOATS 256
|
|
461
|
+
#define OMX_ROTARY_STOP_EPS 0.0001f
|
|
462
|
+
#define OMX_ROTARY_STOP_EPS_DOUBLE 0.0001
|
|
164
463
|
#define OMX_RT_HARD_TARGET_QUANTUM 128
|
|
165
464
|
#define OMX_RT_HARD_TARGET_RATE 192000
|
|
166
465
|
#define OMX_TRANSIENT_FAST_ATTACK_MS 0.5f
|
|
@@ -169,6 +468,22 @@
|
|
|
169
468
|
#define OMX_TRANSIENT_FLOOR_LIN 0.00001f
|
|
170
469
|
#define OMX_TRANSIENT_FLOOR_LIN_DOUBLE 0.00001
|
|
171
470
|
#define OMX_TRANSIENT_REF_DB 6
|
|
471
|
+
#define OMX_TREMOLO_DEPTH_RANGE_DEFAULT 50
|
|
472
|
+
#define OMX_TREMOLO_DEPTH_RANGE_MAX 100
|
|
473
|
+
#define OMX_TREMOLO_DEPTH_RANGE_MIN 0
|
|
474
|
+
#define OMX_TREMOLO_DEPTH_RANGE_STEP 0.1f
|
|
475
|
+
#define OMX_TREMOLO_DEPTH_RANGE_STEP_DOUBLE 0.1
|
|
476
|
+
#define OMX_TREMOLO_MIX_RANGE_DEFAULT 100
|
|
477
|
+
#define OMX_TREMOLO_MIX_RANGE_MAX 100
|
|
478
|
+
#define OMX_TREMOLO_MIX_RANGE_MIN 0
|
|
479
|
+
#define OMX_TREMOLO_MIX_RANGE_STEP 0.1f
|
|
480
|
+
#define OMX_TREMOLO_MIX_RANGE_STEP_DOUBLE 0.1
|
|
481
|
+
#define OMX_TREMOLO_RATE_RANGE_DEFAULT 4
|
|
482
|
+
#define OMX_TREMOLO_RATE_RANGE_MAX 20
|
|
483
|
+
#define OMX_TREMOLO_RATE_RANGE_MIN 0.1f
|
|
484
|
+
#define OMX_TREMOLO_RATE_RANGE_MIN_DOUBLE 0.1
|
|
485
|
+
#define OMX_TREMOLO_RATE_RANGE_STEP 0.01f
|
|
486
|
+
#define OMX_TREMOLO_RATE_RANGE_STEP_DOUBLE 0.01
|
|
172
487
|
#define OMX_XOVER_LR2_SECTION_Q 0.5f
|
|
173
488
|
#define OMX_XOVER_LR2_SECTION_Q_DOUBLE 0.5
|
|
174
489
|
#define OMX_XOVER_LR4_SECTION_Q 0.7071067811865476f
|
|
@@ -177,6 +492,8 @@
|
|
|
177
492
|
#define OMX_XOVER_PARTITION_TOLERANCE_DOUBLE 0.00001
|
|
178
493
|
|
|
179
494
|
/* Every list rendered to C, sorted by list: OMX_<LIST>_COUNT and OMX_<LIST>_INIT { a, b, … }. */
|
|
495
|
+
#define OMX_PHASER_STAGE_COUNTS_COUNT 6u
|
|
496
|
+
#define OMX_PHASER_STAGE_COUNTS_INIT { 2, 4, 6, 8, 10, 12 }
|
|
180
497
|
#define OMX_STANDARD_SAMPLE_RATES_COUNT 6u
|
|
181
498
|
#define OMX_STANDARD_SAMPLE_RATES_INIT { 44100, 48000, 88200, 96000, 176400, 192000 }
|
|
182
499
|
|
package/lib/data.mjs
CHANGED
|
@@ -50,7 +50,6 @@ export function rawValue(item) {
|
|
|
50
50
|
case 'travels': return item.fields ?? item.travel;
|
|
51
51
|
case 'sheet': return item.value;
|
|
52
52
|
case 'list': return item.values;
|
|
53
|
-
case 'plugin': return item.params;
|
|
54
53
|
default: return undefined;
|
|
55
54
|
}
|
|
56
55
|
}
|
|
@@ -106,8 +105,7 @@ const isObj = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
|
106
105
|
|
|
107
106
|
/**
|
|
108
107
|
* Resolve every item: `{ name, rel, kind, doc, why?, unit?, c?, shape?, value }`, where `value` has
|
|
109
|
-
* every `{ref}` and `{derive}` evaluated.
|
|
110
|
-
* items they read.
|
|
108
|
+
* every `{ref}` and `{derive}` evaluated.
|
|
111
109
|
* @throws naming the item: a reference that does not resolve, a cycle, an unknown derivation.
|
|
112
110
|
*/
|
|
113
111
|
export function resolveData(data) {
|
|
@@ -145,32 +143,11 @@ export function resolveData(data) {
|
|
|
145
143
|
if (item.unit !== undefined) r.unit = item.unit;
|
|
146
144
|
if (item.c !== undefined) r.c = item.c;
|
|
147
145
|
if (item.kind === 'travels') r.shape = item.fields ? 'table' : 'travel';
|
|
148
|
-
|
|
149
|
-
for (const k of ['plugin', 'header', 'prefix', 'source']) r[k] = item[k];
|
|
150
|
-
r.value = item.params.map((p) => resolveParam(name, p));
|
|
151
|
-
} else {
|
|
152
|
-
r.value = val(rawValue(item), name);
|
|
153
|
-
}
|
|
146
|
+
r.value = val(rawValue(item), name);
|
|
154
147
|
busy.delete(name);
|
|
155
148
|
done.set(name, r);
|
|
156
149
|
return r;
|
|
157
150
|
}
|
|
158
|
-
function resolveParam(plugin, p) {
|
|
159
|
-
const from = `${plugin}.${p.symbol}`;
|
|
160
|
-
const read = lookup(p.from, from);
|
|
161
|
-
const toggle = (p.flags ?? []).includes('toggle');
|
|
162
|
-
if (toggle) {
|
|
163
|
-
if (typeof read !== 'boolean') throw new Error(`${from}: a toggle reads a boolean, ${p.from} is ${JSON.stringify(read)}`);
|
|
164
|
-
return { symbol: p.symbol, min: 0, max: 1, def: read ? 1 : 0, step: 1, unit: '', toggle: true };
|
|
165
|
-
}
|
|
166
|
-
if (!isObj(read)) throw new Error(`${from}: ${p.from} is not a travel`);
|
|
167
|
-
let def = read.default;
|
|
168
|
-
if (p.forKind !== undefined) def = read.byKind?.[p.forKind] ?? read.default;
|
|
169
|
-
for (const [k, v] of [['min', read.min], ['max', read.max], ['default', def], ['step', read.step], ['unit', read.unit]]) {
|
|
170
|
-
if (v === undefined) throw new Error(`${from}: ${p.from} declares no ${k}`);
|
|
171
|
-
}
|
|
172
|
-
return { symbol: p.symbol, min: read.min, max: read.max, def, step: read.step, unit: read.unit, toggle: false };
|
|
173
|
-
}
|
|
174
151
|
const out = new Map();
|
|
175
152
|
for (const name of data.items.keys()) out.set(name, resolveItem(name));
|
|
176
153
|
return out;
|
package/lib/fmt.mjs
CHANGED
|
@@ -7,9 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
const ORDER = {
|
|
10
|
-
item: ['kind', 'doc', 'why', 'unit', '
|
|
10
|
+
item: ['kind', 'doc', 'why', 'unit', 'value', 'values', 'fields', 'travel', 'c'],
|
|
11
11
|
travel: ['min', 'max', 'step', 'unit', 'default', 'defaultFrom', 'byKind', 'doc', 'why'],
|
|
12
|
-
param: ['symbol', 'from', 'forKind', 'flags', 'scale', 'since', 'doc'],
|
|
13
12
|
c: ['alias', 'render'],
|
|
14
13
|
alias: ['fact', 'field'],
|
|
15
14
|
number: ['ref', 'derive', 'of', 'order'],
|
|
@@ -46,7 +45,6 @@ function item(it) {
|
|
|
46
45
|
if ('value' in o) o.value = o.kind === 'sheet' ? sheet(o.value) : number(o.value);
|
|
47
46
|
if (isObj(o.fields)) o.fields = Object.fromEntries(Object.entries(o.fields).map(([k, t]) => [k, isObj(t) ? travel(t) : t]));
|
|
48
47
|
if (isObj(o.travel)) o.travel = travel(o.travel);
|
|
49
|
-
if (Array.isArray(o.params)) o.params = o.params.map((p) => (isObj(p) ? ordered(p, ORDER.param) : p));
|
|
50
48
|
if (isObj(o.c)) {
|
|
51
49
|
o.c = ordered(o.c, ORDER.c);
|
|
52
50
|
if (isObj(o.c.alias)) o.c.alias = ordered(o.c.alias, ORDER.alias);
|
package/lib/semver.mjs
CHANGED
|
@@ -4,16 +4,24 @@
|
|
|
4
4
|
* `omx-contract semver`: classify every change between two resolved declarations (spec §3.6) and
|
|
5
5
|
* refuse a version whose bump is shorter than the largest class found.
|
|
6
6
|
*
|
|
7
|
-
* major
|
|
8
|
-
*
|
|
7
|
+
* major a field or alias removed; an item removed (MINOR in the development phase, below); a
|
|
8
|
+
* unit or kind changed; a travel narrowed; a constant a kernel computes with changed (a
|
|
9
9
|
* scalar, sheet leaf or derived value that is not a travel bound or default; a list member
|
|
10
10
|
* changed or removed)
|
|
11
|
-
* minor an item, field, sheet leaf
|
|
11
|
+
* minor an item, field, sheet leaf or list member added (appended); a travel widened;
|
|
12
12
|
* a default moved inside its travel; a step changed
|
|
13
13
|
* patch doc and why text
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
const RANK = { none: 0, patch: 1, minor: 2, major: 3 };
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The development-phase rule (openmixer spec 2026-10-05-omx-contract §3.6): while every consumer of
|
|
20
|
+
* omx-contract is a FreeMixer repository named here, removing an item is MINOR. The rule ends, and
|
|
21
|
+
* this becomes null so a removal is MAJOR again, in the release that names the first consumer
|
|
22
|
+
* outside the list.
|
|
23
|
+
*/
|
|
24
|
+
export const DEVELOPMENT_PHASE = Object.freeze({ consumers: Object.freeze(['omx-dsp', 'omx-plugins', 'openmixer']) });
|
|
17
25
|
const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
18
26
|
|
|
19
27
|
function travelChanges(at, a, b, say) {
|
|
@@ -47,12 +55,16 @@ function leafChanges(at, a, b, say) {
|
|
|
47
55
|
}
|
|
48
56
|
|
|
49
57
|
/** `{ level, changes: [{ level, item, what }] }` from `prev` to `next` (Maps name -> resolved item). */
|
|
50
|
-
export function classify(prev, next) {
|
|
58
|
+
export function classify(prev, next, { developmentPhase = DEVELOPMENT_PHASE } = {}) {
|
|
51
59
|
const changes = [];
|
|
52
60
|
for (const [name, a] of prev) {
|
|
53
61
|
const say = (level, what) => changes.push({ level, item: name, what });
|
|
54
62
|
const b = next.get(name);
|
|
55
|
-
if (!b) {
|
|
63
|
+
if (!b) {
|
|
64
|
+
if (developmentPhase) say('minor', `item removed or renamed (MINOR in the development phase: every consumer is ${developmentPhase.consumers.join(', ')})`);
|
|
65
|
+
else say('major', 'item removed or renamed');
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
56
68
|
if (a.kind !== b.kind || (a.shape ?? '') !== (b.shape ?? '')) { say('major', `kind ${a.kind} -> ${b.kind}`); continue; }
|
|
57
69
|
if ((a.unit ?? '') !== (b.unit ?? '')) say('major', `unit ${JSON.stringify(a.unit)} -> ${JSON.stringify(b.unit)}`);
|
|
58
70
|
if (a.doc !== b.doc || (a.why ?? '') !== (b.why ?? '')) say('patch', 'doc');
|
|
@@ -80,17 +92,6 @@ export function classify(prev, next) {
|
|
|
80
92
|
});
|
|
81
93
|
if (b.value.length > a.value.length) say('minor', `${name}: ${b.value.length - a.value.length} member(s) appended`);
|
|
82
94
|
break;
|
|
83
|
-
case 'plugin':
|
|
84
|
-
for (const k of ['plugin', 'header', 'prefix']) if (a[k] !== b[k]) say('major', `${k} ${a[k]} -> ${b[k]}`);
|
|
85
|
-
if (a.source !== b.source) say('patch', 'source text');
|
|
86
|
-
a.value.forEach((p, i) => {
|
|
87
|
-
const q = b.value[i];
|
|
88
|
-
if (!q) say('major', `parameter ${p.symbol} removed`);
|
|
89
|
-
else if (q.symbol !== p.symbol) say('major', `parameter ${i} ${p.symbol} -> ${q.symbol} (reordered or renamed)`);
|
|
90
|
-
else if (!same(p, q)) say(p.min < q.min || p.max > q.max || p.unit !== q.unit || p.toggle !== q.toggle ? 'major' : 'minor', `parameter ${p.symbol} changed`);
|
|
91
|
-
});
|
|
92
|
-
if (b.value.length > a.value.length) say('minor', `${b.value.length - a.value.length} parameter(s) appended`);
|
|
93
|
-
break;
|
|
94
95
|
default:
|
|
95
96
|
break;
|
|
96
97
|
}
|
package/lib/validate.mjs
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* `omx-contract validate`: the schema, then the checks a schema cannot express (spec §3.3): every
|
|
5
5
|
* reference resolves with no cycle; every default inside its travel; every C name the render spells
|
|
6
|
-
* is unique; an item's `c.alias` names no other item
|
|
7
|
-
* no earlier than the one before it) and read what they say. Each failure names file, item and rule.
|
|
6
|
+
* is unique; an item's `c.alias` names no other item. Each failure names file, item and rule.
|
|
8
7
|
*/
|
|
9
8
|
import { readFileSync } from 'node:fs';
|
|
10
9
|
import { posix } from 'node:path';
|
|
@@ -21,7 +20,6 @@ export function schemaValidator() {
|
|
|
21
20
|
return compiled;
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
const semverKey = (v) => v.split('.').map(Number).reduce((a, n) => a * 1e6 + n, 0);
|
|
25
23
|
const constCase = (s) => s.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();
|
|
26
24
|
|
|
27
25
|
/** Every problem of the loaded data: `[{ file, item, rule, message }]`; empty is valid. */
|
|
@@ -70,19 +68,6 @@ export function validateData(data) {
|
|
|
70
68
|
if (resolved.has(spelled)) say(r.rel, r.name, 'alias', `c.alias spells ${spelled}, which is another item`);
|
|
71
69
|
if (r.shape !== 'travel') say(r.rel, r.name, 'alias', 'c.alias is for a single travel');
|
|
72
70
|
}
|
|
73
|
-
if (r.kind === 'plugin') {
|
|
74
|
-
const raw = data.items.get(r.name).item;
|
|
75
|
-
const symbols = new Set();
|
|
76
|
-
raw.params.forEach((p, i) => {
|
|
77
|
-
if (symbols.has(p.symbol)) say(r.rel, r.name, 'param-unique', `parameter ${p.symbol} declared twice`);
|
|
78
|
-
symbols.add(p.symbol);
|
|
79
|
-
if (i > 0 && semverKey(p.since) < semverKey(raw.params[i - 1].since)) say(r.rel, r.name, 'append-only', `${p.symbol} (since ${p.since}) follows ${raw.params[i - 1].symbol} (since ${raw.params[i - 1].since}): parameters only grow at the end`);
|
|
80
|
-
if (p.forKind !== undefined) {
|
|
81
|
-
const t = resolved.get(p.from.split('.')[0])?.value;
|
|
82
|
-
if (!t?.byKind) say(r.rel, r.name, 'for-kind', `${p.symbol}: ${p.from} declares no byKind`);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
71
|
if (typeof r.doc !== 'string' || !r.doc.trim()) say(r.rel, r.name, 'doc', 'every item carries its doc');
|
|
87
72
|
}
|
|
88
73
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openmixer/omx-contract",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.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",
|
package/render/c.mjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
2
|
// Copyright (C) 2026 Pau Aliagas <linuxnow@gmail.com>
|
|
3
3
|
/**
|
|
4
|
-
* The `c` target: `omxcontract/omx_contract_limits.h
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* c/params-generate.mjs
|
|
4
|
+
* The `c` target: `omxcontract/omx_contract_limits.h`. Every define is spelled by openmixer's
|
|
5
|
+
* renderer, moved unchanged (c/contract-limits-render.mjs); only the frame (banner, section
|
|
6
|
+
* comments) is this repository's. A plugin's parameter header is rendered by omx-plugins from its
|
|
7
|
+
* declaration; c/params-generate.mjs stays here only for renderSheetC, the frozen fixture of the
|
|
8
|
+
* round-trip proof.
|
|
8
9
|
*/
|
|
9
10
|
import { readFileSync } from 'node:fs';
|
|
10
11
|
import {
|
|
@@ -75,20 +76,9 @@ ${sections.map(([body, comment]) => `${comment}\n${body}`).join('\n\n')}
|
|
|
75
76
|
${d.STANDARD_SAMPLE_RATES ? ratesTail(d.STANDARD_SAMPLE_RATES) : ''}`;
|
|
76
77
|
}
|
|
77
78
|
|
|
78
|
-
/** The banner lines of a plugin's params header rendered from the data. */
|
|
79
|
-
const producedBy = (r) => ` * Produced by \`omx-contract render --target c\` from FreeMixer/omx-contract's ${r.rel}
|
|
80
|
-
* (${r.name}): ${r.source}.
|
|
81
|
-
* Change the data, never this file. Order is append-only (omx-contract spec §3.3).`;
|
|
82
|
-
|
|
83
79
|
/** Every file of the `c` target: `[{ path, text }]`, paths relative to the output directory. */
|
|
84
80
|
export function renderC(resolved) {
|
|
85
|
-
|
|
86
|
-
const plugins = doors(resolved).PLUGINS;
|
|
87
|
-
for (const r of plugins) {
|
|
88
|
-
files.push({ path: `omxcontract/params/${r.header}`, text: generate({ header: r.header, prefix: r.prefix, source: r.source, producedBy: producedBy(r) }, r.value) });
|
|
89
|
-
}
|
|
90
|
-
if (plugins.length) files.push({ path: 'omxcontract/params/omx_plugin_param.h', text: PLUGIN_PARAM_H });
|
|
91
|
-
return files;
|
|
81
|
+
return [{ path: 'omxcontract/omx_contract_limits.h', text: renderLimitsHeader(resolved) }];
|
|
92
82
|
}
|
|
93
83
|
|
|
94
84
|
/**
|
package/render/doors.mjs
CHANGED
|
@@ -38,7 +38,7 @@ export function doors(resolved) {
|
|
|
38
38
|
.sort(([a], [b]) => a.localeCompare(b));
|
|
39
39
|
const byMacro = new Map();
|
|
40
40
|
for (const r of items) {
|
|
41
|
-
if (isNativeTable(r) || r.kind === '
|
|
41
|
+
if (isNativeTable(r) || r.kind === 'list') continue;
|
|
42
42
|
const leaves = numberLeaves(r.value, r.name, r.name.replace(/_(KERNEL|LIMITS)$/, ''));
|
|
43
43
|
if (leaves === undefined) continue;
|
|
44
44
|
for (const s of leaves) {
|
|
@@ -58,7 +58,6 @@ export function doors(resolved) {
|
|
|
58
58
|
if (!ALIASES.has(fact)) ALIASES.set(fact, {});
|
|
59
59
|
ALIASES.get(fact)[field] = r.value;
|
|
60
60
|
}
|
|
61
|
-
const PLUGINS = items.filter((r) => r.kind === 'plugin');
|
|
62
61
|
const STANDARD_SAMPLE_RATES = resolved.get('STANDARD_SAMPLE_RATES')?.value;
|
|
63
|
-
return { NATIVE_LIMIT_TABLES, DECLARED_SCALARS, DECLARED_LISTS, ALIASES,
|
|
62
|
+
return { NATIVE_LIMIT_TABLES, DECLARED_SCALARS, DECLARED_LISTS, ALIASES, STANDARD_SAMPLE_RATES };
|
|
64
63
|
}
|
package/render/ts.mjs
CHANGED
|
@@ -7,8 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
/** The value a TypeScript reader sees for one resolved item. */
|
|
9
9
|
export function tsValue(r) {
|
|
10
|
-
|
|
11
|
-
return { plugin: r.plugin, header: r.header, prefix: r.prefix, params: r.value };
|
|
10
|
+
return r.value;
|
|
12
11
|
}
|
|
13
12
|
|
|
14
13
|
/** The literal type of a JSON value, every member readonly. */
|