@map-audio/pam-mcp-server 1.25.0 → 1.27.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 +2 -1
- package/dist/audioAnalysis.d.ts +1 -1
- package/dist/audioAnalysis.js +3 -4
- package/dist/audioAnalysis.js.map +1 -1
- package/dist/bridge.js +7 -8
- package/dist/bridge.js.map +1 -1
- package/dist/drumSynth.js +1 -1
- package/dist/drumSynth.js.map +1 -1
- package/dist/drumSynthEngines.json +1 -1
- package/dist/fgemma-runner.js +20 -4
- package/dist/fgemma-runner.js.map +1 -1
- package/dist/generated/kvWriteOptions.d.ts +20 -0
- package/dist/generated/kvWriteOptions.js +45 -0
- package/dist/generated/kvWriteOptions.js.map +1 -0
- package/dist/generated/variationSnapshot.js +0 -19
- package/dist/generated/variationSnapshot.js.map +1 -1
- package/dist/generativePlayers.json +1 -1
- package/dist/manifest-mfx.json +35 -45
- package/dist/manifest-msq.json +9564 -0
- package/dist/manifest.js +5 -0
- package/dist/manifest.js.map +1 -1
- package/dist/manifest.json +9139 -2428
- package/dist/mfxCombos.js +1 -1
- package/dist/mfxCombos.js.map +1 -1
- package/dist/midiFile.d.ts +1 -1
- package/dist/midiFile.js +1 -1
- package/dist/midiFile.js.map +1 -1
- package/dist/mixAssist.d.ts +35 -0
- package/dist/mixAssist.js +247 -19
- package/dist/mixAssist.js.map +1 -1
- package/dist/patternLanes.d.ts +40 -0
- package/dist/patternLanes.js +108 -0
- package/dist/patternLanes.js.map +1 -0
- package/dist/presetSave.d.ts +3 -0
- package/dist/presetSave.js +13 -0
- package/dist/presetSave.js.map +1 -1
- package/dist/server.js +835 -315
- package/dist/server.js.map +1 -1
- package/dist/targetDenylist.json +20 -0
- package/dist/variationSessionKeys.json +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
export const VALUE_LANES = ["pitch", "slice", "stretch"];
|
|
5
|
+
export const CC_LANES = ["ccOut1", "ccOut2", "ccOut3", "ccOut4"];
|
|
6
|
+
export const PARAM_LANES = ["paramLane1", "paramLane2", "paramLane3", "paramLane4"];
|
|
7
|
+
export const PATTERN_LANE_IDS = ["note", ...VALUE_LANES, ...CC_LANES, ...PARAM_LANES];
|
|
8
|
+
/** State-key suffix per lane: `cell{N}_<suffix>`. */
|
|
9
|
+
export const PATTERN_LANE_SUFFIX = {
|
|
10
|
+
note: "midiSequence",
|
|
11
|
+
pitch: "pitchSequence",
|
|
12
|
+
slice: "sliceSequence",
|
|
13
|
+
stretch: "stretchSequence",
|
|
14
|
+
ccOut1: "ccOut1Sequence",
|
|
15
|
+
ccOut2: "ccOut2Sequence",
|
|
16
|
+
ccOut3: "ccOut3Sequence",
|
|
17
|
+
ccOut4: "ccOut4Sequence",
|
|
18
|
+
paramLane1: "paramLane1Sequence",
|
|
19
|
+
paramLane2: "paramLane2Sequence",
|
|
20
|
+
paramLane3: "paramLane3Sequence",
|
|
21
|
+
paramLane4: "paramLane4Sequence",
|
|
22
|
+
};
|
|
23
|
+
/** The cells-object field holding a param lane's target suffix ("" = none). */
|
|
24
|
+
export const LANE_TARGET_FIELD = {
|
|
25
|
+
paramLane1: "paramLaneTarget1",
|
|
26
|
+
paramLane2: "paramLaneTarget2",
|
|
27
|
+
paramLane3: "paramLaneTarget3",
|
|
28
|
+
paramLane4: "paramLaneTarget4",
|
|
29
|
+
};
|
|
30
|
+
export const isCcLane = (lane) => CC_LANES.includes(lane);
|
|
31
|
+
export const isParamLane = (lane) => PARAM_LANES.includes(lane);
|
|
32
|
+
export const ccLaneIndex = (lane) => Number(lane.slice("ccOut".length));
|
|
33
|
+
/** Sixteen CC out slots per cell (cell config ccOutCc{K}); each CC lane locks one (ccLaneSlot{L}, 0 = none). */
|
|
34
|
+
export const CC_OUT_SLOTS = Array.from({ length: 16 }, (_, index) => index + 1);
|
|
35
|
+
export const CC_OUT_CONFIG_KEYS = CC_OUT_SLOTS.map((slot) => `ccOutCc${slot}`);
|
|
36
|
+
export const isCcOutValueSuffix = (suffix) => /^ccOut\d{1,2}$/.test(suffix);
|
|
37
|
+
export const ccLaneSlotField = (lane) => `ccLaneSlot${ccLaneIndex(lane)}`;
|
|
38
|
+
/** The slot a CC lane locks in `cell`, as the engine reads it: lane L's default is slot L. */
|
|
39
|
+
export function ccLaneSlotOf(cell, lane) {
|
|
40
|
+
const raw = cell[ccLaneSlotField(lane)];
|
|
41
|
+
const slot = Math.round(Number(raw ?? ccLaneIndex(lane)));
|
|
42
|
+
return Number.isInteger(slot) && slot >= 1 && slot <= CC_OUT_SLOTS.length ? slot : 0;
|
|
43
|
+
}
|
|
44
|
+
// shared/patternLanes/targetDenylist.json is the one list the UI, this server and the engine read.
|
|
45
|
+
const TARGET_DENYLIST = (() => {
|
|
46
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
47
|
+
const candidates = [
|
|
48
|
+
resolve(here, "..", "..", "..", "shared", "patternLanes", "targetDenylist.json"),
|
|
49
|
+
resolve(here, "targetDenylist.json"),
|
|
50
|
+
];
|
|
51
|
+
for (const file of candidates) {
|
|
52
|
+
if (!existsSync(file))
|
|
53
|
+
continue;
|
|
54
|
+
const parsed = JSON.parse(readFileSync(file, "utf8"));
|
|
55
|
+
return { exact: parsed.exact ?? [], prefixes: parsed.prefixes ?? [], unreachable: parsed.unreachable ?? [] };
|
|
56
|
+
}
|
|
57
|
+
throw new Error("pam-mcp: shared/patternLanes/targetDenylist.json not found; rebuild the package.");
|
|
58
|
+
})();
|
|
59
|
+
function isDeniedLaneTarget(suffix) {
|
|
60
|
+
return (TARGET_DENYLIST.exact.includes(suffix) ||
|
|
61
|
+
TARGET_DENYLIST.unreachable.includes(suffix) ||
|
|
62
|
+
TARGET_DENYLIST.prefixes.some((prefix) => suffix.startsWith(prefix)));
|
|
63
|
+
}
|
|
64
|
+
/** The manifest parameter a param lane may be pointed at, or a reason it may not. */
|
|
65
|
+
export function resolveLaneTarget(cellId, suffix, parameters) {
|
|
66
|
+
if (isDeniedLaneTarget(suffix))
|
|
67
|
+
return { reason: `${suffix} cannot be a lane target` };
|
|
68
|
+
const param = parameters.find((p) => p.paramId === `cell${cellId}_${suffix}`);
|
|
69
|
+
if (!param)
|
|
70
|
+
return { reason: `cell${cellId}_${suffix} is not a parameter of this product` };
|
|
71
|
+
if (param.isModulatable !== true)
|
|
72
|
+
return { reason: `cell${cellId}_${suffix} is not modulatable` };
|
|
73
|
+
return { param };
|
|
74
|
+
}
|
|
75
|
+
export function productHasLane(cellId, lane, stateVariables) {
|
|
76
|
+
const key = `cell${cellId}_${PATTERN_LANE_SUFFIX[lane]}`;
|
|
77
|
+
return (stateVariables ?? []).some((entry) => entry.paramId === key);
|
|
78
|
+
}
|
|
79
|
+
const finiteOr = (value, fallback) => typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
80
|
+
/** CC lane events: integer 0..127 values, bar height equal to the value (a CC bar floors at 0), no pitch fields. */
|
|
81
|
+
export function normalizeCcLaneEvents(events) {
|
|
82
|
+
return events.map((event) => {
|
|
83
|
+
const { pitch: _pitch, pitchRnd: _pitchRnd, ...rest } = event;
|
|
84
|
+
const value = Math.max(0, Math.min(127, Math.round(finiteOr(event.value, 64))));
|
|
85
|
+
return { time: 0, duration: 0.25, prob: 1, ...rest, value, velocity: value };
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
// Steps a value like its knob (interface/src/utils/paramScale.ts), so the lane holds what the knob could.
|
|
89
|
+
function stepLikeKnob(value, param) {
|
|
90
|
+
return param.step > 0 && param.step < param.max - param.min ? Math.round(value / param.step) * param.step : value;
|
|
91
|
+
}
|
|
92
|
+
/** A param lane's events, clamped to its target's range and stepped like its knob. */
|
|
93
|
+
export function normalizeTargetLaneEvents(events, param) {
|
|
94
|
+
const span = param.max - param.min;
|
|
95
|
+
return events.map((event) => {
|
|
96
|
+
const { pitch: _pitch, pitchRnd: _pitchRnd, ...rest } = event;
|
|
97
|
+
const clamp = (v) => Math.max(param.min, Math.min(param.max, v));
|
|
98
|
+
const value = clamp(stepLikeKnob(clamp(finiteOr(event.value, param.defaultValue)), param));
|
|
99
|
+
const normalized = span > 0 ? Math.pow((value - param.min) / span, param.skew) : 0;
|
|
100
|
+
return { time: 0, duration: 0.25, prob: 1, ...rest, value, velocity: Math.round(normalized * 127) };
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/** A CC lane may land on a destination slot only when that slot is Off or wired to the same controller. */
|
|
104
|
+
export function ccLaneMayLand(sourceController, destinationController) {
|
|
105
|
+
const dst = typeof destinationController === "number" ? destinationController : -1;
|
|
106
|
+
return dst < 0 || dst === sourceController;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=patternLanes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patternLanes.js","sourceRoot":"","sources":["../src/patternLanes.ts"],"names":[],"mappings":"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"}
|
package/dist/presetSave.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Buffer } from "node:buffer";
|
|
2
2
|
/** Strip the library prefix accepted by MCP tools before resolving a preset on disk. */
|
|
3
3
|
export declare function normalizePresetLookupPath(presetPath: string): string;
|
|
4
|
+
/** Native resolves relative preset paths against the product base folder, which holds Presets/. */
|
|
5
|
+
export declare function nativePresetPath(presetPath: string): string;
|
|
6
|
+
export declare function isFactoryPresetPath(presetPath: string): boolean;
|
|
4
7
|
/**
|
|
5
8
|
* Select the preset whose variation bank a save operation should preserve.
|
|
6
9
|
*
|
package/dist/presetSave.js
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
import { Buffer } from "node:buffer";
|
|
2
|
+
import { isAbsolute, posix } from "node:path";
|
|
2
3
|
/** Strip the library prefix accepted by MCP tools before resolving a preset on disk. */
|
|
3
4
|
export function normalizePresetLookupPath(presetPath) {
|
|
4
5
|
return presetPath.startsWith("Presets/")
|
|
5
6
|
? presetPath.slice("Presets/".length)
|
|
6
7
|
: presetPath;
|
|
7
8
|
}
|
|
9
|
+
/** Native resolves relative preset paths against the product base folder, which holds Presets/. */
|
|
10
|
+
export function nativePresetPath(presetPath) {
|
|
11
|
+
if (isAbsolute(presetPath))
|
|
12
|
+
return presetPath;
|
|
13
|
+
const normalized = presetPath.replaceAll("\\", "/");
|
|
14
|
+
return /^presets\//i.test(normalized) ? normalized : `Presets/${normalized}`;
|
|
15
|
+
}
|
|
16
|
+
// Native collapses "." / ".." / "//" and the macOS volume is case-insensitive, so match that form.
|
|
17
|
+
export function isFactoryPresetPath(presetPath) {
|
|
18
|
+
const resolved = posix.normalize(nativePresetPath(presetPath).replaceAll("\\", "/")).toLowerCase();
|
|
19
|
+
return /(^|\/)presets\/(factory|default)\//.test(resolved);
|
|
20
|
+
}
|
|
8
21
|
/**
|
|
9
22
|
* Select the preset whose variation bank a save operation should preserve.
|
|
10
23
|
*
|
package/dist/presetSave.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presetSave.js","sourceRoot":"","sources":["../src/presetSave.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"presetSave.js","sourceRoot":"","sources":["../src/presetSave.ts"],"names":[],"mappings":"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"}
|