# GetOWotWSound **Repository Path**: nextall/GetOWotWSound ## Basic Information - **Project Name**: GetOWotWSound - **Description**: 获取游戏里的音频、音效文件。批量处理 + 分类收集。 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-05-30 - **Last Updated**: 2025-01-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: JavaScript, Nodejs ## README # GetOWotWSound

## 简介 ### 工具功能 - 获取游戏里的音频、音效文件。批量处理 + 分类收集。 ### 运行环境 - 使用 javascript 脚本,nodejs 运行环境。不依赖任何第三方库,仅仅使用原生 node(建议使用 18x lts 版本)。 ### 声明 - 本项目不会有一行删除文件,目录的代码。只会新建目录,生成文件(放心食用) > 使用 javascript es6 面向对象。但是我没有对象(悲)

- 解压出来的所有资源都属于游戏本身的,不允许进行售卖哦。 --- ## 执行逻辑(概要) > 读取 SoundbanksInfo.xml 或者 SoundbanksInfo.json(都一样的),因为使用 nodejs,所以选择读取 json 文件,因为 nodejs 内置了 json 解析器 ### 获取 ReferencedStreamedFiles 文件(一些音乐、音效) - 获取 遍历 StreamedFiles 节点里的 file 对象 - 每一个 file 对象对应着一个 wem 文件 1. `Id` 可选项 1. `Language` 这里没有使用到 1. `ShortName` 此音频的分类、名称。 1. `Path` 这里没有使用到 - 通过 id 获取对应 wem 文件,使用工具 ww2ogg.exe 将 wem 转换成 ogg 格式 > 转换成 ogg 成功率不是 100%,虽然转换出来了,但是有可能是损坏的 - 使用 ShortName 使用全类名的方式将文件保存至目标目录 - 再次通过 revorb.exe 再次执行生成的 ogg 文件,不然会出现音频无法拖动的 bug,但是可以正常播放 --- ### 获取 IncludedMemoryFiles 文件(多数是音效) - 遍历 SoundBanks 节点里的 SoundBank 对象 - 获取到一个 SoundBank,使用 SoundBank.ShortName(唯一的)名称新建目录 `ShortNamePath` - 使用 Path 获取对应的 bnk 文件 - 使用工具 bnkextr.exe 解压 bnk 文件,将解压出来所有的 wem 文件存放在 `ShortNamePath` 目录下。 - 获取 `ShortNamePath` 目录所有的 wem 文件,保存至 `wem 数组`。 - 遍历 IncludedMemoryFiles 数组,以此数组的索引,作为 `wem 数组` 索引(每一个 File)。 - 使用工具 ww2ogg.exe 将 对应的 wem 转换成 ogg 格式。 - 转换时以 File.ShortName 进行全类名分类保存 > wem 文件从 `wem 数组` 中顺序获取 > bnkextr.exe 解压出来的 wem 文件,在转换成 ogg 时。成功率不会是 100%。转换失败。即不会生成 ogg 文件。也就是 done 为 false - 将此转换 ogg 文件,保存至 buildPath 的目录内 - 通过 revorb.exe 再次执行生成的 ogg 文件,不然会出现音频无法拖动的 bug,但是可以正常播放 ---- ### 实体类映射 Model json ```json { "Id": "77404", "Language": "SFX", "ShortName": "a\\b\\c\\name.wav", "Path": "SFX\\a\\b\\c\\name.wav_7BACA535.wem" } ``` Or xml ```xml a\\b\\c\\name.wav a\\b\\c\\name.wav_99B043E3.wem ``` --- ## 说明 - 通过工具(ww2ogg.exe)将本地的 wem 文件转换成 ogg 文件时,所有文件基本全部成功。重名的文件,也想保留的话建议把 `id` 打开,否则直接覆盖。 - 但是如果是 bnk 文件解压出来的 wem 文件,再通过工具(ww2ogg.exe)将 wem 文件转换成 ogg 文件时成功率不是 100% 的。也就是说不会生成 ogg 文件(未解决) ### 此项目使用到的工具 1. `bnkextr.exe` 将 bnk 文件解压成 wem 文件。下载:https://github.com/eXpl0it3r/bnkextr/releases 2. SoundMod 下载:http://www.mediafire.com/file/en3m7mctkfedeju/soundMod.zip/file - `SoundMod/tools/ww2ogg.exe` - `SoundMod/tools/revorb.exe` - `SoundMod/tools/packed_codebooks_aoTuV_603.bin` 3. 以防万一,已将工具内置项目中了,位于 `SoundMod` 目录中 ### 运行配置说明 数值参数都移植至命令参数,配置文件中只包含静态配置(v2.0.0) ### 详细看 [wiki.md](https://github.com/thisNames/GetOWotWSound/blob/master/wiki.md) 、[wiki](https://github.com/thisNames/GetOWotWSound/wiki) ### 简单使用教程视频:https://www.bilibili.com/video/BV1RSCxY2Euj --- ## 结束 END - 同步运行,也就是一个一个文件解析分类,只有上一个完成,才会执行下一个。虽然慢了点,毕竟文件太多了(所有的运行完毕会生成 20000 左右文件),实测大概需要 1000000 ms 左右(bnk)。400000 ~ 500000 ms(wem)。 - 主要的耗时任务就是将 bnk 解压和将 wem 转换成 ogg 文件。 - 也有可能是我的电脑比较垃圾(悲) 1. 疯狂写`注释`,`注`到昏撅 1. 疯狂`debug`,`d`到昏撅 1. 疯狂调试`日志`,日……`志`到昏撅

###### 觉得有用的记得点点 `Star` !!! >(脸红.jpg) --- ## [O - R - I](https://www.orithegame.com/) ```text ⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ " ' O ' '' ⠀⠀⠀⠀⠀⣷⣀⠀⠀⠀⠀⠀⣤⡀⠲⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⢻⣿⣿⣤⡀⠀⠀⠀⣛⣿⣾⣿⣿⣶⣶⣦⣤⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣇⢇⢀⣴⣿⣿⣿⣿⣤⠊⣿⣦⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠙⢿⣯⣧⣷⢷⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⣤⣿⣧⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⡿⠉⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⣤⣿⣿⣿⣿⣿⣿⡿⠋⠁⠀⣤⣿⣿⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠒⠿⢿⣿⣿⠿⠿⠛⠉⢀⣤⣤⣶⣿⣿⣿⣿⣯⠁⠀⠀⢀⣾⣿⣷⢆⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣿⣿⣿⣿⣿⣿⣯⣾⠋⠿⣷⣤⣤⣿⣿⣷⣷⣧⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⢏⣿⣿⣿⣿⣦⢄⢈⢻⣿⣿⣿⡿⠁⠀⠀ ⠀⠀⠀⠀⠀⠀⢠⢔⠸⣿⣿⣿⣿⣿⡀⢫⣿⣿⣿⣿⣎⣇⠇⠛⠋⠁⠀⠀⠀⠀ ⠀⠀⠀⢀⢆⠃⠀⠀⠀⠻⣟⣿⣿⠛⠁⢀⣠⣾⣿⣿⣟⣧⢀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⢠⣏⠀⠀⠀⠀⠀⠀⠀⠈⠀⢀⣤⣾⣿⠟⠋⢀⣯⠓⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⢸⣗⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⠁⠀⠀⠀⢻⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠻⣷⣦⣆⣦⣦⣦⣦⣶⣶⣮⣯⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠉⠉⢹⡿⣿⣶⠀⠀⢀⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⠟⠀⢈⣿⣿ ⠻⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⣠⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⠛⠀ ----------------------------------- ---------------------- ----------- --- ```