fractal-midi 0.1.0-alpha.11 → 0.3.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 (121) hide show
  1. package/NOTICE +17 -0
  2. package/README.md +28 -21
  3. package/dist/am4/cacheOracleParams.generated.d.ts +1247 -0
  4. package/dist/am4/cacheOracleParams.generated.d.ts.map +1 -0
  5. package/dist/am4/cacheOracleParams.generated.js +783 -0
  6. package/dist/am4/cacheParams.d.ts +88 -24
  7. package/dist/am4/cacheParams.d.ts.map +1 -1
  8. package/dist/am4/cacheParams.js +81 -17
  9. package/dist/am4/index.d.ts +2 -2
  10. package/dist/am4/index.d.ts.map +1 -1
  11. package/dist/am4/index.js +2 -2
  12. package/dist/am4/params.d.ts +1353 -283
  13. package/dist/am4/params.d.ts.map +1 -1
  14. package/dist/am4/params.js +639 -246
  15. package/dist/am4/setParam.d.ts +20 -5
  16. package/dist/am4/setParam.d.ts.map +1 -1
  17. package/dist/am4/setParam.js +33 -5
  18. package/dist/am4/typeApplicability.d.ts.map +1 -1
  19. package/dist/am4/typeApplicability.js +0 -1
  20. package/dist/axe-fx-gen1/blockTypes.d.ts +6 -0
  21. package/dist/axe-fx-gen1/blockTypes.d.ts.map +1 -0
  22. package/dist/axe-fx-gen1/blockTypes.js +48 -0
  23. package/dist/axe-fx-gen1/index.d.ts +7 -0
  24. package/dist/axe-fx-gen1/index.d.ts.map +1 -0
  25. package/dist/axe-fx-gen1/index.js +15 -0
  26. package/dist/axe-fx-gen1/nibble.d.ts +5 -0
  27. package/dist/axe-fx-gen1/nibble.d.ts.map +1 -0
  28. package/dist/axe-fx-gen1/nibble.js +22 -0
  29. package/dist/axe-fx-gen1/params.d.ts +8 -0
  30. package/dist/axe-fx-gen1/params.d.ts.map +1 -0
  31. package/dist/axe-fx-gen1/params.js +935 -0
  32. package/dist/axe-fx-gen1/readParam.d.ts +37 -0
  33. package/dist/axe-fx-gen1/readParam.d.ts.map +1 -0
  34. package/dist/axe-fx-gen1/readParam.js +140 -0
  35. package/dist/axe-fx-gen1/setParam.d.ts +23 -0
  36. package/dist/axe-fx-gen1/setParam.d.ts.map +1 -0
  37. package/dist/axe-fx-gen1/setParam.js +76 -0
  38. package/dist/axe-fx-gen1/types.d.ts +51 -0
  39. package/dist/axe-fx-gen1/types.d.ts.map +1 -0
  40. package/dist/axe-fx-gen1/types.js +14 -0
  41. package/dist/axe-fx-ii/paramAliases.d.ts.map +1 -1
  42. package/dist/axe-fx-ii/paramAliases.js +15 -0
  43. package/dist/axe-fx-ii/params.d.ts +449 -23
  44. package/dist/axe-fx-ii/params.d.ts.map +1 -1
  45. package/dist/axe-fx-ii/params.js +286 -178
  46. package/dist/axe-fx-ii/setParam.d.ts +136 -19
  47. package/dist/axe-fx-ii/setParam.d.ts.map +1 -1
  48. package/dist/axe-fx-ii/setParam.js +167 -13
  49. package/dist/axe-fx-ii/typeApplicability.d.ts.map +1 -1
  50. package/dist/axe-fx-ii/typeApplicability.js +92 -0
  51. package/dist/axe-fx-iii/blockTypes.d.ts +16 -11
  52. package/dist/axe-fx-iii/blockTypes.d.ts.map +1 -1
  53. package/dist/axe-fx-iii/blockTypes.js +27 -20
  54. package/dist/axe-fx-iii/enumOverlay.d.ts +14 -0
  55. package/dist/axe-fx-iii/enumOverlay.d.ts.map +1 -1
  56. package/dist/axe-fx-iii/enumOverlay.js +71 -0
  57. package/dist/axe-fx-iii/enumRawId.d.ts +57 -0
  58. package/dist/axe-fx-iii/enumRawId.d.ts.map +1 -0
  59. package/dist/axe-fx-iii/enumRawId.js +102 -0
  60. package/dist/axe-fx-iii/gen3ReadRosters.d.ts +37 -0
  61. package/dist/axe-fx-iii/gen3ReadRosters.d.ts.map +1 -0
  62. package/dist/axe-fx-iii/gen3ReadRosters.js +595 -0
  63. package/dist/axe-fx-iii/index.d.ts +5 -3
  64. package/dist/axe-fx-iii/index.d.ts.map +1 -1
  65. package/dist/axe-fx-iii/index.js +8 -4
  66. package/dist/axe-fx-iii/params.d.ts +2 -2
  67. package/dist/axe-fx-iii/params.js +4 -4
  68. package/dist/axe-fx-iii/setParam.d.ts +386 -87
  69. package/dist/axe-fx-iii/setParam.d.ts.map +1 -1
  70. package/dist/axe-fx-iii/setParam.js +1009 -197
  71. package/dist/fm3/index.d.ts +2 -0
  72. package/dist/fm3/index.d.ts.map +1 -0
  73. package/dist/fm3/index.js +1 -0
  74. package/dist/fm3/params.d.ts +29 -0
  75. package/dist/fm3/params.d.ts.map +1 -0
  76. package/dist/fm3/params.js +2033 -0
  77. package/dist/fm9/enumOverrides.d.ts +2 -0
  78. package/dist/fm9/enumOverrides.d.ts.map +1 -0
  79. package/dist/fm9/enumOverrides.js +64 -0
  80. package/dist/fm9/index.d.ts +4 -0
  81. package/dist/fm9/index.d.ts.map +1 -0
  82. package/dist/fm9/index.js +3 -0
  83. package/dist/fm9/params.d.ts +29 -0
  84. package/dist/fm9/params.d.ts.map +1 -0
  85. package/dist/fm9/params.js +2064 -0
  86. package/dist/fm9/ranges.generated.d.ts +46 -0
  87. package/dist/fm9/ranges.generated.d.ts.map +1 -0
  88. package/dist/fm9/ranges.generated.js +2106 -0
  89. package/dist/fm9/rosters.generated.d.ts +7 -0
  90. package/dist/fm9/rosters.generated.d.ts.map +1 -0
  91. package/dist/fm9/rosters.generated.js +512 -0
  92. package/dist/shared/effectId.d.ts +56 -0
  93. package/dist/shared/effectId.d.ts.map +1 -0
  94. package/dist/shared/effectId.js +117 -0
  95. package/dist/shared/index.d.ts +1 -0
  96. package/dist/shared/index.d.ts.map +1 -1
  97. package/dist/shared/index.js +1 -0
  98. package/dist/shared/lineage/amp-lineage.json +270 -292
  99. package/dist/shared/lineage/axefx2-amp-lineage.json +343 -147
  100. package/dist/shared/lineage/cab-lineage.json +10777 -10777
  101. package/dist/shared/lineage/chorus-lineage.json +173 -173
  102. package/dist/shared/lineage/compressor-lineage.json +338 -338
  103. package/dist/shared/lineage/delay-lineage.json +313 -313
  104. package/dist/shared/lineage/drive-lineage.json +217 -39
  105. package/dist/shared/lineage/flanger-lineage.json +313 -313
  106. package/dist/shared/lineage/phaser-lineage.json +208 -208
  107. package/dist/shared/lineage/reverb-lineage.json +793 -793
  108. package/dist/shared/lineage/wah-lineage.json +117 -117
  109. package/dist/shared/lineageLookup.d.ts +1 -0
  110. package/dist/shared/lineageLookup.d.ts.map +1 -1
  111. package/dist/shared/lineageLookup.js +4 -0
  112. package/dist/vp4/index.d.ts +3 -0
  113. package/dist/vp4/index.d.ts.map +1 -0
  114. package/dist/vp4/index.js +2 -0
  115. package/dist/vp4/params.d.ts +27 -0
  116. package/dist/vp4/params.d.ts.map +1 -0
  117. package/dist/vp4/params.js +1702 -0
  118. package/dist/vp4/setParam.d.ts +59 -0
  119. package/dist/vp4/setParam.d.ts.map +1 -0
  120. package/dist/vp4/setParam.js +161 -0
  121. package/package.json +21 -2
