@map-audio/pam-mcp-server 1.18.1 → 1.22.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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -3
  3. package/dist/audioAnalysis.d.ts +35 -0
  4. package/dist/audioAnalysis.js +277 -0
  5. package/dist/audioAnalysis.js.map +1 -0
  6. package/dist/bridge.d.ts +2 -0
  7. package/dist/bridge.js +113 -24
  8. package/dist/bridge.js.map +1 -1
  9. package/dist/corpusFingerprints.d.ts +17 -0
  10. package/dist/corpusFingerprints.js +10 -0
  11. package/dist/corpusFingerprints.js.map +1 -0
  12. package/dist/corpusRanges.d.ts +28 -0
  13. package/dist/corpusRanges.js +1029 -0
  14. package/dist/corpusRanges.js.map +1 -0
  15. package/dist/drumSynth.d.ts +96 -0
  16. package/dist/drumSynth.js +193 -0
  17. package/dist/drumSynth.js.map +1 -0
  18. package/dist/drumSynthEngines.json +1736 -0
  19. package/dist/fingerprint.d.ts +70 -0
  20. package/dist/fingerprint.js +240 -0
  21. package/dist/fingerprint.js.map +1 -0
  22. package/dist/generated/variationSnapshot.d.ts +31 -0
  23. package/dist/generated/variationSnapshot.js +62 -0
  24. package/dist/generated/variationSnapshot.js.map +1 -0
  25. package/dist/manifest-cell1.json +5414 -396
  26. package/dist/manifest-mfx.json +12013 -1714
  27. package/dist/manifest.d.ts +24 -0
  28. package/dist/manifest.js +60 -5
  29. package/dist/manifest.js.map +1 -1
  30. package/dist/manifest.json +24881 -547
  31. package/dist/mfxCombos.d.ts +45 -0
  32. package/dist/mfxCombos.js +499 -0
  33. package/dist/mfxCombos.js.map +1 -0
  34. package/dist/mixAssist.d.ts +6 -0
  35. package/dist/mixAssist.js +101 -11
  36. package/dist/mixAssist.js.map +1 -1
  37. package/dist/productProfile.d.ts +9 -0
  38. package/dist/productProfile.js +20 -0
  39. package/dist/productProfile.js.map +1 -0
  40. package/dist/server.js +1979 -342
  41. package/dist/server.js.map +1 -1
  42. package/dist/variationSessionKeys.json +110 -0
  43. package/package.json +10 -3
