跳到正文

音频 ID 与内容:历史版本实测 ​

研究日期:2026-09-21。样本覆盖七个版本、三个英雄,共 42 个 WAD。

不能仅凭音频 ID 判断是不是同一份音频。 内容完全相同,ID 可以改变;ID 不变,内容也可能改变。

两种容易误判的情况 ​

  • 换号,内容不变:安妮中文 10.15 → 11.15,48 个旧 ID 全部换掉,47 份唯一 WEM 内容逐字节一致;其中一份对应两个 ID。
  • ID 不变,内容改变:安妮中文 14.15 → 15.15,48 个同 ID 的 WEM 原始字节全部改变。

这里的“相同”指 原始 WEM 逐字节相同。没有做试听或转码后的波形比较,不判断重编码前后的声音是否相同。

样本与来源 ​

  • 选取 10.15 至 16.15 的七个年度样本,每个补丁选择清单仓库的最高数字构建;这些不是年末最后补丁。
  • 英雄为安妮、龙女、乌迪尔,分别读取基础 WAD 和中文 WAD。
  • 中文资源按 NA1 Windows GAME 清单中的 zh_CN 文件筛选;NA1 是区域,不能当作语音语言。
  • 基础 WAD 含多个皮肤及非音频资源,不能解释为仅基础皮肤或纯 SFX;本次未还原 BIN 的皮肤和事件语义。
版本构建RMAN IDWAD 数
10.1510.15.3300344298E1ED7403A52166
11.1511.15.38923082E5687C51025EE546
12.1512.15.4581416E495735ABBC9DEE16
13.1513.15.524176012FDF3B9F3B1F9416
14.1514.15.6070022E99F7E660E01A9B96
15.1515.15.7016241D0073A3FE727D3D56
16.1516.15.8024387288A4937B5E53E586

清单来源:Morilli/riot-manifests 的固定提交。 乌迪尔和龙女的样本覆盖重做前后;补丁公告只用于选样,文件是否相同以实际字节比较为准。

中文 WAD 相邻采样对比 ​

“换 ID”按唯一内容计:旧 ID 必须从整个该英雄中文 WAD 的媒体集合消失,同时出现此前没有的新 ID,且两份文件已逐字节比较相等。单纯增加皮肤复用、旧 ID 仍存在,不计入此列。

英雄版本区间ID 数唯一内容数共有内容严格换 ID同 ID 换内容
安妮10.15 → 11.1548 → 4847 → 4747470
安妮11.15 → 12.1548 → 4847 → 474700
安妮12.15 → 13.1548 → 4847 → 474700
安妮13.15 → 14.1548 → 4847 → 4717031
安妮14.15 → 15.1548 → 4847 → 470048
安妮15.15 → 16.1548 → 4847 → 480048
龙女10.15 → 11.1570 → 14070 → 1407010
龙女11.15 → 12.15140 → 140140 → 1401401400
龙女12.15 → 13.15140 → 140140 → 14014000
龙女13.15 → 14.15140 → 140140 → 14014000
龙女14.15 → 15.15140 → 140140 → 14048892
龙女15.15 → 16.15140 → 346140 → 346000
乌迪尔10.15 → 11.15155 → 154155 → 1541541220
乌迪尔11.15 → 12.15154 → 154154 → 15415400
乌迪尔12.15 → 13.15154 → 525154 → 525000
乌迪尔13.15 → 14.15525 → 525525 → 52552510
乌迪尔14.15 → 15.15525 → 525525 → 52552500
乌迪尔15.15 → 16.15525 → 525525 → 52552500

“严格换 ID”按唯一内容数计;“同 ID 换内容”按 ID 数计。

上表列出 18 组中文 WAD 相邻对比。原研究另保留基础 WAD 对比,共 36 组相邻对比、126 组全部版本对比。 跨版本重复证据不能相加当作独立历史修改次数。

换号证据 ​

以下文件路径以原研究资料目录为根。原始客户端资源留在研究资料中,不随文档发布。

安妮 10.15 → 11.15 ​

378059956 → 1690580653;42,065 字节;容器路径键相同,逐字节一致。

text
SHA-256: 000d9b6e9604daab47f2669a1edf6378022c9b0985e70c5ae0d6b0c916ac9ffd
旧: extracted/10.15/Annie/zh_CN/media/08ea52f59a09c354/378059956.wem
新: extracted/11.15/Annie/zh_CN/media/08ea52f59a09c354/1690580653.wem

龙女 11.15 → 12.15 ​

1034549623 → 2086897524;56,475 字节;容器路径键相同,逐字节一致。

text
SHA-256: 0237801be2a1de52fcddcfa5bbf981311a3989e7b8a8f68885ee2224b9202a02
旧: extracted/11.15/Shyvana/zh_CN/media/433641a6c0e5289f/1034549623.wem
新: extracted/12.15/Shyvana/zh_CN/media/433641a6c0e5289f/2086897524.wem

