@openmixer/omx-contract 1.0.0 → 1.1.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 +9 -6
- package/data/kernels/deesser.json +93 -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/rotary.json +186 -0
- package/data/kernels/tremolo.json +54 -0
- package/dist/ts/omx-contract.d.ts +601 -47
- package/dist/ts/omx-contract.js +611 -56
- package/include/omxcontract/omx_contract_limits.h +180 -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 +657 -52
- 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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openmixer/omx-contract",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"items": {
|
|
5
5
|
"CHORUS_SPREAD_RANGE": {
|
|
6
6
|
"rel": "data/kernels/chorus.json",
|
|
@@ -97,6 +97,111 @@
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
},
|
|
100
|
+
"DEESS_FREQ_RANGE": {
|
|
101
|
+
"rel": "data/kernels/deesser.json",
|
|
102
|
+
"kind": "travels",
|
|
103
|
+
"doc": "The detector band's CENTRE, in Hz. Sibilance lives at 5–10 kHz on most voices; 7 kHz with the default width covers 4 950–9 900 Hz, which is where an \"s\" and a \"t\" sit on a close vocal mic. The travel is wider than the come-up on both sides on purpose: a bright female vocal wants the band up near 9 kHz and a chesty male one down at 5, and a surface narrower than the row removes reach the console genuinely has (the same reasoning core's `REVERB_CUT_RANGE` records).",
|
|
104
|
+
"shape": "travel",
|
|
105
|
+
"value": {
|
|
106
|
+
"min": 2000,
|
|
107
|
+
"max": 16000,
|
|
108
|
+
"step": 10,
|
|
109
|
+
"unit": "Hz",
|
|
110
|
+
"default": 7000,
|
|
111
|
+
"defaultFrom": "desk"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"DEESS_WIDTH_RANGE": {
|
|
115
|
+
"rel": "data/kernels/deesser.json",
|
|
116
|
+
"kind": "travels",
|
|
117
|
+
"doc": "The band's WIDTH, in OCTAVES around the centre: the edges are `f / 2^(w/2)` and `f · 2^(w/2)`, which is what makes the centre the geometric middle at every width. Octaves and not a Q, because a Q is a property of one section and this band is TWO (a highpass and a lowpass, `mix_deesser.h`) — an operator asked to dial a Q would be dialling a number neither filter carries. One octave is the classic de-esser band: wide enough for a sibilant that moves with the vowel, narrow enough that a 1 kHz vowel sits 27.8 dB down the skirt.",
|
|
118
|
+
"shape": "travel",
|
|
119
|
+
"value": {
|
|
120
|
+
"min": 0.25,
|
|
121
|
+
"max": 4,
|
|
122
|
+
"step": 0.05,
|
|
123
|
+
"unit": "oct",
|
|
124
|
+
"default": 1,
|
|
125
|
+
"defaultFrom": "desk"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"DEESS_THRESHOLD_RANGE": {
|
|
129
|
+
"rel": "data/kernels/deesser.json",
|
|
130
|
+
"kind": "travels",
|
|
131
|
+
"doc": "Where reduction starts — the level of the BAND, not of the strip, which is why the come-up is so much lower than the compressor's. A vocal peaking −12 dBFS carries roughly −30 dBFS in a one-octave band at 7 kHz on its sibilants and under −40 on its vowels, so −30 sits between the two and the stage opens on an \"s\" and stays shut on an \"ah\".",
|
|
132
|
+
"shape": "travel",
|
|
133
|
+
"value": {
|
|
134
|
+
"min": -60,
|
|
135
|
+
"max": 0,
|
|
136
|
+
"step": 0.5,
|
|
137
|
+
"unit": "dB",
|
|
138
|
+
"default": -30,
|
|
139
|
+
"defaultFrom": "desk"
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"DEESS_RATIO_RANGE": {
|
|
143
|
+
"rel": "data/kernels/deesser.json",
|
|
144
|
+
"kind": "travels",
|
|
145
|
+
"doc": "How hard the band is held once it is over the threshold. 4:1 is the textbook de-esser ratio: firm on the \"s\", short of a limiter.",
|
|
146
|
+
"shape": "travel",
|
|
147
|
+
"value": {
|
|
148
|
+
"min": 1,
|
|
149
|
+
"max": 20,
|
|
150
|
+
"step": 0.1,
|
|
151
|
+
"unit": "",
|
|
152
|
+
"default": 4,
|
|
153
|
+
"defaultFrom": "desk"
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"DEESS_RANGE_RANGE": {
|
|
157
|
+
"rel": "data/kernels/deesser.json",
|
|
158
|
+
"kind": "travels",
|
|
159
|
+
"doc": "The FLOOR on the reduction, in dB and never positive — the deepest cut the stage may reach however loud the sibilant is (`mix_deesser.h`'s clamp, §4c). 12 dB tames a hard sibilant; past that a voice starts to lisp, and a de-esser with NO floor turns a shouted \"s\" into a hole. The ceiling is 0, which switches the reduction off without switching the stage off — a legitimate thing to want while dialling the band in by ear.",
|
|
160
|
+
"shape": "travel",
|
|
161
|
+
"value": {
|
|
162
|
+
"min": -24,
|
|
163
|
+
"max": 0,
|
|
164
|
+
"step": 0.5,
|
|
165
|
+
"unit": "dB",
|
|
166
|
+
"default": -12,
|
|
167
|
+
"defaultFrom": "desk"
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
"DEESS_ATTACK_RANGE": {
|
|
171
|
+
"rel": "data/kernels/deesser.json",
|
|
172
|
+
"kind": "travels",
|
|
173
|
+
"doc": "The detector's ATTACK, in ms. A sibilant's onset is a few milliseconds; 1 ms catches it without the detector chattering on the band's own waveform.",
|
|
174
|
+
"shape": "travel",
|
|
175
|
+
"value": {
|
|
176
|
+
"min": 0.1,
|
|
177
|
+
"max": 50,
|
|
178
|
+
"step": 0.1,
|
|
179
|
+
"unit": "ms",
|
|
180
|
+
"default": 1,
|
|
181
|
+
"defaultFrom": "desk"
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
"DEESS_RELEASE_RANGE": {
|
|
185
|
+
"rel": "data/kernels/deesser.json",
|
|
186
|
+
"kind": "travels",
|
|
187
|
+
"doc": "The detector's RELEASE, in ms. 60 ms is long enough not to modulate inside one \"s\" and short enough to be open again for the next syllable.",
|
|
188
|
+
"shape": "travel",
|
|
189
|
+
"value": {
|
|
190
|
+
"min": 5,
|
|
191
|
+
"max": 500,
|
|
192
|
+
"step": 1,
|
|
193
|
+
"unit": "ms",
|
|
194
|
+
"default": 60,
|
|
195
|
+
"defaultFrom": "desk"
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
"DEESS_KNEE_DB": {
|
|
199
|
+
"rel": "data/kernels/deesser.json",
|
|
200
|
+
"kind": "scalar",
|
|
201
|
+
"doc": "The knee, in dB — a CONSTANT of the stage and not a row field (`2026-09-22-native-deesser-stage.md` §4b): a de-esser without a soft knee latches audibly on the first sibilant of a phrase, and no other value of this number is a de-esser anyone would dial. The controller pushes it to the node and this is the same number; a second spelling would be a picture that disagrees with the audio about where the reduction starts.",
|
|
202
|
+
"unit": "dB",
|
|
203
|
+
"value": 6
|
|
204
|
+
},
|
|
100
205
|
"FX_DELAY_TIME_RANGE": {
|
|
101
206
|
"rel": "data/kernels/delay.json",
|
|
102
207
|
"kind": "travels",
|
|
@@ -232,6 +337,62 @@
|
|
|
232
337
|
"unit": "",
|
|
233
338
|
"value": 31
|
|
234
339
|
},
|
|
340
|
+
"FLANGER_RATE_RANGE": {
|
|
341
|
+
"rel": "data/kernels/flanger.json",
|
|
342
|
+
"kind": "travels",
|
|
343
|
+
"doc": "The flanger's jet sweep (§3b).",
|
|
344
|
+
"shape": "travel",
|
|
345
|
+
"value": {
|
|
346
|
+
"min": 0.05,
|
|
347
|
+
"max": 5,
|
|
348
|
+
"step": 0.01,
|
|
349
|
+
"unit": "Hz",
|
|
350
|
+
"default": 0.25,
|
|
351
|
+
"defaultFrom": "desk"
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
"FLANGER_DEPTH_RANGE": {
|
|
355
|
+
"rel": "data/kernels/flanger.json",
|
|
356
|
+
"kind": "travels",
|
|
357
|
+
"doc": "The flanger's peak-to-peak excursion above its declared 0.5 ms base (§3b).",
|
|
358
|
+
"shape": "travel",
|
|
359
|
+
"value": {
|
|
360
|
+
"min": 0,
|
|
361
|
+
"max": 5,
|
|
362
|
+
"step": 0.1,
|
|
363
|
+
"unit": "ms",
|
|
364
|
+
"default": 2,
|
|
365
|
+
"defaultFrom": "desk"
|
|
366
|
+
}
|
|
367
|
+
},
|
|
368
|
+
"FLANGER_FEEDBACK_RANGE": {
|
|
369
|
+
"rel": "data/kernels/flanger.json",
|
|
370
|
+
"kind": "travels",
|
|
371
|
+
"doc": "The flanger's SIGNED resonance (§3b). The ±0.95 clamp is DECLARED here — a PATCH asking for 1.0 is answered by this travel — and the kernel's own clamp is the enforcement half.",
|
|
372
|
+
"shape": "travel",
|
|
373
|
+
"value": {
|
|
374
|
+
"min": -0.95,
|
|
375
|
+
"max": 0.95,
|
|
376
|
+
"step": 0.01,
|
|
377
|
+
"unit": "",
|
|
378
|
+
"default": 0.6,
|
|
379
|
+
"defaultFrom": "desk"
|
|
380
|
+
}
|
|
381
|
+
},
|
|
382
|
+
"FLANGER_MIX_RANGE": {
|
|
383
|
+
"rel": "data/kernels/flanger.json",
|
|
384
|
+
"kind": "travels",
|
|
385
|
+
"doc": "The flanger's wet/dry, as an instance of DRIVE_MIX_RANGE: 50 %, equal dry and wet, where the comb is deepest (§3b).",
|
|
386
|
+
"shape": "travel",
|
|
387
|
+
"value": {
|
|
388
|
+
"min": 0,
|
|
389
|
+
"max": 100,
|
|
390
|
+
"step": 0.1,
|
|
391
|
+
"unit": "%",
|
|
392
|
+
"default": 50,
|
|
393
|
+
"defaultFrom": "desk"
|
|
394
|
+
}
|
|
395
|
+
},
|
|
235
396
|
"GATE_LIMITS": {
|
|
236
397
|
"rel": "data/kernels/gate.json",
|
|
237
398
|
"kind": "travels",
|
|
@@ -312,6 +473,41 @@
|
|
|
312
473
|
}
|
|
313
474
|
}
|
|
314
475
|
},
|
|
476
|
+
"GEQ_BAND_RANGE": {
|
|
477
|
+
"rel": "data/kernels/geq.json",
|
|
478
|
+
"kind": "travels",
|
|
479
|
+
"doc": "One graphic-EQ fader's travel: EQ_GAIN_RANGE by reference (a graphic fader is an EQ gain), with the come-up value it needs as a row field — flat, 0 dB (graphic-eq-31 spec §3).",
|
|
480
|
+
"shape": "travel",
|
|
481
|
+
"value": {
|
|
482
|
+
"min": -15,
|
|
483
|
+
"max": 15,
|
|
484
|
+
"step": 0.5,
|
|
485
|
+
"unit": "dB",
|
|
486
|
+
"default": 0,
|
|
487
|
+
"defaultFrom": "desk"
|
|
488
|
+
}
|
|
489
|
+
},
|
|
490
|
+
"GEQ_BAND_Q": {
|
|
491
|
+
"rel": "data/kernels/geq.json",
|
|
492
|
+
"kind": "scalar",
|
|
493
|
+
"doc": "The graphic EQ's band Q: the ISO third-octave bandwidth, `2^(1/6)/(2^(1/3) − 1) ≈ 4.318`, to one decimal as the M32 GEQ carries it. Read by the `geq31` preset and the graphic EQ's section design (graphic-eq-31 spec §3).",
|
|
494
|
+
"unit": "",
|
|
495
|
+
"value": 4.3
|
|
496
|
+
},
|
|
497
|
+
"GEQ_PROTO_DB": {
|
|
498
|
+
"rel": "data/kernels/geq.json",
|
|
499
|
+
"kind": "scalar",
|
|
500
|
+
"doc": "The prototype gain the `true` solve's first interaction matrix is evaluated at (spec §2, §3): the middle of the travel's magnitude, where a matched-Z section's dB response per dB of gain is closest to its average.",
|
|
501
|
+
"unit": "dB",
|
|
502
|
+
"value": 12
|
|
503
|
+
},
|
|
504
|
+
"GEQ_DESIGN_GAIN_MAX_DB": {
|
|
505
|
+
"rel": "data/kernels/geq.json",
|
|
506
|
+
"kind": "scalar",
|
|
507
|
+
"doc": "The ceiling on a section gain the `true` solve may ask for (spec §3): above the travel's worst case (26.0 dB, the alternating ±15 set) with margin. A solve past it clamps and the row says so (`designClamped`), never silently.",
|
|
508
|
+
"unit": "dB",
|
|
509
|
+
"value": 30
|
|
510
|
+
},
|
|
315
511
|
"LIMITER_LIMITS": {
|
|
316
512
|
"rel": "data/kernels/limiter.json",
|
|
317
513
|
"kind": "travels",
|
|
@@ -344,6 +540,152 @@
|
|
|
344
540
|
}
|
|
345
541
|
}
|
|
346
542
|
},
|
|
543
|
+
"PHASER_RATE_RANGE": {
|
|
544
|
+
"rel": "data/kernels/phaser.json",
|
|
545
|
+
"kind": "travels",
|
|
546
|
+
"doc": "The phaser's sweep speed (§3). `omx_lfo_inc` freezes at Nyquist; this travel stays far below.",
|
|
547
|
+
"shape": "travel",
|
|
548
|
+
"value": {
|
|
549
|
+
"min": 0.05,
|
|
550
|
+
"max": 5,
|
|
551
|
+
"step": 0.01,
|
|
552
|
+
"unit": "Hz",
|
|
553
|
+
"default": 0.5,
|
|
554
|
+
"defaultFrom": "desk"
|
|
555
|
+
}
|
|
556
|
+
},
|
|
557
|
+
"PHASER_BASE_RANGE": {
|
|
558
|
+
"rel": "data/kernels/phaser.json",
|
|
559
|
+
"kind": "travels",
|
|
560
|
+
"doc": "The phaser's lowest centre frequency; the sweep runs upward from it (§3).",
|
|
561
|
+
"shape": "travel",
|
|
562
|
+
"value": {
|
|
563
|
+
"min": 50,
|
|
564
|
+
"max": 2000,
|
|
565
|
+
"step": 1,
|
|
566
|
+
"unit": "Hz",
|
|
567
|
+
"default": 200,
|
|
568
|
+
"defaultFrom": "desk"
|
|
569
|
+
}
|
|
570
|
+
},
|
|
571
|
+
"PHASER_DEPTH_RANGE": {
|
|
572
|
+
"rel": "data/kernels/phaser.json",
|
|
573
|
+
"kind": "travels",
|
|
574
|
+
"doc": "The sweep's span above `base`, in octaves; 0 is a static phaser at `base` (§3).",
|
|
575
|
+
"shape": "travel",
|
|
576
|
+
"value": {
|
|
577
|
+
"min": 0,
|
|
578
|
+
"max": 6,
|
|
579
|
+
"step": 0.1,
|
|
580
|
+
"unit": "oct",
|
|
581
|
+
"default": 4,
|
|
582
|
+
"defaultFrom": "desk"
|
|
583
|
+
}
|
|
584
|
+
},
|
|
585
|
+
"PHASER_STAGES_RANGE": {
|
|
586
|
+
"rel": "data/kernels/phaser.json",
|
|
587
|
+
"kind": "travels",
|
|
588
|
+
"doc": "The phaser's section count per leg — EVEN, 2 … 12 (§2: two sections per notch). Its ends are the kernel's state capacity (`OMX_PHASER_MAX_STAGES` reads `OMX_PHASER_STAGES_RANGE_MAX`); the row moves it through the closed member set PHASER_STAGE_COUNTS, which is derived from it.",
|
|
589
|
+
"shape": "travel",
|
|
590
|
+
"value": {
|
|
591
|
+
"min": 2,
|
|
592
|
+
"max": 12,
|
|
593
|
+
"step": 2,
|
|
594
|
+
"unit": "",
|
|
595
|
+
"default": 6,
|
|
596
|
+
"defaultFrom": "desk"
|
|
597
|
+
}
|
|
598
|
+
},
|
|
599
|
+
"PHASER_STAGE_COUNTS": {
|
|
600
|
+
"rel": "data/kernels/phaser.json",
|
|
601
|
+
"kind": "list",
|
|
602
|
+
"doc": "The member set the `stages` field accepts: PHASER_STAGES_RANGE walked by its step.",
|
|
603
|
+
"unit": "",
|
|
604
|
+
"value": [
|
|
605
|
+
2,
|
|
606
|
+
4,
|
|
607
|
+
6,
|
|
608
|
+
8,
|
|
609
|
+
10,
|
|
610
|
+
12
|
|
611
|
+
]
|
|
612
|
+
},
|
|
613
|
+
"PHASER_FEEDBACK_RANGE": {
|
|
614
|
+
"rel": "data/kernels/phaser.json",
|
|
615
|
+
"kind": "travels",
|
|
616
|
+
"doc": "The phaser's SIGNED resonance (§3). ±0.9, tighter than the flanger's ±0.95: the loop runs through a time-varying chain. Declared here (the refusal half); the kernel's clamp is the enforcement half.",
|
|
617
|
+
"shape": "travel",
|
|
618
|
+
"value": {
|
|
619
|
+
"min": -0.9,
|
|
620
|
+
"max": 0.9,
|
|
621
|
+
"step": 0.01,
|
|
622
|
+
"unit": "",
|
|
623
|
+
"default": 0.4,
|
|
624
|
+
"defaultFrom": "desk"
|
|
625
|
+
}
|
|
626
|
+
},
|
|
627
|
+
"PHASER_MIX_RANGE": {
|
|
628
|
+
"rel": "data/kernels/phaser.json",
|
|
629
|
+
"kind": "travels",
|
|
630
|
+
"doc": "The phaser's wet/dry, as an instance of DRIVE_MIX_RANGE: 50 %, where the notch is complete (§3).",
|
|
631
|
+
"shape": "travel",
|
|
632
|
+
"value": {
|
|
633
|
+
"min": 0,
|
|
634
|
+
"max": 100,
|
|
635
|
+
"step": 0.1,
|
|
636
|
+
"unit": "%",
|
|
637
|
+
"default": 50,
|
|
638
|
+
"defaultFrom": "desk"
|
|
639
|
+
}
|
|
640
|
+
},
|
|
641
|
+
"PHASER_TRAVELS": {
|
|
642
|
+
"rel": "data/kernels/phaser.json",
|
|
643
|
+
"kind": "travels",
|
|
644
|
+
"doc": "The phaser's continuous travels by row field — the ONE map its control bounds and its row travels both read (§3). `stages` is not here: it moves through PHASER_STAGE_COUNTS.",
|
|
645
|
+
"shape": "table",
|
|
646
|
+
"value": {
|
|
647
|
+
"rateHz": {
|
|
648
|
+
"min": 0.05,
|
|
649
|
+
"max": 5,
|
|
650
|
+
"step": 0.01,
|
|
651
|
+
"unit": "Hz",
|
|
652
|
+
"default": 0.5,
|
|
653
|
+
"defaultFrom": "desk"
|
|
654
|
+
},
|
|
655
|
+
"baseHz": {
|
|
656
|
+
"min": 50,
|
|
657
|
+
"max": 2000,
|
|
658
|
+
"step": 1,
|
|
659
|
+
"unit": "Hz",
|
|
660
|
+
"default": 200,
|
|
661
|
+
"defaultFrom": "desk"
|
|
662
|
+
},
|
|
663
|
+
"depthOct": {
|
|
664
|
+
"min": 0,
|
|
665
|
+
"max": 6,
|
|
666
|
+
"step": 0.1,
|
|
667
|
+
"unit": "oct",
|
|
668
|
+
"default": 4,
|
|
669
|
+
"defaultFrom": "desk"
|
|
670
|
+
},
|
|
671
|
+
"feedback": {
|
|
672
|
+
"min": -0.9,
|
|
673
|
+
"max": 0.9,
|
|
674
|
+
"step": 0.01,
|
|
675
|
+
"unit": "",
|
|
676
|
+
"default": 0.4,
|
|
677
|
+
"defaultFrom": "desk"
|
|
678
|
+
},
|
|
679
|
+
"mix": {
|
|
680
|
+
"min": 0,
|
|
681
|
+
"max": 100,
|
|
682
|
+
"step": 0.1,
|
|
683
|
+
"unit": "%",
|
|
684
|
+
"default": 50,
|
|
685
|
+
"defaultFrom": "desk"
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
},
|
|
347
689
|
"PITCH_LIMITS": {
|
|
348
690
|
"rel": "data/kernels/pitch.json",
|
|
349
691
|
"kind": "travels",
|
|
@@ -391,6 +733,252 @@
|
|
|
391
733
|
"defaultFrom": "desk"
|
|
392
734
|
}
|
|
393
735
|
},
|
|
736
|
+
"ROTARY_HORN_SLOW_RANGE": {
|
|
737
|
+
"rel": "data/kernels/rotary.json",
|
|
738
|
+
"kind": "travels",
|
|
739
|
+
"doc": "The horn's chorale (slow) rate, Hz.",
|
|
740
|
+
"shape": "travel",
|
|
741
|
+
"value": {
|
|
742
|
+
"min": 0.1,
|
|
743
|
+
"max": 2,
|
|
744
|
+
"step": 0.01,
|
|
745
|
+
"unit": "Hz",
|
|
746
|
+
"default": 0.8,
|
|
747
|
+
"defaultFrom": "desk"
|
|
748
|
+
}
|
|
749
|
+
},
|
|
750
|
+
"ROTARY_HORN_FAST_RANGE": {
|
|
751
|
+
"rel": "data/kernels/rotary.json",
|
|
752
|
+
"kind": "travels",
|
|
753
|
+
"doc": "The horn's tremolo (fast) rate, Hz.",
|
|
754
|
+
"shape": "travel",
|
|
755
|
+
"value": {
|
|
756
|
+
"min": 3,
|
|
757
|
+
"max": 10,
|
|
758
|
+
"step": 0.01,
|
|
759
|
+
"unit": "Hz",
|
|
760
|
+
"default": 6.8,
|
|
761
|
+
"defaultFrom": "desk"
|
|
762
|
+
}
|
|
763
|
+
},
|
|
764
|
+
"ROTARY_DRUM_SLOW_RANGE": {
|
|
765
|
+
"rel": "data/kernels/rotary.json",
|
|
766
|
+
"kind": "travels",
|
|
767
|
+
"doc": "The drum's chorale (slow) rate, Hz.",
|
|
768
|
+
"shape": "travel",
|
|
769
|
+
"value": {
|
|
770
|
+
"min": 0.1,
|
|
771
|
+
"max": 2,
|
|
772
|
+
"step": 0.01,
|
|
773
|
+
"unit": "Hz",
|
|
774
|
+
"default": 0.7,
|
|
775
|
+
"defaultFrom": "desk"
|
|
776
|
+
}
|
|
777
|
+
},
|
|
778
|
+
"ROTARY_DRUM_FAST_RANGE": {
|
|
779
|
+
"rel": "data/kernels/rotary.json",
|
|
780
|
+
"kind": "travels",
|
|
781
|
+
"doc": "The drum's tremolo (fast) rate, Hz.",
|
|
782
|
+
"shape": "travel",
|
|
783
|
+
"value": {
|
|
784
|
+
"min": 3,
|
|
785
|
+
"max": 10,
|
|
786
|
+
"step": 0.01,
|
|
787
|
+
"unit": "Hz",
|
|
788
|
+
"default": 5.9,
|
|
789
|
+
"defaultFrom": "desk"
|
|
790
|
+
}
|
|
791
|
+
},
|
|
792
|
+
"ROTARY_ACCEL_RANGE": {
|
|
793
|
+
"rel": "data/kernels/rotary.json",
|
|
794
|
+
"kind": "travels",
|
|
795
|
+
"doc": "The scale on every speed-change time constant (`ROTARY_*_ACCEL_MS`/`_DECEL_MS`): 2 is twice as slow.",
|
|
796
|
+
"shape": "travel",
|
|
797
|
+
"value": {
|
|
798
|
+
"min": 0.25,
|
|
799
|
+
"max": 4,
|
|
800
|
+
"step": 0.01,
|
|
801
|
+
"unit": "x",
|
|
802
|
+
"default": 1,
|
|
803
|
+
"defaultFrom": "desk"
|
|
804
|
+
}
|
|
805
|
+
},
|
|
806
|
+
"ROTARY_BALANCE_RANGE": {
|
|
807
|
+
"rel": "data/kernels/rotary.json",
|
|
808
|
+
"kind": "travels",
|
|
809
|
+
"doc": "The drum/horn balance, percent: −100 drum only, +100 horn only; the law attenuates, never boosts.",
|
|
810
|
+
"shape": "travel",
|
|
811
|
+
"value": {
|
|
812
|
+
"min": -100,
|
|
813
|
+
"max": 100,
|
|
814
|
+
"step": 1,
|
|
815
|
+
"unit": "%",
|
|
816
|
+
"default": 0,
|
|
817
|
+
"defaultFrom": "desk"
|
|
818
|
+
}
|
|
819
|
+
},
|
|
820
|
+
"ROTARY_MIX_RANGE": {
|
|
821
|
+
"rel": "data/kernels/rotary.json",
|
|
822
|
+
"kind": "travels",
|
|
823
|
+
"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).",
|
|
824
|
+
"shape": "travel",
|
|
825
|
+
"value": {
|
|
826
|
+
"min": 0,
|
|
827
|
+
"max": 100,
|
|
828
|
+
"step": 0.1,
|
|
829
|
+
"unit": "%",
|
|
830
|
+
"default": 100,
|
|
831
|
+
"defaultFrom": "desk"
|
|
832
|
+
}
|
|
833
|
+
},
|
|
834
|
+
"ROTARY_TRAVELS": {
|
|
835
|
+
"rel": "data/kernels/rotary.json",
|
|
836
|
+
"kind": "travels",
|
|
837
|
+
"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).",
|
|
838
|
+
"shape": "table",
|
|
839
|
+
"value": {
|
|
840
|
+
"hornSlowHz": {
|
|
841
|
+
"min": 0.1,
|
|
842
|
+
"max": 2,
|
|
843
|
+
"step": 0.01,
|
|
844
|
+
"unit": "Hz",
|
|
845
|
+
"default": 0.8,
|
|
846
|
+
"defaultFrom": "desk"
|
|
847
|
+
},
|
|
848
|
+
"hornFastHz": {
|
|
849
|
+
"min": 3,
|
|
850
|
+
"max": 10,
|
|
851
|
+
"step": 0.01,
|
|
852
|
+
"unit": "Hz",
|
|
853
|
+
"default": 6.8,
|
|
854
|
+
"defaultFrom": "desk"
|
|
855
|
+
},
|
|
856
|
+
"drumSlowHz": {
|
|
857
|
+
"min": 0.1,
|
|
858
|
+
"max": 2,
|
|
859
|
+
"step": 0.01,
|
|
860
|
+
"unit": "Hz",
|
|
861
|
+
"default": 0.7,
|
|
862
|
+
"defaultFrom": "desk"
|
|
863
|
+
},
|
|
864
|
+
"drumFastHz": {
|
|
865
|
+
"min": 3,
|
|
866
|
+
"max": 10,
|
|
867
|
+
"step": 0.01,
|
|
868
|
+
"unit": "Hz",
|
|
869
|
+
"default": 5.9,
|
|
870
|
+
"defaultFrom": "desk"
|
|
871
|
+
},
|
|
872
|
+
"accel": {
|
|
873
|
+
"min": 0.25,
|
|
874
|
+
"max": 4,
|
|
875
|
+
"step": 0.01,
|
|
876
|
+
"unit": "x",
|
|
877
|
+
"default": 1,
|
|
878
|
+
"defaultFrom": "desk"
|
|
879
|
+
},
|
|
880
|
+
"balance": {
|
|
881
|
+
"min": -100,
|
|
882
|
+
"max": 100,
|
|
883
|
+
"step": 1,
|
|
884
|
+
"unit": "%",
|
|
885
|
+
"default": 0,
|
|
886
|
+
"defaultFrom": "desk"
|
|
887
|
+
},
|
|
888
|
+
"mix": {
|
|
889
|
+
"min": 0,
|
|
890
|
+
"max": 100,
|
|
891
|
+
"step": 0.1,
|
|
892
|
+
"unit": "%",
|
|
893
|
+
"default": 100,
|
|
894
|
+
"defaultFrom": "desk"
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
},
|
|
898
|
+
"ROTARY_CROSSOVER_HZ": {
|
|
899
|
+
"rel": "data/kernels/rotary.json",
|
|
900
|
+
"kind": "scalar",
|
|
901
|
+
"doc": "The complementary split's low-pass corner, Hz: the Leslie 122's passive crossover.",
|
|
902
|
+
"unit": "Hz",
|
|
903
|
+
"value": 800
|
|
904
|
+
},
|
|
905
|
+
"ROTARY_BASE_MS": {
|
|
906
|
+
"rel": "data/kernels/rotary.json",
|
|
907
|
+
"kind": "scalar",
|
|
908
|
+
"doc": "The shortest Doppler read, ms — above the order-3 read's one-sample reach at every rate.",
|
|
909
|
+
"unit": "ms",
|
|
910
|
+
"value": 0.1
|
|
911
|
+
},
|
|
912
|
+
"ROTARY_HORN_DOPPLER_MS": {
|
|
913
|
+
"rel": "data/kernels/rotary.json",
|
|
914
|
+
"kind": "scalar",
|
|
915
|
+
"doc": "The horn's Doppler excursion `D_horn`, ms: a 0.15 m radius over 343 m/s.",
|
|
916
|
+
"unit": "ms",
|
|
917
|
+
"value": 0.44
|
|
918
|
+
},
|
|
919
|
+
"ROTARY_DRUM_DOPPLER_MS": {
|
|
920
|
+
"rel": "data/kernels/rotary.json",
|
|
921
|
+
"kind": "scalar",
|
|
922
|
+
"doc": "The drum's Doppler excursion `D_drum`, ms: its baffle turns over a fixed woofer.",
|
|
923
|
+
"unit": "ms",
|
|
924
|
+
"value": 0.29
|
|
925
|
+
},
|
|
926
|
+
"ROTARY_HORN_AM": {
|
|
927
|
+
"rel": "data/kernels/rotary.json",
|
|
928
|
+
"kind": "scalar",
|
|
929
|
+
"doc": "The horn's amplitude swing `m_horn` (a −6 dB directivity dip), a ratio.",
|
|
930
|
+
"unit": "",
|
|
931
|
+
"value": 0.5
|
|
932
|
+
},
|
|
933
|
+
"ROTARY_DRUM_AM": {
|
|
934
|
+
"rel": "data/kernels/rotary.json",
|
|
935
|
+
"kind": "scalar",
|
|
936
|
+
"doc": "The drum baffle's amplitude swing `m_drum`, a ratio.",
|
|
937
|
+
"unit": "",
|
|
938
|
+
"value": 0.3
|
|
939
|
+
},
|
|
940
|
+
"ROTARY_HORN_ACCEL_MS": {
|
|
941
|
+
"rel": "data/kernels/rotary.json",
|
|
942
|
+
"kind": "scalar",
|
|
943
|
+
"doc": "The horn rotor's speed-up time constant, ms (at `accel` 1).",
|
|
944
|
+
"unit": "ms",
|
|
945
|
+
"value": 330
|
|
946
|
+
},
|
|
947
|
+
"ROTARY_HORN_DECEL_MS": {
|
|
948
|
+
"rel": "data/kernels/rotary.json",
|
|
949
|
+
"kind": "scalar",
|
|
950
|
+
"doc": "The horn rotor's slow-down time constant, ms (at `accel` 1).",
|
|
951
|
+
"unit": "ms",
|
|
952
|
+
"value": 500
|
|
953
|
+
},
|
|
954
|
+
"ROTARY_DRUM_ACCEL_MS": {
|
|
955
|
+
"rel": "data/kernels/rotary.json",
|
|
956
|
+
"kind": "scalar",
|
|
957
|
+
"doc": "The drum rotor's speed-up time constant, ms (at `accel` 1).",
|
|
958
|
+
"unit": "ms",
|
|
959
|
+
"value": 1700
|
|
960
|
+
},
|
|
961
|
+
"ROTARY_DRUM_DECEL_MS": {
|
|
962
|
+
"rel": "data/kernels/rotary.json",
|
|
963
|
+
"kind": "scalar",
|
|
964
|
+
"doc": "The drum rotor's slow-down time constant, ms (at `accel` 1).",
|
|
965
|
+
"unit": "ms",
|
|
966
|
+
"value": 1800
|
|
967
|
+
},
|
|
968
|
+
"ROTARY_STOP_EPS": {
|
|
969
|
+
"rel": "data/kernels/rotary.json",
|
|
970
|
+
"kind": "scalar",
|
|
971
|
+
"doc": "Below this rate, Hz, a rotor coasting toward `stop` is snapped to exactly 0.",
|
|
972
|
+
"unit": "",
|
|
973
|
+
"value": 0.0001
|
|
974
|
+
},
|
|
975
|
+
"ROTARY_RING_FLOATS": {
|
|
976
|
+
"rel": "data/kernels/rotary.json",
|
|
977
|
+
"kind": "scalar",
|
|
978
|
+
"doc": "One inline ring per rotor per leg, floats — at least the 192 kHz need of the horn's sweep.",
|
|
979
|
+
"unit": "",
|
|
980
|
+
"value": 256
|
|
981
|
+
},
|
|
394
982
|
"TRANSIENT_LIMITS": {
|
|
395
983
|
"rel": "data/kernels/transient.json",
|
|
396
984
|
"kind": "travels",
|
|
@@ -467,62 +1055,79 @@
|
|
|
467
1055
|
"unit": "",
|
|
468
1056
|
"value": 0.00001
|
|
469
1057
|
},
|
|
470
|
-
"
|
|
471
|
-
"rel": "data/
|
|
472
|
-
"kind": "
|
|
473
|
-
"doc": "The
|
|
474
|
-
"
|
|
475
|
-
"
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
1058
|
+
"TREMOLO_RATE_RANGE": {
|
|
1059
|
+
"rel": "data/kernels/tremolo.json",
|
|
1060
|
+
"kind": "travels",
|
|
1061
|
+
"doc": "The tremolo's LFO rate (the catalogue row's 0.1..20 Hz); 4 Hz is the classic amp tremolo.",
|
|
1062
|
+
"shape": "travel",
|
|
1063
|
+
"value": {
|
|
1064
|
+
"min": 0.1,
|
|
1065
|
+
"max": 20,
|
|
1066
|
+
"step": 0.01,
|
|
1067
|
+
"unit": "Hz",
|
|
1068
|
+
"default": 4,
|
|
1069
|
+
"defaultFrom": "desk"
|
|
1070
|
+
}
|
|
1071
|
+
},
|
|
1072
|
+
"TREMOLO_DEPTH_RANGE": {
|
|
1073
|
+
"rel": "data/kernels/tremolo.json",
|
|
1074
|
+
"kind": "travels",
|
|
1075
|
+
"doc": "The tremolo's modulation depth: the gain's trough is `1 − mix·depth`.",
|
|
1076
|
+
"shape": "travel",
|
|
1077
|
+
"value": {
|
|
1078
|
+
"min": 0,
|
|
1079
|
+
"max": 100,
|
|
1080
|
+
"step": 0.1,
|
|
1081
|
+
"unit": "%",
|
|
1082
|
+
"default": 50,
|
|
1083
|
+
"defaultFrom": "desk"
|
|
1084
|
+
}
|
|
1085
|
+
},
|
|
1086
|
+
"TREMOLO_MIX_RANGE": {
|
|
1087
|
+
"rel": "data/kernels/tremolo.json",
|
|
1088
|
+
"kind": "travels",
|
|
1089
|
+
"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).",
|
|
1090
|
+
"shape": "travel",
|
|
1091
|
+
"value": {
|
|
1092
|
+
"min": 0,
|
|
1093
|
+
"max": 100,
|
|
1094
|
+
"step": 0.1,
|
|
1095
|
+
"unit": "%",
|
|
1096
|
+
"default": 100,
|
|
1097
|
+
"defaultFrom": "desk"
|
|
1098
|
+
}
|
|
1099
|
+
},
|
|
1100
|
+
"TREMOLO_TRAVELS": {
|
|
1101
|
+
"rel": "data/kernels/tremolo.json",
|
|
1102
|
+
"kind": "travels",
|
|
1103
|
+
"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).",
|
|
1104
|
+
"shape": "table",
|
|
1105
|
+
"value": {
|
|
1106
|
+
"rateHz": {
|
|
1107
|
+
"min": 0.1,
|
|
1108
|
+
"max": 20,
|
|
1109
|
+
"step": 0.01,
|
|
1110
|
+
"unit": "Hz",
|
|
1111
|
+
"default": 4,
|
|
1112
|
+
"defaultFrom": "desk"
|
|
506
1113
|
},
|
|
507
|
-
{
|
|
508
|
-
"symbol": "tone",
|
|
1114
|
+
"depth": {
|
|
509
1115
|
"min": 0,
|
|
510
|
-
"max":
|
|
511
|
-
"
|
|
512
|
-
"
|
|
513
|
-
"
|
|
514
|
-
"
|
|
1116
|
+
"max": 100,
|
|
1117
|
+
"step": 0.1,
|
|
1118
|
+
"unit": "%",
|
|
1119
|
+
"default": 50,
|
|
1120
|
+
"defaultFrom": "desk"
|
|
515
1121
|
},
|
|
516
|
-
{
|
|
517
|
-
"symbol": "pingpong",
|
|
1122
|
+
"mix": {
|
|
518
1123
|
"min": 0,
|
|
519
|
-
"max":
|
|
520
|
-
"
|
|
521
|
-
"
|
|
522
|
-
"
|
|
523
|
-
"
|
|
1124
|
+
"max": 100,
|
|
1125
|
+
"step": 0.1,
|
|
1126
|
+
"unit": "%",
|
|
1127
|
+
"default": 100,
|
|
1128
|
+
"defaultFrom": "desk"
|
|
524
1129
|
}
|
|
525
|
-
|
|
1130
|
+
}
|
|
526
1131
|
},
|
|
527
1132
|
"BUTTERWORTH_Q": {
|
|
528
1133
|
"rel": "data/primitives.json",
|