@@ -0,0 +1,45 @@
1
+ import type { Manifest, ManifestParameter } from "./manifest.js";
2
+ export type MfxComboRole = "morph" | "color" | "motion";
3
+ export interface MfxComboTargetSpec {
4
+ role: MfxComboRole;
5
+ weight: number;
6
+ strength: number;
7
+ dir?: 1 | -1;
8
+ }
9
+ export interface MfxComboTarget {
10
+ id: string;
11
+ from: number;
12
+ mid: number;
13
+ to: number;
14
+ }
15
+ export interface MfxComboSlot {
16
+ name?: string;
17
+ locked?: 0 | 1;
18
+ targets?: MfxComboTarget[];
19
+ }
20
+ export interface ResolvedMfxCombo {
21
+ index: number;
22
+ role: MfxComboRole;
23
+ label: string;
24
+ locked: boolean;
25
+ auto: boolean;
26
+ targets: MfxComboTarget[];
27
+ }
28
+ export declare const MFX_COMBO_COUNT = 3;
29
+ export declare const MFX_COMBO_ROLES: readonly MfxComboRole[];
30
+ export declare const MFX_COMBO_LABELS: Record<MfxComboRole, string>;
31
+ export declare const MFX_COMBO_MAX_TARGETS = 6;
32
+ export declare const MFX_COMBO_MAX_PER_EFFECT = 2;
33
+ export declare const MFX_COMBO_MANUAL_STRENGTH = 0.35;
34
+ export declare const MFX_COMBO_LFO_SUFFIXES: readonly ["lfoRate", "jitter", "offset", "lfoMorph"];
35
+ export declare const MFX_COMBO_ENV_SUFFIXES: readonly ["envAttack", "envRelease", "envGain"];
36
+ export declare const MFX_COMBO_MANUAL_SUFFIXES: Record<string, readonly string[]>;
37
+ export declare const MFX_COMBO_TARGET_SPECS: Record<string, readonly MfxComboTargetSpec[]>;
38
+ export declare function buildMfxComboTarget(id: string, info: ManifestParameter, strength: number, dir?: 1 | -1, neutral?: number): MfxComboTarget;
39
+ export declare function mfxComboTargetValue(target: MfxComboTarget, comboValue: number, info: ManifestParameter): number;
40
+ export declare function mfxComboTargetValueFromCurrent(target: MfxComboTarget, previousComboValue: number, nextComboValue: number, info: ManifestParameter, currentValue: number): number;
41
+ export declare function reanchorMfxComboTarget(target: MfxComboTarget, info: ManifestParameter, current: number): MfxComboTarget;
42
+ export declare function setMfxComboTargetStop(target: MfxComboTarget, info: ManifestParameter, stop: "from" | "mid" | "to", value: number): MfxComboTarget;
43
+ export declare function isMfxComboTargetParameter(info: ManifestParameter): boolean;
44
+ export declare function parseMfxComboSlots(raw: unknown): Record<string, MfxComboSlot>;
45
+ export declare function resolveMfxCombos(state: Record<string, unknown>, manifest: Manifest, cacheKey?: string): ResolvedMfxCombo[];
@@ -0,0 +1,499 @@
1
+ export const MFX_COMBO_COUNT = 3;
2
+ export const MFX_COMBO_ROLES = ["morph", "color", "motion"];
3
+ export const MFX_COMBO_LABELS = {
4
+ morph: "Morph",
5
+ color: "Color",
6
+ motion: "Motion",
7
+ };
8
+ export const MFX_COMBO_MAX_TARGETS = 6;
9
+ export const MFX_COMBO_MAX_PER_EFFECT = 2;
10
+ export const MFX_COMBO_MANUAL_STRENGTH = 0.35;
11
+ export const MFX_COMBO_LFO_SUFFIXES = ["lfoRate", "jitter", "offset", "lfoMorph"];
12
+ export const MFX_COMBO_ENV_SUFFIXES = ["envAttack", "envRelease", "envGain"];
13
+ export const MFX_COMBO_MANUAL_SUFFIXES = {
14
+ eq: ["eqLowGain", "eqLowMidFreq", "eqMidGain", "eqMidHighFreq", "eqHighGain"],
15
+ eq8: [],
16
+ crusher: ["crusherBitReduction", "crusherRateReduction", "crusherDrive", "crusherMix"],
17
+ delay: ["delayDelayTime", "delayFeedback", "delayTilt", "delayMix"],
18
+ flanger: ["flangerTime", "flangerFreq", "flangerFeedback", "flangerMix"],
19
+ filter: ["filterCutoff", "filterQ"],
20
+ fdn: ["fdnSize", "fdnModDepth", "fdnFeedback", "fdnMix"],
21
+ gate: ["gateTime", "gateMix"],
22
+ compressor: ["compressorAttack", "compressorRelease", "compressorThreshold", "compressorRatioAmount", "compressorRange"],
23
+ wavefold: ["wavefoldDrive", "wavefoldAmount", "wavefoldTexture", "wavefoldSymmetry", "wavefoldMotion", "wavefoldMix"],
24
+ resonator: ["resonatorTune", "resonatorTuneHz", "resonatorSpread", "resonatorResonance", "resonatorDrift", "resonatorTone", "resonatorMix"],
25
+ panner: ["pannerBalance", "pannerWidth"],
26
+ gain: ["gainGain", "gainClip"],
27
+ vocoder: ["vocoderNote", "vocoderWave", "vocoderFormant", "vocoderSpeed", "vocoderMix", "vocoderWidth"],
28
+ ringmod: ["ringmodFreq", "ringmodNote", "ringmodAmount", "ringmodSpread", "ringmodBias", "ringmodRectify"],
29
+ vinylbrake: ["vinylbrakeSlow", "vinylbrakeRise", "vinylbrakeCurve", "vinylbrakeMix"],
30
+ transient: ["transientAttack", "transientSustain", "transientSpeed"],
31
+ repeat: ["repeatSize", "repeatDiv", "repeatPitch", "repeatFeedback", "repeatMix", "repeatSplitLoHz", "repeatSplitHiHz", "repeatDecay", "repeatDamp"],
32
+ pitchshift: ["pitchshiftPitch", "pitchshiftFormant", "pitchshiftRegen", "pitchshiftTime", "pitchshiftMix", "pitchshiftDamp"],
33
+ shimmer: ["shimmerShift", "shimmerPredelay", "shimmerSize", "shimmerDecay", "shimmerRegen", "shimmerDamp", "shimmerMix"],
34
+ tablefilter: ["tablefilterFrame", "tablefilterAnchor", "tablefilterDepth", "tablefilterResonance", "tablefilterSmooth", "tablefilterMix"],
35
+ chorus: ["chorusRate", "chorusDepth", "chorusDelay", "chorusSpread", "chorusTone", "chorusMix"],
36
+ phaser: ["phaserRate", "phaserDepth", "phaserCenter", "phaserFeedback", "phaserStages", "phaserMix"],
37
+ };
38
+ // Copied from interface/src/config/mfxCombos.ts because the published package
39
+ // cannot import the interface workspace. scripts/check-mfx-combo-parity.ts
40
+ // compares the values before publication.
41
+ export const MFX_COMBO_TARGET_SPECS = {
42
+ wavefoldDrive: [{ role: "morph", weight: 10, strength: 0.5 }],
43
+ delayMix: [{ role: "morph", weight: 9, strength: 0.45 }],
44
+ fdnMix: [{ role: "morph", weight: 9, strength: 0.45 }],
45
+ resonatorMix: [{ role: "morph", weight: 9, strength: 0.4 }],
46
+ crusherMix: [{ role: "morph", weight: 8, strength: 0.45 }],
47
+ flangerMix: [{ role: "morph", weight: 8, strength: 0.45 }],
48
+ wavefoldAmount: [{ role: "morph", weight: 8, strength: 0.4 }],
49
+ gateMix: [{ role: "morph", weight: 7, strength: 0.45 }],
50
+ vocoderMix: [{ role: "morph", weight: 7, strength: 0.4 }],
51
+ ringmodAmount: [{ role: "morph", weight: 7, strength: 0.45 }],
52
+ vinylbrakeMix: [{ role: "morph", weight: 5, strength: 0.4 }],
53
+ crusherDrive: [{ role: "morph", weight: 7, strength: 0.4 }],
54
+ compressorThreshold: [{ role: "morph", weight: 6, strength: 0.35, dir: -1 }],
55
+ fdnSize: [{ role: "morph", weight: 5, strength: 0.3 }],
56
+ gainGain: [{ role: "morph", weight: 4, strength: 0.12 }],
57
+ filterCutoff: [{ role: "color", weight: 10, strength: 0.3 }],
58
+ wavefoldTexture: [{ role: "color", weight: 8, strength: 0.4 }],
59
+ eqHighGain: [{ role: "color", weight: 8, strength: 0.22 }],
60
+ wavefoldSymmetry: [{ role: "color", weight: 7, strength: 0.4 }],
61
+ crusherBitReduction: [{ role: "color", weight: 7, strength: 0.55, dir: -1 }],
62
+ delayTilt: [{ role: "color", weight: 7, strength: 0.35 }],
63
+ eqLowGain: [{ role: "color", weight: 6, strength: 0.2 }],
64
+ vocoderFormant: [{ role: "color", weight: 6, strength: 0.3 }],
65
+ gainClip: [{ role: "color", weight: 6, strength: 0.35 }],
66
+ resonatorTone: [{ role: "color", weight: 7, strength: 0.35 }],
67
+ resonatorTune: [{ role: "color", weight: 6, strength: 0.3 }],
68
+ crusherRateReduction: [{ role: "color", weight: 5, strength: 0.4, dir: -1 }],
69
+ resonatorSpread: [{ role: "color", weight: 5, strength: 0.3 }],
70
+ filterQ: [{ role: "color", weight: 5, strength: 0.25 }],
71
+ pannerWidth: [{ role: "color", weight: 4, strength: 0.4 }],
72
+ vocoderWidth: [{ role: "color", weight: 4, strength: 0.3 }],
73
+ vocoderWave: [{ role: "color", weight: 4, strength: 0.35 }],
74
+ ringmodRectify: [{ role: "color", weight: 7, strength: 0.4 }],
75
+ ringmodBias: [{ role: "color", weight: 6, strength: 0.35 }],
76
+ pitchshiftPitch: [{ role: "color", weight: 7, strength: 0.4 }],
77
+ pitchshiftMix: [{ role: "morph", weight: 5, strength: 0.4 }],
78
+ shimmerMix: [{ role: "morph", weight: 8, strength: 0.4 }],
79
+ shimmerDamp: [{ role: "color", weight: 6, strength: 0.35, dir: -1 }],
80
+ tablefilterFrame: [{ role: "morph", weight: 9, strength: 0.5 }],
81
+ tablefilterDepth: [{ role: "color", weight: 7, strength: 0.4 }],
82
+ wavefoldMotion: [{ role: "motion", weight: 10, strength: 0.45 }],
83
+ delayFeedback: [{ role: "motion", weight: 10, strength: 0.4 }],
84
+ fdnFeedback: [{ role: "motion", weight: 9, strength: 0.4 }],
85
+ fdnModDepth: [{ role: "motion", weight: 9, strength: 0.4 }],
86
+ resonatorDrift: [{ role: "motion", weight: 9, strength: 0.4 }],
87
+ flangerFreq: [{ role: "motion", weight: 8, strength: 0.3 }],
88
+ resonatorResonance: [{ role: "motion", weight: 8, strength: 0.3 }],
89
+ flangerFeedback: [{ role: "motion", weight: 7, strength: 0.3 }],
90
+ gateTime: [{ role: "motion", weight: 7, strength: 0.3 }],
91
+ vocoderSpeed: [{ role: "motion", weight: 6, strength: 0.35 }],
92
+ compressorRelease: [{ role: "motion", weight: 5, strength: 0.35, dir: -1 }],
93
+ pannerBalance: [{ role: "motion", weight: 5, strength: 0.35 }],
94
+ flangerTime: [{ role: "motion", weight: 4, strength: 0.3 }],
95
+ delayDelayTime: [{ role: "motion", weight: 4, strength: 0.25 }],
96
+ shimmerPredelay: [{ role: "motion", weight: 5, strength: 0.35 }],
97
+ ringmodFreq: [{ role: "motion", weight: 8, strength: 0.3 }],
98
+ ringmodSpread: [{ role: "motion", weight: 5, strength: 0.4 }],
99
+ vinylbrakeSlow: [{ role: "motion", weight: 4, strength: 0.3, dir: -1 }],
100
+ lfoRate: [{ role: "motion", weight: 8, strength: 0.3 }],
101
+ jitter: [{ role: "motion", weight: 6, strength: 0.35 }],
102
+ offset: [{ role: "motion", weight: 3, strength: 0.3 }],
103
+ envRelease: [{ role: "motion", weight: 7, strength: 0.3, dir: -1 }],
104
+ envAttack: [{ role: "motion", weight: 6, strength: 0.3, dir: -1 }],
105
+ envGain: [{ role: "motion", weight: 5, strength: 0.25 }],
106
+ };
107
+ const GLOBAL_SPECS = [{ paramId: "mfx_mix", role: "morph", weight: 5, strength: 0.35 }];
108
+ const AUTO_LFO_SUFFIXES = ["lfoRate", "jitter", "offset"];
109
+ const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
110
+ const valuesOf = (raw) => Array.isArray(raw) ? raw : raw && typeof raw === "object" ? Object.values(raw) : [];
111
+ function position(value, info) {
112
+ return Math.pow((clamp(value, info.min, info.max) - info.min) / (info.max - info.min), info.skew || 1);
113
+ }
114
+ function valueAt(positionValue, info) {
115
+ const raw = info.min + (info.max - info.min) * Math.pow(clamp(positionValue, 0, 1), 1 / (info.skew || 1));
116
+ return info.step > 0 && info.step < info.max - info.min ? Math.round(raw / info.step) * info.step : raw;
117
+ }
118
+ function comboOffsetPosition(target, comboValue, info) {
119
+ const normalized = clamp((comboValue + 100) / 200, 0, 1);
120
+ if (normalized === 0.5)
121
+ return 0;
122
+ const mid = position(target.mid, info);
123
+ return normalized < 0.5
124
+ ? (position(target.from, info) - mid) * (1 - normalized * 2)
125
+ : (position(target.to, info) - mid) * (normalized - 0.5) * 2;
126
+ }
127
+ export function buildMfxComboTarget(id, info, strength, dir = 1, neutral = info.defaultValue) {
128
+ const mid = clamp(position(neutral, info), 0, 1);
129
+ const reach = clamp(strength, 0, 1) * dir;
130
+ return { id, from: valueAt(mid - reach, info), mid: valueAt(mid, info), to: valueAt(mid + reach, info) };
131
+ }
132
+ export function mfxComboTargetValue(target, comboValue, info) {
133
+ return valueAt(position(target.mid, info) + comboOffsetPosition(target, comboValue, info), info);
134
+ }
135
+ export function mfxComboTargetValueFromCurrent(target, previousComboValue, nextComboValue, info, currentValue) {
136
+ const anchor = position(currentValue, info) - comboOffsetPosition(target, previousComboValue, info);
137
+ return valueAt(anchor + comboOffsetPosition(target, nextComboValue, info), info);
138
+ }
139
+ export function reanchorMfxComboTarget(target, info, current) {
140
+ const previousMid = clamp(position(target.mid, info), 0, 1);
141
+ const nextMid = clamp(position(current, info), 0, 1);
142
+ const shift = nextMid - previousMid;
143
+ return {
144
+ id: target.id,
145
+ from: valueAt(position(target.from, info) + shift, info),
146
+ mid: valueAt(nextMid, info),
147
+ to: valueAt(position(target.to, info) + shift, info),
148
+ };
149
+ }
150
+ export function setMfxComboTargetStop(target, info, stop, value) {
151
+ return { ...target, [stop]: valueAt(position(value, info), info) };
152
+ }
153
+ export function isMfxComboTargetParameter(info) {
154
+ if (!Number.isFinite(info.min) || !Number.isFinite(info.max) || info.max <= info.min)
155
+ return false;
156
+ if (info.strRepr?.length || /^mfx_combo[1-3]$/.test(info.paramId))
157
+ return false;
158
+ if (GLOBAL_SPECS.some((spec) => spec.paramId === info.paramId))
159
+ return true;
160
+ const cellSuffix = /^cell\d+_(.+)$/.exec(info.paramId)?.[1];
161
+ if (cellSuffix && MFX_COMBO_ENV_SUFFIXES.includes(cellSuffix))
162
+ return true;
163
+ const lfoSuffix = /^lfo\d+_(.+)$/.exec(info.paramId)?.[1];
164
+ if (lfoSuffix && MFX_COMBO_LFO_SUFFIXES.includes(lfoSuffix))
165
+ return true;
166
+ return Boolean(info.effect && cellSuffix && MFX_COMBO_MANUAL_SUFFIXES[info.effect]?.includes(cellSuffix));
167
+ }
168
+ function finite(value) {
169
+ return typeof value === "number" && Number.isFinite(value);
170
+ }
171
+ export function parseMfxComboSlots(raw) {
172
+ const slots = {};
173
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
174
+ return slots;
175
+ const source = raw;
176
+ for (let index = 1; index <= MFX_COMBO_COUNT; index++) {
177
+ const rawSlot = source[String(index)];
178
+ if (!rawSlot || typeof rawSlot !== "object" || Array.isArray(rawSlot))
179
+ continue;
180
+ const entry = rawSlot;
181
+ const slot = {};
182
+ if (typeof entry.name === "string" && entry.name.trim())
183
+ slot.name = entry.name.trim().slice(0, 24);
184
+ if (entry.locked === 1 || entry.locked === true)
185
+ slot.locked = 1;
186
+ if (Array.isArray(entry.targets)) {
187
+ slot.targets = [];
188
+ for (const rawTarget of entry.targets) {
189
+ if (!rawTarget || typeof rawTarget !== "object" || Array.isArray(rawTarget))
190
+ continue;
191
+ const target = rawTarget;
192
+ if (typeof target.id !== "string" || !finite(target.from) || !finite(target.mid) || !finite(target.to))
193
+ continue;
194
+ if (slot.targets.some((candidate) => candidate.id === target.id))
195
+ continue;
196
+ slot.targets.push({ id: target.id, from: target.from, mid: target.mid, to: target.to });
197
+ if (slot.targets.length === MFX_COMBO_MAX_TARGETS)
198
+ break;
199
+ }
200
+ }
201
+ if (Object.keys(slot).length)
202
+ slots[String(index)] = slot;
203
+ }
204
+ return slots;
205
+ }
206
+ function routingEdges(raw) {
207
+ if (Array.isArray(raw))
208
+ return raw.filter((edge) => Boolean(edge && typeof edge === "object" && typeof edge.from === "string" && typeof edge.to === "string"));
209
+ return [];
210
+ }
211
+ function reachableCellOrder(raw) {
212
+ const edges = routingEdges(raw);
213
+ const queue = ["input", "sidechain"];
214
+ const visited = new Set(queue);
215
+ const reachable = new Set();
216
+ while (queue.length) {
217
+ const from = queue.shift();
218
+ if (from === "split") {
219
+ for (const band of ["split_lo", "split_mid", "split_hi"]) {
220
+ if (!visited.has(band)) {
221
+ visited.add(band);
222
+ queue.push(band);
223
+ }
224
+ }
225
+ }
226
+ for (const edge of edges) {
227
+ if (edge.from !== from || visited.has(edge.to))
228
+ continue;
229
+ visited.add(edge.to);
230
+ queue.push(edge.to);
231
+ const match = /^cell([1-4])$/.exec(edge.to);
232
+ if (match)
233
+ reachable.add(Number(match[1]));
234
+ }
235
+ }
236
+ const cellEdges = [];
237
+ for (const edge of edges) {
238
+ const from = /^cell([1-4])$/.exec(edge.from)?.[1];
239
+ const to = /^cell([1-4])$/.exec(edge.to)?.[1];
240
+ if (from && to && from !== to)
241
+ cellEdges.push([Number(from), Number(to)]);
242
+ }
243
+ return mfxCellEvaluationOrder(cellEdges).filter((cellId) => reachable.has(cellId));
244
+ }
245
+ // Mirrors the UI routing owner's SCC topological order: cycles remain stable
246
+ // ascending-id groups, while downstream cells still evaluate after the cycle.
247
+ function mfxCellEvaluationOrder(cellEdges) {
248
+ const adjacency = new Map(Array.from({ length: 4 }, (_, offset) => [offset + 1, []]));
249
+ const seenEdges = new Set();
250
+ for (const [from, to] of cellEdges) {
251
+ const key = `${from}->${to}`;
252
+ if (seenEdges.has(key))
253
+ continue;
254
+ seenEdges.add(key);
255
+ adjacency.get(from).push(to);
256
+ }
257
+ for (const targets of adjacency.values())
258
+ targets.sort((a, b) => a - b);
259
+ const index = new Map();
260
+ const low = new Map();
261
+ const stack = [];
262
+ const onStack = new Set();
263
+ const components = [];
264
+ let nextIndex = 0;
265
+ const visit = (cellId) => {
266
+ index.set(cellId, nextIndex);
267
+ low.set(cellId, nextIndex++);
268
+ stack.push(cellId);
269
+ onStack.add(cellId);
270
+ for (const target of adjacency.get(cellId) ?? []) {
271
+ if (!index.has(target)) {
272
+ visit(target);
273
+ low.set(cellId, Math.min(low.get(cellId), low.get(target)));
274
+ }
275
+ else if (onStack.has(target)) {
276
+ low.set(cellId, Math.min(low.get(cellId), index.get(target)));
277
+ }
278
+ }
279
+ if (low.get(cellId) !== index.get(cellId))
280
+ return;
281
+ const component = [];
282
+ while (stack.length) {
283
+ const member = stack.pop();
284
+ onStack.delete(member);
285
+ component.push(member);
286
+ if (member === cellId)
287
+ break;
288
+ }
289
+ components.push(component.sort((a, b) => a - b));
290
+ };
291
+ for (let cellId = 1; cellId <= 4; cellId++)
292
+ if (!index.has(cellId))
293
+ visit(cellId);
294
+ const componentOf = new Map();
295
+ components.forEach((component, componentIndex) => {
296
+ for (const cellId of component)
297
+ componentOf.set(cellId, componentIndex);
298
+ });
299
+ const minimums = components.map((component) => component[0]);
300
+ const nextComponents = components.map(() => new Set());
301
+ const indegree = components.map(() => 0);
302
+ for (const [from, targets] of adjacency) {
303
+ const fromComponent = componentOf.get(from);
304
+ for (const target of targets) {
305
+ const toComponent = componentOf.get(target);
306
+ if (fromComponent === toComponent || nextComponents[fromComponent].has(toComponent))
307
+ continue;
308
+ nextComponents[fromComponent].add(toComponent);
309
+ indegree[toComponent]++;
310
+ }
311
+ }
312
+ const ready = components.map((_, componentIndex) => componentIndex)
313
+ .filter((componentIndex) => indegree[componentIndex] === 0)
314
+ .sort((a, b) => minimums[a] - minimums[b]);
315
+ const result = [];
316
+ while (ready.length) {
317
+ const componentIndex = ready.shift();
318
+ result.push(...components[componentIndex]);
319
+ for (const next of [...nextComponents[componentIndex]].sort((a, b) => minimums[a] - minimums[b])) {
320
+ indegree[next]--;
321
+ if (indegree[next] !== 0)
322
+ continue;
323
+ let insertion = 0;
324
+ while (insertion < ready.length && minimums[ready[insertion]] < minimums[next])
325
+ insertion++;
326
+ ready.splice(insertion, 0, next);
327
+ }
328
+ }
329
+ return result;
330
+ }
331
+ const autoAssignmentCache = new Map();
332
+ function autoAssignmentSignature(state, manifest) {
333
+ const cells = Array.from({ length: 4 }, (_, offset) => {
334
+ const id = offset + 1;
335
+ const order = effectOrder(state, manifest, id);
336
+ return {
337
+ id,
338
+ mute: state[`cell${id}_mute`],
339
+ order,
340
+ enabled: order.filter((effect) => state[`cell${id}_${effect}Enabled`] === 1 || state[`cell${id}_${effect}Enabled`] === true),
341
+ };
342
+ });
343
+ return JSON.stringify({
344
+ routing: state.mfx_routing,
345
+ combos: state.mfx_combos,
346
+ lfos: valuesOf(state.lfos).map((raw) => {
347
+ const lane = raw && typeof raw === "object" ? raw : {};
348
+ return [lane.lfoGeneratorIndex, lane.paramId, lane.enabled === 1 && lane.strength !== 0];
349
+ }),
350
+ envelopes: valuesOf(state.envelopes).map((raw) => {
351
+ const lane = raw && typeof raw === "object" ? raw : {};
352
+ return [lane.cellId, lane.paramId, lane.enabled !== 0 && lane.strength !== 0];
353
+ }),
354
+ cells,
355
+ });
356
+ }
357
+ function effectOrder(state, manifest, cellId) {
358
+ const raw = state[`cell${cellId}_effectOrder`];
359
+ if (Array.isArray(raw))
360
+ return raw.filter((value) => typeof value === "string");
361
+ const fallback = manifest.stateVariables?.find((entry) => entry.paramId === "cell1_effectOrder")?.defaultValue;
362
+ return Array.isArray(fallback) ? fallback.filter((value) => typeof value === "string") : [];
363
+ }
364
+ function autoTargets(role, state, manifest) {
365
+ const byId = new Map(manifest.parameters.map((parameter) => [parameter.paramId, parameter]));
366
+ const candidates = [];
367
+ const cells = reachableCellOrder(state.mfx_routing);
368
+ for (let cellOrder = 0; cellOrder < cells.length; cellOrder++) {
369
+ const cellId = cells[cellOrder];
370
+ if (state[`cell${cellId}_mute`] === 1 || state[`cell${cellId}_mute`] === true)
371
+ continue;
372
+ for (const effect of effectOrder(state, manifest, cellId)) {
373
+ if (state[`cell${cellId}_${effect}Enabled`] !== 1 && state[`cell${cellId}_${effect}Enabled`] !== true)
374
+ continue;
375
+ for (const parameter of manifest.parameters) {
376
+ if (parameter.cell !== `cell${cellId}` || parameter.effect !== effect)
377
+ continue;
378
+ const suffix = parameter.paramId.replace(`cell${cellId}_`, "");
379
+ const spec = MFX_COMBO_TARGET_SPECS[suffix]?.find((entry) => entry.role === role);
380
+ if (!spec || !isMfxComboTargetParameter(parameter))
381
+ continue;
382
+ const current = state[parameter.paramId];
383
+ candidates.push({
384
+ target: buildMfxComboTarget(parameter.paramId, parameter, spec.strength, spec.dir ?? 1, finite(current) ? current : parameter.defaultValue),
385
+ weight: spec.weight,
386
+ order: cellOrder,
387
+ group: `${cellId}:${effect}`,
388
+ });
389
+ }
390
+ }
391
+ }
392
+ const liveCellIds = new Set(cells);
393
+ const lanes = [...valuesOf(state.lfos), ...valuesOf(state.envelopes)];
394
+ const usedGenerators = new Map();
395
+ const feedbackGenerators = new Set();
396
+ for (const rawLane of lanes) {
397
+ if (!rawLane || typeof rawLane !== "object")
398
+ continue;
399
+ const lane = rawLane;
400
+ const isLfo = "lfoGeneratorIndex" in lane;
401
+ const id = Number(isLfo ? lane.lfoGeneratorIndex : lane.cellId);
402
+ const paramId = typeof lane.paramId === "string" ? lane.paramId : "";
403
+ const enabled = isLfo ? lane.enabled === 1 && lane.strength !== 0 : lane.enabled !== 0 && lane.strength !== 0;
404
+ if (!enabled || !Number.isFinite(id) || id < 1)
405
+ continue;
406
+ const key = `${isLfo ? "lfo" : "env"}${id}`;
407
+ if (/^mfx_combo[1-3]$/.test(paramId)) {
408
+ feedbackGenerators.add(key);
409
+ continue;
410
+ }
411
+ const targetCell = /^cell(\d+)_/.exec(paramId)?.[1];
412
+ if (targetCell && !liveCellIds.has(Number(targetCell)))
413
+ continue;
414
+ const targetParameter = byId.get(paramId);
415
+ if (targetCell && targetParameter?.effect) {
416
+ const enabled = state[`cell${targetCell}_${targetParameter.effect}Enabled`];
417
+ if (enabled !== 1 && enabled !== true)
418
+ continue;
419
+ }
420
+ usedGenerators.set(key, { kind: isLfo ? "lfo" : "env", id });
421
+ }
422
+ for (const key of feedbackGenerators)
423
+ usedGenerators.delete(key);
424
+ for (const generator of usedGenerators.values()) {
425
+ for (const suffix of generator.kind === "lfo" ? AUTO_LFO_SUFFIXES : MFX_COMBO_ENV_SUFFIXES) {
426
+ const spec = MFX_COMBO_TARGET_SPECS[suffix]?.find((entry) => entry.role === role);
427
+ const id = `${generator.kind === "lfo" ? "lfo" : "cell"}${generator.id}_${suffix}`;
428
+ const parameter = byId.get(id);
429
+ if (!spec || !parameter || !isMfxComboTargetParameter(parameter))
430
+ continue;
431
+ const current = state[id];
432
+ candidates.push({
433
+ target: buildMfxComboTarget(id, parameter, spec.strength, spec.dir ?? 1, finite(current) ? current : parameter.defaultValue),
434
+ weight: spec.weight,
435
+ order: 1_000_000 + (generator.kind === "lfo" ? 100 : 0) + generator.id,
436
+ group: `${generator.kind}:${generator.id}`,
437
+ });
438
+ }
439
+ }
440
+ for (const spec of GLOBAL_SPECS) {
441
+ if (spec.role !== role)
442
+ continue;
443
+ const parameter = byId.get(spec.paramId);
444
+ if (!parameter || !isMfxComboTargetParameter(parameter))
445
+ continue;
446
+ const current = state[spec.paramId];
447
+ candidates.push({
448
+ target: buildMfxComboTarget(spec.paramId, parameter, spec.strength, 1, finite(current) ? current : parameter.defaultValue),
449
+ weight: spec.weight,
450
+ order: Number.MAX_SAFE_INTEGER,
451
+ group: "",
452
+ });
453
+ }
454
+ candidates.sort((a, b) => b.weight - a.weight || a.order - b.order || a.target.id.localeCompare(b.target.id));
455
+ const targets = [];
456
+ const perGroup = new Map();
457
+ for (let pass = 1; pass <= MFX_COMBO_MAX_PER_EFFECT; pass++) {
458
+ for (const candidate of candidates) {
459
+ if (targets.length === MFX_COMBO_MAX_TARGETS)
460
+ return targets;
461
+ if ((perGroup.get(candidate.group) ?? 0) >= pass || targets.some((target) => target.id === candidate.target.id))
462
+ continue;
463
+ targets.push(candidate.target);
464
+ perGroup.set(candidate.group, (perGroup.get(candidate.group) ?? 0) + 1);
465
+ }
466
+ }
467
+ return targets;
468
+ }
469
+ export function resolveMfxCombos(state, manifest, cacheKey = manifest.bundleId) {
470
+ const slots = parseMfxComboSlots(state.mfx_combos);
471
+ const parameterIds = new Set(manifest.parameters.map((parameter) => parameter.paramId));
472
+ const signature = autoAssignmentSignature(state, manifest);
473
+ let cached = autoAssignmentCache.get(cacheKey);
474
+ if (!cached || cached.signature !== signature) {
475
+ cached = {
476
+ signature,
477
+ targets: {
478
+ morph: autoTargets("morph", state, manifest),
479
+ color: autoTargets("color", state, manifest),
480
+ motion: autoTargets("motion", state, manifest),
481
+ },
482
+ };
483
+ autoAssignmentCache.set(cacheKey, cached);
484
+ }
485
+ return MFX_COMBO_ROLES.map((role, offset) => {
486
+ const index = offset + 1;
487
+ const slot = slots[String(index)];
488
+ const owned = Array.isArray(slot?.targets);
489
+ return {
490
+ index,
491
+ role,
492
+ label: slot?.name ?? MFX_COMBO_LABELS[role],
493
+ locked: slot?.locked === 1,
494
+ auto: !owned,
495
+ targets: owned ? slot.targets.filter((target) => parameterIds.has(target.id)) : cached.targets[role],
496
+ };
497
+ });
498
+ }
499
+ //# sourceMappingURL=mfxCombos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfxCombos.js","sourceRoot":"","sources":["../src/mfxCombos.ts"],"names":[],"mappings":"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"}
@@ -73,6 +73,7 @@ export interface MixSuggestion {
73
73
  }
