fractal-midi 0.1.0-alpha.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.
Files changed (123) hide show
  1. package/LICENSE +200 -0
  2. package/NOTICE +28 -0
  3. package/README.md +147 -0
  4. package/dist/am4/applicability.d.ts +61 -0
  5. package/dist/am4/applicability.d.ts.map +1 -0
  6. package/dist/am4/applicability.js +285 -0
  7. package/dist/am4/blockTypes.d.ts +43 -0
  8. package/dist/am4/blockTypes.d.ts.map +1 -0
  9. package/dist/am4/blockTypes.js +48 -0
  10. package/dist/am4/cacheEnums.d.ts +46 -0
  11. package/dist/am4/cacheEnums.d.ts.map +1 -0
  12. package/dist/am4/cacheEnums.js +734 -0
  13. package/dist/am4/cacheParams.d.ts +3533 -0
  14. package/dist/am4/cacheParams.d.ts.map +1 -0
  15. package/dist/am4/cacheParams.js +1996 -0
  16. package/dist/am4/editorControlLabels.d.ts +45 -0
  17. package/dist/am4/editorControlLabels.d.ts.map +1 -0
  18. package/dist/am4/editorControlLabels.js +15894 -0
  19. package/dist/am4/index.d.ts +28 -0
  20. package/dist/am4/index.d.ts.map +1 -0
  21. package/dist/am4/index.js +31 -0
  22. package/dist/am4/ir/preset.d.ts +24 -0
  23. package/dist/am4/ir/preset.d.ts.map +1 -0
  24. package/dist/am4/ir/preset.js +12 -0
  25. package/dist/am4/ir/transpile.d.ts +9 -0
  26. package/dist/am4/ir/transpile.d.ts.map +1 -0
  27. package/dist/am4/ir/transpile.js +19 -0
  28. package/dist/am4/locations.d.ts +32 -0
  29. package/dist/am4/locations.d.ts.map +1 -0
  30. package/dist/am4/locations.js +58 -0
  31. package/dist/am4/paramNames.d.ts +55 -0
  32. package/dist/am4/paramNames.d.ts.map +1 -0
  33. package/dist/am4/paramNames.js +863 -0
  34. package/dist/am4/paramNamesGenerated.d.ts +41 -0
  35. package/dist/am4/paramNamesGenerated.d.ts.map +1 -0
  36. package/dist/am4/paramNamesGenerated.js +183 -0
  37. package/dist/am4/parameterBridge.d.ts +46 -0
  38. package/dist/am4/parameterBridge.d.ts.map +1 -0
  39. package/dist/am4/parameterBridge.js +300 -0
  40. package/dist/am4/params.d.ts +9577 -0
  41. package/dist/am4/params.d.ts.map +1 -0
  42. package/dist/am4/params.js +4537 -0
  43. package/dist/am4/setParam.d.ts +414 -0
  44. package/dist/am4/setParam.d.ts.map +1 -0
  45. package/dist/am4/setParam.js +819 -0
  46. package/dist/am4/shared/paramHelpers.d.ts +55 -0
  47. package/dist/am4/shared/paramHelpers.d.ts.map +1 -0
  48. package/dist/am4/shared/paramHelpers.js +146 -0
  49. package/dist/am4/symbolicIds.d.ts +11 -0
  50. package/dist/am4/symbolicIds.d.ts.map +1 -0
  51. package/dist/am4/symbolicIds.js +587 -0
  52. package/dist/am4/typeApplicability.d.ts +39 -0
  53. package/dist/am4/typeApplicability.d.ts.map +1 -0
  54. package/dist/am4/typeApplicability.js +466 -0
  55. package/dist/am4/variantResolverTables.d.ts +51 -0
  56. package/dist/am4/variantResolverTables.d.ts.map +1 -0
  57. package/dist/am4/variantResolverTables.js +3128 -0
  58. package/dist/axe-fx-ii/blockTypes.d.ts +45 -0
  59. package/dist/axe-fx-ii/blockTypes.d.ts.map +1 -0
  60. package/dist/axe-fx-ii/blockTypes.js +116 -0
  61. package/dist/axe-fx-ii/index.d.ts +5 -0
  62. package/dist/axe-fx-ii/index.d.ts.map +1 -0
  63. package/dist/axe-fx-ii/index.js +18 -0
  64. package/dist/axe-fx-ii/paramAliases.d.ts +54 -0
  65. package/dist/axe-fx-ii/paramAliases.d.ts.map +1 -0
  66. package/dist/axe-fx-ii/paramAliases.js +146 -0
  67. package/dist/axe-fx-ii/params.d.ts +11502 -0
  68. package/dist/axe-fx-ii/params.d.ts.map +1 -0
  69. package/dist/axe-fx-ii/params.js +2847 -0
  70. package/dist/axe-fx-ii/setParam.d.ts +560 -0
  71. package/dist/axe-fx-ii/setParam.d.ts.map +1 -0
  72. package/dist/axe-fx-ii/setParam.js +888 -0
  73. package/dist/axe-fx-iii/blockTypes.d.ts +87 -0
  74. package/dist/axe-fx-iii/blockTypes.d.ts.map +1 -0
  75. package/dist/axe-fx-iii/blockTypes.js +156 -0
  76. package/dist/axe-fx-iii/enumOverlay.d.ts +73 -0
  77. package/dist/axe-fx-iii/enumOverlay.d.ts.map +1 -0
  78. package/dist/axe-fx-iii/enumOverlay.js +236 -0
  79. package/dist/axe-fx-iii/index.d.ts +9 -0
  80. package/dist/axe-fx-iii/index.d.ts.map +1 -0
  81. package/dist/axe-fx-iii/index.js +20 -0
  82. package/dist/axe-fx-iii/params.d.ts +179 -0
  83. package/dist/axe-fx-iii/params.d.ts.map +1 -0
  84. package/dist/axe-fx-iii/params.js +6913 -0
  85. package/dist/axe-fx-iii/setParam.d.ts +460 -0
  86. package/dist/axe-fx-iii/setParam.d.ts.map +1 -0
  87. package/dist/axe-fx-iii/setParam.js +910 -0
  88. package/dist/index.d.ts +2 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +12 -0
  91. package/dist/shared/checksum.d.ts +10 -0
  92. package/dist/shared/checksum.d.ts.map +1 -0
  93. package/dist/shared/checksum.js +14 -0
  94. package/dist/shared/device.d.ts +195 -0
  95. package/dist/shared/device.d.ts.map +1 -0
  96. package/dist/shared/device.js +27 -0
  97. package/dist/shared/index.d.ts +8 -0
  98. package/dist/shared/index.d.ts.map +1 -0
  99. package/dist/shared/index.js +11 -0
  100. package/dist/shared/lineage/amp-lineage.json +8313 -0
  101. package/dist/shared/lineage/axefx2-amp-lineage.json +5871 -0
  102. package/dist/shared/lineage/axefx2-delay-lineage.json +226 -0
  103. package/dist/shared/lineage/axefx2-drive-lineage.json +575 -0
  104. package/dist/shared/lineage/axefx2-reverb-lineage.json +467 -0
  105. package/dist/shared/lineage/cab-lineage.json +10777 -0
  106. package/dist/shared/lineage/chorus-lineage.json +173 -0
  107. package/dist/shared/lineage/compressor-lineage.json +338 -0
  108. package/dist/shared/lineage/delay-lineage.json +313 -0
  109. package/dist/shared/lineage/drive-lineage.json +1844 -0
  110. package/dist/shared/lineage/flanger-lineage.json +313 -0
  111. package/dist/shared/lineage/phaser-lineage.json +208 -0
  112. package/dist/shared/lineage/reverb-lineage.json +793 -0
  113. package/dist/shared/lineage/wah-lineage.json +117 -0
  114. package/dist/shared/lineageLookup.d.ts +69 -0
  115. package/dist/shared/lineageLookup.d.ts.map +1 -0
  116. package/dist/shared/lineageLookup.js +196 -0
  117. package/dist/shared/packValue.d.ts +40 -0
  118. package/dist/shared/packValue.d.ts.map +1 -0
  119. package/dist/shared/packValue.js +105 -0
  120. package/dist/shared/types.d.ts +23 -0
  121. package/dist/shared/types.d.ts.map +1 -0
  122. package/dist/shared/types.js +9 -0
  123. package/package.json +75 -0
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Axe-Fx III parameter catalog.
3
+ *
4
+ * Auto-generated by
5
+ * scripts/_research/generate-axefx3-params-from-catalog.ts
6
+ * from
7
+ * samples/captured/decoded/ghidra-axeedit3-paramnames.json
8
+ * (Ghidra-mined Axe-Edit III v1.14.31 effect-type dispatcher
9
+ * FUN_140397a40 — Session 82), with AM4-derived display
10
+ * calibration layered on top (see
11
+ * `scripts/_research/axefx3-am4-overrides.ts`). DO NOT HAND-EDIT
12
+ * — re-run the generator to refresh.
13
+ *
14
+ * Coverage:
15
+ * - 2216 parameters across 48 effect families.
16
+ * - **2200/2200 (100%) calibration-eligible entries** carry a
17
+ * non-`'unverified'` unit tag after the post-generation overlay
18
+ * pass (`scripts/axe-fx-iii/apply-calibration-overlay.ts`).
19
+ * - 16 entries remain `unit: 'unverified'` and are exempted by the
20
+ * calibration acceptance gate because they are string-typed
21
+ * (`_NAME`, `_LABEL1`..`_LABEL4`, `_MSG`) — the `Param` interface
22
+ * has no `'string'` unit so the codec layer treats them as opaque.
23
+ *
24
+ * Tiered calibration provenance (in declaration order on each entry):
25
+ * • Baseline (from generator):
26
+ * - AM4 symbol-name join — `// inferred from AM4`. 236 entries.
27
+ * - Universal Fractal convention (generator's suffix pass) —
28
+ * `// inferred from Fractal convention`. 226 entries.
29
+ * - AxeEdit III XML controlType — `// inferred from AxeEdit III XML controlType`.
30
+ * 1564 entries with unit but no range.
31
+ * • Post-generation overlay (`apply-calibration-overlay.ts`):
32
+ * - `// post-gen overlay: <reason>` — extended suffix table
33
+ * closing the long-tail of `'unverified'` entries with
34
+ * defensible Fractal-convention units. ~146 entries.
35
+ *
36
+ * Enum vocabularies (resolveEnumValues lookup):
37
+ * - `src/axe-fx-iii/enumOverlay.ts` provides a runtime-joined enum
38
+ * vocabulary layer combining AM4-verified shared tables (LFO
39
+ * waveforms, tempo divisions, filter slopes, channel pickers),
40
+ * universal Fractal binary toggles (OFF/ON, ENGAGED/BYPASSED), and
41
+ * hand-curated III-specific entries. Each vocabulary tier carries
42
+ * a `provenance` tag (`'am4-shared'` / `'fractal-convention'` /
43
+ * `'iii-spec'`). Hardware-verification of III enum values is
44
+ * user-driven via GitHub issue.
45
+ *
46
+ * Calibration sources (per-family inferred count):
47
+ * CABINET=104, CHORUS=32, COMP=35, CONTROLLERS=136, CROSSOVER=15, DELAY=86, DISTORT=135, DYNDIST=12, ENHANCER=12, FC=8, FDBKRET=6, FILTER=37, FLANGER=55, FORMANT=12, FUZZ=43, GATE=19, GEQ=20, GLOBAL=228, INPUT=10, IRPLAYER=22, LOOPER=22, MEGATAP=34, MIDIBLOCK=10, MIXER=23, MOD=20, MULTICOMP=37, MULTIPLEXER=7, MULTITAP=116, OUTPUT=26, PEQ=33, PHASER=35, PITCH=112, PLEX=93, PRESET=51, RESONATOR=39, REVERB=71, RINGMOD=12, ROTARY=21, RTA=4, SYNTH=41, TENTAP=44, TONEMATCH=21, TREMOLO=22, VOCODER=67, VOLUME=13, WAH=25
48
+ *
49
+ * Inferred-from-AM4 caveat:
50
+ * - AM4 is the closest hardware-verified analog Fractal device.
51
+ * Same vendor, same naming convention, similar musical scope.
52
+ * The inferred display range (e.g. reverb time 0.1..100 s,
53
+ * drive 0..10 knob) is correct as a *display* convention —
54
+ * this is what Fractal's UI shows for the knob across both
55
+ * devices.
56
+ * - The III's wire encoding for the displayed value is NOT
57
+ * yet verified. AM4 packs values into normalized [0,1] Q15;
58
+ * the III packs into a 16-bit linear field via packValue16.
59
+ * Display↔wire conversion still requires III-side capture.
60
+ * - Enum entries inherit `unit: 'enum'` from AM4 but DO NOT
61
+ * ship AM4's enumValues table. III firmware adds reverb
62
+ * types, amp models, etc. post-AM4 — copying AM4's vocabulary
63
+ * verbatim would mislead the agent. The III's enum vocabulary
64
+ * needs III-side Ghidra mining or hardware capture.
65
+ *
66
+ * Wire constraints (see ./setParam.ts):
67
+ * - paramId is sent as a 14-bit septet pair → wire range is
68
+ * 0..16383. Catalog entries with paramId >= 65520 are
69
+ * firmware-internal sentinels (e.g. *_SET_ALL, *_VAL_ALL)
70
+ * and are NOT addressable via 0x02 SET_PARAMETER — they
71
+ * will fail the encode14 range guard. They are retained in
72
+ * this catalog as documentary entries because they show up
73
+ * in the dispatcher tables; tooling that resolves a name to
74
+ * a paramId should filter > 16383 before attempting a wire
75
+ * write.
76
+ *
77
+ * Firmware-legacy overlays:
78
+ * - (family, paramId) is NOT unique. Some families (notably
79
+ * FLANGER) keep older symbol names alongside the current
80
+ * ones at the same paramIds (e.g. `FLANGER_TYPE` and
81
+ * `FLANGER_OLD_TYPE` both at paramId 0). The duplicates are
82
+ * intentional — older firmware presets store under the
83
+ * `_OLD_` symbols, while new writes use the current names.
84
+ * The composite key `(family, name)` IS unique; use
85
+ * `PARAM_BY_KEY` for stable lookup.
86
+ *
87
+ * 🟢 SET wire shape byte-verified Session 97 against 10 public
88
+ * captures: `fn=0x01` + sub-action `09 00` (typed-input), 23-byte
89
+ * envelope. NOT the pre-Session-97 `fn=0x02` II-port. Capture
90
+ * corpus + field layout: `docs/axefx3-set-parameter-captures.md`.
91
+ * 🟡 GET response shape still unverified — the `04 01`
92
+ * STATE_BROADCAST appears to be an AxeEdit-driven heartbeat poll,
93
+ * NOT a sync SET echo. See `docs/SYSEX-MAP-AXE-FX-III.md` §0x01.
94
+ */
95
+ /**
96
+ * Display-unit tag for an Axe-Fx III parameter.
97
+ *
98
+ * `'unverified'` is the default for entries the generator could
99
+ * not infer (the AM4 has no matching parameter, or the III family
100
+ * has no AM4 analog). Other tags are AM4-derived display
101
+ * conventions — they describe the user-facing scale (dB, ms,
102
+ * knob_0_10, etc.) but NOT the III's wire encoding. Display↔wire
103
+ * conversion is still the caller's responsibility on the III
104
+ * until hardware verification lands.
105
+ */
106
+ export type Unit = 'bipolar_percent' | 'count' | 'db' | 'degrees' | 'enum' | 'hz' | 'knob_0_10' | 'knob_0_20' | 'ms' | 'numeric' | 'percent' | 'pf' | 'ratio' | 'seconds' | 'semitones' | 'unverified';
107
+ /** One entry in the Axe-Fx III parameter catalog. */
108
+ export interface Param {
109
+ /**
110
+ * Effect family symbol (e.g. `'REVERB'`, `'DELAY'`, `'COMP'`).
111
+ * Sourced from the dispatcher's case → table-of-params mapping.
112
+ */
113
+ family: string;
114
+ /**
115
+ * Parameter ID within the family. Wire-encoded as a 14-bit
116
+ * septet pair in 0x02 SET_PARAMETER frames. Values >= 65520 are
117
+ * firmware-internal sentinels and NOT wire-addressable — see
118
+ * file-level header for details.
119
+ */
120
+ paramId: number;
121
+ /**
122
+ * Symbol name from Axe-Edit III's binary (e.g. `'REVERB_TYPE'`).
123
+ * Stable across firmware releases of the same generation.
124
+ */
125
+ name: string;
126
+ /**
127
+ * Human-readable display label from the AxeEdit III JUCE-BinaryData
128
+ * XML mining — the editor's knob caption (e.g. `'Drive'` for
129
+ * `DISTORT_DRIVE`, `'Reverb Time'` for `REVERB_TIME`). Populated
130
+ * for ~91% of catalog entries; absent for symbols the editor
131
+ * doesn't render (firmware-internal blocks, sentinel paramIds).
132
+ * Useful as LLM prompt context independent of unit/range.
133
+ */
134
+ displayLabel?: string;
135
+ /**
136
+ * Display unit tag. `'unverified'` until III hardware confirms
137
+ * the real shape; otherwise inferred from one of three sources
138
+ * (see file-level header for provenance — these are display
139
+ * conventions, not wire encodings).
140
+ */
141
+ unit: Unit;
142
+ /**
143
+ * Display range minimum. Populated for AM4-inferred entries
144
+ * (`// inferred from AM4` trailing comment), absent for
145
+ * `unit: 'unverified'` entries.
146
+ */
147
+ displayMin?: number;
148
+ /** Display range maximum. Same population rule as `displayMin`. */
149
+ displayMax?: number;
150
+ /**
151
+ * Optional non-linear scaling, AM4-inferred. `'log10'` for
152
+ * time / frequency knobs that span multiple decades. Absent
153
+ * for linear knobs or `'unverified'` entries.
154
+ */
155
+ scaling?: 'linear' | 'log10';
156
+ }
157
+ /**
158
+ * Flat catalog of every (family, paramId) entry mined from the
159
+ * Axe-Edit III dispatcher. Sorted by family-case-index ascending,
160
+ * then paramId ascending within each family, for byte-stable
161
+ * regeneration.
162
+ */
163
+ export declare const PARAMS: readonly Param[];
164
+ /**
165
+ * Lookup by family symbol. Each family's entry preserves the
166
+ * paramId-ascending order from `PARAMS`.
167
+ */
168
+ export declare const PARAMS_BY_FAMILY: Readonly<Record<string, readonly Param[]>>;
169
+ /**
170
+ * Lookup by `'FAMILY.NAME'` (the catalog's natural composite key).
171
+ * Example: `PARAM_BY_KEY['REVERB.REVERB_TYPE']` → the Reverb Type
172
+ * entry. Use this when callers reference a param by its symbolic
173
+ * name; use `PARAMS_BY_FAMILY[family]` when iterating a whole
174
+ * family.
175
+ */
176
+ export declare const PARAM_BY_KEY: Readonly<Record<string, Param>>;
177
+ /** Family symbols present in the catalog, in dispatcher-case order. */
178
+ export declare const FAMILIES: readonly string[];
179
+ //# sourceMappingURL=params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/axe-fx-iii/params.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FG;AAIH;;;;;;;;;;GAUG;AACH,MAAM,MAAM,IAAI,GAAG,iBAAiB,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;AAEvM,qDAAqD;AACrD,MAAM,WAAW,KAAK;IACpB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,IAAI,EAAE,IAAI,CAAC;IACX;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC9B;AAID;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,SAAS,KAAK,EAyqElC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC,CAywEvE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAyqExD,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,QAAQ,EAAE,SAAS,MAAM,EAiDrC,CAAC"}