fractal-midi 0.3.1 → 0.4.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/NOTICE +1 -1
- package/README.md +39 -24
- package/catalog/axe-fx-gen1.json +1 -1
- package/catalog/axe-fx-ii.json +1 -1
- package/catalog/axe-fx-iii.json +1 -1
- package/catalog/fm3.json +1 -1
- package/catalog/fm9.json +1 -1
- package/catalog/vp4.json +1 -1
- package/dist/am4/setParam.d.ts.map +1 -1
- package/dist/am4/setParam.js +1 -5
- package/dist/gen1/blockTypes.d.ts.map +1 -0
- package/dist/gen1/index.d.ts.map +1 -0
- package/dist/{axe-fx-gen1 → gen1}/index.js +1 -1
- package/dist/gen1/nibble.d.ts.map +1 -0
- package/dist/gen1/params.d.ts.map +1 -0
- package/dist/gen1/readParam.d.ts.map +1 -0
- package/dist/gen1/setParam.d.ts.map +1 -0
- package/dist/gen1/types.d.ts.map +1 -0
- package/dist/gen2/axe-fx-ii/applicability.d.ts.map +1 -0
- package/dist/gen2/axe-fx-ii/blockTypes.d.ts.map +1 -0
- package/dist/gen2/axe-fx-ii/index.d.ts.map +1 -0
- package/dist/{axe-fx-ii → gen2/axe-fx-ii}/index.js +1 -1
- package/dist/gen2/axe-fx-ii/opcodes.d.ts.map +1 -0
- package/dist/gen2/axe-fx-ii/paramAliases.d.ts.map +1 -0
- package/dist/gen2/axe-fx-ii/params.d.ts.map +1 -0
- package/dist/{axe-fx-ii → gen2/axe-fx-ii}/setParam.d.ts +17 -46
- package/dist/gen2/axe-fx-ii/setParam.d.ts.map +1 -0
- package/dist/{axe-fx-ii → gen2/axe-fx-ii}/setParam.js +21 -69
- package/dist/gen2/axe-fx-ii/typeApplicability.d.ts.map +1 -0
- package/dist/gen3/axe-fx-iii/blockTypes.d.ts.map +1 -0
- package/dist/gen3/axe-fx-iii/enumOverlay.d.ts.map +1 -0
- package/dist/{axe-fx-iii → gen3/axe-fx-iii}/enumOverlay.js +1 -1
- package/dist/gen3/axe-fx-iii/enumRawId.d.ts.map +1 -0
- package/dist/gen3/axe-fx-iii/gen3ReadRosters.d.ts.map +1 -0
- package/dist/gen3/axe-fx-iii/index.d.ts.map +1 -0
- package/dist/{axe-fx-iii → gen3/axe-fx-iii}/index.js +1 -1
- package/dist/{axe-fx-iii → gen3/axe-fx-iii}/params.d.ts +3 -63
- package/dist/gen3/axe-fx-iii/params.d.ts.map +1 -0
- package/dist/{axe-fx-iii → gen3/axe-fx-iii}/params.js +1 -1
- package/dist/{axe-fx-iii → gen3/axe-fx-iii}/setParam.d.ts +23 -18
- package/dist/gen3/axe-fx-iii/setParam.d.ts.map +1 -0
- package/dist/{axe-fx-iii → gen3/axe-fx-iii}/setParam.js +20 -43
- package/dist/gen3/fm3/index.d.ts.map +1 -0
- package/dist/{fm3 → gen3/fm3}/params.d.ts +1 -1
- package/dist/gen3/fm3/params.d.ts.map +1 -0
- package/dist/gen3/fm9/enumOverrides.d.ts.map +1 -0
- package/dist/gen3/fm9/index.d.ts.map +1 -0
- package/dist/{fm9 → gen3/fm9}/params.d.ts +1 -1
- package/dist/gen3/fm9/params.d.ts.map +1 -0
- package/dist/gen3/fm9/ranges.generated.d.ts.map +1 -0
- package/dist/gen3/fm9/rosters.generated.d.ts.map +1 -0
- package/dist/gen3/types.d.ts +75 -0
- package/dist/gen3/types.d.ts.map +1 -0
- package/dist/gen3/types.js +13 -0
- package/dist/gen3/vp4/index.d.ts.map +1 -0
- package/dist/{vp4 → gen3/vp4}/params.d.ts +1 -1
- package/dist/gen3/vp4/params.d.ts.map +1 -0
- package/dist/{vp4 → gen3/vp4}/setParam.d.ts +5 -3
- package/dist/gen3/vp4/setParam.d.ts.map +1 -0
- package/dist/{vp4 → gen3/vp4}/setParam.js +12 -29
- package/dist/index.js +1 -1
- package/dist/shared/displayScale.d.ts +52 -0
- package/dist/shared/displayScale.d.ts.map +1 -0
- package/dist/shared/displayScale.js +55 -0
- package/dist/shared/effectId.js +2 -2
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +4 -1
- package/dist/shared/septet16.d.ts +48 -0
- package/dist/shared/septet16.d.ts.map +1 -0
- package/dist/shared/septet16.js +65 -0
- package/package.json +19 -19
- package/dist/axe-fx-gen1/blockTypes.d.ts.map +0 -1
- package/dist/axe-fx-gen1/index.d.ts.map +0 -1
- package/dist/axe-fx-gen1/nibble.d.ts.map +0 -1
- package/dist/axe-fx-gen1/params.d.ts.map +0 -1
- package/dist/axe-fx-gen1/readParam.d.ts.map +0 -1
- package/dist/axe-fx-gen1/setParam.d.ts.map +0 -1
- package/dist/axe-fx-gen1/types.d.ts.map +0 -1
- package/dist/axe-fx-ii/applicability.d.ts.map +0 -1
- package/dist/axe-fx-ii/blockTypes.d.ts.map +0 -1
- package/dist/axe-fx-ii/index.d.ts.map +0 -1
- package/dist/axe-fx-ii/opcodes.d.ts.map +0 -1
- package/dist/axe-fx-ii/paramAliases.d.ts.map +0 -1
- package/dist/axe-fx-ii/params.d.ts.map +0 -1
- package/dist/axe-fx-ii/setParam.d.ts.map +0 -1
- package/dist/axe-fx-ii/typeApplicability.d.ts.map +0 -1
- package/dist/axe-fx-iii/blockTypes.d.ts.map +0 -1
- package/dist/axe-fx-iii/enumOverlay.d.ts.map +0 -1
- package/dist/axe-fx-iii/enumRawId.d.ts.map +0 -1
- package/dist/axe-fx-iii/gen3ReadRosters.d.ts.map +0 -1
- package/dist/axe-fx-iii/index.d.ts.map +0 -1
- package/dist/axe-fx-iii/params.d.ts.map +0 -1
- package/dist/axe-fx-iii/setParam.d.ts.map +0 -1
- package/dist/fm3/index.d.ts.map +0 -1
- package/dist/fm3/params.d.ts.map +0 -1
- package/dist/fm9/enumOverrides.d.ts.map +0 -1
- package/dist/fm9/index.d.ts.map +0 -1
- package/dist/fm9/params.d.ts.map +0 -1
- package/dist/fm9/ranges.generated.d.ts.map +0 -1
- package/dist/fm9/rosters.generated.d.ts.map +0 -1
- package/dist/vp4/index.d.ts.map +0 -1
- package/dist/vp4/params.d.ts.map +0 -1
- package/dist/vp4/setParam.d.ts.map +0 -1
- /package/dist/{axe-fx-gen1 → gen1}/blockTypes.d.ts +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/blockTypes.js +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/index.d.ts +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/nibble.d.ts +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/nibble.js +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/params.d.ts +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/params.js +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/readParam.d.ts +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/readParam.js +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/setParam.d.ts +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/setParam.js +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/types.d.ts +0 -0
- /package/dist/{axe-fx-gen1 → gen1}/types.js +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/applicability.d.ts +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/applicability.js +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/blockTypes.d.ts +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/blockTypes.js +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/index.d.ts +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/opcodes.d.ts +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/opcodes.js +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/paramAliases.d.ts +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/paramAliases.js +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/params.d.ts +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/params.js +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/typeApplicability.d.ts +0 -0
- /package/dist/{axe-fx-ii → gen2/axe-fx-ii}/typeApplicability.js +0 -0
- /package/dist/{axe-fx-iii → gen3/axe-fx-iii}/blockTypes.d.ts +0 -0
- /package/dist/{axe-fx-iii → gen3/axe-fx-iii}/blockTypes.js +0 -0
- /package/dist/{axe-fx-iii → gen3/axe-fx-iii}/enumOverlay.d.ts +0 -0
- /package/dist/{axe-fx-iii → gen3/axe-fx-iii}/enumRawId.d.ts +0 -0
- /package/dist/{axe-fx-iii → gen3/axe-fx-iii}/enumRawId.js +0 -0
- /package/dist/{axe-fx-iii → gen3/axe-fx-iii}/gen3ReadRosters.d.ts +0 -0
- /package/dist/{axe-fx-iii → gen3/axe-fx-iii}/gen3ReadRosters.js +0 -0
- /package/dist/{axe-fx-iii → gen3/axe-fx-iii}/index.d.ts +0 -0
- /package/dist/{fm3 → gen3/fm3}/index.d.ts +0 -0
- /package/dist/{fm3 → gen3/fm3}/index.js +0 -0
- /package/dist/{fm3 → gen3/fm3}/params.js +0 -0
- /package/dist/{fm9 → gen3/fm9}/enumOverrides.d.ts +0 -0
- /package/dist/{fm9 → gen3/fm9}/enumOverrides.js +0 -0
- /package/dist/{fm9 → gen3/fm9}/index.d.ts +0 -0
- /package/dist/{fm9 → gen3/fm9}/index.js +0 -0
- /package/dist/{fm9 → gen3/fm9}/params.js +0 -0
- /package/dist/{fm9 → gen3/fm9}/ranges.generated.d.ts +0 -0
- /package/dist/{fm9 → gen3/fm9}/ranges.generated.js +0 -0
- /package/dist/{fm9 → gen3/fm9}/rosters.generated.d.ts +0 -0
- /package/dist/{fm9 → gen3/fm9}/rosters.generated.js +0 -0
- /package/dist/{vp4 → gen3/vp4}/index.d.ts +0 -0
- /package/dist/{vp4 → gen3/vp4}/index.js +0 -0
- /package/dist/{vp4 → gen3/vp4}/params.js +0 -0
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
* defensible Fractal-convention units. ~146 entries.
|
|
35
35
|
*
|
|
36
36
|
* Enum vocabularies (resolveEnumValues lookup):
|
|
37
|
-
* - `src/axe-fx-iii/enumOverlay.ts` provides a runtime-joined enum
|
|
37
|
+
* - `src/gen3/axe-fx-iii/enumOverlay.ts` provides a runtime-joined enum
|
|
38
38
|
* vocabulary layer combining AM4-verified shared tables (LFO
|
|
39
39
|
* waveforms, tempo divisions, filter slopes, channel pickers),
|
|
40
40
|
* universal Fractal binary toggles (OFF/ON, ENGAGED/BYPASSED), and
|
|
@@ -92,68 +92,8 @@
|
|
|
92
92
|
* STATE_BROADCAST appears to be an AxeEdit-driven heartbeat poll,
|
|
93
93
|
* NOT a sync SET echo. See `docs/SYSEX-MAP-AXE-FX-III.md` §0x01.
|
|
94
94
|
*/
|
|
95
|
-
|
|
96
|
-
|
|
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 fn=0x01 PARAMETER_SETGET 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
|
-
}
|
|
95
|
+
import type { Unit, Param } from '../types.js';
|
|
96
|
+
export type { Unit, Param };
|
|
157
97
|
/**
|
|
158
98
|
* Flat catalog of every (family, paramId) entry mined from the
|
|
159
99
|
* Axe-Edit III dispatcher. Sorted by family-case-index ascending,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/gen3/axe-fx-iii/params.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAI5B;;;;;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"}
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
* defensible Fractal-convention units. ~146 entries.
|
|
35
35
|
*
|
|
36
36
|
* Enum vocabularies (resolveEnumValues lookup):
|
|
37
|
-
* - `src/axe-fx-iii/enumOverlay.ts` provides a runtime-joined enum
|
|
37
|
+
* - `src/gen3/axe-fx-iii/enumOverlay.ts` provides a runtime-joined enum
|
|
38
38
|
* vocabulary layer combining AM4-verified shared tables (LFO
|
|
39
39
|
* waveforms, tempo divisions, filter slopes, channel pickers),
|
|
40
40
|
* universal Fractal binary toggles (OFF/ON, ENGAGED/BYPASSED), and
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { packValue16, unpackValue16 } from '../../shared/septet16.js';
|
|
1
2
|
/** Axe-Fx III model byte. From Fractal's published spec. */
|
|
2
3
|
export declare const AXE_FX_III_MODEL_ID = 16;
|
|
3
4
|
export declare const FN_SET_GET_BYPASS = 10;
|
|
@@ -73,21 +74,19 @@ export declare const FN_PARAMETER_SETGET = 1;
|
|
|
73
74
|
/** Query sentinel — when this is the value byte, the device responds with current state. */
|
|
74
75
|
export declare const QUERY_SENTINEL = 127;
|
|
75
76
|
/**
|
|
76
|
-
*
|
|
77
|
+
* `packValue16` / `unpackValue16` (16-bit unsigned across three 7-bit
|
|
78
|
+
* septets: bits 6..0, 13..7, 15..14) are re-exported from
|
|
79
|
+
* `fractal-midi/shared` (`shared/septet16.ts`) — one canonical
|
|
80
|
+
* implementation shared byte-identically with the gen-2 codec.
|
|
77
81
|
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* scaled with firmware). All observed III captures use 14-bit values
|
|
85
|
-
* (pos 17 always zero); the 16-bit slot exists in the envelope shape
|
|
86
|
-
* but isn't exercised by any public capture yet.
|
|
82
|
+
* Value-range note (III-observed): valid input range 0..65534 (16-bit
|
|
83
|
+
* minus one — II wiki convention, carried forward to the III on the
|
|
84
|
+
* assumption param-value ranges scaled with firmware). All observed III
|
|
85
|
+
* captures use 14-bit values (pos 17 always zero); the 16-bit slot
|
|
86
|
+
* exists in the envelope shape but isn't exercised by any public
|
|
87
|
+
* capture yet.
|
|
87
88
|
*/
|
|
88
|
-
export
|
|
89
|
-
/** Inverse of `packValue16`. Inputs may have unused upper bits — masked. */
|
|
90
|
-
export declare function unpackValue16(b0: number, b1: number, b2: number): number;
|
|
89
|
+
export { packValue16, unpackValue16 };
|
|
91
90
|
/**
|
|
92
91
|
* Pack a 32-bit unsigned value into five 7-bit septets, LSB-first.
|
|
93
92
|
*
|
|
@@ -302,7 +301,7 @@ export declare const FN_REQUEST_PRESET_DUMP = 3;
|
|
|
302
301
|
/**
|
|
303
302
|
* Build the fn=0x03 REQUEST_PRESET_DUMP for a STORED preset. The device
|
|
304
303
|
* replies with the 0x77 header + N×0x78 body + 0x79 footer dump; collect
|
|
305
|
-
* those frames and parse with `fractal-
|
|
304
|
+
* those frames and parse with `fractal-gen3`'s `parsePresetDump`.
|
|
306
305
|
* Read-only: carries no value, mutates nothing on the device.
|
|
307
306
|
*
|
|
308
307
|
* `presetNumber` is the stored-location index (FM9: 0..511; the III banks
|
|
@@ -503,14 +502,20 @@ export declare function xorChecksum32Words(words: readonly number[]): number;
|
|
|
503
502
|
* 128..255 = bank 1 PC 0..127, etc.
|
|
504
503
|
*
|
|
505
504
|
* BANK-SELECT ENCODING DIVERGES BY DEVICE:
|
|
506
|
-
* - `'standard'` (default; Axe-Fx III
|
|
505
|
+
* - `'standard'` (default; Axe-Fx III per the v1.4 spec): the device
|
|
507
506
|
* reads bank = (CC0 << 7) | CC32, so CC0 = bank>>7 (MSB) and CC32 =
|
|
508
507
|
* bank&0x7f (LSB). For banks 0..7 CC0 is 0 and CC32 carries the bank.
|
|
509
508
|
* - `'msb'` (FM9, hardware-confirmed on a real unit 2026-06-06 via the
|
|
510
|
-
* community fm9-catalog probe
|
|
509
|
+
* community fm9-catalog probe; FM3 fw 12.00 field-confirmed to IGNORE
|
|
510
|
+
* CC32 on 2026-06-12 — a 'standard' switch to preset 438 landed on
|
|
511
|
+
* 54 = 438 mod 128, so the FM3 is NOT 'standard' despite the v1.4
|
|
512
|
+
* spec naming it): the device reads the bank from CC0/MSB and
|
|
511
513
|
* IGNORES CC32. With the standard encoding, any preset above 127 (bank
|
|
512
|
-
* >0) lands in bank 0 because the bank sits in CC32, which
|
|
513
|
-
* So the bank must go in CC0; CC32 is sent as 0 (
|
|
514
|
+
* >0) lands in bank 0 because the bank sits in CC32, which gets dropped.
|
|
515
|
+
* So the bank must go in CC0; CC32 is sent as 0 (ignored).
|
|
516
|
+
* Note the FM3's default switch_preset path is the SysEx-native
|
|
517
|
+
* sub=0x27 switch (FM3-hardware-confirmed), not PC — see
|
|
518
|
+
* buildSwitchPresetSysEx.
|
|
514
519
|
*
|
|
515
520
|
* This is a per-device read divergence with no single universal encoding
|
|
516
521
|
* (a CC0-only reader and a (CC0<<7)|CC32 reader cannot both be satisfied for
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setParam.d.ts","sourceRoot":"","sources":["../../../src/gen3/axe-fx-iii/setParam.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,8 +32,9 @@
|
|
|
32
32
|
* community RE; not in v1.4.
|
|
33
33
|
* - SET_PRESET_NAME / SET_SCENE_NAME — names are query-only.
|
|
34
34
|
*/
|
|
35
|
-
import { fractalChecksum } from '
|
|
36
|
-
import { packValueChunked, unpackValueChunked } from '
|
|
35
|
+
import { fractalChecksum } from '../../shared/checksum.js';
|
|
36
|
+
import { packValueChunked, unpackValueChunked } from '../../shared/packValue.js';
|
|
37
|
+
import { encode14, decode14, packValue16, unpackValue16 } from '../../shared/septet16.js';
|
|
37
38
|
/** Axe-Fx III model byte. From Fractal's published spec. */
|
|
38
39
|
export const AXE_FX_III_MODEL_ID = 0x10;
|
|
39
40
|
/** SysEx framing bytes shared across the entire modern Fractal family. */
|
|
@@ -117,21 +118,10 @@ const SUB_ACTION_STATE_BROADCAST = [0x04, 0x01];
|
|
|
117
118
|
/** Query sentinel — when this is the value byte, the device responds with current state. */
|
|
118
119
|
export const QUERY_SENTINEL = 0x7f;
|
|
119
120
|
// ── Encoding helpers ───────────────────────────────────────────────
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
*/
|
|
125
|
-
function encode14(n) {
|
|
126
|
-
if (!Number.isInteger(n) || n < 0 || n > 0x3fff) {
|
|
127
|
-
throw new Error(`encode14: ${n} out of range (0..16383)`);
|
|
128
|
-
}
|
|
129
|
-
return [n & 0x7f, (n >> 7) & 0x7f];
|
|
130
|
-
}
|
|
131
|
-
/** Decode a 2-byte septet pair (low 7 bits then high 7 bits) into a 14-bit integer. */
|
|
132
|
-
function decode14(lo, hi) {
|
|
133
|
-
return (lo & 0x7f) | ((hi & 0x7f) << 7);
|
|
134
|
-
}
|
|
121
|
+
//
|
|
122
|
+
// `encode14` / `decode14` (2-byte LSB-first septet pair — preset
|
|
123
|
+
// numbers, BPMs, effect IDs across the Fractal family) come from
|
|
124
|
+
// `fractal-midi/shared` (`shared/septet16.ts`), imported above.
|
|
135
125
|
/**
|
|
136
126
|
* Build an envelope: `F0 00 01 74 [model] [function] [payload...]
|
|
137
127
|
* [checksum] F7`. Checksum covers everything from `F0` through the
|
|
@@ -181,32 +171,19 @@ function buildEnvelope(fn, payload, modelByte = AXE_FX_III_MODEL_ID) {
|
|
|
181
171
|
// modifier / tailCount / tail (the rest of FUN_14033ec70) stay zero and are not
|
|
182
172
|
// exposed. Byte-exact vs the 5 oracle frames in setparam.test.ts.
|
|
183
173
|
/**
|
|
184
|
-
*
|
|
174
|
+
* `packValue16` / `unpackValue16` (16-bit unsigned across three 7-bit
|
|
175
|
+
* septets: bits 6..0, 13..7, 15..14) are re-exported from
|
|
176
|
+
* `fractal-midi/shared` (`shared/septet16.ts`) — one canonical
|
|
177
|
+
* implementation shared byte-identically with the gen-2 codec.
|
|
185
178
|
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
* scaled with firmware). All observed III captures use 14-bit values
|
|
193
|
-
* (pos 17 always zero); the 16-bit slot exists in the envelope shape
|
|
194
|
-
* but isn't exercised by any public capture yet.
|
|
179
|
+
* Value-range note (III-observed): valid input range 0..65534 (16-bit
|
|
180
|
+
* minus one — II wiki convention, carried forward to the III on the
|
|
181
|
+
* assumption param-value ranges scaled with firmware). All observed III
|
|
182
|
+
* captures use 14-bit values (pos 17 always zero); the 16-bit slot
|
|
183
|
+
* exists in the envelope shape but isn't exercised by any public
|
|
184
|
+
* capture yet.
|
|
195
185
|
*/
|
|
196
|
-
export
|
|
197
|
-
if (!Number.isInteger(value) || value < 0 || value > 0xffff) {
|
|
198
|
-
throw new Error(`packValue16 input out of range: ${value}`);
|
|
199
|
-
}
|
|
200
|
-
return [
|
|
201
|
-
value & 0x7f,
|
|
202
|
-
(value >> 7) & 0x7f,
|
|
203
|
-
(value >> 14) & 0x03,
|
|
204
|
-
];
|
|
205
|
-
}
|
|
206
|
-
/** Inverse of `packValue16`. Inputs may have unused upper bits — masked. */
|
|
207
|
-
export function unpackValue16(b0, b1, b2) {
|
|
208
|
-
return ((b0 & 0x7f)) | ((b1 & 0x7f) << 7) | ((b2 & 0x03) << 14);
|
|
209
|
-
}
|
|
186
|
+
export { packValue16, unpackValue16 };
|
|
210
187
|
/**
|
|
211
188
|
* Pack a 32-bit unsigned value into five 7-bit septets, LSB-first.
|
|
212
189
|
*
|
|
@@ -559,7 +536,7 @@ export function buildBlockBulkReadPoll(effectId, modelByte = AXE_FX_III_MODEL_ID
|
|
|
559
536
|
// `docs/_private/FM9-CAPTURE-RECEIVE+SWEEP-2026-06-04.md` and re-verified
|
|
560
537
|
// by the `fm9-decode-verify` workflow). A 10-byte request that asks the
|
|
561
538
|
// device to send a STORED preset back as the 0x77/0x78/0x79 dump chain
|
|
562
|
-
// (head + N×body + tail), the same envelope `fractal-
|
|
539
|
+
// (head + N×body + tail), the same envelope `fractal-gen3`'s
|
|
563
540
|
// `presetDump.ts` already parses/serializes. This is the read/backup
|
|
564
541
|
// trigger; it mutates nothing on the device.
|
|
565
542
|
//
|
|
@@ -578,7 +555,7 @@ export const FN_REQUEST_PRESET_DUMP = 0x03;
|
|
|
578
555
|
/**
|
|
579
556
|
* Build the fn=0x03 REQUEST_PRESET_DUMP for a STORED preset. The device
|
|
580
557
|
* replies with the 0x77 header + N×0x78 body + 0x79 footer dump; collect
|
|
581
|
-
* those frames and parse with `fractal-
|
|
558
|
+
* those frames and parse with `fractal-gen3`'s `parsePresetDump`.
|
|
582
559
|
* Read-only: carries no value, mutates nothing on the device.
|
|
583
560
|
*
|
|
584
561
|
* `presetNumber` is the stored-location index (FM9: 0..511; the III banks
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/gen3/fm3/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* catalog uses; join by name, not paramId). The rest stay 'unverified' and pass
|
|
21
21
|
* the raw 16-bit wire integer through, same as the III's uncalibrated path.
|
|
22
22
|
*/
|
|
23
|
-
import type { Param } from '../
|
|
23
|
+
import type { Param } from '../types.js';
|
|
24
24
|
export declare const FM3_PARAMS: readonly Param[];
|
|
25
25
|
/** Params grouped by effect family (built once at module load). */
|
|
26
26
|
export declare const FM3_PARAMS_BY_FAMILY: Readonly<Record<string, readonly Param[]>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/gen3/fm3/params.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,eAAO,MAAM,UAAU,EAAE,SAAS,KAAK,EAs+DtC,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC,CAMxE,CAAC;AAEL,wDAAwD;AACxD,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAA0b,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enumOverrides.d.ts","sourceRoot":"","sources":["../../../src/gen3/fm9/enumOverrides.ts"],"names":[],"mappings":"AAwCA,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CA4BzF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/gen3/fm9/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC"}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* catalog uses; join by name, not paramId). The rest stay 'unverified' and pass
|
|
21
21
|
* the raw 16-bit wire integer through, same as the III's uncalibrated path.
|
|
22
22
|
*/
|
|
23
|
-
import type { Param } from '../
|
|
23
|
+
import type { Param } from '../types.js';
|
|
24
24
|
export declare const FM9_PARAMS: readonly Param[];
|
|
25
25
|
/** Params grouped by effect family (built once at module load). */
|
|
26
26
|
export declare const FM9_PARAMS_BY_FAMILY: Readonly<Record<string, readonly Param[]>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/gen3/fm9/params.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,eAAO,MAAM,UAAU,EAAE,SAAS,KAAK,EAqgEtC,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC,CAMxE,CAAC;AAEL,wDAAwD;AACxD,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAA0b,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranges.generated.d.ts","sourceRoot":"","sources":["../../../src/gen3/fm9/ranges.generated.ts"],"names":[],"mappings":"AAsCA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;mDAG+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;gEAC4D;IAC5D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;mEAC+D;IAC/D,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,uFAAuF;AACvF,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CA49DxF,CAAC;AAEF;;;2DAG2D;AAC3D,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAyC3E,CAAC;AAEF;;4EAE4E;AAC5E,eAAO,MAAM,qBAAqB,EAAE,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAK3G,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rosters.generated.d.ts","sourceRoot":"","sources":["../../../src/gen3/fm9/rosters.generated.ts"],"names":[],"mappings":"AAQA,sEAAsE;AACtE,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4U3D,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuF7D,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgFnE,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gen-3 (modern Fractal family) shared catalog types.
|
|
3
|
+
*
|
|
4
|
+
* `Param` is the row shape of every gen-3 device-true param catalog
|
|
5
|
+
* (axe-fx-iii, fm3, fm9, vp4 — the fm3/fm9/vp4 catalogs are
|
|
6
|
+
* AUTO-GENERATED by `scripts/_research/generate-modern-fractal-catalog.ts`
|
|
7
|
+
* and import this type). The shape is shared; the catalog DATA is
|
|
8
|
+
* device-specific — paramIds are never reused across model bytes.
|
|
9
|
+
*
|
|
10
|
+
* Moved verbatim from `axe-fx-iii/params.ts` (which re-exports both
|
|
11
|
+
* types for compatibility).
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Display-unit tag for a gen-3 family parameter.
|
|
15
|
+
*
|
|
16
|
+
* `'unverified'` is the default for entries the generator could
|
|
17
|
+
* not infer (the AM4 has no matching parameter, or the III family
|
|
18
|
+
* has no AM4 analog). Other tags are AM4-derived display
|
|
19
|
+
* conventions — they describe the user-facing scale (dB, ms,
|
|
20
|
+
* knob_0_10, etc.) but NOT the gen-3 wire encoding. Display↔wire
|
|
21
|
+
* conversion is still the caller's responsibility
|
|
22
|
+
* until hardware verification lands.
|
|
23
|
+
*/
|
|
24
|
+
export type Unit = 'bipolar_percent' | 'count' | 'db' | 'degrees' | 'enum' | 'hz' | 'knob_0_10' | 'knob_0_20' | 'ms' | 'numeric' | 'percent' | 'pf' | 'ratio' | 'seconds' | 'semitones' | 'unverified';
|
|
25
|
+
/** One entry in a gen-3 device parameter catalog. */
|
|
26
|
+
export interface Param {
|
|
27
|
+
/**
|
|
28
|
+
* Effect family symbol (e.g. `'REVERB'`, `'DELAY'`, `'COMP'`).
|
|
29
|
+
* Sourced from the dispatcher's case → table-of-params mapping.
|
|
30
|
+
*/
|
|
31
|
+
family: string;
|
|
32
|
+
/**
|
|
33
|
+
* Parameter ID within the family. Wire-encoded as a 14-bit
|
|
34
|
+
* septet pair in fn=0x01 PARAMETER_SETGET frames. Values >= 65520 are
|
|
35
|
+
* firmware-internal sentinels and NOT wire-addressable — see
|
|
36
|
+
* the III catalog's file-level header for details.
|
|
37
|
+
*/
|
|
38
|
+
paramId: number;
|
|
39
|
+
/**
|
|
40
|
+
* Symbol name from the device editor's binary (e.g. `'REVERB_TYPE'`).
|
|
41
|
+
* Stable across firmware releases of the same generation.
|
|
42
|
+
*/
|
|
43
|
+
name: string;
|
|
44
|
+
/**
|
|
45
|
+
* Human-readable display label from the AxeEdit III JUCE-BinaryData
|
|
46
|
+
* XML mining — the editor's knob caption (e.g. `'Drive'` for
|
|
47
|
+
* `DISTORT_DRIVE`, `'Reverb Time'` for `REVERB_TIME`). Populated
|
|
48
|
+
* for ~91% of catalog entries; absent for symbols the editor
|
|
49
|
+
* doesn't render (firmware-internal blocks, sentinel paramIds).
|
|
50
|
+
* Useful as LLM prompt context independent of unit/range.
|
|
51
|
+
*/
|
|
52
|
+
displayLabel?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Display unit tag. `'unverified'` until hardware confirms
|
|
55
|
+
* the real shape; otherwise inferred from one of three sources
|
|
56
|
+
* (see the III catalog's file-level header for provenance — these
|
|
57
|
+
* are display conventions, not wire encodings).
|
|
58
|
+
*/
|
|
59
|
+
unit: Unit;
|
|
60
|
+
/**
|
|
61
|
+
* Display range minimum. Populated for AM4-inferred entries
|
|
62
|
+
* (`// inferred from AM4` trailing comment), absent for
|
|
63
|
+
* `unit: 'unverified'` entries.
|
|
64
|
+
*/
|
|
65
|
+
displayMin?: number;
|
|
66
|
+
/** Display range maximum. Same population rule as `displayMin`. */
|
|
67
|
+
displayMax?: number;
|
|
68
|
+
/**
|
|
69
|
+
* Optional non-linear scaling, AM4-inferred. `'log10'` for
|
|
70
|
+
* time / frequency knobs that span multiple decades. Absent
|
|
71
|
+
* for linear knobs or `'unverified'` entries.
|
|
72
|
+
*/
|
|
73
|
+
scaling?: 'linear' | 'log10';
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gen3/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gen-3 (modern Fractal family) shared catalog types.
|
|
3
|
+
*
|
|
4
|
+
* `Param` is the row shape of every gen-3 device-true param catalog
|
|
5
|
+
* (axe-fx-iii, fm3, fm9, vp4 — the fm3/fm9/vp4 catalogs are
|
|
6
|
+
* AUTO-GENERATED by `scripts/_research/generate-modern-fractal-catalog.ts`
|
|
7
|
+
* and import this type). The shape is shared; the catalog DATA is
|
|
8
|
+
* device-specific — paramIds are never reused across model bytes.
|
|
9
|
+
*
|
|
10
|
+
* Moved verbatim from `axe-fx-iii/params.ts` (which re-exports both
|
|
11
|
+
* types for compatibility).
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/gen3/vp4/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,OAAO,EACP,wBAAwB,EACxB,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,KAAK,YAAY,GAClB,MAAM,eAAe,CAAC"}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* unit is 'unverified' family-wide (no display calibration mined); the wire
|
|
19
19
|
* value passes through as a 16-bit integer, same as the III's uncalibrated path.
|
|
20
20
|
*/
|
|
21
|
-
import type { Param } from '../
|
|
21
|
+
import type { Param } from '../types.js';
|
|
22
22
|
export declare const VP4_PARAMS: readonly Param[];
|
|
23
23
|
/** Params grouped by effect family (built once at module load). */
|
|
24
24
|
export declare const VP4_PARAMS_BY_FAMILY: Readonly<Record<string, readonly Param[]>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/gen3/vp4/params.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,eAAO,MAAM,UAAU,EAAE,SAAS,KAAK,EA2pDtC,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC,CAMxE,CAAC;AAEL,wDAAwD;AACxD,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAAsc,CAAC"}
|
|
@@ -12,13 +12,15 @@ export declare const TC_SAVE = 27;
|
|
|
12
12
|
export declare const VP4_BYPASS_ON_NORMALIZED = 0.515625;
|
|
13
13
|
export declare const VP4_BYPASS_OFF_NORMALIZED = 0;
|
|
14
14
|
/**
|
|
15
|
-
* Encode a float32 as the VP4's on-wire 5-byte value: standard 5-septet LE
|
|
16
|
-
* the
|
|
15
|
+
* Encode a float32 as the VP4's on-wire 5-byte value: standard 5-septet LE
|
|
16
|
+
* (`encode5SeptetFloat32`, shared with the rest of the gen-3 codec) with
|
|
17
|
+
* the VP4-specific TOP-TWO-septet swap (emit `[s0,s1,s2,s4,s3]`).
|
|
17
18
|
*/
|
|
18
19
|
export declare function encodeVp4Float(value: number): [number, number, number, number, number];
|
|
19
20
|
/**
|
|
20
21
|
* Decode the VP4's on-wire 5-byte value field back to a float32. Input bytes are
|
|
21
|
-
* `[s0,s1,s2,s4,s3]` (top two swapped); un-swap, reassemble
|
|
22
|
+
* `[s0,s1,s2,s4,s3]` (top two swapped); un-swap, then reassemble/reinterpret via
|
|
23
|
+
* the shared gen-3 `decode5SeptetFloat32`.
|
|
22
24
|
*/
|
|
23
25
|
export declare function decodeVp4Float(b: readonly number[]): number;
|
|
24
26
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setParam.d.ts","sourceRoot":"","sources":["../../../src/gen3/vp4/setParam.ts"],"names":[],"mappings":"AA8BA,eAAO,MAAM,YAAY,KAAO,CAAC;AACjC,eAAO,MAAM,YAAY,IAAO,CAAC;AAEjC,qCAAqC;AACrC,eAAO,MAAM,WAAW,IAAO,CAAC;AAChC,eAAO,MAAM,aAAa,IAAO,CAAC;AAClC,eAAO,MAAM,OAAO,KAAO,CAAC;AAM5B;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,WAAW,CAAC;AACjD,eAAO,MAAM,yBAAyB,IAAM,CAAC;AAK7C;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAGtF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAG3D;AAOD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,MAAM,EAAE,CAUV;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAU/E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CASvC;AAWD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,mFAAmF;IACnF,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,GAAG,IAAI,CAS/E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAG9D"}
|
|
@@ -22,7 +22,11 @@
|
|
|
22
22
|
* eid/pid/tc (value verbatim for discrete) — `parseVp4WriteEcho`. SAVE additionally
|
|
23
23
|
* gets a distinct 16-byte completion ack (~+153 ms) — `isVp4SaveAck`.
|
|
24
24
|
*/
|
|
25
|
-
import { fractalChecksum } from '
|
|
25
|
+
import { fractalChecksum } from '../../shared/checksum.js';
|
|
26
|
+
// Throwing form — a deliberate tightening for VP4 (the old local copy
|
|
27
|
+
// silently truncated out-of-range ids instead of throwing).
|
|
28
|
+
import { encode14 } from '../../shared/septet16.js';
|
|
29
|
+
import { encode5SeptetFloat32, decode5SeptetFloat32 } from '../axe-fx-iii/setParam.js';
|
|
26
30
|
export const VP4_MODEL_ID = 0x14;
|
|
27
31
|
export const FN_PARAMETER = 0x01;
|
|
28
32
|
/** tc sub-opcode (payload pos 4). */
|
|
@@ -41,44 +45,23 @@ export const VP4_BYPASS_ON_NORMALIZED = 0.515625;
|
|
|
41
45
|
export const VP4_BYPASS_OFF_NORMALIZED = 0.0;
|
|
42
46
|
/** Captured SAVE command value (payload after `04 00`); 0x30 in the low septet. */
|
|
43
47
|
const SAVE_VALUE_BYTES = [0x30, 0x00, 0x00, 0x00, 0x00];
|
|
44
|
-
function encode14(n) {
|
|
45
|
-
return [n & 0x7f, (n >> 7) & 0x7f];
|
|
46
|
-
}
|
|
47
|
-
const _buf = new ArrayBuffer(4);
|
|
48
|
-
const _f32 = new Float32Array(_buf);
|
|
49
|
-
const _u32 = new Uint32Array(_buf);
|
|
50
|
-
/** Standard 5-septet LE split of a u32. */
|
|
51
|
-
function septets5LE(u) {
|
|
52
|
-
return [
|
|
53
|
-
u & 0x7f,
|
|
54
|
-
(u >>> 7) & 0x7f,
|
|
55
|
-
(u >>> 14) & 0x7f,
|
|
56
|
-
(u >>> 21) & 0x7f,
|
|
57
|
-
(u >>> 28) & 0x7f,
|
|
58
|
-
];
|
|
59
|
-
}
|
|
60
48
|
/**
|
|
61
|
-
* Encode a float32 as the VP4's on-wire 5-byte value: standard 5-septet LE
|
|
62
|
-
* the
|
|
49
|
+
* Encode a float32 as the VP4's on-wire 5-byte value: standard 5-septet LE
|
|
50
|
+
* (`encode5SeptetFloat32`, shared with the rest of the gen-3 codec) with
|
|
51
|
+
* the VP4-specific TOP-TWO-septet swap (emit `[s0,s1,s2,s4,s3]`).
|
|
63
52
|
*/
|
|
64
53
|
export function encodeVp4Float(value) {
|
|
65
|
-
|
|
66
|
-
const [s0, s1, s2, s3, s4] = septets5LE(_u32[0]);
|
|
54
|
+
const [s0, s1, s2, s3, s4] = encode5SeptetFloat32(value);
|
|
67
55
|
return [s0, s1, s2, s4, s3];
|
|
68
56
|
}
|
|
69
57
|
/**
|
|
70
58
|
* Decode the VP4's on-wire 5-byte value field back to a float32. Input bytes are
|
|
71
|
-
* `[s0,s1,s2,s4,s3]` (top two swapped); un-swap, reassemble
|
|
59
|
+
* `[s0,s1,s2,s4,s3]` (top two swapped); un-swap, then reassemble/reinterpret via
|
|
60
|
+
* the shared gen-3 `decode5SeptetFloat32`.
|
|
72
61
|
*/
|
|
73
62
|
export function decodeVp4Float(b) {
|
|
74
63
|
const [w0, w1, w2, w4, w3] = b;
|
|
75
|
-
|
|
76
|
-
((w1 & 0x7f) << 7) |
|
|
77
|
-
((w2 & 0x7f) << 14) |
|
|
78
|
-
((w3 & 0x7f) << 21) |
|
|
79
|
-
((w4 & 0x7f) << 28);
|
|
80
|
-
_u32[0] = u >>> 0;
|
|
81
|
-
return _f32[0];
|
|
64
|
+
return decode5SeptetFloat32(w0, w1, w2, w3, w4);
|
|
82
65
|
}
|
|
83
66
|
function buildVp4Frame(payload) {
|
|
84
67
|
const body = [SYSEX_START, ...MFR, VP4_MODEL_ID, FN_PARAMETER, ...payload];
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
//
|
|
6
6
|
// import { packValue, fractalChecksum } from 'fractal-midi/shared';
|
|
7
7
|
// import { ... } from 'fractal-midi/am4';
|
|
8
|
-
// import { ... } from 'fractal-midi/axe-fx-ii';
|
|
8
|
+
// import { ... } from 'fractal-midi/gen2/axe-fx-ii';
|
|
9
9
|
//
|
|
10
10
|
// The root `VERSION` constant is convenience-only — useful for log
|
|
11
11
|
// lines and version pinning sanity checks. It's read from package.json
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Display↔wire resolver shared across Fractal codecs.
|
|
3
|
+
*
|
|
4
|
+
* Maps a panel display value (0..10 knob, dB, ms, Hz) onto the 16-bit
|
|
5
|
+
* 0..65534 wire field, linearly or log-base-10. Originally calibrated
|
|
6
|
+
* and hardware-verified on the Axe-Fx II (HW-079 goldens in
|
|
7
|
+
* `scripts/verify-axe-fx-ii-encoding.ts`); the gen-3 catalog
|
|
8
|
+
* (`fractal-gen3/src/catalog.ts`) uses the same resolver for params
|
|
9
|
+
* with a calibrated display range. Housed in `shared/` so neither
|
|
10
|
+
* generation's codec depends on the other's module at runtime.
|
|
11
|
+
*
|
|
12
|
+
* Moved verbatim from `gen2/axe-fx-ii/setParam.ts` (which re-exports
|
|
13
|
+
* it for compatibility).
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Convert a display value to its corresponding 16-bit wire value, given
|
|
17
|
+
* a param's calibrated `displayMin` / `displayMax` / `displayScale`.
|
|
18
|
+
*
|
|
19
|
+
* Two scale shapes supported:
|
|
20
|
+
*
|
|
21
|
+
* **`'linear'`** (default) — wire 0..65534 maps linearly onto
|
|
22
|
+
* displayMin..displayMax. Confirmed by / / across
|
|
23
|
+
* 0..10 (AMP knobs), 0..100% (mix), -100..+100% (feedback / balance /
|
|
24
|
+
* pan), -80..+20 dB (cab level).
|
|
25
|
+
*
|
|
26
|
+
* **`'log10'`** — wire 0..65534 maps log-base-10 onto
|
|
27
|
+
* displayMin..displayMax. Used for frequency knobs ( confirmed
|
|
28
|
+
* cab.low_cut 20..2000 Hz and cab.high_cut 200..20000 Hz both fit
|
|
29
|
+
* `displayHz = displayMin × (displayMax/displayMin)^(wire/65534)`
|
|
30
|
+
* exactly at every measured anchor). Requires displayMin > 0.
|
|
31
|
+
*
|
|
32
|
+
* Callers should only invoke this on params with populated displayMin
|
|
33
|
+
* AND displayMax. For uncalibrated params, the tool layer falls back
|
|
34
|
+
* to the wire-value path.
|
|
35
|
+
*
|
|
36
|
+
* Clamps to [displayMin, displayMax] silently — the wire value pins to
|
|
37
|
+
* [0, 65534] either way, so an out-of-range display value rounds to
|
|
38
|
+
* the same endpoint. The tool layer surfaces a clamp note when needed.
|
|
39
|
+
*/
|
|
40
|
+
export type DisplayScale = 'linear' | 'log10';
|
|
41
|
+
export interface DisplayToWireOptions {
|
|
42
|
+
readonly displayMin: number;
|
|
43
|
+
readonly displayMax: number;
|
|
44
|
+
readonly displayScale?: DisplayScale;
|
|
45
|
+
}
|
|
46
|
+
export declare function displayToWire(display: number, opts: DisplayToWireOptions): number;
|
|
47
|
+
/**
|
|
48
|
+
* Inverse of `displayToWire`. Wire 0..65534 → display value via the
|
|
49
|
+
* param's linear or log10 scale.
|
|
50
|
+
*/
|
|
51
|
+
export declare function wireToDisplay(wire: number, opts: DisplayToWireOptions): number;
|
|
52
|
+
//# sourceMappingURL=displayScale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"displayScale.d.ts","sourceRoot":"","sources":["../../src/shared/displayScale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9C,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACxC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAsBjF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAiB9E"}
|