乌迪尔 13.15 → 14.15 ​

1258231494 → 1258231495;31,058 字节;容器路径键不同,逐字节一致。

text
SHA-256: 8ae2cc997dc3ae977c2807973f82816584eb6bf4656fe43691a3113b9ca7c610
旧: extracted/13.15/Udyr/zh_CN/media/c2a420152b97d671/1258231494.wem
新: extracted/14.15/Udyr/zh_CN/media/843e514f23b86e8b/1258231495.wem

WEM 结构与比较范围 ​

实际样本以 RIFF ... WAVE 开头,含 fmt 、data 等区块;vgmstream 的 Wwise 解析器也按该结构解析。原始 WEM 可以无损复用,但不能假设它没有可变头部。

  • 安妮中文 13.15 → 14.15:31 个同 ID 文件字节变化;其中 0 个 data 区块字节相同。
  • 安妮中文 14.15 → 15.15:48 个同 ID 文件字节变化;其中 0 个 data 区块字节相同。
  • 安妮中文 15.15 → 16.15:48 个同 ID 文件字节变化;其中 0 个 data 区块字节相同。

data 改变仍不能证明听感改变,可能涉及编码或封装。完整 WEM 摘要适用于原始字节复用,不能用来识别所有重编码后听起来相同的声音。

存储复用的实际规模 ​

统计项本次样本
媒体引用次数11,858
唯一原始内容4,315
每次引用分别保存301,022,199 字节
内容只存一份107,091,159 字节
相比逐次保存减少64.42%
仅在各版本内部去重289,929,090 字节
再跨版本去重减少63.06%

这是本次原始媒体样本的字节统计,不是 WAD 压缩率,也不能外推全部客户端或 WAV 的节省率。

当前仓库如何保存 ​

实际 WEM 内容是复用依据,音频 ID 是引用信息。 资源库将内容与索引分开保存,按内容摘要定位对象; 每个版本的 ID 关联到实际内容,不能把关系压扁为全局 ID → 唯一文件。

层次保存内容位置或规则
内容对象原始 WEM 完整字节audios/_data/<摘要前两位>/<SHA-256>.wem
内容索引版本、语言、实体、皮肤、WEM ID 与摘要的对应关系audios/_index/<版本>/<语言>.msgpack
可见目录供浏览与处理的 WEM 路径通过硬链接指向内容对象,不额外复制媒体
派生结果WAV 与手动导出的文件按转换或导出规则保存,与原始 WEM 库分开

在同一个资源库里,字节完全相同的 WEM 只存一份数据。不同版本、皮肤或 ID 可以引用同一对象, 不会因多个可见路径重复占用音频内容的磁盘空间;索引和目录项仍有少量开销。

  • 同 ID 获得新内容时,记录新的摘要;不同版本分别保留实际对应关系。
  • 解包仍须读取实际源文件。BIN 或 ID 没变,不能证明 WEM 内容没变。
  • 共享只按完整原始字节判断,不做听感去重;独立导出的 WAV 或 WEM 副本仍会占用空间。
  • 硬链接路径共享底层内容;编辑前先导出独立副本。库内链接必须位于支持硬链接的同一卷。

索引结构、写入与恢复接口见 资源库 API;用户查找结果目录见 音频文件与输出目录。

验证与适用范围 ​

  • 42 个 WAD 均通过 PyManifest 清单块校验;再次核对 WAD SHA-256。扫描 32,129 个条目,未解决错误为 0。
  • 独立读取 WPK 原始偏移表,复核 4,015 个媒体文件名、ID、边界及实际字节;所有严格换号候选均逐字节复核。BNK 使用 DIDX/DATA 边界检查。
  • 清单校验使用 PyManifest(riotmanifest 2.10.0,提交 a8cd28d2fc72649669ef24fa7e14cea7264ca0a4,Python 3.10);提取使用 Python 3.13、league-tools 1.2.1、zstd 1.5.7.2。
  • 7,615 个类型 4 条目用研究适配的 zstandard 0.25.0 读取连续帧并核对输出长度,全部为 TEX 纹理。此适配没有修改产品依赖或业务代码。
  • 七个年度样本能证明期间发生过换号,不能定位发生在哪个具体补丁,也不能从这些 WAD 单独证明英雄全部玩法、事件逻辑或皮肤均未改动。
  • 结果是 WEM 文件字节层面的证据,不以 WAD/BNK 大小或哈希变化推断音频更新;未扫描全部英雄,未验证所有未知非标准封装。
  • 本次研究的清单校验不进入产品预检;产品仍仅检查资源文件存在。没有修改应用业务代码或执行产品回归测试。

原研究另保留清单、原始 WAD/WEM、完整比较 JSON、相邻版本 CSV 与执行日志。本页从研究报告整理,保留结论、统计口径与可定位的证据,不收录原始客户端文件。