package/NOTICE CHANGED
@@ -26,3 +26,20 @@ descriptively (nominative fair use) to identify the hardware family
26
26
  this library targets. The library does not embed Fractal Audio
27
27
  firmware, factory presets, branding assets, or any other Fractal-
28
28
  copyrighted material.
29
+
30
+ ---
31
+
32
+ THIRD-PARTY SOFTWARE
33
+
34
+ This library includes gen-3 (Axe-Fx III / FM3 / FM9) protocol data
35
+ derived from:
36
+
37
+ - fractal-syx-codec (Apache License, Version 2.0)
38
+ Copyright 2026 Andrew Mercurio ("BoodieTraps")
39
+ https://github.com/drewmerc302/fractal-syx-codec
40
+ The gen-3 preset-file format spec (FORMAT.md) and the read-ordinal
41
+ effect-type roster tables (shipped as the gen-3 read rosters /
42
+ body-decode tables). The Huffman/CRC codec is a clean-room
43
+ reimplementation from that spec; the roster name tables are derived
44
+ from its data, independently cross-validated against our own
45
+ hardware captures.
package/README.md CHANGED
@@ -4,10 +4,11 @@ Pure-TypeScript codec and parameter dictionaries for Fractal Audio
4
4
  guitar processors. Build and parse the SysEx wire bytes a Fractal
