首页/新闻资讯/正文详情

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

发布时间:2026/9/25 4:59:10 来源:云帆数科 栏目:资讯中心
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),仅供参考

相关推荐

深入 RapidJSON StringBuffer:让 JSON 字符串生成快 3 倍的 3 个技巧
深入 RapidJSON StringBuffer:让 JSON 字符串生成快 3 倍的 3 个技巧

深入 RapidJSON StringBuffer:让 JSON 字符串生成快 3 倍的 3 个技巧 【免费下载链接】rapidjson A fast JSON parser/generator for C with both SAX/DOM style API 项目地址: https://gitcode.com/GitHub_Trending/ra/rapidjson 你有没有过这种经历&#x… · 2026/9/25 4:59:04

openusage CLI 完整教程:让 AI Agent 一键读取实时配额 JSON
openusage CLI 完整教程:让 AI Agent 一键读取实时配额 JSON

openusage CLI 完整教程:让 AI Agent 一键读取实时配额 JSON 【免费下载链接】openusage Burning through your subscriptions too fast? Paying for stuff you never use? Stop guessing. OpenUsage is free and open source. 项目地址: https://gitcode.com/g… · 2026/9/25 4:58:58

STM32 I2C CubeMX配置四大致命陷阱与信号完整性避坑指南
STM32 I2C CubeMX配置四大致命陷阱与信号完整性避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:58:52

影刀RPA实战:微信聊天记录自动导出Excel的完整方案
影刀RPA实战:微信聊天记录自动导出Excel的完整方案

做运营的人应该都经历过这种场景:领导说“把上个月和A客户的所有聊天记录整理成表格”,你只能打开微信,一条条往上翻,复制粘贴到Excel里,再手工标记日期和联系人。聊天少还好,遇到一天几十条的群&#xff0… · 2026/9/25 8:54:10

PaddleSpeech 语音特征提取实战:解析 python_kaldi_features 的 MFCC、Fbank 实现与 Kaldi 对齐细节
PaddleSpeech 语音特征提取实战:解析 python_kaldi_features 的 MFCC、Fbank 实现与 Kaldi 对齐细节

人工智能语音音频 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword… · 2026/9/25 8:54:10

Java变量深度解析:内存模型、作用域、常量与命名规范
Java变量深度解析:内存模型、作用域、常量与命名规范

变量大概是Java里第一个绕不开、又被大多数教程一句话带过的概念。我见过工作两三年的开发,能把集合框架、JVM调优聊得头头是道,但你问他int a 10;这一行到底发生了什么,他反而含糊其辞。变量看起来简单,简单到我们每天都在写&am… · 2026/9/25 8:53:51

Tekton Pipeline 依赖库 go-fed/httpsig:HTTP Signatures 请求/响应签名与验证实现解析
Tekton Pipeline 依赖库 go-fed/httpsig:HTTP Signatures 请求/响应签名与验证实现解析

云原生CI/CDDevOps后端 【免费下载链接】pipeline A cloud-native Pipeline resource. 项目地址: https://gitcode.com/gh_mirrors/pipelin/pipeline 点击查看 免费下载 本文以 Tekton Pipeline 仓库中 vendored 的第三方库 go-fed/httpsig(v1.1.0&… · 2026/9/25 8:53:45

业务开发视角的可观测体系建设:从日志、链路到告警的实战指南
业务开发视角的可观测体系建设:从日志、链路到告警的实战指南

那天晚上十一点半,业务群突然炸了:下单成功率掉了快一半,用户反馈进来一堆。我作为订单模块的业务开发,打开监控大盘一看,CPU 正常、内存正常、服务平均耗时也正常,整个系统看起来"健康"得不能再… · 2026/9/25 8:53:45

Java毕设实战:基于SpringBoot+SSM的蛋糕购物平台系统解析
Java毕设实战:基于SpringBoot+SSM的蛋糕购物平台系统解析

很多Java学习者第一次真正接触到“一个完整系统”,就是从做这类商城项目开始的。云与糖蛋糕购物平台系统就是这样一个很典型的JavaSpringBootSSM项目:用户端能注册登录、按分类浏览蛋糕、把心仪的甜品加入购物车、下单模拟支付;管理端能维护商… · 2026/9/25 8:53:45

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码