74
74
  export type CurrentFlatState = Record<string, number | undefined>;
75
75
  export declare const MAX_FADER_MOVE_DB = 12;
76
+ export declare const MAX_FADER_LIFT_DB = 3;
76
77
  export declare const FADER_EPSILON_DB = 0.3;
77
78
  export declare const FADER_COMPENSATION_EPSILON_DB = 0.05;
78
79
  export declare const MIN_STEM_LUFS = -50;
@@ -83,6 +84,7 @@ export declare const ROLE_OFFSETS_DB: {
83
84
  readonly bass: 0;
84
85
  readonly melodic: -2;
85
86
  readonly ambient: -5;
87
+ readonly hats: -11;
86
88
  };
87
89
  export type CellRole = keyof typeof ROLE_OFFSETS_DB;
88
90
  export declare const FADER_FLOOR_DB = -59;
@@ -91,6 +93,8 @@ export declare const BASS_LOW_FRACTION = 0.5;
91
93
  export declare const LOW_TRANSIENT_ONSET_DENSITY = 0.5;
92
94
  export declare const DRUMS_CREST_MIN_DB = 10;
93
95
  export declare const DRUMS_ONSET_DENSITY = 3;
96
+ export declare const PERCUSSIVE_ONSET_DENSITY = 0.35;
97
+ export declare const HATS_CENTROID_HZ = 4000;
94
98
  export declare const AMBIENT_ONSET_DENSITY = 0.3;
