wwise-waapi-mcp 1.0.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 (38) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +221 -0
  3. package/README_ZH.md +221 -0
  4. package/config/domains.json +130 -0
  5. package/config/runtime.json +4 -0
  6. package/dist/src/core/server.js +80 -0
  7. package/dist/src/core/transport.js +92 -0
  8. package/dist/src/domains/audio/tools.js +193 -0
  9. package/dist/src/domains/catalog/tools.js +198 -0
  10. package/dist/src/domains/debug/tools.js +139 -0
  11. package/dist/src/domains/example/tools.js +56 -0
  12. package/dist/src/domains/log/tools.js +79 -0
  13. package/dist/src/domains/object/tools.js +499 -0
  14. package/dist/src/domains/plugin/tools.js +45 -0
  15. package/dist/src/domains/profiler/tools.js +266 -0
  16. package/dist/src/domains/project/tools.js +179 -0
  17. package/dist/src/domains/remote/tools.js +73 -0
  18. package/dist/src/domains/sound/tools.js +38 -0
  19. package/dist/src/domains/soundbank/tools.js +137 -0
  20. package/dist/src/domains/soundengine/tools.js +529 -0
  21. package/dist/src/domains/sourceControl/tools.js +191 -0
  22. package/dist/src/domains/switchContainer/tools.js +64 -0
  23. package/dist/src/domains/transport/tools.js +116 -0
  24. package/dist/src/domains/ui/tools.js +126 -0
  25. package/dist/src/domains/undo/tools.js +75 -0
  26. package/dist/src/index.js +95 -0
  27. package/dist/src/lib/errors.js +31 -0
  28. package/dist/src/lib/logger.js +43 -0
  29. package/dist/src/lib/referenceCatalog.js +167 -0
  30. package/dist/src/lib/response.js +88 -0
  31. package/dist/src/lib/runtimePaths.js +21 -0
  32. package/dist/src/lib/toolFactory.js +73 -0
  33. package/dist/src/lib/waapiClient.js +97 -0
  34. package/dist/src/lib/waapiSchemaResolver.js +120 -0
  35. package/dist/src/registry/toolRegistry.js +180 -0
  36. package/dist/src/registry/types.js +2 -0
  37. package/dist/tests/verify.js +119 -0
  38. package/package.json +56 -0
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSoundbankTools = getSoundbankTools;
4
+ const v4_1 = require("zod/v4");
5
+ const toolFactory_js_1 = require("../../lib/toolFactory.js");
6
+ /**
7
+ * SoundBank 管理工具(ak.wwise.core.soundbank.*)。
8
+ * 支持生成、设置包含项和获取 SoundBank 信息,
9
+ * 均需要 WAAPI 连接,生成操作为高风险。
10
+ */
11
+ function getSoundbankTools() {
12
+ return [
13
+ (0, toolFactory_js_1.createWaapiStubTool)({
14
+ name: "ak.wwise.core.soundbank.generate",
15
+ title: "Generate SoundBank",
16
+ description: "Generate one or more SoundBanks from authoring data.",
17
+ domain: "soundbank",
18
+ risk: "high",
19
+ permissions: ["waapi:authoring:write"],
20
+ tags: ["waapi", "soundbank", "generate", "stub"],
21
+ examples: [{ title: "Generate banks for Windows", input: { soundbanks: ["Init"], platforms: ["Windows"] } }],
22
+ inputSchema: {
23
+ soundbanks: v4_1.z.array(v4_1.z.union([v4_1.z.string(), v4_1.z.object({ name: v4_1.z.string().min(1) })])).optional(),
24
+ platforms: v4_1.z.array(v4_1.z.string()).optional(),
25
+ languages: v4_1.z.array(v4_1.z.string()).optional(),
26
+ skipLanguages: v4_1.z.boolean().optional(),
27
+ rebuildSoundBanks: v4_1.z.boolean().optional(),
28
+ clearAudioFileCache: v4_1.z.boolean().optional(),
29
+ writeToDisk: v4_1.z.boolean().optional(),
30
+ rebuildInitBank: v4_1.z.boolean().optional(),
31
+ options: v4_1.z.unknown().optional()
32
+ },
33
+ inputSchemaJson: {
34
+ type: "object",
35
+ properties: {
36
+ soundbanks: { type: "array", items: { oneOf: [{ type: "string" }, { type: "object", properties: { name: { type: "string", minLength: 1 } }, required: ["name"], additionalProperties: true }] } },
37
+ platforms: { type: "array", items: { type: "string" } },
38
+ languages: { type: "array", items: { type: "string" } },
39
+ skipLanguages: { type: "boolean" },
40
+ rebuildSoundBanks: { type: "boolean" },
41
+ clearAudioFileCache: { type: "boolean" },
42
+ writeToDisk: { type: "boolean" },
43
+ rebuildInitBank: { type: "boolean" },
44
+ options: {}
45
+ },
46
+ additionalProperties: false
47
+ }
48
+ }),
49
+ (0, toolFactory_js_1.createWaapiStubTool)({
50
+ name: "ak.wwise.core.soundbank.getInclusions",
51
+ title: "Get SoundBank Inclusions",
52
+ description: "Return inclusion settings for a SoundBank definition.",
53
+ domain: "soundbank",
54
+ risk: "medium",
55
+ permissions: ["waapi:authoring:read"],
56
+ tags: ["waapi", "soundbank", "query", "stub"],
57
+ examples: [{ title: "Read bank inclusions", input: { soundbank: "Init" } }],
58
+ inputSchema: {
59
+ soundbank: v4_1.z.string().min(1),
60
+ options: v4_1.z.unknown().optional()
61
+ },
62
+ inputSchemaJson: {
63
+ type: "object",
64
+ properties: {
65
+ soundbank: { type: "string", minLength: 1 },
66
+ options: {}
67
+ },
68
+ required: ["soundbank"],
69
+ additionalProperties: false
70
+ }
71
+ }),
72
+ (0, toolFactory_js_1.createWaapiStubTool)({
73
+ name: "ak.wwise.core.soundbank.setInclusions",
74
+ title: "Set SoundBank Inclusions",
75
+ description: "Set the inclusions of a SoundBank (add, remove, or replace).",
76
+ domain: "soundbank",
77
+ risk: "high",
78
+ permissions: ["waapi:authoring:write"],
79
+ tags: ["waapi", "soundbank", "inclusions"],
80
+ examples: [{ title: "Add objects to a SoundBank", input: { soundbank: "{GUID}", inclusions: [{ object: "{EVENT_GUID}", filter: ["events"] }], operation: "add" } }],
81
+ inputSchema: {
82
+ soundbank: v4_1.z.string().min(1),
83
+ inclusions: v4_1.z.array(v4_1.z.object({ object: v4_1.z.string().min(1), filter: v4_1.z.array(v4_1.z.string()) })).min(1),
84
+ operation: v4_1.z.enum(["add", "remove", "replace"])
85
+ },
86
+ inputSchemaJson: {
87
+ type: "object",
88
+ properties: {
89
+ soundbank: { type: "string", minLength: 1 },
90
+ inclusions: { type: "array", minItems: 1, items: { type: "object", properties: { object: { type: "string" }, filter: { type: "array", items: { type: "string" } } }, required: ["object", "filter"] } },
91
+ operation: { type: "string", enum: ["add", "remove", "replace"] }, options: {}
92
+ },
93
+ required: ["soundbank", "inclusions", "operation"],
94
+ additionalProperties: false
95
+ }
96
+ }),
97
+ (0, toolFactory_js_1.createWaapiStubTool)({
98
+ name: "ak.wwise.core.soundbank.convertExternalSources",
99
+ title: "Convert External Sources",
100
+ description: "Convert external sources to be included in a SoundBank.",
101
+ domain: "soundbank",
102
+ risk: "high",
103
+ permissions: ["waapi:authoring:write"],
104
+ tags: ["waapi", "soundbank", "external"],
105
+ examples: [{ title: "Convert an external source for Windows", input: { sources: [{ input: "C:/audio/vo.wav", platform: "Windows" }] } }],
106
+ inputSchema: {
107
+ sources: v4_1.z.array(v4_1.z.object({ input: v4_1.z.string().min(1), platform: v4_1.z.string().min(1), output: v4_1.z.string().optional() })).min(1)
108
+ },
109
+ inputSchemaJson: {
110
+ type: "object",
111
+ properties: {
112
+ sources: { type: "array", minItems: 1, items: { type: "object", properties: { input: { type: "string" }, platform: { type: "string" }, output: { type: "string" } }, required: ["input", "platform"] } },
113
+ options: {}
114
+ },
115
+ required: ["sources"],
116
+ additionalProperties: false
117
+ }
118
+ }),
119
+ (0, toolFactory_js_1.createWaapiStubTool)({
120
+ name: "ak.wwise.core.soundbank.processDefinitionFiles",
121
+ title: "Process Definition Files",
122
+ description: "Process SoundBank definition files.",
123
+ domain: "soundbank",
124
+ risk: "high",
125
+ permissions: ["waapi:authoring:write"],
126
+ tags: ["waapi", "soundbank", "definition"],
127
+ examples: [{ title: "Process a definition file", input: { files: ["C:/project/def.txt"] } }],
128
+ inputSchema: { files: v4_1.z.array(v4_1.z.string().min(1)).min(1) },
129
+ inputSchemaJson: {
130
+ type: "object",
131
+ properties: { files: { type: "array", minItems: 1, items: { type: "string", minLength: 1 } }, options: {} },
132
+ required: ["files"],
133
+ additionalProperties: false
134
+ }
135
+ })
136
+ ];
137
+ }
@@ -0,0 +1,529 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSoundengineTools = getSoundengineTools;
4
+ const v4_1 = require("zod/v4");
5
+ const toolFactory_js_1 = require("../../lib/toolFactory.js");
6
+ /**
7
+ * 运行时音频引擎工具(ak.soundengine.*)。
8
+ * 这些工具直接操作游戏引擎中的音频对象、事件和 RTPC 值,
9
+ * 均为高风险操作且需要 WAAPI 连接。
10
+ */
11
+ /** GUID 字符串、唯一名称字符串或 Short ID 整数(soundEngineObjectArg)。 */
12
+ const seObj = v4_1.z.union([v4_1.z.string(), v4_1.z.number().int()]);
13
+ const seObjJson = { oneOf: [{ type: "string" }, { type: "integer" }] };
14
+ /** 游戏对象 ID(uint64 number)。 */
15
+ const gameObj = v4_1.z.number();
16
+ /** 三维向量 { x, y, z }。 */
17
+ const vec3 = v4_1.z.object({ x: v4_1.z.number(), y: v4_1.z.number(), z: v4_1.z.number() });
18
+ const vec3Json = { type: "object", properties: { x: { type: "number" }, y: { type: "number" }, z: { type: "number" } }, required: ["x", "y", "z"] };
19
+ /** 3D 空间变换(orientationFront, orientationTop, position 各为 vec3)。 */
20
+ const transform3D = v4_1.z.object({ orientationFront: vec3, orientationTop: vec3, position: vec3 });
21
+ const transform3DJson = {
22
+ type: "object",
23
+ properties: { orientationFront: vec3Json, orientationTop: vec3Json, position: vec3Json },
24
+ required: ["orientationFront", "orientationTop", "position"]
25
+ };
26
+ function getSoundengineTools() {
27
+ return [
28
+ (0, toolFactory_js_1.createWaapiStubTool)({
29
+ name: "ak.soundengine.postEvent",
30
+ title: "Post Event",
31
+ description: "Post a sound event to the runtime sound engine.",
32
+ domain: "soundengine",
33
+ risk: "high",
34
+ permissions: ["waapi:runtime"],
35
+ tags: ["waapi", "runtime", "events"],
36
+ examples: [{ title: "Post an event", input: { event: "Play_Footstep", gameObject: 1001 } }],
37
+ inputSchema: { event: seObj, gameObject: seObj, playingId: v4_1.z.number().int().optional() },
38
+ inputSchemaJson: {
39
+ type: "object",
40
+ properties: { event: seObjJson, gameObject: seObjJson, playingId: { type: "integer" }, options: {} },
41
+ required: ["event", "gameObject"],
42
+ additionalProperties: false
43
+ }
44
+ }),
45
+ (0, toolFactory_js_1.createWaapiStubTool)({
46
+ name: "ak.soundengine.executeActionOnEvent",
47
+ title: "Execute Action on Event",
48
+ description: "Execute an action on all nodes referenced in a Play-type event. actionType: 0=Stop,1=Pause,2=Resume,3=Break,4=ReleaseEnvelope. fadeCurve: 0-9.",
49
+ domain: "soundengine",
50
+ risk: "high",
51
+ permissions: ["waapi:runtime"],
52
+ tags: ["waapi", "runtime", "events"],
53
+ examples: [{ title: "Stop from event with fade", input: { event: "Play_Music", actionType: 0, gameObject: 64, transitionDuration: 500, fadeCurve: 4 } }],
54
+ inputSchema: {
55
+ event: seObj,
56
+ actionType: v4_1.z.number().int().min(0).max(4),
57
+ gameObject: gameObj,
58
+ transitionDuration: v4_1.z.number().int(),
59
+ fadeCurve: v4_1.z.number().int().min(0).max(9)
60
+ },
61
+ inputSchemaJson: {
62
+ type: "object",
63
+ properties: {
64
+ event: seObjJson, actionType: { type: "integer", minimum: 0, maximum: 4 },
65
+ gameObject: { type: "number" }, transitionDuration: { type: "integer" },
66
+ fadeCurve: { type: "integer", minimum: 0, maximum: 9 }, options: {}
67
+ },
68
+ required: ["event", "actionType", "gameObject", "transitionDuration", "fadeCurve"],
69
+ additionalProperties: false
70
+ }
71
+ }),
72
+ (0, toolFactory_js_1.createWaapiStubTool)({
73
+ name: "ak.soundengine.getState",
74
+ title: "Get State",
75
+ description: "Get the current state of a State Group.",
76
+ domain: "soundengine",
77
+ risk: "low",
78
+ permissions: ["waapi:runtime"],
79
+ tags: ["waapi", "runtime", "states"],
80
+ examples: [{ title: "Query music state group", input: { stateGroup: "Music_State" } }],
81
+ inputSchema: { stateGroup: v4_1.z.string() },
82
+ inputSchemaJson: {
83
+ type: "object",
84
+ properties: { stateGroup: { type: "string" }, options: {} },
85
+ required: ["stateGroup"],
86
+ additionalProperties: false
87
+ }
88
+ }),
89
+ (0, toolFactory_js_1.createWaapiStubTool)({
90
+ name: "ak.soundengine.getSwitch",
91
+ title: "Get Switch",
92
+ description: "Get the current state of a Switch Group on a game object.",
93
+ domain: "soundengine",
94
+ risk: "low",
95
+ permissions: ["waapi:runtime"],
96
+ tags: ["waapi", "runtime", "switches"],
97
+ examples: [{ title: "Query surface switch", input: { switchGroup: "Surface_Type", gameObject: 1001 } }],
98
+ inputSchema: { switchGroup: v4_1.z.string(), gameObject: gameObj.optional() },
99
+ inputSchemaJson: {
100
+ type: "object",
101
+ properties: { switchGroup: { type: "string" }, gameObject: { type: "number" }, options: {} },
102
+ required: ["switchGroup"],
103
+ additionalProperties: false
104
+ }
105
+ }),
106
+ (0, toolFactory_js_1.createWaapiStubTool)({
107
+ name: "ak.soundengine.loadBank",
108
+ title: "Load SoundBank",
109
+ description: "Load a SoundBank into the runtime sound engine.",
110
+ domain: "soundengine",
111
+ risk: "high",
112
+ permissions: ["waapi:runtime"],
113
+ tags: ["waapi", "runtime", "banks"],
114
+ examples: [{ title: "Load Init bank", input: { soundBank: "Init" } }],
115
+ inputSchema: { soundBank: seObj },
116
+ inputSchemaJson: {
117
+ type: "object",
118
+ properties: { soundBank: seObjJson, options: {} },
119
+ required: ["soundBank"],
120
+ additionalProperties: false
121
+ }
122
+ }),
123
+ (0, toolFactory_js_1.createWaapiStubTool)({
124
+ name: "ak.soundengine.postMsgMonitor",
125
+ title: "Post Monitor Message",
126
+ description: "Post a message to the Profiler Capture Log for debugging.",
127
+ domain: "soundengine",
128
+ risk: "low",
129
+ permissions: ["waapi:runtime"],
130
+ tags: ["waapi", "runtime", "profiler"],
131
+ examples: [{ title: "Log a checkpoint", input: { message: "Level loaded" } }],
132
+ inputSchema: { message: v4_1.z.string() },
133
+ inputSchemaJson: {
134
+ type: "object",
135
+ properties: { message: { type: "string" }, options: {} },
136
+ required: ["message"],
137
+ additionalProperties: false
138
+ }
139
+ }),
140
+ (0, toolFactory_js_1.createWaapiStubTool)({
141
+ name: "ak.soundengine.postTrigger",
142
+ title: "Post Trigger",
143
+ description: "Post a trigger to the sound engine to fire stinger events.",
144
+ domain: "soundengine",
145
+ risk: "high",
146
+ permissions: ["waapi:runtime"],
147
+ tags: ["waapi", "runtime", "triggers"],
148
+ examples: [{ title: "Post a stinger", input: { trigger: "Music_Stinger", gameObject: 1001 } }],
149
+ inputSchema: { trigger: seObj, gameObject: gameObj.optional() },
150
+ inputSchemaJson: {
151
+ type: "object",
152
+ properties: { trigger: seObjJson, gameObject: { type: "number" }, options: {} },
153
+ required: ["trigger"],
154
+ additionalProperties: false
155
+ }
156
+ }),
157
+ (0, toolFactory_js_1.createWaapiStubTool)({
158
+ name: "ak.soundengine.registerGameObj",
159
+ title: "Register Game Object",
160
+ description: "Register a game object in the runtime sound engine.",
161
+ domain: "soundengine",
162
+ risk: "high",
163
+ permissions: ["waapi:runtime"],
164
+ tags: ["waapi", "runtime", "game-object"],
165
+ examples: [{ title: "Register player object", input: { gameObject: "Player", gameObjectId: 1001 } }],
166
+ inputSchema: { gameObject: v4_1.z.string().min(1), gameObjectId: v4_1.z.number().int() },
167
+ inputSchemaJson: {
168
+ type: "object",
169
+ properties: { gameObject: { type: "string", minLength: 1 }, gameObjectId: { type: "integer" }, options: {} },
170
+ required: ["gameObject", "gameObjectId"],
171
+ additionalProperties: false
172
+ }
173
+ }),
174
+ (0, toolFactory_js_1.createWaapiStubTool)({
175
+ name: "ak.soundengine.resetRTPCValue",
176
+ title: "Reset RTPC Value",
177
+ description: "Reset an RTPC to its default value for a game object or globally.",
178
+ domain: "soundengine",
179
+ risk: "high",
180
+ permissions: ["waapi:runtime"],
181
+ tags: ["waapi", "runtime", "rtpc"],
182
+ examples: [{ title: "Reset RTPC for player", input: { rtpc: "Player_Speed", gameObject: 1001 } }],
183
+ inputSchema: { rtpc: seObj, gameObject: gameObj.optional() },
184
+ inputSchemaJson: {
185
+ type: "object",
186
+ properties: { rtpc: seObjJson, gameObject: { type: "number" }, options: {} },
187
+ required: ["rtpc"],
188
+ additionalProperties: false
189
+ }
190
+ }),
191
+ (0, toolFactory_js_1.createWaapiStubTool)({
192
+ name: "ak.soundengine.seekOnEvent",
193
+ title: "Seek on Event",
194
+ description: "Seek to position (ms) or percent (0-1) on all sounds started by an active event. playingId 0 targets all.",
195
+ domain: "soundengine",
196
+ risk: "high",
197
+ permissions: ["waapi:runtime"],
198
+ tags: ["waapi", "runtime", "events"],
199
+ examples: [{ title: "Seek to 5 seconds", input: { event: "Play_Music", gameObject: 64, position: 5000, seekToNearestMarker: false, playingId: 0 } }],
200
+ inputSchema: {
201
+ event: seObj,
202
+ gameObject: gameObj,
203
+ position: v4_1.z.number().int().optional(),
204
+ percent: v4_1.z.number().min(0).max(1).optional(),
205
+ seekToNearestMarker: v4_1.z.boolean(),
206
+ playingId: v4_1.z.number().int().min(0)
207
+ },
208
+ inputSchemaJson: {
209
+ type: "object",
210
+ properties: {
211
+ event: seObjJson, gameObject: { type: "number" },
212
+ position: { type: "integer" }, percent: { type: "number", minimum: 0, maximum: 1 },
213
+ seekToNearestMarker: { type: "boolean" }, playingId: { type: "integer", minimum: 0 }, options: {}
214
+ },
215
+ required: ["event", "gameObject", "seekToNearestMarker", "playingId"],
216
+ additionalProperties: false
217
+ }
218
+ }),
219
+ (0, toolFactory_js_1.createWaapiStubTool)({
220
+ name: "ak.soundengine.setDefaultListeners",
221
+ title: "Set Default Listeners",
222
+ description: "Set the default listeners for game objects without an explicit listener assignment.",
223
+ domain: "soundengine",
224
+ risk: "high",
225
+ permissions: ["waapi:runtime"],
226
+ tags: ["waapi", "runtime", "listeners"],
227
+ examples: [{ title: "Set one default listener", input: { listeners: [0] } }],
228
+ inputSchema: { listeners: v4_1.z.array(gameObj) },
229
+ inputSchemaJson: {
230
+ type: "object",
231
+ properties: { listeners: { type: "array", items: { type: "number" } }, options: {} },
232
+ required: ["listeners"],
233
+ additionalProperties: false
234
+ }
235
+ }),
236
+ (0, toolFactory_js_1.createWaapiStubTool)({
237
+ name: "ak.soundengine.setGameObjectAuxSendValues",
238
+ title: "Set Aux Send Values",
239
+ description: "Set auxiliary send values for a game object (max 4 entries).",
240
+ domain: "soundengine",
241
+ risk: "high",
242
+ permissions: ["waapi:runtime"],
243
+ tags: ["waapi", "runtime", "aux"],
244
+ examples: [{ title: "Set reverb send", input: { gameObject: 1001, auxSendValues: [{ listener: 0, auxBus: "ReverbBus", controlValue: 0.5 }] } }],
245
+ inputSchema: {
246
+ gameObject: gameObj,
247
+ auxSendValues: v4_1.z.array(v4_1.z.object({ listener: gameObj, auxBus: seObj, controlValue: v4_1.z.number().min(0).max(1) })).max(4)
248
+ },
249
+ inputSchemaJson: {
250
+ type: "object",
251
+ properties: {
252
+ gameObject: { type: "number" },
253
+ auxSendValues: { type: "array", maxItems: 4, items: { type: "object", properties: { listener: { type: "number" }, auxBus: seObjJson, controlValue: { type: "number", minimum: 0, maximum: 1 } }, required: ["listener", "auxBus", "controlValue"] } },
254
+ options: {}
255
+ },
256
+ required: ["gameObject", "auxSendValues"],
257
+ additionalProperties: false
258
+ }
259
+ }),
260
+ (0, toolFactory_js_1.createWaapiStubTool)({
261
+ name: "ak.soundengine.setGameObjectOutputBusVolume",
262
+ title: "Set Output Bus Volume",
263
+ description: "Set the output bus volume between an emitter and a listener game object.",
264
+ domain: "soundengine",
265
+ risk: "high",
266
+ permissions: ["waapi:runtime"],
267
+ tags: ["waapi", "runtime", "volume"],
268
+ examples: [{ title: "Reduce emitter volume", input: { emitter: 1001, listener: 0, controlValue: 0.8 } }],
269
+ inputSchema: { emitter: gameObj, listener: gameObj, controlValue: v4_1.z.number() },
270
+ inputSchemaJson: {
271
+ type: "object",
272
+ properties: { emitter: { type: "number" }, listener: { type: "number" }, controlValue: { type: "number" }, options: {} },
273
+ required: ["emitter", "listener", "controlValue"],
274
+ additionalProperties: false
275
+ }
276
+ }),
277
+ (0, toolFactory_js_1.createWaapiStubTool)({
278
+ name: "ak.soundengine.setListeners",
279
+ title: "Set Listeners",
280
+ description: "Assign listeners to a specific emitter game object.",
281
+ domain: "soundengine",
282
+ risk: "high",
283
+ permissions: ["waapi:runtime"],
284
+ tags: ["waapi", "runtime", "listeners"],
285
+ examples: [{ title: "Assign listener to emitter", input: { emitter: 1001, listeners: [0] } }],
286
+ inputSchema: { emitter: gameObj, listeners: v4_1.z.array(gameObj) },
287
+ inputSchemaJson: {
288
+ type: "object",
289
+ properties: { emitter: { type: "number" }, listeners: { type: "array", items: { type: "number" } }, options: {} },
290
+ required: ["emitter", "listeners"],
291
+ additionalProperties: false
292
+ }
293
+ }),
294
+ (0, toolFactory_js_1.createWaapiStubTool)({
295
+ name: "ak.soundengine.setListenerSpatialization",
296
+ title: "Set Listener Spatialization",
297
+ description: "Enable/disable spatialization for a listener and optionally set per-speaker volume offsets (dB).",
298
+ domain: "soundengine",
299
+ risk: "high",
300
+ permissions: ["waapi:runtime"],
301
+ tags: ["waapi", "runtime", "listeners", "spatialization"],
302
+ examples: [{ title: "Enable spatialization", input: { listener: 0, spatialized: true, channelConfig: 3, volumeOffsets: [0, 0] } }],
303
+ inputSchema: {
304
+ listener: gameObj,
305
+ spatialized: v4_1.z.boolean(),
306
+ channelConfig: v4_1.z.number().int().min(0),
307
+ volumeOffsets: v4_1.z.array(v4_1.z.number())
308
+ },
309
+ inputSchemaJson: {
310
+ type: "object",
311
+ properties: {
312
+ listener: { type: "number" }, spatialized: { type: "boolean" },
313
+ channelConfig: { type: "integer", minimum: 0 }, volumeOffsets: { type: "array", items: { type: "number" } }, options: {}
314
+ },
315
+ required: ["listener", "spatialized", "channelConfig", "volumeOffsets"],
316
+ additionalProperties: false
317
+ }
318
+ }),
319
+ (0, toolFactory_js_1.createWaapiStubTool)({
320
+ name: "ak.soundengine.setMultiplePositions",
321
+ title: "Set Multiple Positions",
322
+ description: "Assign multiple 3D positions to a game object. multiPositionType: 0=MultiDirections,1=MultiSources,2=SingleSource.",
323
+ domain: "soundengine",
324
+ risk: "high",
325
+ permissions: ["waapi:runtime"],
326
+ tags: ["waapi", "runtime", "position", "spatialization"],
327
+ examples: [{ title: "Set two source positions", input: { gameObject: 1001, positions: [{ position: { orientationFront: { x: 0, y: 0, z: -1 }, orientationTop: { x: 0, y: 1, z: 0 }, position: { x: 1, y: 0, z: 0 } } }], multiPositionType: 1 } }],
328
+ inputSchema: {
329
+ gameObject: gameObj,
330
+ positions: v4_1.z.array(v4_1.z.object({ position: transform3D })),
331
+ multiPositionType: v4_1.z.number().int().min(0).max(2)
332
+ },
333
+ inputSchemaJson: {
334
+ type: "object",
335
+ properties: {
336
+ gameObject: { type: "number" },
337
+ positions: { type: "array", items: { type: "object", properties: { position: transform3DJson }, required: ["position"] } },
338
+ multiPositionType: { type: "integer", minimum: 0, maximum: 2 }, options: {}
339
+ },
340
+ required: ["gameObject", "positions", "multiPositionType"],
341
+ additionalProperties: false
342
+ }
343
+ }),
344
+ (0, toolFactory_js_1.createWaapiStubTool)({
345
+ name: "ak.soundengine.setObjectObstructionAndOcclusion",
346
+ title: "Set Obstruction and Occlusion",
347
+ description: "Set obstruction (0-1) and occlusion (0-1) levels between an emitter and a listener.",
348
+ domain: "soundengine",
349
+ risk: "high",
350
+ permissions: ["waapi:runtime"],
351
+ tags: ["waapi", "runtime", "occlusion"],
352
+ examples: [{ title: "Half-occluded object", input: { emitter: 1001, listener: 0, obstructionLevel: 0.3, occlusionLevel: 0.5 } }],
353
+ inputSchema: {
354
+ emitter: gameObj, listener: gameObj,
355
+ obstructionLevel: v4_1.z.number().min(0).max(1), occlusionLevel: v4_1.z.number().min(0).max(1)
356
+ },
357
+ inputSchemaJson: {
358
+ type: "object",
359
+ properties: {
360
+ emitter: { type: "number" }, listener: { type: "number" },
361
+ obstructionLevel: { type: "number", minimum: 0, maximum: 1 },
362
+ occlusionLevel: { type: "number", minimum: 0, maximum: 1 }, options: {}
363
+ },
364
+ required: ["emitter", "listener", "obstructionLevel", "occlusionLevel"],
365
+ additionalProperties: false
366
+ }
367
+ }),
368
+ (0, toolFactory_js_1.createWaapiStubTool)({
369
+ name: "ak.soundengine.setPosition",
370
+ title: "Set Position",
371
+ description: "Set the 3D world-space position of a game object.",
372
+ domain: "soundengine",
373
+ risk: "high",
374
+ permissions: ["waapi:runtime"],
375
+ tags: ["waapi", "runtime", "position"],
376
+ examples: [{ title: "Place at origin", input: { gameObject: 1001, position: { orientationFront: { x: 0, y: 0, z: -1 }, orientationTop: { x: 0, y: 1, z: 0 }, position: { x: 0, y: 0, z: 0 } } } }],
377
+ inputSchema: { gameObject: gameObj, position: transform3D },
378
+ inputSchemaJson: {
379
+ type: "object",
380
+ properties: { gameObject: { type: "number" }, position: transform3DJson, options: {} },
381
+ required: ["gameObject", "position"],
382
+ additionalProperties: false
383
+ }
384
+ }),
385
+ (0, toolFactory_js_1.createWaapiStubTool)({
386
+ name: "ak.soundengine.setRTPCValue",
387
+ title: "Set RTPC Value",
388
+ description: "Set a runtime RTPC value for a game object or globally.",
389
+ domain: "soundengine",
390
+ risk: "high",
391
+ permissions: ["waapi:runtime"],
392
+ tags: ["waapi", "runtime", "rtpc"],
393
+ examples: [{ title: "Set speed RTPC", input: { rtpc: "Player_Speed", value: 12.5, gameObject: 1001 } }],
394
+ inputSchema: { rtpc: seObj, value: v4_1.z.number(), gameObject: gameObj.optional() },
395
+ inputSchemaJson: {
396
+ type: "object",
397
+ properties: { rtpc: seObjJson, value: { type: "number" }, gameObject: { type: "number" }, options: {} },
398
+ required: ["rtpc", "value"],
399
+ additionalProperties: false
400
+ }
401
+ }),
402
+ (0, toolFactory_js_1.createWaapiStubTool)({
403
+ name: "ak.soundengine.setScalingFactor",
404
+ title: "Set Scaling Factor",
405
+ description: "Scale the attenuation radius of a game object (1.0=100%, 2.0=200%).",
406
+ domain: "soundengine",
407
+ risk: "high",
408
+ permissions: ["waapi:runtime"],
409
+ tags: ["waapi", "runtime", "attenuation"],
410
+ examples: [{ title: "Double attenuation radius", input: { gameObject: 1001, attenuationScalingFactor: 2.0 } }],
411
+ inputSchema: { gameObject: gameObj, attenuationScalingFactor: v4_1.z.number().positive() },
412
+ inputSchemaJson: {
413
+ type: "object",
414
+ properties: { gameObject: { type: "number" }, attenuationScalingFactor: { type: "number", exclusiveMinimum: 0 }, options: {} },
415
+ required: ["gameObject", "attenuationScalingFactor"],
416
+ additionalProperties: false
417
+ }
418
+ }),
419
+ (0, toolFactory_js_1.createWaapiStubTool)({
420
+ name: "ak.soundengine.setState",
421
+ title: "Set State",
422
+ description: "Set the active state in a State Group.",
423
+ domain: "soundengine",
424
+ risk: "high",
425
+ permissions: ["waapi:runtime"],
426
+ tags: ["waapi", "runtime", "states"],
427
+ examples: [{ title: "Switch music to combat", input: { stateGroup: "Music_State", state: "Combat" } }],
428
+ inputSchema: { stateGroup: seObj, state: seObj },
429
+ inputSchemaJson: {
430
+ type: "object",
431
+ properties: { stateGroup: seObjJson, state: seObjJson, options: {} },
432
+ required: ["stateGroup", "state"],
433
+ additionalProperties: false
434
+ }
435
+ }),
436
+ (0, toolFactory_js_1.createWaapiStubTool)({
437
+ name: "ak.soundengine.setSwitch",
438
+ title: "Set Switch",
439
+ description: "Set a Switch state on a game object.",
440
+ domain: "soundengine",
441
+ risk: "high",
442
+ permissions: ["waapi:runtime"],
443
+ tags: ["waapi", "runtime", "switches"],
444
+ examples: [{ title: "Set surface to grass", input: { switchGroup: "Surface_Type", switchState: "Grass", gameObject: 1001 } }],
445
+ inputSchema: { switchGroup: seObj, switchState: seObj, gameObject: gameObj.optional() },
446
+ inputSchemaJson: {
447
+ type: "object",
448
+ properties: { switchGroup: seObjJson, switchState: seObjJson, gameObject: { type: "number" }, options: {} },
449
+ required: ["switchGroup", "switchState"],
450
+ additionalProperties: false
451
+ }
452
+ }),
453
+ (0, toolFactory_js_1.createWaapiStubTool)({
454
+ name: "ak.soundengine.stopAll",
455
+ title: "Stop All",
456
+ description: "Stop all sounds on a game object.",
457
+ domain: "soundengine",
458
+ risk: "high",
459
+ permissions: ["waapi:runtime"],
460
+ tags: ["waapi", "runtime", "events"],
461
+ examples: [{ title: "Stop all on player", input: { gameObject: 1001 } }],
462
+ inputSchema: { gameObject: gameObj },
463
+ inputSchemaJson: {
464
+ type: "object",
465
+ properties: { gameObject: { type: "number" }, options: {} },
466
+ required: ["gameObject"],
467
+ additionalProperties: false
468
+ }
469
+ }),
470
+ (0, toolFactory_js_1.createWaapiStubTool)({
471
+ name: "ak.soundengine.stopPlayingID",
472
+ title: "Stop Playing ID",
473
+ description: "Stop a specific playing ID with an optional fade. fadeCurve: 0-9 AkCurveInterpolation.",
474
+ domain: "soundengine",
475
+ risk: "high",
476
+ permissions: ["waapi:runtime"],
477
+ tags: ["waapi", "runtime", "events"],
478
+ examples: [{ title: "Fade out a playing event", input: { playingId: 12345, transitionDuration: 1000, fadeCurve: 4 } }],
479
+ inputSchema: {
480
+ playingId: v4_1.z.number().int().min(0),
481
+ transitionDuration: v4_1.z.number().int(),
482
+ fadeCurve: v4_1.z.number().int().min(0).max(9)
483
+ },
484
+ inputSchemaJson: {
485
+ type: "object",
486
+ properties: {
487
+ playingId: { type: "integer", minimum: 0 }, transitionDuration: { type: "integer" },
488
+ fadeCurve: { type: "integer", minimum: 0, maximum: 9 }, options: {}
489
+ },
490
+ required: ["playingId", "transitionDuration", "fadeCurve"],
491
+ additionalProperties: false
492
+ }
493
+ }),
494
+ (0, toolFactory_js_1.createWaapiStubTool)({
495
+ name: "ak.soundengine.unloadBank",
496
+ title: "Unload SoundBank",
497
+ description: "Unload a SoundBank from the runtime sound engine.",
498
+ domain: "soundengine",
499
+ risk: "high",
500
+ permissions: ["waapi:runtime"],
501
+ tags: ["waapi", "runtime", "banks"],
502
+ examples: [{ title: "Unload level bank", input: { soundBank: "Level01" } }],
503
+ inputSchema: { soundBank: seObj },
504
+ inputSchemaJson: {
505
+ type: "object",
506
+ properties: { soundBank: seObjJson, options: {} },
507
+ required: ["soundBank"],
508
+ additionalProperties: false
509
+ }
510
+ }),
511
+ (0, toolFactory_js_1.createWaapiStubTool)({
512
+ name: "ak.soundengine.unregisterGameObj",
513
+ title: "Unregister Game Object",
514
+ description: "Unregister a game object from the runtime sound engine.",
515
+ domain: "soundengine",
516
+ risk: "high",
517
+ permissions: ["waapi:runtime"],
518
+ tags: ["waapi", "runtime", "game-object"],
519
+ examples: [{ title: "Unregister on death", input: { gameObject: 1001 } }],
520
+ inputSchema: { gameObject: gameObj },
521
+ inputSchemaJson: {
522
+ type: "object",
523
+ properties: { gameObject: { type: "number" }, options: {} },
524
+ required: ["gameObject"],
525
+ additionalProperties: false
526
+ }
527
+ })
528
+ ];
529
+ }