5
5
  device speaks, without pulling in a MIDI transport library.
6
6
 
7
- > **First public release.** Covers AM4 and Axe-Fx II at hardware-verified
8
- > parity, plus the Axe-Fx III at codec + calibration via public-capture
9
- > verification and JUCE-BinaryData mining (III hardware-verification stays
10
- > community-driven see the III notes in the coverage table).
7
+ > Covers AM4 and Axe-Fx II at hardware-verified parity, the modern Fractal
8
+ > family (Axe-Fx III / FM3 / FM9) at codec and calibration via public-capture
9
+ > verification and editor-binary mining, and the Axe-Fx Standard/Ultra (gen-1)
10
+ > as a SET-only descriptor. The gen-3 family stays community-driven for
11
+ > hardware verification; see the per-device notes in the coverage table.
11
12
 
12
13
  > **Unaffiliated community library.** "Fractal Audio", "AM4",
13
14
  > "Axe-Fx", "Axe-Fx II", "Axe-Fx III", "FM3", and "FM9" are
@@ -20,16 +21,16 @@ device speaks, without pulling in a MIDI transport library.
20
21
 
21
22
  ## What this is
22
23
 
23
- - **JSON-shaped parameter dictionaries** every block-and-param the
24
+ - **JSON-shaped parameter dictionaries.** Every block-and-param the
24
25
  device understands, with display unit, value range, and the
25
26
  paramId that goes on the wire. Reverse-engineered against real
26
27
  hardware and Fractal's own published 3rd-party MIDI specs.