95
99
  export declare const AMBIENT_MAX_PLR = 8;
96
100
  export declare const PAN_EPSILON = 0.05;
@@ -117,6 +121,7 @@ export declare const dbToPower: (db: number) => number;
117
121
  export declare function barkCentroidHz(barkDb: readonly number[]): number;
118
122
  export declare function lowFraction(barkDb: readonly number[], belowHz?: number): number;
119
123
  export declare function maskingOverlap(aDb: readonly number[], bDb: readonly number[]): number;
124
+ export declare function spectralShapeOverlap(aDb: readonly number[], bDb: readonly number[]): number;
120
125
  export declare function maskingMatrix(barkDbByCell: readonly (readonly number[])[]): number[][];
121
126
  export type OverlapRegion = 'low' | 'mid' | 'high';
122
127
  export declare function dominantOverlapRegion(aDb: readonly number[], bDb: readonly number[]): OverlapRegion;
@@ -152,4 +157,5 @@ export declare function isLowDominant(a: CellStemAnalysis): boolean;
152
157
  export declare function classifyCellRole(a: CellStemAnalysis): CellRole;
153
158
  export declare function normalizeMovesToBus(deltasDb: number[], lufs: number[]): number[];
154
159
  export declare function normalizeMovesToBusBounded(rawDeltasDb: number[], lufs: number[], currentVolumes: number[]): number[];
160
+ export declare function maskerWeight(pLufs: number, qLufs: number): number;
155
161
  export declare function suggestMix(m: MixMeasurement, options: MixAssistOptions, current?: CurrentFlatState): MixSuggestion;