@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.
@@ -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. A plugin's value is its parameters resolved against the
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
- if (item.kind === 'plugin') {
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', 'plugin', 'header', 'prefix', 'source', 'value', 'values', 'fields', 'travel', 'params', 'c'],
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 an item, field, parameter or alias removed; a unit or kind changed; a travel narrowed; a
8
- * plugin's parameters reordered or changed; a constant a kernel computes with changed (a
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, parameter or list member added (appended); a travel widened;
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) { say('major', 'item removed or renamed'); continue; }
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; a plugin's parameters only grow (each `since`
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.0.0",
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`, one `omxcontract/params/omx_<plugin>_params.h`
5
- * per plugin item and the shape they fill, `omxcontract/params/omx_plugin_param.h`. Every define is
6
- * spelled by openmixer's renderer, moved unchanged (c/contract-limits-render.mjs,
7
- * c/params-generate.mjs); only the frame (banner, section comments) is this repository's.
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
- const files = [{ path: 'omxcontract/omx_contract_limits.h', text: renderLimitsHeader(resolved) }];
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 === 'plugin' || r.kind === 'list') continue;
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, PLUGINS, STANDARD_SAMPLE_RATES };
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
- if (r.kind !== 'plugin') return r.value;
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. */