27
- - **Pure-TypeScript codec** display value in (`gain: 7.5`,
28
+ - **Pure-TypeScript codec.** Display value in (`gain: 7.5`,
28
29
  `'Plexi 100W High'`), SysEx bytes out (`Uint8Array`). No MIDI
29
30
  library required.
30
- - **Parsers / validators** given captured bytes, parse back to
31
+ - **Parsers and validators.** Given captured bytes, parse back to
31
32
  display values for round-trip equality testing.
32
- - **Reference data** Fractal's amp / cab / drive lineage tables
33
+ - **Reference data.** Fractal's amp / cab / drive lineage tables
33
34
  (the "the JC-120 model is based on this real-world amp" data),
34
35
  factory bank metadata, applicability tables.
35
36
 
@@ -37,7 +38,7 @@ device speaks, without pulling in a MIDI transport library.
37
38
 
38
39
  - **Not a MIDI library.** Routing bytes to and from your hardware
39
40
  is your responsibility. Use `node-midi`, `webmidi`,
40
- `easymidi`, JUCE, RtMidi, CoreMIDI, ALSA whatever fits.
41
+ `easymidi`, JUCE, RtMidi, CoreMIDI, ALSA, whatever fits.
41
42
  - **Not a preset editor.** This package gives you the wire-level
42
43
  primitives a preset editor would be built on top of.
43
44
  - **Not affiliated with Fractal Audio Systems.** See the trademark
@@ -83,9 +84,10 @@ import { params } from 'fractal-midi/axe-fx-iii';
83
84
  |---|---|---|---|---|
84
85
  | AM4 | ✅ | ✅ | ✅ | ✅ |
85
86
  | Axe-Fx II | ✅ | ✅ | ✅ | ✅ |
86
- | Axe-Fx III | ✅ (2216 params) | ✅ ([see note](#axe-fx-iii-codec-note)) | ✅ ([see note](#axe-fx-iii-calibration-note)) | 🟡 community beta ([see note](#axe-fx-iii-hardware-note)) |
87
- | FM3 | | | | ❌ |
88
- | FM9 | | | | ❌ |
87
+ | Axe-Fx III | ✅ (full catalog) | ✅ ([see note](#axe-fx-iii-codec-note)) | ✅ ([see note](#axe-fx-iii-calibration-note)) | 🟡 community beta ([see note](#axe-fx-iii-hardware-note)) |
88
+ | FM3 | (device-true, mined from FM3-Edit) | (shared gen-3) | 🟡 (linear; some non-linear pending) | ❌ community beta |
89
+ | FM9 | (device-true, mined from FM9-Edit) | (shared gen-3) | 🟡 (linear; some non-linear pending) | ❌ community beta |
90
+ | Axe-Fx Standard/Ultra (gen-1) | ✅ (922 params) | ✅ (nibble-split, SET-only) | 🟡 (linear; 171 non-linear pending) | ❌ community beta (no gen-1 hardware) |
89
91
 
90
92
  ### Coverage notes
91
93
 
@@ -93,9 +95,9 @@ import { params } from 'fractal-midi/axe-fx-iii';
93
95
 
94
96
  The III's SET_PARAMETER wire envelope (fn=0x01, sub-action `09 00`,
95
97
  23-byte frame) is byte-verified against 10 public community captures
96
- spanning two effect blocks and two sub-action codes see the
97
- `axe-fx-iii/setparam` test goldens (302 cases: 36 envelope vectors +
98
- 264 round-trip `build parse equality` cases + 2
98
+ spanning two effect blocks and two sub-action codes. See the
99
+ `axe-fx-iii/setparam` test goldens (302 cases: 36 envelope vectors,
100
+ 264 round-trip `build` to `parse` to equality cases, and 2
99
101
  `parseStateBroadcast` assertions). The GET-response shape is
100
102
  hypothesis-only (no public capture exists); the parser handles both
101
103
  the `09 00` / `52 00` set-echo shape and the async `04 01`
@@ -106,14 +108,14 @@ STATE_BROADCAST shape via `parseSetGetParameterResponse` /
106
108
 
107
109
  III calibration = 100% of catalog entries carry a non-`'unverified'`
108
110
  unit tag (16 string-typed `_NAME` / `_LABEL` / `_MSG` entries are
109
- exempted by the calibration gate they have no `'string'` unit in
111
+ exempted by the calibration gate, since they have no `'string'` unit in
110
112
  the `Param` type). Enum vocabularies are resolved at runtime via
111
113
  `resolveEnumValues(name)` from `enumOverlay.ts`, which carries a
112
- `provenance` field on every entry `'am4-shared'` (AM4-verified,
114
+ `provenance` field on every entry: `'am4-shared'` (AM4-verified,
113
115
  shared with III), `'fractal-convention'` (universal Fractal-family
114
116
  convention like OFF/ON / channel pickers), or `'iii-spec'` (hand-
115
117
  curated for III-only params). Coverage of enum vocabularies and
116
- numeric display ranges is partial `resolveEnumValues` returns
118
+ numeric display ranges is partial: `resolveEnumValues` returns
117
119
  `undefined` for params not yet mapped, and many XML-derived numeric
118
120
  entries carry a unit tag but no `displayMin` / `displayMax`. Treat
119
121
  the catalog as the wire-level truth; treat the calibration overlay
@@ -130,9 +132,14 @@ that disagrees with their hardware.
130
132
 
131
133
  FM3 and FM9 share the III protocol family (model bytes `0x11` /
132
134
  `0x12` vs III's `0x10`, identical envelope per Fractal's v1.4 MIDI
133
- spec). Catalog + codec + calibration for those devices are planned as
134
- mechanical ports of the III pipeline once the FM3-Edit / FM9-Edit
135
- JUCE binaries are mined for parameterName + dispatcher tables.
135
+ spec). Both ship device-true param catalogs mined from their own
136
+ FM3-Edit / FM9-Edit JUCE binaries (paramIds are device-specific and are
137
+ never reused from the III) on the shared gen-3 codec. Calibration
138
+ covers the linear params; some non-linear display formulas are still
139
+ pending. Neither has been hardware-verified by the maintainer, so they
140
+ remain community beta: FM9 has real community captures confirming the
141
+ shared read and preset-dump paths, while FM3 confirmation is still
142
+ open.
136
143
 
137
144
  ## License
138
145