ue-mcp 1.1.15 → 1.1.16

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # UE-MCP
2
2
 
3
- **Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->23<!-- /count --> category tools covering <!-- count:actions -->682+<!-- /count --> actions, plus a YAML flow engine for multi-step workflows.
3
+ **Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->23<!-- /count --> category tools covering <!-- count:actions -->711+<!-- /count --> actions, plus a YAML flow engine for multi-step workflows.
4
4
 
5
5
  ```mermaid
6
6
  flowchart LR
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "tools": 23,
3
- "actions": 682,
4
- "bridgeActions": 648,
3
+ "actions": 711,
4
+ "bridgeActions": 677,
5
5
  "localActions": 34,
6
6
  "perTool": {
7
7
  "project": 32,
@@ -14,7 +14,7 @@
14
14
  "pcg": 19,
15
15
  "foliage": 5,
16
16
  "niagara": 28,
17
- "audio": 6,
17
+ "audio": 35,
18
18
  "widget": 27,
19
19
  "editor": 66,
20
20
  "reflection": 11,
@@ -30,6 +30,6 @@
30
30
  },
31
31
  "nativeToolsets": 52,
32
32
  "nativeToolActions": 830,
33
- "generatedAt": "2026-07-11T19:28:24.770Z",
34
- "version": "1.1.15"
33
+ "generatedAt": "2026-07-13T23:04:37.450Z",
34
+ "version": "1.1.16"
35
35
  }
@@ -1,2 +1,17 @@
1
1
  import { type ToolDef } from "../types.js";
2
+ /**
3
+ * Audio: the full UE5 audio stack, authored end-to-end through the bridge.
4
+ *
5
+ * - Assets + playback (import, cue/metasound creation, play, ambient).
6
+ * - MetaSound graph authoring (nodes, inputs/outputs, connections, defaults) via
7
+ * the MetaSound Builder subsystem - the modern UE5 audio graph.
8
+ * - SoundCue graph authoring (wave player, mixer, random, modulator, ...).
9
+ * - Mixing + routing: submixes and submix effect chains, sound classes, sound
10
+ * mixes, concurrency.
11
+ * - Spatialization: attenuation assets, and assigning submix/class/attenuation/
12
+ * concurrency onto sounds.
13
+ *
14
+ * Nothing here creates an empty placeholder: every asset is authorable to a
15
+ * working state through these actions.
16
+ */
2
17
  export declare const audioTool: ToolDef;
@@ -1,14 +1,66 @@
1
1
  import { z } from "zod";
2
2
  import { categoryTool, bp } from "../types.js";
3
3
  import { Vec3 } from "../schemas.js";
4
- export const audioTool = categoryTool("audio", "Audio: sound assets, playback, ambient sounds, SoundCues, MetaSounds.", {
5
- list: bp("List sound assets. Params: directory?, recursive?", "list_sound_assets"),
6
- import_audio: bp("Import a WAV/OGG/FLAC file as a USoundWave. Returns durationSeconds, numChannels, looping. Params: filePath, name?, packagePath? (default /Game/Audio), looping?, replaceExisting? (default true) (#664)", "import_audio", (p) => ({ filePath: p.filePath, name: p.name, packagePath: p.packagePath, looping: p.looping, replaceExisting: p.replaceExisting })),
7
- play_at_location: bp("Play sound. Params: soundPath, location, volumeMultiplier?, pitchMultiplier?", "play_sound_at_location"),
8
- spawn_ambient: bp("Place ambient sound. Params: soundPath, location, label?", "spawn_ambient_sound"),
9
- create_cue: bp("Create SoundCue. Params: name, packagePath?, soundWavePath?", "create_sound_cue"),
10
- create_metasound: bp("Create MetaSoundSource. Params: name, packagePath?", "create_metasound_source"),
4
+ /**
5
+ * Audio: the full UE5 audio stack, authored end-to-end through the bridge.
6
+ *
7
+ * - Assets + playback (import, cue/metasound creation, play, ambient).
8
+ * - MetaSound graph authoring (nodes, inputs/outputs, connections, defaults) via
9
+ * the MetaSound Builder subsystem - the modern UE5 audio graph.
10
+ * - SoundCue graph authoring (wave player, mixer, random, modulator, ...).
11
+ * - Mixing + routing: submixes and submix effect chains, sound classes, sound
12
+ * mixes, concurrency.
13
+ * - Spatialization: attenuation assets, and assigning submix/class/attenuation/
14
+ * concurrency onto sounds.
15
+ *
16
+ * Nothing here creates an empty placeholder: every asset is authorable to a
17
+ * working state through these actions.
18
+ */
19
+ export const audioTool = categoryTool("audio", "Audio: sound assets, playback, MetaSound + SoundCue graph authoring, submixes/effects, sound classes/mixes, attenuation, concurrency, spatialization.", {
20
+ // ── Assets + playback ──────────────────────────────────────────────
21
+ list: bp("List sound assets (SoundWave, SoundCue, MetaSoundSource). Params: directory?, recursive?", "list_sound_assets"),
22
+ import_audio: bp("Import a WAV/OGG/FLAC file as a USoundWave. Returns durationSeconds, numChannels, looping. Params: filePath, name?, packagePath? (default /Game/Audio), looping?, replaceExisting? (default true)", "import_audio", (p) => ({ filePath: p.filePath, name: p.name, packagePath: p.packagePath, looping: p.looping, replaceExisting: p.replaceExisting })),
23
+ play_at_location: bp("Play a sound in the editor world. Params: soundPath, location, volumeMultiplier?, pitchMultiplier?", "play_sound_at_location"),
24
+ spawn_ambient: bp("Place an AmbientSound actor. Params: soundPath, location, label?", "spawn_ambient_sound"),
25
+ // ── MetaSound ──────────────────────────────────────────────────────
26
+ metasound_author: bp("PREFERRED: stamp a whole MetaSound graph in ONE call from a declarative spec (avoids dozens of add_node/connect round-trips). Params: name, packagePath?, format? ('mono'|'stereo'), oneShot?, onConflict?, inputs? [{name,dataType,default?}], outputs? [{name,dataType}], nodes? [{id,class,namespace?,variant?,majorVersion?,inputs?:{vertex:value}}], connections? [{from,to}]. Endpoints are 'nodeId:vertex', or special heads 'input:<name>', 'output:<name>', 'audioOut:<channel>'. Each element reports its own ok/error; builds + saves at the end.", "metasound_author", (p) => ({ name: p.name, packagePath: p.packagePath, format: p.format, oneShot: p.oneShot, onConflict: p.onConflict, inputs: p.inputs, outputs: p.outputs, nodes: p.nodes, connections: p.connections })),
27
+ create_metasound: bp("Create an empty MetaSoundSource and open a builder session for INCREMENTAL authoring (add_node/connect/...). For a whole graph at once prefer metasound_author. Params: name, packagePath? (default /Game/Audio/MetaSounds), format? ('mono'|'stereo'), oneShot?. Returns assetPath.", "create_metasound_source", (p) => ({ name: p.name, packagePath: p.packagePath, format: p.format, oneShot: p.oneShot, onConflict: p.onConflict })),
28
+ metasound_list_node_classes: bp("List common MetaSound node classes to add (name, namespace, variant, notes). Params: filter? (substring).", "metasound_list_node_classes", (p) => ({ filter: p.filter })),
29
+ metasound_get_graph: bp("Report a MetaSound's builder-session state (active builder, audio outputs, oneShot). Params: assetPath.", "metasound_get_graph", (p) => ({ assetPath: p.assetPath ?? p.metasoundPath })),
30
+ metasound_add_node: bp("Add a node to a MetaSound graph by registered class name. Returns nodeId (+ input/output counts). Params: assetPath, nodeClassName (e.g. 'Sine'), nodeNamespace? (default 'UE'), nodeVariant? (e.g. 'Audio'), majorVersion? (default 1).", "metasound_add_node", (p) => ({ assetPath: p.assetPath ?? p.metasoundPath, nodeClassName: p.nodeClassName, nodeNamespace: p.nodeNamespace, nodeVariant: p.nodeVariant, majorVersion: p.majorVersion })),
31
+ metasound_add_input: bp("Add a graph input to a MetaSound. Params: assetPath, name, dataType ('Float'|'Int32'|'Bool'|'String'|'Trigger'|'Audio'|'Time'|...), defaultValue?.", "metasound_add_graph_input", (p) => ({ assetPath: p.assetPath ?? p.metasoundPath, name: p.name, dataType: p.dataType, defaultValue: p.defaultValue })),
32
+ metasound_add_output: bp("Add a graph output to a MetaSound. Params: assetPath, name, dataType.", "metasound_add_graph_output", (p) => ({ assetPath: p.assetPath ?? p.metasoundPath, name: p.name, dataType: p.dataType })),
33
+ metasound_connect: bp("Connect one node's output vertex to another node's input vertex. Params: assetPath, fromNodeId, fromOutput (vertex name), toNodeId, toInput (vertex name).", "metasound_connect", (p) => ({ assetPath: p.assetPath ?? p.metasoundPath, fromNodeId: p.fromNodeId, fromOutput: p.fromOutput, toNodeId: p.toNodeId, toInput: p.toInput })),
34
+ metasound_connect_input: bp("Connect a graph input to a node input vertex. Params: assetPath, graphInput (name), toNodeId, toInput (vertex name).", "metasound_connect_graph_input", (p) => ({ assetPath: p.assetPath ?? p.metasoundPath, graphInput: p.graphInput, toNodeId: p.toNodeId, toInput: p.toInput })),
35
+ metasound_connect_output: bp("Connect a node output vertex to a graph output. Params: assetPath, fromNodeId, fromOutput (vertex name), graphOutput (name).", "metasound_connect_graph_output", (p) => ({ assetPath: p.assetPath ?? p.metasoundPath, fromNodeId: p.fromNodeId, fromOutput: p.fromOutput, graphOutput: p.graphOutput })),
36
+ metasound_connect_audio_out: bp("Connect a node output vertex to the source's audio output. Params: assetPath, fromNodeId, fromOutput (vertex name, must be Audio type), channel? (0=left/mono, 1=right; default 0).", "metasound_connect_audio_out", (p) => ({ assetPath: p.assetPath ?? p.metasoundPath, fromNodeId: p.fromNodeId, fromOutput: p.fromOutput, channel: p.channel })),
37
+ metasound_set_default: bp("Set a default value on a node input vertex, or on a graph input. Params: assetPath, value (required), dataType? (Float|Int32|Bool|String hint), then EITHER (nodeId + inputName) OR graphInput.", "metasound_set_input_default", (p) => ({ assetPath: p.assetPath ?? p.metasoundPath, value: p.value, dataType: p.dataType, nodeId: p.nodeId, inputName: p.inputName, graphInput: p.graphInput })),
38
+ metasound_build: bp("Write the builder document to the MetaSound asset and save. Call after authoring. Params: assetPath.", "metasound_build", (p) => ({ assetPath: p.assetPath ?? p.metasoundPath })),
39
+ // ── SoundCue graph ─────────────────────────────────────────────────
40
+ cue_author: bp("PREFERRED: create a SoundCue and stamp its whole node tree in ONE call. Params: name, packagePath?, onConflict?, nodes [{id,type,soundWavePath?,properties?}], connections [{parent,child,index?}] (omit parent => root), root? (nodeId). Each element reports ok/error; links + saves at the end.", "soundcue_author", (p) => ({ name: p.name, packagePath: p.packagePath, onConflict: p.onConflict, nodes: p.nodes, connections: p.connections, root: p.root })),
41
+ create_cue: bp("Create a SoundCue, optionally seeded from a wave. For a whole graph prefer cue_author. Params: name, packagePath?, soundWavePath?.", "create_sound_cue"),
42
+ cue_add_node: bp("Add a node to a SoundCue graph. Returns nodeId. Params: cuePath, nodeType ('wave_player'|'mixer'|'random'|'modulator'|'attenuation'|'looping'|'concatenator'|'delay'|'switch'), soundWavePath? (wave_player), properties? (node-specific fields).", "soundcue_add_node", (p) => ({ cuePath: p.cuePath ?? p.assetPath, nodeType: p.nodeType, soundWavePath: p.soundWavePath, properties: p.properties })),
43
+ cue_connect: bp("Connect a SoundCue node as a child of another (or as the cue root). Params: cuePath, parentNodeId (omit for root), childNodeId, childIndex? (default append).", "soundcue_connect", (p) => ({ cuePath: p.cuePath ?? p.assetPath, parentNodeId: p.parentNodeId, childNodeId: p.childNodeId, childIndex: p.childIndex })),
44
+ cue_get_graph: bp("Read a SoundCue node graph: nodes (id, type, children) and root. Params: cuePath.", "soundcue_get_graph", (p) => ({ cuePath: p.cuePath ?? p.assetPath })),
45
+ // ── Mixing + routing ───────────────────────────────────────────────
46
+ create_submix: bp("Create a USoundSubmix, optionally parented. Params: name, packagePath? (default /Game/Audio/Submixes), parentPath?, outputVolume?, wetLevel?, dryLevel?.", "create_submix", (p) => ({ name: p.name, packagePath: p.packagePath, parentPath: p.parentPath, outputVolume: p.outputVolume, wetLevel: p.wetLevel, dryLevel: p.dryLevel, onConflict: p.onConflict })),
47
+ set_submix_parent: bp("Reparent a submix (sets ParentSubmix, updating both ends). Params: submixPath, parentPath (empty detaches to root).", "set_submix_parent", (p) => ({ submixPath: p.submixPath, parentPath: p.parentPath })),
48
+ add_submix_effect: bp("Append a submix effect preset to a submix's effect chain (creates the preset asset). Params: submixPath, effectType ('reverb'|'eq'|'dynamics'|'filter'|'delay'), name?, packagePath?, settings? (effect Settings struct as JSON).", "add_submix_effect", (p) => ({ submixPath: p.submixPath, effectType: p.effectType, name: p.name, packagePath: p.packagePath, settings: p.settings })),
49
+ create_sound_class: bp("Create a USoundClass, optionally parented, with properties. Params: name, packagePath? (default /Game/Audio/SoundClasses), parentPath?, properties? (FSoundClassProperties JSON: Volume, Pitch, bIsUISound, ...).", "create_sound_class", (p) => ({ name: p.name, packagePath: p.packagePath, parentPath: p.parentPath, properties: p.properties, onConflict: p.onConflict })),
50
+ create_sound_mix: bp("Create a USoundMix with sound-class adjusters. Params: name, packagePath? (default /Game/Audio/SoundMixes), adjusters? ([{soundClassPath, volumeAdjuster?, pitchAdjuster?, applyToChildren?}]), fadeInTime?, fadeOutTime?.", "create_sound_mix", (p) => ({ name: p.name, packagePath: p.packagePath, adjusters: p.adjusters, fadeInTime: p.fadeInTime, fadeOutTime: p.fadeOutTime, onConflict: p.onConflict })),
51
+ create_concurrency: bp("Create a USoundConcurrency asset. Params: name, packagePath? (default /Game/Audio/Concurrency), maxCount?, limitToOwner?, resolutionRule? (e.g. 'StopFarthestThenOldest'), volumeScale?.", "create_concurrency", (p) => ({ name: p.name, packagePath: p.packagePath, maxCount: p.maxCount, limitToOwner: p.limitToOwner, resolutionRule: p.resolutionRule, volumeScale: p.volumeScale, onConflict: p.onConflict })),
52
+ // ── Spatialization ─────────────────────────────────────────────────
53
+ create_attenuation: bp("Create a USoundAttenuation asset. Params: name, packagePath? (default /Game/Audio/Attenuation), settings? (FSoundAttenuationSettings JSON), plus shortcuts: falloffDistance?, spatialize?, enableOcclusion?.", "create_attenuation", (p) => ({ name: p.name, packagePath: p.packagePath, settings: p.settings, falloffDistance: p.falloffDistance, spatialize: p.spatialize, enableOcclusion: p.enableOcclusion, onConflict: p.onConflict })),
54
+ // ── Assign routing onto a sound ────────────────────────────────────
55
+ set_sound_submix: bp("Set a sound's base submix (routing target). Params: soundPath, submixPath (empty detaches).", "set_sound_submix", (p) => ({ soundPath: p.soundPath ?? p.assetPath, submixPath: p.submixPath })),
56
+ add_sound_submix_send: bp("Add a submix send to a sound. Params: soundPath, submixPath, sendLevel? (default 1.0).", "add_sound_submix_send", (p) => ({ soundPath: p.soundPath ?? p.assetPath, submixPath: p.submixPath, sendLevel: p.sendLevel })),
57
+ set_sound_class: bp("Assign a sound class to a sound. Params: soundPath, soundClassPath.", "set_sound_class", (p) => ({ soundPath: p.soundPath ?? p.assetPath, soundClassPath: p.soundClassPath })),
58
+ set_sound_attenuation: bp("Attach an attenuation asset to a sound. Params: soundPath, attenuationPath (empty clears).", "set_sound_attenuation", (p) => ({ soundPath: p.soundPath ?? p.assetPath, attenuationPath: p.attenuationPath })),
59
+ set_sound_concurrency: bp("Attach a concurrency asset to a sound. Params: soundPath, concurrencyPath (empty clears).", "set_sound_concurrency", (p) => ({ soundPath: p.soundPath ?? p.assetPath, concurrencyPath: p.concurrencyPath })),
60
+ // ── Generic property set (any audio asset) ─────────────────────────
61
+ set_property: bp("Set any UPROPERTY on an audio asset by (dotted) name, value as JSON. Handles nested structs, arrays, object refs. Params: assetPath, propertyName, value.", "set_audio_property", (p) => ({ assetPath: p.assetPath, propertyName: p.propertyName, value: p.value })),
11
62
  }, undefined, {
63
+ // shared / assets
12
64
  directory: z.string().optional(), recursive: z.boolean().optional(),
13
65
  soundPath: z.string().optional(),
14
66
  location: Vec3.optional(),
@@ -17,9 +69,70 @@ export const audioTool = categoryTool("audio", "Audio: sound assets, playback, a
17
69
  label: z.string().optional(),
18
70
  name: z.string().optional(),
19
71
  packagePath: z.string().optional(),
72
+ onConflict: z.string().optional().describe("skip|replace|rename when the asset name exists"),
20
73
  soundWavePath: z.string().optional(),
21
- filePath: z.string().optional().describe("import_audio: path to a WAV/OGG/FLAC file (#664)"),
22
- looping: z.boolean().optional().describe("import_audio: set SoundWave bLooping (#664)"),
23
- replaceExisting: z.boolean().optional().describe("import_audio: replace an existing asset (default true) (#664)"),
74
+ filePath: z.string().optional().describe("import_audio: path to a WAV/OGG/FLAC file"),
75
+ looping: z.boolean().optional().describe("import_audio: set SoundWave bLooping"),
76
+ replaceExisting: z.boolean().optional().describe("import_audio: replace an existing asset (default true)"),
77
+ assetPath: z.string().optional(),
78
+ propertyName: z.string().optional(),
79
+ value: z.any().optional().describe("JSON value for set_default / set_property"),
80
+ // metasound
81
+ metasoundPath: z.string().optional(),
82
+ format: z.string().optional().describe("create_metasound: 'mono' | 'stereo'"),
83
+ oneShot: z.boolean().optional(),
84
+ filter: z.string().optional(),
85
+ nodeClassName: z.string().optional(),
86
+ nodeNamespace: z.string().optional(),
87
+ nodeVariant: z.string().optional(),
88
+ majorVersion: z.number().optional(),
89
+ dataType: z.string().optional().describe("MetaSound data type: Float, Int32, Bool, String, Trigger, Audio, Time, ..."),
90
+ defaultValue: z.any().optional(),
91
+ fromNodeId: z.string().optional(),
92
+ fromOutput: z.string().optional(),
93
+ toNodeId: z.string().optional(),
94
+ toInput: z.string().optional(),
95
+ graphInput: z.string().optional(),
96
+ graphOutput: z.string().optional(),
97
+ channel: z.number().optional(),
98
+ nodeId: z.string().optional(),
99
+ inputName: z.string().optional(),
100
+ // one-shot declarative graph authoring (metasound_author / cue_author)
101
+ inputs: z.array(z.any()).optional().describe("metasound_author: [{name,dataType,default?}]"),
102
+ outputs: z.array(z.any()).optional().describe("metasound_author: [{name,dataType}]"),
103
+ nodes: z.array(z.any()).optional().describe("author: node specs"),
104
+ connections: z.array(z.any()).optional().describe("author: connection specs"),
105
+ root: z.string().optional().describe("cue_author: explicit root nodeId"),
106
+ // soundcue graph
107
+ cuePath: z.string().optional(),
108
+ nodeType: z.string().optional(),
109
+ properties: z.record(z.any()).optional(),
110
+ parentNodeId: z.string().optional(),
111
+ childNodeId: z.string().optional(),
112
+ childIndex: z.number().optional(),
113
+ // mixing / routing
114
+ parentPath: z.string().optional(),
115
+ outputVolume: z.number().optional(),
116
+ wetLevel: z.number().optional(),
117
+ dryLevel: z.number().optional(),
118
+ submixPath: z.string().optional(),
119
+ effectType: z.string().optional(),
120
+ settings: z.record(z.any()).optional(),
121
+ adjusters: z.array(z.any()).optional(),
122
+ fadeInTime: z.number().optional(),
123
+ fadeOutTime: z.number().optional(),
124
+ maxCount: z.number().optional(),
125
+ limitToOwner: z.boolean().optional(),
126
+ resolutionRule: z.string().optional(),
127
+ volumeScale: z.number().optional(),
128
+ // spatialization
129
+ falloffDistance: z.number().optional(),
130
+ spatialize: z.boolean().optional(),
131
+ enableOcclusion: z.boolean().optional(),
132
+ // assignment
133
+ soundClassPath: z.string().optional(),
134
+ attenuationPath: z.string().optional(),
135
+ concurrencyPath: z.string().optional(),
136
+ sendLevel: z.number().optional(),
24
137
  });
25
138
  //# sourceMappingURL=audio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/tools/audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,EAAE,EAAgB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,MAAM,SAAS,GAAY,YAAY,CAC5C,OAAO,EACP,uEAAuE,EACvE;IACE,IAAI,EAAe,EAAE,CAAC,mDAAmD,EAAE,mBAAmB,CAAC;IAC/F,YAAY,EAAO,EAAE,CAAC,0MAA0M,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IACtX,gBAAgB,EAAG,EAAE,CAAC,8EAA8E,EAAE,wBAAwB,CAAC;IAC/H,aAAa,EAAM,EAAE,CAAC,0DAA0D,EAAE,qBAAqB,CAAC;IACxG,UAAU,EAAS,EAAE,CAAC,6DAA6D,EAAE,kBAAkB,CAAC;IACxG,gBAAgB,EAAG,EAAE,CAAC,oDAAoD,EAAE,yBAAyB,CAAC;CACvG,EACD,SAAS,EACT;IACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;IACzB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC5F,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACvF,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;CAClH,CACF,CAAC"}
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/tools/audio.ts"],"names":[],"mappings":"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"}
@@ -2594,39 +2594,213 @@ tasks:
2594
2594
  audio.list:
2595
2595
  class_path: ue-mcp.bridge
2596
2596
  group: audio
2597
- description: "List sound assets. Params: directory?, recursive?"
2597
+ description: "List sound assets (SoundWave, SoundCue, MetaSoundSource). Params: directory?, recursive?"
2598
2598
  options:
2599
2599
  method: list_sound_assets
2600
2600
  audio.import_audio:
2601
2601
  class_path: ue-mcp.bridge
2602
2602
  group: audio
2603
- description: "Import a WAV/OGG/FLAC file as a USoundWave. Returns durationSeconds, numChannels, looping. Params: filePath, name?, packagePath? (default /Game/Audio), looping?, replaceExisting? (default true) (#664)"
2603
+ description: "Import a WAV/OGG/FLAC file as a USoundWave. Returns durationSeconds, numChannels, looping. Params: filePath, name?, packagePath? (default /Game/Audio), looping?, replaceExisting? (default true)"
2604
2604
  options:
2605
2605
  method: import_audio
2606
2606
  audio.play_at_location:
2607
2607
  class_path: ue-mcp.bridge
2608
2608
  group: audio
2609
- description: "Play sound. Params: soundPath, location, volumeMultiplier?, pitchMultiplier?"
2609
+ description: "Play a sound in the editor world. Params: soundPath, location, volumeMultiplier?, pitchMultiplier?"
2610
2610
  options:
2611
2611
  method: play_sound_at_location
2612
2612
  audio.spawn_ambient:
2613
2613
  class_path: ue-mcp.bridge
2614
2614
  group: audio
2615
- description: "Place ambient sound. Params: soundPath, location, label?"
2615
+ description: "Place an AmbientSound actor. Params: soundPath, location, label?"
2616
2616
  options:
2617
2617
  method: spawn_ambient_sound
2618
- audio.create_cue:
2618
+ audio.metasound_author:
2619
2619
  class_path: ue-mcp.bridge
2620
2620
  group: audio
2621
- description: "Create SoundCue. Params: name, packagePath?, soundWavePath?"
2621
+ description: "PREFERRED: stamp a whole MetaSound graph in ONE call from a declarative spec (avoids dozens of add_node/connect round-trips). Params: name, packagePath?, format? ('mono'|'stereo'), oneShot?, onConflict?, inputs? [{name,dataType,default?}], outputs? [{name,dataType}], nodes? [{id,class,namespace?,variant?,majorVersion?,inputs?:{vertex:value}}], connections? [{from,to}]. Endpoints are 'nodeId:vertex', or special heads 'input:<name>', 'output:<name>', 'audioOut:<channel>'. Each element reports its own ok/error; builds + saves at the end."
2622
2622
  options:
2623
- method: create_sound_cue
2623
+ method: metasound_author
2624
2624
  audio.create_metasound:
2625
2625
  class_path: ue-mcp.bridge
2626
2626
  group: audio
2627
- description: "Create MetaSoundSource. Params: name, packagePath?"
2627
+ description: "Create an empty MetaSoundSource and open a builder session for INCREMENTAL authoring (add_node/connect/...). For a whole graph at once prefer metasound_author. Params: name, packagePath? (default /Game/Audio/MetaSounds), format? ('mono'|'stereo'), oneShot?. Returns assetPath."
2628
2628
  options:
2629
2629
  method: create_metasound_source
2630
+ audio.metasound_list_node_classes:
2631
+ class_path: ue-mcp.bridge
2632
+ group: audio
2633
+ description: "List common MetaSound node classes to add (name, namespace, variant, notes). Params: filter? (substring)."
2634
+ options:
2635
+ method: metasound_list_node_classes
2636
+ audio.metasound_get_graph:
2637
+ class_path: ue-mcp.bridge
2638
+ group: audio
2639
+ description: "Report a MetaSound's builder-session state (active builder, audio outputs, oneShot). Params: assetPath."
2640
+ options:
2641
+ method: metasound_get_graph
2642
+ audio.metasound_add_node:
2643
+ class_path: ue-mcp.bridge
2644
+ group: audio
2645
+ description: "Add a node to a MetaSound graph by registered class name. Returns nodeId (+ input/output counts). Params: assetPath, nodeClassName (e.g. 'Sine'), nodeNamespace? (default 'UE'), nodeVariant? (e.g. 'Audio'), majorVersion? (default 1)."
2646
+ options:
2647
+ method: metasound_add_node
2648
+ audio.metasound_add_input:
2649
+ class_path: ue-mcp.bridge
2650
+ group: audio
2651
+ description: "Add a graph input to a MetaSound. Params: assetPath, name, dataType ('Float'|'Int32'|'Bool'|'String'|'Trigger'|'Audio'|'Time'|...), defaultValue?."
2652
+ options:
2653
+ method: metasound_add_graph_input
2654
+ audio.metasound_add_output:
2655
+ class_path: ue-mcp.bridge
2656
+ group: audio
2657
+ description: "Add a graph output to a MetaSound. Params: assetPath, name, dataType."
2658
+ options:
2659
+ method: metasound_add_graph_output
2660
+ audio.metasound_connect:
2661
+ class_path: ue-mcp.bridge
2662
+ group: audio
2663
+ description: "Connect one node's output vertex to another node's input vertex. Params: assetPath, fromNodeId, fromOutput (vertex name), toNodeId, toInput (vertex name)."
2664
+ options:
2665
+ method: metasound_connect
2666
+ audio.metasound_connect_input:
2667
+ class_path: ue-mcp.bridge
2668
+ group: audio
2669
+ description: "Connect a graph input to a node input vertex. Params: assetPath, graphInput (name), toNodeId, toInput (vertex name)."
2670
+ options:
2671
+ method: metasound_connect_graph_input
2672
+ audio.metasound_connect_output:
2673
+ class_path: ue-mcp.bridge
2674
+ group: audio
2675
+ description: "Connect a node output vertex to a graph output. Params: assetPath, fromNodeId, fromOutput (vertex name), graphOutput (name)."
2676
+ options:
2677
+ method: metasound_connect_graph_output
2678
+ audio.metasound_connect_audio_out:
2679
+ class_path: ue-mcp.bridge
2680
+ group: audio
2681
+ description: "Connect a node output vertex to the source's audio output. Params: assetPath, fromNodeId, fromOutput (vertex name, must be Audio type), channel? (0=left/mono, 1=right; default 0)."
2682
+ options:
2683
+ method: metasound_connect_audio_out
2684
+ audio.metasound_set_default:
2685
+ class_path: ue-mcp.bridge
2686
+ group: audio
2687
+ description: "Set a default value on a node input vertex, or on a graph input. Params: assetPath, value (required), dataType? (Float|Int32|Bool|String hint), then EITHER (nodeId + inputName) OR graphInput."
2688
+ options:
2689
+ method: metasound_set_input_default
2690
+ audio.metasound_build:
2691
+ class_path: ue-mcp.bridge
2692
+ group: audio
2693
+ description: "Write the builder document to the MetaSound asset and save. Call after authoring. Params: assetPath."
2694
+ options:
2695
+ method: metasound_build
2696
+ audio.cue_author:
2697
+ class_path: ue-mcp.bridge
2698
+ group: audio
2699
+ description: "PREFERRED: create a SoundCue and stamp its whole node tree in ONE call. Params: name, packagePath?, onConflict?, nodes [{id,type,soundWavePath?,properties?}], connections [{parent,child,index?}] (omit parent => root), root? (nodeId). Each element reports ok/error; links + saves at the end."
2700
+ options:
2701
+ method: soundcue_author
2702
+ audio.create_cue:
2703
+ class_path: ue-mcp.bridge
2704
+ group: audio
2705
+ description: "Create a SoundCue, optionally seeded from a wave. For a whole graph prefer cue_author. Params: name, packagePath?, soundWavePath?."
2706
+ options:
2707
+ method: create_sound_cue
2708
+ audio.cue_add_node:
2709
+ class_path: ue-mcp.bridge
2710
+ group: audio
2711
+ description: "Add a node to a SoundCue graph. Returns nodeId. Params: cuePath, nodeType ('wave_player'|'mixer'|'random'|'modulator'|'attenuation'|'looping'|'concatenator'|'delay'|'switch'), soundWavePath? (wave_player), properties? (node-specific fields)."
2712
+ options:
2713
+ method: soundcue_add_node
2714
+ audio.cue_connect:
2715
+ class_path: ue-mcp.bridge
2716
+ group: audio
2717
+ description: "Connect a SoundCue node as a child of another (or as the cue root). Params: cuePath, parentNodeId (omit for root), childNodeId, childIndex? (default append)."
2718
+ options:
2719
+ method: soundcue_connect
2720
+ audio.cue_get_graph:
2721
+ class_path: ue-mcp.bridge
2722
+ group: audio
2723
+ description: "Read a SoundCue node graph: nodes (id, type, children) and root. Params: cuePath."
2724
+ options:
2725
+ method: soundcue_get_graph
2726
+ audio.create_submix:
2727
+ class_path: ue-mcp.bridge
2728
+ group: audio
2729
+ description: "Create a USoundSubmix, optionally parented. Params: name, packagePath? (default /Game/Audio/Submixes), parentPath?, outputVolume?, wetLevel?, dryLevel?."
2730
+ options:
2731
+ method: create_submix
2732
+ audio.set_submix_parent:
2733
+ class_path: ue-mcp.bridge
2734
+ group: audio
2735
+ description: "Reparent a submix (sets ParentSubmix, updating both ends). Params: submixPath, parentPath (empty detaches to root)."
2736
+ options:
2737
+ method: set_submix_parent
2738
+ audio.add_submix_effect:
2739
+ class_path: ue-mcp.bridge
2740
+ group: audio
2741
+ description: "Append a submix effect preset to a submix's effect chain (creates the preset asset). Params: submixPath, effectType ('reverb'|'eq'|'dynamics'|'filter'|'delay'), name?, packagePath?, settings? (effect Settings struct as JSON)."
2742
+ options:
2743
+ method: add_submix_effect
2744
+ audio.create_sound_class:
2745
+ class_path: ue-mcp.bridge
2746
+ group: audio
2747
+ description: "Create a USoundClass, optionally parented, with properties. Params: name, packagePath? (default /Game/Audio/SoundClasses), parentPath?, properties? (FSoundClassProperties JSON: Volume, Pitch, bIsUISound, ...)."
2748
+ options:
2749
+ method: create_sound_class
2750
+ audio.create_sound_mix:
2751
+ class_path: ue-mcp.bridge
2752
+ group: audio
2753
+ description: "Create a USoundMix with sound-class adjusters. Params: name, packagePath? (default /Game/Audio/SoundMixes), adjusters? ([{soundClassPath, volumeAdjuster?, pitchAdjuster?, applyToChildren?}]), fadeInTime?, fadeOutTime?."
2754
+ options:
2755
+ method: create_sound_mix
2756
+ audio.create_concurrency:
2757
+ class_path: ue-mcp.bridge
2758
+ group: audio
2759
+ description: "Create a USoundConcurrency asset. Params: name, packagePath? (default /Game/Audio/Concurrency), maxCount?, limitToOwner?, resolutionRule? (e.g. 'StopFarthestThenOldest'), volumeScale?."
2760
+ options:
2761
+ method: create_concurrency
2762
+ audio.create_attenuation:
2763
+ class_path: ue-mcp.bridge
2764
+ group: audio
2765
+ description: "Create a USoundAttenuation asset. Params: name, packagePath? (default /Game/Audio/Attenuation), settings? (FSoundAttenuationSettings JSON), plus shortcuts: falloffDistance?, spatialize?, enableOcclusion?."
2766
+ options:
2767
+ method: create_attenuation
2768
+ audio.set_sound_submix:
2769
+ class_path: ue-mcp.bridge
2770
+ group: audio
2771
+ description: "Set a sound's base submix (routing target). Params: soundPath, submixPath (empty detaches)."
2772
+ options:
2773
+ method: set_sound_submix
2774
+ audio.add_sound_submix_send:
2775
+ class_path: ue-mcp.bridge
2776
+ group: audio
2777
+ description: "Add a submix send to a sound. Params: soundPath, submixPath, sendLevel? (default 1.0)."
2778
+ options:
2779
+ method: add_sound_submix_send
2780
+ audio.set_sound_class:
2781
+ class_path: ue-mcp.bridge
2782
+ group: audio
2783
+ description: "Assign a sound class to a sound. Params: soundPath, soundClassPath."
2784
+ options:
2785
+ method: set_sound_class
2786
+ audio.set_sound_attenuation:
2787
+ class_path: ue-mcp.bridge
2788
+ group: audio
2789
+ description: "Attach an attenuation asset to a sound. Params: soundPath, attenuationPath (empty clears)."
2790
+ options:
2791
+ method: set_sound_attenuation
2792
+ audio.set_sound_concurrency:
2793
+ class_path: ue-mcp.bridge
2794
+ group: audio
2795
+ description: "Attach a concurrency asset to a sound. Params: soundPath, concurrencyPath (empty clears)."
2796
+ options:
2797
+ method: set_sound_concurrency
2798
+ audio.set_property:
2799
+ class_path: ue-mcp.bridge
2800
+ group: audio
2801
+ description: "Set any UPROPERTY on an audio asset by (dotted) name, value as JSON. Handles nested structs, arrays, object refs. Params: assetPath, propertyName, value."
2802
+ options:
2803
+ method: set_audio_property
2630
2804
 
2631
2805
  # ── widget ──
2632
2806
  widget.read_tree:
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ue-mcp",
3
- "version": "1.1.15",
4
- "description": "Unreal Engine MCP server - 23 tools, 682+ actions for AI-driven editor control",
3
+ "version": "1.1.16",
4
+ "description": "Unreal Engine MCP server - 23 tools, 711+ actions for AI-driven editor control",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "exports": {
@@ -30,6 +30,41 @@ void FAudioHandlers::RegisterHandlers(FMCPHandlerRegistry& Registry)
30
30
  Registry.RegisterHandler(TEXT("create_metasound_source"), &CreateMetaSoundSource);
31
31
  Registry.RegisterHandler(TEXT("play_sound_at_location"), &PlaySoundAtLocation);
32
32
  Registry.RegisterHandler(TEXT("spawn_ambient_sound"), &SpawnAmbientSound);
33
+
34
+ // MetaSound graph authoring (AudioHandlers_MetaSound.cpp)
35
+ Registry.RegisterHandler(TEXT("metasound_author"), &MetaSoundAuthor);
36
+ Registry.RegisterHandler(TEXT("metasound_list_node_classes"), &MetaSoundListNodeClasses);
37
+ Registry.RegisterHandler(TEXT("metasound_get_graph"), &MetaSoundGetGraph);
38
+ Registry.RegisterHandler(TEXT("metasound_add_node"), &MetaSoundAddNode);
39
+ Registry.RegisterHandler(TEXT("metasound_add_graph_input"), &MetaSoundAddGraphInput);
40
+ Registry.RegisterHandler(TEXT("metasound_add_graph_output"), &MetaSoundAddGraphOutput);
41
+ Registry.RegisterHandler(TEXT("metasound_connect"), &MetaSoundConnect);
42
+ Registry.RegisterHandler(TEXT("metasound_connect_graph_input"), &MetaSoundConnectGraphInput);
43
+ Registry.RegisterHandler(TEXT("metasound_connect_graph_output"), &MetaSoundConnectGraphOutput);
44
+ Registry.RegisterHandler(TEXT("metasound_connect_audio_out"), &MetaSoundConnectAudioOut);
45
+ Registry.RegisterHandler(TEXT("metasound_set_input_default"), &MetaSoundSetInputDefault);
46
+ Registry.RegisterHandler(TEXT("metasound_build"), &MetaSoundBuild);
47
+
48
+ // SoundCue graph authoring (AudioHandlers_SoundCue.cpp)
49
+ Registry.RegisterHandler(TEXT("soundcue_author"), &SoundCueAuthor);
50
+ Registry.RegisterHandler(TEXT("soundcue_add_node"), &SoundCueAddNode);
51
+ Registry.RegisterHandler(TEXT("soundcue_connect"), &SoundCueConnect);
52
+ Registry.RegisterHandler(TEXT("soundcue_get_graph"), &SoundCueGetGraph);
53
+
54
+ // Mixing + routing + spatialization (AudioHandlers_Mixing.cpp)
55
+ Registry.RegisterHandler(TEXT("create_submix"), &CreateSubmix);
56
+ Registry.RegisterHandler(TEXT("set_submix_parent"), &SetSubmixParent);
57
+ Registry.RegisterHandler(TEXT("add_submix_effect"), &AddSubmixEffect);
58
+ Registry.RegisterHandler(TEXT("create_sound_class"), &CreateSoundClass);
59
+ Registry.RegisterHandler(TEXT("create_sound_mix"), &CreateSoundMix);
60
+ Registry.RegisterHandler(TEXT("create_concurrency"), &CreateConcurrency);
61
+ Registry.RegisterHandler(TEXT("create_attenuation"), &CreateAttenuation);
62
+ Registry.RegisterHandler(TEXT("set_sound_submix"), &SetSoundSubmix);
63
+ Registry.RegisterHandler(TEXT("add_sound_submix_send"), &AddSoundSubmixSend);
64
+ Registry.RegisterHandler(TEXT("set_sound_class"), &SetSoundClass);
65
+ Registry.RegisterHandler(TEXT("set_sound_attenuation"), &SetSoundAttenuation);
66
+ Registry.RegisterHandler(TEXT("set_sound_concurrency"), &SetSoundConcurrency);
67
+ Registry.RegisterHandler(TEXT("set_audio_property"), &SetAudioProperty);
33
68
  }
34
69
 
35
70
  // #664: import a WAV/OGG/FLAC file as a USoundWave. Passing a null factory lets
@@ -172,34 +207,6 @@ TSharedPtr<FJsonValue> FAudioHandlers::CreateSoundCue(const TSharedPtr<FJsonObje
172
207
  return MCPResult(Result);
173
208
  }
174
209
 
175
- TSharedPtr<FJsonValue> FAudioHandlers::CreateMetaSoundSource(const TSharedPtr<FJsonObject>& Params)
176
- {
177
- FString Name;
178
- if (auto Err = RequireString(Params, TEXT("name"), Name)) return Err;
179
-
180
- FString PackagePath = OptionalString(Params, TEXT("packagePath"), TEXT("/Game/Audio/MetaSounds"));
181
- const FString OnConflict = OptionalString(Params, TEXT("onConflict"), TEXT("skip"));
182
-
183
- UClass* MetaSoundSourceClass = FindObject<UClass>(nullptr, TEXT("/Script/MetasoundEngine.MetaSoundSource"));
184
- if (!MetaSoundSourceClass)
185
- {
186
- return MCPError(TEXT("MetaSoundSource class not found. Enable MetaSound plugin."));
187
- }
188
-
189
- auto Created = MCPCreateAssetIdempotent<UObject>(Name, PackagePath, OnConflict, TEXT("MetaSoundSource"), MetaSoundSourceClass, nullptr);
190
- if (Created.EarlyReturn) return Created.EarlyReturn;
191
-
192
- UEditorAssetLibrary::SaveAsset(Created.Asset->GetPathName());
193
-
194
- auto Result = MCPSuccess();
195
- MCPSetCreated(Result);
196
- Result->SetStringField(TEXT("path"), Created.Asset->GetPathName());
197
- Result->SetStringField(TEXT("name"), Name);
198
- MCPSetDeleteAssetRollback(Result, Created.Asset->GetPathName());
199
-
200
- return MCPResult(Result);
201
- }
202
-
203
210
  TSharedPtr<FJsonValue> FAudioHandlers::PlaySoundAtLocation(const TSharedPtr<FJsonObject>& Params)
204
211
  {
205
212
  // Get required sound asset path
@@ -10,6 +10,7 @@ public:
10
10
  static void RegisterHandlers(class FMCPHandlerRegistry& Registry);
11
11
 
12
12
  private:
13
+ // ── Assets + playback ──────────────────────────────────────────────
13
14
  static TSharedPtr<FJsonValue> ListSoundAssets(const TSharedPtr<FJsonObject>& Params);
14
15
  // #664: import a WAV/OGG file as a USoundWave asset.
15
16
  static TSharedPtr<FJsonValue> ImportAudio(const TSharedPtr<FJsonObject>& Params);
@@ -17,4 +18,41 @@ private:
17
18
  static TSharedPtr<FJsonValue> CreateMetaSoundSource(const TSharedPtr<FJsonObject>& Params);
18
19
  static TSharedPtr<FJsonValue> PlaySoundAtLocation(const TSharedPtr<FJsonObject>& Params);
19
20
  static TSharedPtr<FJsonValue> SpawnAmbientSound(const TSharedPtr<FJsonObject>& Params);
21
+
22
+ // ── MetaSound graph authoring (AudioHandlers_MetaSound.cpp) ─────────
23
+ // One-shot: stamp a whole graph (nodes/connections/inputs/outputs) in one call.
24
+ static TSharedPtr<FJsonValue> MetaSoundAuthor(const TSharedPtr<FJsonObject>& Params);
25
+ static TSharedPtr<FJsonValue> MetaSoundListNodeClasses(const TSharedPtr<FJsonObject>& Params);
26
+ static TSharedPtr<FJsonValue> MetaSoundGetGraph(const TSharedPtr<FJsonObject>& Params);
27
+ static TSharedPtr<FJsonValue> MetaSoundAddNode(const TSharedPtr<FJsonObject>& Params);
28
+ static TSharedPtr<FJsonValue> MetaSoundAddGraphInput(const TSharedPtr<FJsonObject>& Params);
29
+ static TSharedPtr<FJsonValue> MetaSoundAddGraphOutput(const TSharedPtr<FJsonObject>& Params);
30
+ static TSharedPtr<FJsonValue> MetaSoundConnect(const TSharedPtr<FJsonObject>& Params);
31
+ static TSharedPtr<FJsonValue> MetaSoundConnectGraphInput(const TSharedPtr<FJsonObject>& Params);
32
+ static TSharedPtr<FJsonValue> MetaSoundConnectGraphOutput(const TSharedPtr<FJsonObject>& Params);
33
+ static TSharedPtr<FJsonValue> MetaSoundConnectAudioOut(const TSharedPtr<FJsonObject>& Params);
34
+ static TSharedPtr<FJsonValue> MetaSoundSetInputDefault(const TSharedPtr<FJsonObject>& Params);
35
+ static TSharedPtr<FJsonValue> MetaSoundBuild(const TSharedPtr<FJsonObject>& Params);
36
+
37
+ // ── SoundCue graph authoring (AudioHandlers_SoundCue.cpp) ───────────
38
+ // One-shot: stamp a whole cue tree (nodes + connections + root) in one call.
39
+ static TSharedPtr<FJsonValue> SoundCueAuthor(const TSharedPtr<FJsonObject>& Params);
40
+ static TSharedPtr<FJsonValue> SoundCueAddNode(const TSharedPtr<FJsonObject>& Params);
41
+ static TSharedPtr<FJsonValue> SoundCueConnect(const TSharedPtr<FJsonObject>& Params);
42
+ static TSharedPtr<FJsonValue> SoundCueGetGraph(const TSharedPtr<FJsonObject>& Params);
43
+
44
+ // ── Mixing + routing + spatialization (AudioHandlers_Mixing.cpp) ────
45
+ static TSharedPtr<FJsonValue> CreateSubmix(const TSharedPtr<FJsonObject>& Params);
46
+ static TSharedPtr<FJsonValue> SetSubmixParent(const TSharedPtr<FJsonObject>& Params);
47
+ static TSharedPtr<FJsonValue> AddSubmixEffect(const TSharedPtr<FJsonObject>& Params);
48
+ static TSharedPtr<FJsonValue> CreateSoundClass(const TSharedPtr<FJsonObject>& Params);
49
+ static TSharedPtr<FJsonValue> CreateSoundMix(const TSharedPtr<FJsonObject>& Params);
50
+ static TSharedPtr<FJsonValue> CreateConcurrency(const TSharedPtr<FJsonObject>& Params);
51
+ static TSharedPtr<FJsonValue> CreateAttenuation(const TSharedPtr<FJsonObject>& Params);
52
+ static TSharedPtr<FJsonValue> SetSoundSubmix(const TSharedPtr<FJsonObject>& Params);
53
+ static TSharedPtr<FJsonValue> AddSoundSubmixSend(const TSharedPtr<FJsonObject>& Params);
54
+ static TSharedPtr<FJsonValue> SetSoundClass(const TSharedPtr<FJsonObject>& Params);
55
+ static TSharedPtr<FJsonValue> SetSoundAttenuation(const TSharedPtr<FJsonObject>& Params);
56
+ static TSharedPtr<FJsonValue> SetSoundConcurrency(const TSharedPtr<FJsonObject>& Params);
57
+ static TSharedPtr<FJsonValue> SetAudioProperty(const TSharedPtr<FJsonObject>& Params);
20
58
  };