Add formal enemies, remaining formal partners and synthesized UI SFX

- UI SFX v3: procedurally synthesized one-shots (Tools/synth_ui_sfx.py) wired to
  buttons, rewards, errors and red dots via UiSfx, gated by the SFX setting.
- Five formal enemies (Hornlet, Dashlet, Shellhorn, HornCaptain, GreatHorn):
  Hunyuan 50k -> 2000-tri XPbr, DGXA TokenRig, Idle/Walk/Attack, nested per type
  in PrototypeArena; PrototypeBattle.Enemy gains presentation-only Moving/Strikes.
- Formal partners for all ten pets in the arena and portraits, including new
  VineSprite, ThunderLeopard and TideWhale.
- Pipeline fixes: reject local TokenRig fallback, drop loose mesh islands,
  configurable Unity run_script timeout, companion static stage.
- Also includes concurrent work from another tool in this working tree
  (FlameLion, enemy combat FX, challenge mode, home explorer, server updates).
- Resources registered in Doc/ResDesc_*.md; verified on isolated :18081.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
udx
2026-10-21 12:23:55 +08:00
co-authored by Claude Opus 5.5
parent 6c64210331
commit 89e0fa246f
780 changed files with 7117051 additions and 15906 deletions
+79
View File
@@ -0,0 +1,79 @@
# UI 音效批次 v1
2026-10-20,按 `D:/UD/AI/XModel/TangoFlux_AI调用指南.md` 调用本机 `TangoFluxService`(`http://127.0.0.1:8012`)生成。风格贴近《微风小镇》菜单氛围:轻柔木感/糖果感 UI,短促、无音乐、无人声。
## 清单(10 条)
| 地址 | 用途 | 时长 | 种子 |
| --- | --- | --- | --- |
| `Ui_Click` | 通用按钮点击 | 1.5s | 41001 |
| `Ui_Confirm` | 确认 / 正向操作 | 2.0s | 41002 |
| `Ui_Back` | 返回 / 取消 | 1.5s | 41003 |
| `Ui_Open` | 打开面板 | 2.0s | 41004 |
| `Ui_Close` | 关闭面板 | 1.5s | 41005 |
| `Ui_Tab` | 页签切换 | 1.5s | 41006 |
| `Ui_Claim` | 领奖 / 领取附件 | 2.5s | 41007 |
| `Ui_Deny` | 拒绝 / 余额不足等 | 1.5s | 41008 |
| `Ui_Toggle` | 设置开关 | 1.5s | 41009 |
| `Ui_Notify` | 红点 / 通知提示 | 2.0s | 41010 |
## 生成参数
- 模型:`declare-lab/TangoFlux` + 本地 `flan-t5-large`
- `steps=50`,`guidance_scale=4.5`
- 输出:44.1 kHz 立体声 WAV
- 清单:`manifest.json`;任务回执:`Tools/output/ui_sfx_v1/` 与 `generation.json`
- 入口脚本:`python Tools/generate_ui_sfx.py`
## 工程路径
- Bundle:`AIClient/Assets/Bundles/Sound/SFX/UI/{Id}.wav`
- 收集:Art / Sound,`AddressByFileName`,`PackSeparately`
- Unity 导入回执:`unity_validation.json`(10 条、44100 Hz 立体声、DecompressOnLoad/PCM;Art/Sound 已收集)。
- v1 只入库与登记,未接入运行时播放;2026-10-21 已由下文 v2 替换同名 WAV 并接入运行时。
- 许可:TangoFlux 权重为非商业研究用途,商用前须核对上游许可。
## v2 一次性短音效与运行时接入(2026-10-21)
v1 的 10 条里有 9 条从头响到尾,持续 1.5~2.5 秒;`Ui_Open` 前 1.36 秒为静音,不适合作为按钮音。v2 改用"单发后静音"的提示词,每条以服务允许的最短时长 1 秒、4 个种子(52001~52004)生成候选。候选经 `Tools/generate_ui_sfx_v2.py` 后处理:去掉开头静音、截到目标长度、加 2ms 淡入和尾部 40% 平方淡出、归一化峰值。自动选择取目标窗口内能量占比最高、起音最快的候选,原始峰值低于 0.1 的视为噪声并淘汰(这条规则排除了 Notify 原先选中的 52002)。清单为 `manifest_v2.json`,选择结果与全部候选指标见 `generation_v2.json`。
| 地址 | 目标时长 | 峰值 | 选用种子 |
| --- | --- | --- | --- |
| `Ui_Click` | 0.15s | -6 dBFS | 52002 |
| `Ui_Confirm` | 0.45s | -4 dBFS | 52001 |
| `Ui_Back` | 0.22s | -6 dBFS | 52002 |
| `Ui_Open` | 0.35s | -6 dBFS | 52002 |
| `Ui_Close` | 0.28s | -7 dBFS | 52002 |
| `Ui_Tab` | 0.12s | -7 dBFS | 52001 |
| `Ui_Claim` | 0.8s | -3 dBFS | 52001 |
| `Ui_Deny` | 0.3s | -6 dBFS | 52002 |
| `Ui_Toggle` | 0.14s | -7 dBFS | 52001 |
| `Ui_Notify` | 0.5s | -6 dBFS | 52004 |
候选的原始音频和处理后版本在 `Tools/output/ui_sfx_v2/raw|trimmed/`。如需改用其他候选,执行 `python Tools/generate_ui_sfx_v2.py --process --pick Ui_Click=52003`,再用 Pipeline 运行 `BuildUiSfx.Build`。自动选择只依据波形指标,**听感仍需人工试听确认**。v1 原始文件保留在 `Tools/output/ui_sfx_v1/`。
运行时:`UiSfx.prefab`(`Assets/Bundles/Sound/Prefab/`,Art/Sound,地址 `UiSfx`)带一个 2D AudioSource(volume 0.8),并按 `UiSound` 枚举顺序引用 10 个 Clip,由 `GameplayBootstrap` 与主界面音乐一同加载。播放受设置里的"音效"开关控制,与音乐开关互不影响;同一音效 60ms 内的重复请求会被忽略。
| 地址 | 触发 |
| --- | --- |
| `Ui_Click` | 普通按钮 |
| `Ui_Confirm` | 训练/进化/购买/营地操作成功、重复胜利 |
| `Ui_Back` | 取消预览、撤下伙伴、放弃战斗 |
| `Ui_Open` | 首页入口打开面板 |
| `Ui_Close` | 返回/关闭回到首页 |
| `Ui_Tab` | 页签、邮件翻页 |
| `Ui_Claim` | 领奖、捕捉、开宝箱、首通胜利 |
| `Ui_Deny` | 服务端拒绝或连接失败 |
| `Ui_Toggle` | 设置开关、画质、布阵部署/撤下/推荐 |
| `Ui_Notify` | 首页新出现红点 |
验证:`BuildUiSfx.Verify` 与 `VerifyUiSfx.Play` 在隔离的 18081 账号上实际点击,结果为 hud.settings=Open、quality=Toggle、sfxOff=Toggle、关闭音效后关闭页面与打开设置均无声、settings.close=Close、hud.rewards=Open、每日宝箱=Claim、chest.back=Close;真实账号与音效偏好已还原,本轮无新增 Console 错误或警告。未构建或发布。
## v3:程序化合成(2026-10-21)
v2 试听反馈为“不好听”,与清脆轻松的游戏风格不符。v3 不再使用生成模型,改由 `Tools/synth_ui_sfx.py` 合成:
- 音色:木琴(基频加 3.93×、9.2× 快衰泛音)、钟琴(1 / 2.76 / 5.40 / 8.93× 非谐泛音)、气泡 pop(快速上滑的正弦),以及 4ms 高通噪声作起音。
- 映射:Click 气泡 pop;Tab 木琴 A6 轻敲;Toggle 两连 pop;Confirm 木琴 E6→B6 上行;Back 木琴 G6→D6 下行;Open 上滑加 E7 叮;Close 下滑加 G5 闷敲;Claim 钟琴 C6-E6-G6-C7 琶音加高音闪烁;Deny 两声低音柔和 boop;Notify 钟琴 G6→D7 叮叮。
- 调整:改 `RECIPES` 里的音高、衰减和音量后运行 `python Tools/synth_ui_sfx.py --preview`,再在 Unity 里执行 `BuildUiSfx.Build`。
+138
View File
@@ -0,0 +1,138 @@
{
"batchId": "ui_sfx_v1",
"base": "http://127.0.0.1:8012",
"generatedUtc": "2026-10-20T12:09:16Z",
"count": 10,
"items": [
{
"id": "Ui_Click",
"jobId": "4fa18c1f8c1944ae8b28cfd5b5d0860a",
"prompt": "Short soft UI button click, gentle wooden tap with tiny candy-like sparkle, warm cozy mobile game interface, dry close mic, no music, no speech, no reverb tails",
"duration": 1.5,
"steps": 50,
"guidance_scale": 4.5,
"seed": 41001,
"bytes": 264644,
"outputWav": "Tools/output/ui_sfx_v1/Ui_Click.wav",
"bundleWav": "AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Click.wav",
"status": "succeeded"
},
{
"id": "Ui_Confirm",
"jobId": "e314eeaf8b8247bfa5be5699d67c2fab",
"prompt": "Soft positive UI confirm chime, two warm xylophone notes ascending, light pastoral fantasy game interface, gentle and short, no music, no speech",
"duration": 2,
"steps": 50,
"guidance_scale": 4.5,
"seed": 41002,
"bytes": 352844,
"outputWav": "Tools/output/ui_sfx_v1/Ui_Confirm.wav",
"bundleWav": "AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Confirm.wav",
"status": "succeeded"
},
{
"id": "Ui_Back",
"jobId": "853c0fc04415423794334183f2c6c729",
"prompt": "Soft UI cancel or back tap, muted wooden click with quiet downward tone, cozy mobile menu, dry and brief, no music, no speech",
"duration": 1.5,
"steps": 50,
"guidance_scale": 4.5,
"seed": 41003,
"bytes": 264644,
"outputWav": "Tools/output/ui_sfx_v1/Ui_Back.wav",
"bundleWav": "AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Back.wav",
"status": "succeeded"
},
{
"id": "Ui_Open",
"jobId": "3f7a59e3ec8a4036875f8983249e1c3c",
"prompt": "Soft UI panel open whoosh with a tiny bright chime, paper-light and warm pastoral game menu, short and friendly, no music, no speech",
"duration": 2,
"steps": 50,
"guidance_scale": 4.5,
"seed": 41004,
"bytes": 352844,
"outputWav": "Tools/output/ui_sfx_v1/Ui_Open.wav",
"bundleWav": "AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Open.wav",
"status": "succeeded"
},
{
"id": "Ui_Close",
"jobId": "1750377342534c3e963390968fb8e126",
"prompt": "Soft UI panel close whoosh, gentle downward air and quiet wood latch, cozy fantasy menu, very short, no music, no speech",
"duration": 1.5,
"steps": 50,
"guidance_scale": 4.5,
"seed": 41005,
"bytes": 264644,
"outputWav": "Tools/output/ui_sfx_v1/Ui_Close.wav",
"bundleWav": "AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Close.wav",
"status": "succeeded"
},
{
"id": "Ui_Tab",
"jobId": "5ecffa283c02491e8e74fcffa8a67eb9",
"prompt": "Soft UI tab switch click, light plastic and wood blend, tiny bright tick, pastoral casual game interface, dry and short, no music, no speech",
"duration": 1.5,
"steps": 50,
"guidance_scale": 4.5,
"seed": 41006,
"bytes": 264644,
"outputWav": "Tools/output/ui_sfx_v1/Ui_Tab.wav",
"bundleWav": "AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Tab.wav",
"status": "succeeded"
},
{
"id": "Ui_Claim",
"jobId": "0d90f65cd6ae4bd3859e420c00c538f9",
"prompt": "Soft reward claim UI sparkle, small glittering chimes and light coin shimmer, warm candy pastoral fantasy game, short pleasant, no music bed, no speech",
"duration": 2.5,
"steps": 50,
"guidance_scale": 4.5,
"seed": 41007,
"bytes": 441044,
"outputWav": "Tools/output/ui_sfx_v1/Ui_Claim.wav",
"bundleWav": "AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Claim.wav",
"status": "succeeded"
},
{
"id": "Ui_Deny",
"jobId": "9e1d374b53d34aa0af5d31c7856bf9fc",
"prompt": "Gentle UI error or deny thud, soft muted low wooden knock, not harsh, cozy mobile game feedback, dry and brief, no music, no speech",
"duration": 1.5,
"steps": 50,
"guidance_scale": 4.5,
"seed": 41008,
"bytes": 264644,
"outputWav": "Tools/output/ui_sfx_v1/Ui_Deny.wav",
"bundleWav": "AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Deny.wav",
"status": "succeeded"
},
{
"id": "Ui_Toggle",
"jobId": "1b1160a1d24d4b38885e9fdcb565ade0",
"prompt": "Soft UI toggle switch click, small mechanical soft snap with tiny sparkle, settings panel of a cozy fantasy mobile game, short, no music, no speech",
"duration": 1.5,
"steps": 50,
"guidance_scale": 4.5,
"seed": 41009,
"bytes": 264644,
"outputWav": "Tools/output/ui_sfx_v1/Ui_Toggle.wav",
"bundleWav": "AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Toggle.wav",
"status": "succeeded"
},
{
"id": "Ui_Notify",
"jobId": "daedbe297f0741dab2825f7e8c68d31a",
"prompt": "Soft UI notification ping, single warm bell-like chime with tiny sparkle, friendly red-dot alert for a pastoral casual game, short and light, no music, no speech",
"duration": 2,
"steps": 50,
"guidance_scale": 4.5,
"seed": 41010,
"bytes": 352844,
"outputWav": "Tools/output/ui_sfx_v1/Ui_Notify.wav",
"bundleWav": "AIClient/Assets/Bundles/Sound/SFX/UI/Ui_Notify.wav",
"status": "succeeded"
}
]
}
+546
View File
@@ -0,0 +1,546 @@
{
"batchId": "ui_sfx_v2",
"generatedUtc": "2026-10-20T16:17:11Z",
"items": [
{
"id": "Ui_Click",
"targetSec": 0.15,
"peakDb": -6,
"prompt": "A tiny soft wooden button tap for a cozy mobile game menu, a single isolated one-shot sound at the very start followed by complete silence, dry close mic, no music, no speech, no reverb",
"pickedSeed": 52002,
"pickedBy": "auto",
"candidates": [
{
"seed": 52001,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Click_52001.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Click_52001.wav",
"lengthSec": 0.15,
"onsetSec": 0.0,
"kept": 0.0044,
"score": 0.0044,
"rawPeak": 0.9835,
"silent": false
},
{
"seed": 52002,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Click_52002.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Click_52002.wav",
"lengthSec": 0.15,
"onsetSec": 0.0,
"kept": 1.0,
"score": 1.0,
"rawPeak": 0.2191,
"silent": false
},
{
"seed": 52003,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Click_52003.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Click_52003.wav",
"lengthSec": 0.15,
"onsetSec": 0.0,
"kept": 0.1441,
"score": 0.1441,
"rawPeak": 0.171,
"silent": false
},
{
"seed": 52004,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Click_52004.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Click_52004.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0227,
"silent": true
}
]
},
{
"id": "Ui_Confirm",
"targetSec": 0.45,
"peakDb": -4,
"prompt": "Two quick bright xylophone notes rising, a cheerful positive confirm blip for a cute game, a single isolated one-shot sound at the very start followed by complete silence, dry close mic, no music, no speech, no reverb",
"pickedSeed": 52001,
"pickedBy": "auto",
"candidates": [
{
"seed": 52001,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Confirm_52001.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Confirm_52001.wav",
"lengthSec": 0.45,
"onsetSec": 0.0,
"kept": 0.9705,
"score": 0.9705,
"rawPeak": 0.5869,
"silent": false
},
{
"seed": 52002,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Confirm_52002.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Confirm_52002.wav",
"lengthSec": 0.45,
"onsetSec": 0.0,
"kept": 0.7008,
"score": 0.7008,
"rawPeak": 0.4395,
"silent": false
},
{
"seed": 52003,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Confirm_52003.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Confirm_52003.wav",
"lengthSec": 0.45,
"onsetSec": 0.0,
"kept": 0.3875,
"score": 0.3875,
"rawPeak": 0.3589,
"silent": false
},
{
"seed": 52004,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Confirm_52004.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Confirm_52004.wav",
"lengthSec": 0.45,
"onsetSec": 0.0,
"kept": 0.1696,
"score": 0.1696,
"rawPeak": 0.8513,
"silent": false
}
]
},
{
"id": "Ui_Back",
"targetSec": 0.22,
"peakDb": -6,
"prompt": "A soft muted wooden click with a short falling tone, a gentle cancel blip, a single isolated one-shot sound at the very start followed by complete silence, dry close mic, no music, no speech, no reverb",
"pickedSeed": 52002,
"pickedBy": "auto",
"candidates": [
{
"seed": 52001,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Back_52001.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Back_52001.wav",
"lengthSec": 0.22,
"onsetSec": 0.2103,
"kept": 0.9899,
"score": 0.6093,
"rawPeak": 0.8346,
"silent": false
},
{
"seed": 52002,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Back_52002.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Back_52002.wav",
"lengthSec": 0.22,
"onsetSec": 0.0,
"kept": 1.0,
"score": 1.0,
"rawPeak": 0.4434,
"silent": false
},
{
"seed": 52003,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Back_52003.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Back_52003.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0277,
"silent": true
},
{
"seed": 52004,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Back_52004.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Back_52004.wav",
"lengthSec": 0.22,
"onsetSec": 0.0,
"kept": 0.4987,
"score": 0.4987,
"rawPeak": 0.1429,
"silent": false
}
]
},
{
"id": "Ui_Open",
"targetSec": 0.35,
"peakDb": -6,
"prompt": "A quick soft paper swoosh ending in a tiny bright chime, a menu panel opening, a single isolated one-shot sound at the very start followed by complete silence, dry close mic, no music, no speech, no reverb",
"pickedSeed": 52002,
"pickedBy": "auto",
"candidates": [
{
"seed": 52001,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Open_52001.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Open_52001.wav",
"lengthSec": 0.35,
"onsetSec": 0.0,
"kept": 0.6677,
"score": 0.6677,
"rawPeak": 0.1025,
"silent": false
},
{
"seed": 52002,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Open_52002.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Open_52002.wav",
"lengthSec": 0.35,
"onsetSec": 0.0,
"kept": 0.6826,
"score": 0.6826,
"rawPeak": 0.6354,
"silent": false
},
{
"seed": 52003,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Open_52003.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Open_52003.wav",
"lengthSec": 0.35,
"onsetSec": 0.0,
"kept": 0.2222,
"score": 0.2222,
"rawPeak": 0.1919,
"silent": false
},
{
"seed": 52004,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Open_52004.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Open_52004.wav",
"lengthSec": 0.35,
"onsetSec": 0.0,
"kept": 0.5536,
"score": 0.5536,
"rawPeak": 0.7946,
"silent": false
}
]
},
{
"id": "Ui_Close",
"targetSec": 0.28,
"peakDb": -7,
"prompt": "A quick soft downward air swish ending in a quiet wooden latch tap, a single isolated one-shot sound at the very start followed by complete silence, dry close mic, no music, no speech, no reverb",
"pickedSeed": 52002,
"pickedBy": "auto",
"candidates": [
{
"seed": 52001,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Close_52001.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Close_52001.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0116,
"silent": true
},
{
"seed": 52002,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Close_52002.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Close_52002.wav",
"lengthSec": 0.28,
"onsetSec": 0.0,
"kept": 1.0,
"score": 1.0,
"rawPeak": 1.0,
"silent": false
},
{
"seed": 52003,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Close_52003.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Close_52003.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0602,
"silent": true
},
{
"seed": 52004,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Close_52004.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Close_52004.wav",
"lengthSec": 0.28,
"onsetSec": 0.0,
"kept": 0.4045,
"score": 0.4045,
"rawPeak": 0.7418,
"silent": false
}
]
},
{
"id": "Ui_Tab",
"targetSec": 0.12,
"peakDb": -7,
"prompt": "A tiny light plastic tick, a crisp tab switch click, a single isolated one-shot sound at the very start followed by complete silence, dry close mic, no music, no speech, no reverb",
"pickedSeed": 52001,
"pickedBy": "auto",
"candidates": [
{
"seed": 52001,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Tab_52001.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Tab_52001.wav",
"lengthSec": 0.12,
"onsetSec": 0.2106,
"kept": 0.9333,
"score": 0.5521,
"rawPeak": 0.3409,
"silent": false
},
{
"seed": 52002,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Tab_52002.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Tab_52002.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0186,
"silent": true
},
{
"seed": 52003,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Tab_52003.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Tab_52003.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0724,
"silent": true
},
{
"seed": 52004,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Tab_52004.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Tab_52004.wav",
"lengthSec": 0.12,
"onsetSec": 0.0,
"kept": 0.0746,
"score": 0.0746,
"rawPeak": 0.151,
"silent": false
}
]
},
{
"id": "Ui_Claim",
"targetSec": 0.8,
"peakDb": -3,
"prompt": "A short sparkling glitter chime with a light coin jingle, a happy reward collected sound, a single isolated one-shot sound at the very start followed by complete silence, dry close mic, no music, no speech, no reverb",
"pickedSeed": 52001,
"pickedBy": "auto",
"candidates": [
{
"seed": 52001,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Claim_52001.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Claim_52001.wav",
"lengthSec": 0.8,
"onsetSec": 0.0,
"kept": 1.0,
"score": 1.0,
"rawPeak": 0.8577,
"silent": false
},
{
"seed": 52002,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Claim_52002.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Claim_52002.wav",
"lengthSec": 0.8,
"onsetSec": 0.0,
"kept": 0.9356,
"score": 0.9356,
"rawPeak": 1.0,
"silent": false
},
{
"seed": 52003,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Claim_52003.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Claim_52003.wav",
"lengthSec": 0.8,
"onsetSec": 0.0,
"kept": 0.7923,
"score": 0.7923,
"rawPeak": 0.1699,
"silent": false
},
{
"seed": 52004,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Claim_52004.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Claim_52004.wav",
"lengthSec": 0.8,
"onsetSec": 0.0,
"kept": 0.8342,
"score": 0.8342,
"rawPeak": 1.0,
"silent": false
}
]
},
{
"id": "Ui_Deny",
"targetSec": 0.3,
"peakDb": -6,
"prompt": "A soft dull low wooden knock, two quick muted thuds, a gentle error buzz that is not harsh, a single isolated one-shot sound at the very start followed by complete silence, dry close mic, no music, no speech, no reverb",
"pickedSeed": 52002,
"pickedBy": "auto",
"candidates": [
{
"seed": 52001,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Deny_52001.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Deny_52001.wav",
"lengthSec": 0.3,
"onsetSec": 0.0,
"kept": 0.6486,
"score": 0.6486,
"rawPeak": 1.0,
"silent": false
},
{
"seed": 52002,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Deny_52002.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Deny_52002.wav",
"lengthSec": 0.3,
"onsetSec": 0.0,
"kept": 0.9816,
"score": 0.9816,
"rawPeak": 0.6965,
"silent": false
},
{
"seed": 52003,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Deny_52003.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Deny_52003.wav",
"lengthSec": 0.3,
"onsetSec": 0.0,
"kept": 0.46,
"score": 0.46,
"rawPeak": 0.2253,
"silent": false
},
{
"seed": 52004,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Deny_52004.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Deny_52004.wav",
"lengthSec": 0.3,
"onsetSec": 0.0,
"kept": 0.3231,
"score": 0.3231,
"rawPeak": 1.0,
"silent": false
}
]
},
{
"id": "Ui_Toggle",
"targetSec": 0.14,
"peakDb": -7,
"prompt": "A small soft mechanical switch snap, a toggle click, a single isolated one-shot sound at the very start followed by complete silence, dry close mic, no music, no speech, no reverb",
"pickedSeed": 52001,
"pickedBy": "auto",
"candidates": [
{
"seed": 52001,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Toggle_52001.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Toggle_52001.wav",
"lengthSec": 0.14,
"onsetSec": 0.2068,
"kept": 0.9939,
"score": 0.6202,
"rawPeak": 0.8638,
"silent": false
},
{
"seed": 52002,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Toggle_52002.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Toggle_52002.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0479,
"silent": true
},
{
"seed": 52003,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Toggle_52003.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Toggle_52003.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0176,
"silent": true
},
{
"seed": 52004,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Toggle_52004.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Toggle_52004.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0448,
"silent": true
}
]
},
{
"id": "Ui_Notify",
"targetSec": 0.5,
"peakDb": -6,
"prompt": "A single warm small bell ping with a tiny sparkle, a friendly notification, a single isolated one-shot sound at the very start followed by complete silence, dry close mic, no music, no speech, no reverb",
"pickedSeed": 52004,
"pickedBy": "auto",
"candidates": [
{
"seed": 52001,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Notify_52001.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Notify_52001.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0001,
"silent": true
},
{
"seed": 52002,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Notify_52002.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Notify_52002.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0006,
"silent": true
},
{
"seed": 52003,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Notify_52003.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Notify_52003.wav",
"lengthSec": 0.0,
"onsetSec": 0.0,
"kept": 0.0,
"score": -1.0,
"rawPeak": 0.0162,
"silent": true
},
{
"seed": 52004,
"raw": "Tools/output/ui_sfx_v2/raw/Ui_Notify_52004.wav",
"trimmed": "Tools/output/ui_sfx_v2/trimmed/Ui_Notify_52004.wav",
"lengthSec": 0.5,
"onsetSec": 0.0,
"kept": 0.5332,
"score": 0.5332,
"rawPeak": 1.0,
"silent": false
}
]
}
]
}
+77
View File
@@ -0,0 +1,77 @@
{
"schemaVersion": 1,
"batchId": "ui_sfx_v1",
"theme": "Candy pastoral soft UI, matches MeadowBreeze menu mood",
"service": "http://127.0.0.1:8012",
"guide": "D:/UD/AI/XModel/TangoFlux_AI调用指南.md",
"outputDir": "Tools/output/ui_sfx_v1",
"bundleDir": "AIClient/Assets/Bundles/Sound/SFX/UI",
"designDir": "Doc/Design/Sound/UiSfx",
"defaults": {
"duration": 2,
"steps": 50,
"guidance_scale": 4.5
},
"items": [
{
"id": "Ui_Click",
"seed": 41001,
"duration": 1.5,
"prompt": "Short soft UI button click, gentle wooden tap with tiny candy-like sparkle, warm cozy mobile game interface, dry close mic, no music, no speech, no reverb tails"
},
{
"id": "Ui_Confirm",
"seed": 41002,
"duration": 2,
"prompt": "Soft positive UI confirm chime, two warm xylophone notes ascending, light pastoral fantasy game interface, gentle and short, no music, no speech"
},
{
"id": "Ui_Back",
"seed": 41003,
"duration": 1.5,
"prompt": "Soft UI cancel or back tap, muted wooden click with quiet downward tone, cozy mobile menu, dry and brief, no music, no speech"
},
{
"id": "Ui_Open",
"seed": 41004,
"duration": 2,
"prompt": "Soft UI panel open whoosh with a tiny bright chime, paper-light and warm pastoral game menu, short and friendly, no music, no speech"
},
{
"id": "Ui_Close",
"seed": 41005,
"duration": 1.5,
"prompt": "Soft UI panel close whoosh, gentle downward air and quiet wood latch, cozy fantasy menu, very short, no music, no speech"
},
{
"id": "Ui_Tab",
"seed": 41006,
"duration": 1.5,
"prompt": "Soft UI tab switch click, light plastic and wood blend, tiny bright tick, pastoral casual game interface, dry and short, no music, no speech"
},
{
"id": "Ui_Claim",
"seed": 41007,
"duration": 2.5,
"prompt": "Soft reward claim UI sparkle, small glittering chimes and light coin shimmer, warm candy pastoral fantasy game, short pleasant, no music bed, no speech"
},
{
"id": "Ui_Deny",
"seed": 41008,
"duration": 1.5,
"prompt": "Gentle UI error or deny thud, soft muted low wooden knock, not harsh, cozy mobile game feedback, dry and brief, no music, no speech"
},
{
"id": "Ui_Toggle",
"seed": 41009,
"duration": 1.5,
"prompt": "Soft UI toggle switch click, small mechanical soft snap with tiny sparkle, settings panel of a cozy fantasy mobile game, short, no music, no speech"
},
{
"id": "Ui_Notify",
"seed": 41010,
"duration": 2,
"prompt": "Soft UI notification ping, single warm bell-like chime with tiny sparkle, friendly red-dot alert for a pastoral casual game, short and light, no music, no speech"
}
]
}
+31
View File
@@ -0,0 +1,31 @@
{
"schemaVersion": 2,
"batchId": "ui_sfx_v2",
"theme": "Candy pastoral soft UI, matches MeadowBreeze menu mood; one-shot transients for buttons",
"service": "http://127.0.0.1:8012",
"guide": "D:/UD/AI/XModel/TangoFlux_AI调用指南.md",
"outputDir": "Tools/output/ui_sfx_v2",
"bundleDir": "AIClient/Assets/Bundles/Sound/SFX/UI",
"designDir": "Doc/Design/Sound/UiSfx",
"notes": "v1 clips sustained for the full 1.5-2.5s. Service minimum is 1s, so v2 generates 1s one-shots with several seeds, then trims leading silence, caps each clip at targetSec with a fade-out, normalizes to peakDb and auto-picks the candidate whose energy already sits inside the target window.",
"defaults": {
"duration": 1,
"steps": 50,
"guidance_scale": 4.5,
"seeds": [52001, 52002, 52003, 52004],
"fadeInMs": 2,
"suffix": ", a single isolated one-shot sound at the very start followed by complete silence, dry close mic, no music, no speech, no reverb"
},
"items": [
{ "id": "Ui_Click", "targetSec": 0.15, "peakDb": -6, "prompt": "A tiny soft wooden button tap for a cozy mobile game menu" },
{ "id": "Ui_Confirm", "targetSec": 0.45, "peakDb": -4, "prompt": "Two quick bright xylophone notes rising, a cheerful positive confirm blip for a cute game" },
{ "id": "Ui_Back", "targetSec": 0.22, "peakDb": -6, "prompt": "A soft muted wooden click with a short falling tone, a gentle cancel blip" },
{ "id": "Ui_Open", "targetSec": 0.35, "peakDb": -6, "prompt": "A quick soft paper swoosh ending in a tiny bright chime, a menu panel opening" },
{ "id": "Ui_Close", "targetSec": 0.28, "peakDb": -7, "prompt": "A quick soft downward air swish ending in a quiet wooden latch tap" },
{ "id": "Ui_Tab", "targetSec": 0.12, "peakDb": -7, "prompt": "A tiny light plastic tick, a crisp tab switch click" },
{ "id": "Ui_Claim", "targetSec": 0.8, "peakDb": -3, "prompt": "A short sparkling glitter chime with a light coin jingle, a happy reward collected sound" },
{ "id": "Ui_Deny", "targetSec": 0.3, "peakDb": -6, "prompt": "A soft dull low wooden knock, two quick muted thuds, a gentle error buzz that is not harsh" },
{ "id": "Ui_Toggle", "targetSec": 0.14, "peakDb": -7, "prompt": "A small soft mechanical switch snap, a toggle click" },
{ "id": "Ui_Notify", "targetSec": 0.5, "peakDb": -6, "prompt": "A single warm small bell ping with a tiny sparkle, a friendly notification" }
]
}
@@ -0,0 +1,83 @@
{
"batch": "ui_sfx_v3",
"prefab": "Assets/Bundles/Sound/Prefab/UiSfx.prefab",
"address": "UiSfx",
"package": "Art",
"group": "Sound",
"volume": 0.8,
"sfxToggle": "PrototypeClientPrefs.Sfx",
"clips": [
{
"sound": "Click",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Click.wav",
"seconds": 0.08,
"channels": 2,
"frequency": 44100
},
{
"sound": "Confirm",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Confirm.wav",
"seconds": 0.36,
"channels": 2,
"frequency": 44100
},
{
"sound": "Back",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Back.wav",
"seconds": 0.22,
"channels": 2,
"frequency": 44100
},
{
"sound": "Open",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Open.wav",
"seconds": 0.34,
"channels": 2,
"frequency": 44100
},
{
"sound": "Close",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Close.wav",
"seconds": 0.24,
"channels": 2,
"frequency": 44100
},
{
"sound": "Tab",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Tab.wav",
"seconds": 0.07,
"channels": 2,
"frequency": 44100
},
{
"sound": "Claim",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Claim.wav",
"seconds": 0.78,
"channels": 2,
"frequency": 44100
},
{
"sound": "Deny",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Deny.wav",
"seconds": 0.27,
"channels": 2,
"frequency": 44100
},
{
"sound": "Toggle",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Toggle.wav",
"seconds": 0.1,
"channels": 2,
"frequency": 44100
},
{
"sound": "Notify",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Notify.wav",
"seconds": 0.52,
"channels": 2,
"frequency": 44100
}
],
"bundleBuilt": false,
"verifiedUtc": "2026-10-21T01:21:08.0054518Z"
}
+68
View File
@@ -0,0 +1,68 @@
{
"batchId": "ui_sfx_v3",
"method": "procedural synthesis (Tools/synth_ui_sfx.py, numpy)",
"format": "44.1 kHz 16-bit stereo (dual mono)",
"generatedUtc": "2026-10-21T01:20:43Z",
"items": [
{
"id": "Ui_Click",
"recipe": "bubble pop 700→1250 Hz + noise tick",
"peakDb": -6,
"lengthSec": 0.08
},
{
"id": "Ui_Confirm",
"recipe": "marimba E6→B6 rising, glockenspiel on top note",
"peakDb": -5,
"lengthSec": 0.36
},
{
"id": "Ui_Back",
"recipe": "soft marimba G6→D6 falling",
"peakDb": -7,
"lengthSec": 0.22
},
{
"id": "Ui_Open",
"recipe": "rising fwip 520→1400 Hz into an E7 ping",
"peakDb": -7,
"lengthSec": 0.34
},
{
"id": "Ui_Close",
"recipe": "falling fwip 1300→480 Hz into a soft G5 tok",
"peakDb": -7,
"lengthSec": 0.24
},
{
"id": "Ui_Tab",
"recipe": "light marimba A6 tick",
"peakDb": -8,
"lengthSec": 0.07
},
{
"id": "Ui_Toggle",
"recipe": "double pop 900→1500 then 1200→1900 Hz",
"peakDb": -8,
"lengthSec": 0.1
},
{
"id": "Ui_Claim",
"recipe": "glockenspiel arpeggio C6-E6-G6-C7 with marimba body and high sparkles",
"peakDb": -3,
"lengthSec": 0.78
},
{
"id": "Ui_Deny",
"recipe": "two soft low boops 330→262 Hz, gentle not harsh",
"peakDb": -7,
"lengthSec": 0.27
},
{
"id": "Ui_Notify",
"recipe": "bell ding-ding G6 then D7",
"peakDb": -6,
"lengthSec": 0.52
}
]
}
@@ -0,0 +1,122 @@
{
"folder": "Assets/Bundles/Sound/SFX/UI",
"count": 10,
"items": [
{
"asset": "Assets/Bundles/Sound/SFX/UI/Ui_Back.wav",
"guid": "d84d9acaed435b141a61e474619abcac",
"address": "Ui_Back",
"length": 1.5,
"samples": 66150,
"channels": 2,
"frequency": 44100,
"loadType": "DecompressOnLoad",
"compression": "PCM"
},
{
"asset": "Assets/Bundles/Sound/SFX/UI/Ui_Claim.wav",
"guid": "6b80419ca6ccf464684cf5851cbe4258",
"address": "Ui_Claim",
"length": 2.5,
"samples": 110250,
"channels": 2,
"frequency": 44100,
"loadType": "DecompressOnLoad",
"compression": "PCM"
},
{
"asset": "Assets/Bundles/Sound/SFX/UI/Ui_Click.wav",
"guid": "c462f9f6d11e50a41bf9bf465828669b",
"address": "Ui_Click",
"length": 1.5,
"samples": 66150,
"channels": 2,
"frequency": 44100,
"loadType": "DecompressOnLoad",
"compression": "PCM"
},
{
"asset": "Assets/Bundles/Sound/SFX/UI/Ui_Close.wav",
"guid": "7301e73517800ea4ea3d719f4430b37b",
"address": "Ui_Close",
"length": 1.5,
"samples": 66150,
"channels": 2,
"frequency": 44100,
"loadType": "DecompressOnLoad",
"compression": "PCM"
},
{
"asset": "Assets/Bundles/Sound/SFX/UI/Ui_Confirm.wav",
"guid": "91b80154d0ef8334b84d521bfa2d570c",
"address": "Ui_Confirm",
"length": 2.0,
"samples": 88200,
"channels": 2,
"frequency": 44100,
"loadType": "DecompressOnLoad",
"compression": "PCM"
},
{
"asset": "Assets/Bundles/Sound/SFX/UI/Ui_Deny.wav",
"guid": "33b23f7d7f48b92429e107ef44a5dc40",
"address": "Ui_Deny",
"length": 1.5,
"samples": 66150,
"channels": 2,
"frequency": 44100,
"loadType": "DecompressOnLoad",
"compression": "PCM"
},
{
"asset": "Assets/Bundles/Sound/SFX/UI/Ui_Notify.wav",
"guid": "a0da13344018a0f468a61d21b6f8dad7",
"address": "Ui_Notify",
"length": 2.0,
"samples": 88200,
"channels": 2,
"frequency": 44100,
"loadType": "DecompressOnLoad",
"compression": "PCM"
},
{
"asset": "Assets/Bundles/Sound/SFX/UI/Ui_Open.wav",
"guid": "2982867cae515b24d9f342ca74728d99",
"address": "Ui_Open",
"length": 2.0,
"samples": 88200,
"channels": 2,
"frequency": 44100,
"loadType": "DecompressOnLoad",
"compression": "PCM"
},
{
"asset": "Assets/Bundles/Sound/SFX/UI/Ui_Tab.wav",
"guid": "ff0f87f7678cd61429a4c92c5e1ef59f",
"address": "Ui_Tab",
"length": 1.5,
"samples": 66150,
"channels": 2,
"frequency": 44100,
"loadType": "DecompressOnLoad",
"compression": "PCM"
},
{
"asset": "Assets/Bundles/Sound/SFX/UI/Ui_Toggle.wav",
"guid": "319d495703f33964ca38bb8dd78c9691",
"address": "Ui_Toggle",
"length": 1.5,
"samples": 66150,
"channels": 2,
"frequency": 44100,
"loadType": "DecompressOnLoad",
"compression": "PCM"
}
],
"package": "Art",
"group": "Sound",
"packRule": "PackSeparately",
"runtimePlaybackWired": false,
"bundleBuilt": false,
"verifiedUtc": "2026-10-20T12:11:18.9078923Z"
}