ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

xnbcli XACT音频模块前瞻:解析星露谷XGS/XSB音效库文件的完整指南

xnbcli XACT音频模块前瞻:解析星露谷XGS/XSB音效库文件的完整指南 xnbcli XACT音频模块前瞻解析星露谷XGS/XSB音效库文件的完整指南【免费下载链接】xnbcliA CLI tool for XNB packing/unpacking purpose built for Stardew Valley.项目地址: https://gitcode.com/gh_mirrors/xn/xnbclixnbcli 是一款专为《星露谷》打造的 XNB 文件打包 / 解包命令行工具。除了核心的 XNB 读写能力它还在 XACT 音频模块上埋下了重要伏笔——直接解析游戏音效库中的 XGS 音频引擎与 XSB 声音银行文件。这篇文章带你从零理解它的解析思路不要求任何逆向经验。XACT音频体系速览XGS / XSB / XWB 分别是什么XACT 是微软为游戏设计的音频中间件《星露谷》的几乎所有声音都由它驱动。落到磁盘上音频资产被拆成了三类文件文件扩展名魔数Magic负责什么xnbcli 中的解析模块.xgsXGSF音频引擎分类、变量、RPC 实时参数曲线AudioEngine.js.xsbSDBK声音银行定义一个个可被触发的 Cue提示音事件SoundBank.js.xwbWBND波形银行存放真正的音频采样数据WaveBank.js开发中三者关系可以这样理解XSB 里定义什么时候响XGS 里定义响得怎么样音量、音调曲线XWB 里存放响出来的是什么声音。xnbcli 目前把前两者读得七七八八第三者刚起了个头。XACT模块项目结构解析代码都藏在哪里XACT 相关代码全部集中在 app/Xact/ 目录下职责划分非常清晰app/Xact/index.js总入口。按文件扩展名分发——.xgs交给AudioEngine.xsb交给SoundBank其他扩展名直接抛出错误app/Xact/AudioEngine.jsXGS 解析器app/Xact/SoundBank.jsXSB 解析器app/Xact/XactSound.js 与 app/Xact/XactClip.js处理 XSB 内部的声音与片段两级结构app/Xact/WaveBank.js预留的 XWB 解析位。它们共用的底层积木是 app/BufferReader.js带 seek 能力的小端二进制读取器、app/Struct.js用 Proxy 锁死字段的数据结构工厂以及 app/Log.js可分级开关的彩色日志。解析XGS音频引擎的四步思路打开 app/Xact/AudioEngine.js 的proccess方法你会发现一个非常典型的二进制解析套路校验魔数与格式版本先读 4 字节必须是XGSF再确认格式版本是否为已知值0x2A。版本不符只警告不崩溃方便将来兼容新版格式。读取目录表文件头记录了分类数、变量数、RPC 曲线数以及各自数据区的偏移指针。先拿到地图再按需跳转。还原变量属性按变量区偏移跳转逐个读取标志位是否全局、只读、公开、保留和初始值 / 最小值 / 最大值。解析 RPC 曲线RPCReal-time Parameter Curve是 XACT 的实时参数曲线用折线点控制音量、音调等参数随时间的变化曲线段支持线性、快缓、慢缓、正弦四种插值。 值得注意的小细节代码对 CRC 校验和平台字节采取了跳过不校验的务实态度保证解析流程不被次要字段卡住。解析XSB声音银行从Cue到波形银行的三级下钻XSB 的结构比 XGS 更深一层app/Xact/SoundBank.js 的解析过程可以概括为读表 → 分 Cue → 下钻读取头部信息与偏移表同样先验证SDBK魔数和版本0x2B然后读取关键统计量简单 Cue 数、复杂 Cue 数、波形银行数、声音总数以及 Cue 名称表、变化表、波形银行名表、哈希表等各数据区的偏移。区分简单Cue与复杂Cue简单 Cue一个 Cue 直接对应一条声音一个 soundOffset解析最轻量复杂 Cue挂有变化表Variation Table和过渡表代码会根据表类型分派——0表示直接引用波形轨道1表示内嵌一段完整声音4表示紧凑波形引用。遇到未实现的表类型会明确抛错而不是静默吞掉。跟随XactSound与XactClip追踪声音复杂 Cue 里的声音由 XactSound.js 解析简单声音记录轨道索引 波形银行索引直接指向 XWB 中的采样复杂声音则包含若干片段交由 XactClip.js 逐事件解析目前实现了波形播放等事件类型。解析完成后代码会回滚读取位置保证外层循环的游标不受影响。至此一条完整链路已经成型Cue 名称 → 声音 → 片段 → 波形银行索引离真正吐出音频只差 XWB 解析这一步。上手运行xnbcliXNB解包与打包最简流程需要说明的是XACT 模块目前属于基础 groundworkCLI 的主流程仍是 XNB 的 pack / unpack见 xnbcli.js。日常使用非常简单解包把.xnb文件放进 packed/ 目录运行unpack.shWindows 用 unpack.batmacOS 用 unpack.command产物输出到 unpacked/打包把修改后的.json放进 unpacked/运行 pack.sh重新生成.xnb终端直用xnbcli (pack|unpack) [input] [output]支持--debug查看详细的解析日志。如果你希望运行完整源码需要先安装 Node.js 与 npm然后克隆仓库git clone https://gitcode.com/gh_mirrors/xn/xnbcli执行npm install后即可使用 package.json 中定义的npm run unpack/npm run pack脚本。模块前瞻WaveBank与更完整的音频解包从现有代码可以读出作者明确的演进方向XWB 解析已预研app/Xact/index.js 里已定义了WBND_ENTRY_NAMES、WBND_COMPACT、WBND_SEEK_TABLES等波形银行标志位WaveBankEntry、WaveBankHeader、WaveBankData等结构体也已就位WaveBank.js 只是等待填充RPC DSP 细节待补XactSound.js 中留有 TODO声音条目里的实时参数与 DSP 效果数据尚未完整解析面向 GUI 的长期目标README.md 提到项目的终极目标是作为 GUI 包装层的 CLI 底座让普通用户也能轻松操作 XNB 文件——XACT 模块正是这条路上音频能力的关键一环。总结xnbcli 的 XACT 模块示范了一套干净利落的二进制解析思路魔数校验 → 目录表跳转 → 结构体还原 → 跨文件引用追踪。XGS 读出了星露谷的音频变量与参数曲线XSB 读出了 Cue 到声音的完整层级剩下的 XWB 波形银行已铺好骨架。随着 WaveBank 落地从 .xsb 一路解到裸音频采样将不再是空话对想做音效 MOD 的玩家来说这个模块值得持续关注。【免费下载链接】xnbcliA CLI tool for XNB packing/unpacking purpose built for Stardew Valley.项目地址: https://gitcode.com/gh_mirrors/xn/xnbcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表