NodeJS二进制合并
Node.js 批量文件合并code
cnblogs @ Orcim
本 文主要介绍使用 Node 进行 ACB 序列文件(Atom CueSheet Binary,编译 AtomCueSheet 二进制文件)进行合并的方法。
ACB 文件
ACB文件是日本一家叫做 CRI Middleware 的公司开发的音频包文件,包含ADX或ADX2格式的音频流。主要用于游戏中的声音特效以及背景音乐。其广泛用于 Unity 开发的各种游戏之中,游戏厂商将音频转换为这种二进制的音频文件,再将其打包成 Unity 的资源包(Assets),也就是游戏的资源更新包。而游戏厂商有时将一个 ACB 文件分割成多个二进制文件,这样就需要将其先合并。
ACB文件可以用 CRI Atom Craft 进行查看以及编辑,当然,这个软件也是由这家公司所开发。
关于ACB文件以及ADX2的更多详情,参见官方文档。感觉这种音频文件挺有趣的。
对于我为什么想写此篇博文,以及我为什么要用Node来做ACB文件合并这件事,只是因为偶然在提取游戏资源时碰到了ACB音频文件(起初我还并不知道这是音频流)没事干,折腾了一下,撰文记录我一个晚上的研究成果。
以上是这类二进制音频流文件的科普,以下正文。
ACB文件序列一览
下图是我用UnityStudio_x64从某个游戏中的Assets文件中提取出来的ACB源文件:

一段 BGM 被分割成了总共 41 个文件,提取出来的文件后缀是 .txt,文件是二进制的,用记事本打开会乱码。需要将这些文件合并成一个 ACB 文件。文件名是按规律来排列的:bgm133-[ Number ].acb.txt
思路
1)首先先读取这些 .acb.txt 文件的二进制数据,因为文件有按照数字编号排列,所以要按顺序进行读取并合并。
2)接下来就是进行读文件的操作,得到文件的 Buffer,一个类数组的数据
3)然后将这些文件的 Buffer 合并,这一步类似于多个数组进行 concat 的操作
4)最后一步依据合并得到的数组创建一个 Buffer 对象,例:_buf_,NodeJs 中是用 var buf = Buffer.from( _buf_ ),再写文件 fs.writeFileSync("unite.acb", buf)
方案实施
具体流程,详见代码 unite.JS:
使用方法
将unite.js放在ACB序列文件所在的根目录下
打开命令行工具,运行 unite.js:可以将js文件直接拖到命令行窗口中运行。

合并成功

合并后目录下会合并写好一个unite.acb文件,文件可以通过 VGMToolbox 工具进行提取,转换为 .hca 音频,foobar2000 安装 VGMStream Decoder 插件后(点击下载,解压后双击安装),即可播放 .hca 音频或进行格式转换


结束语
使用工具:NodeJS、UnityStudio、VGMToolbox、foobar2000、VGMStream Decoder
NodeJS二进制合并的更多相关文章
- NodeJS二进制包安装和快捷键配置(适用于U盘版安装配置)
首先下载NodeJS二进制安装包:https://nodejs.org/dist/v10.15.3/node-v10.15.3-win-x64.zip 在D盘新建NodeJS文件夹,解压node-v1 ...
- centos安装nodejs二进制包
1.下载nodejs的二进制包 wget https://nodejs.org/dist/v6.3.1/node-v6.3.1-linux-x64.tar.xz 2.解压下载的安装包 tar xf n ...
- centos7 nodejs二进制安装
1.安装文件下载 1.下载地址:http://nodejs.cn/download/ 2.选择一个合适的版本下载 2.安装步骤 1.将安装包上传到指定位置(我习惯放到:/usr/local/appli ...
- C# 版 flvmerge:快速合并多个flv文件
网上的视频很多都是分片的flv文件,怎么把他们合为一体呢?GUI工具就不考虑了,不适合批量执行,不适合在后台运行.有没有命令行工具或库可以实现呢? ffmpeg 提供了一个方法: (1)先把flv文件 ...
- AngularJS结合RequireJS做文件合并压缩的那些坑
我在项目使用了AngularJS框架,用RequireJS做异步模块加载(AMD),在做文件合并压缩时,遇到了一些坑,有些只是解决了,但不明白原因. 那些坑 1. build.js里面的paths必须 ...
- 安装nodejs搭建ghost个人博客
记录一下今天在linux下折腾nodejs的过程,相互学习: (不知道为什么用源代码安装,调用npm的时候老是会出现找不到npmlog的 错误,后来换用下了个二进制 来搞,假设那个牛牛知道为什么.希望 ...
- Linux_CentOS软件安装调试 源代码包编译安装和 二进制包配置
Linux 下源代码(C 语言)如何编译(安装) 1. 先安装源代码编译的软件 gcc,make,openssl 如下: yum install -y gcc make gcc-c++ openssl ...
- CentOS7编译安装NodeJS
概述 在CentOS7下采用编译NodeJS二进制源码包的方式安装NodeJS 下载NodeJS安装包 你可以先下载NodeJS二进制源码安装包文件然后上传到CentOS系统,也可以通过wget命令直 ...
- Linux系统下安装NodeJS
下载NodeJS二进制压缩包 去NodeJS官网https://nodejs.org/zh-cn/,下载二进制压缩包,进入下载页面之后你将看到很多下载选项: 源码不包含bin目录,不是可运行的应用程序 ...
随机推荐
- synchronized的实现原理——对象头解密
前言 并发编程式Java基础,同时也是Java最难的一部分,因为与底层操作系统和硬件息息相关,并且程序难以调试.本系列就从synchronized原理开始,逐步深入,领会并发编程之美. 正文 基础稍微 ...
- Urule开源版系列4——Core包核心接口之规则解析过程
Urule运行规则文件,是如何进行的,通过一个请求doTest来探一下 com.bstek.urule.console.servlet.respackage.PackageServletHandler ...
- GENYMOTION问题之an error occurred while deploying a file install_failed_no_machine_abis
GENYMOTION问题之an error occurred while deploying a file install_failed_no_machine_abis 出现上面错误,看网上有一种解决 ...
- lidar激光雷达领域的分类
lidar领域可以按分为以下五方面: 激光雷达系统与装备 激光雷达系统与开发 激光雷达光源 激光雷达探测 多光谱激光雷达系统 单光子激光雷达系统 低成本RGB-D距离传感器 激光雷达元器件及装备等 激 ...
- 当前PageOffice需要获取更高版本的授权才能正常运行。(Error:0x0005)
说明当前程序的是pagoeffice3说明当前程序的是pagoeffice3.0的程序,而序列号用的是2.0的序列号,或者说是当前程序是4.0的程序,而序列号用的是3.0的序列号.即当前用的是高版 ...
- Python实践项目2
#南昌理工学院人工智能学院实验室WORKSHOP实践项目 import time import random SCRIPT_NPC_SCHOOL_SISTER = ['你好!', '你好!', '你是 ...
- PIoU Loss:倾斜目标检测专用损失函数,公开超难倾斜目标数据集Retail50K | ECCV 2020 Spotlight
论文提出从IoU指标延伸来的PIoU损失函数,能够有效地提高倾斜目标检测场景下的旋转角度预测和IoU效果,对anchor-based方法和anchor-free方法均适用.另外论文提供了Retail5 ...
- Nginx及其架构设计
1.1. 什么是 Nginx Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/P ...
- 网易云uwp
起因 昨天晚上折腾Ubuntu 莫名其妙任务栏的网易云音乐图标消失了,今早才发现原来是更新了. but,这个更新真的是让人一言难尽 upw更新一下直接变成了桌面版? 折腾 重新装回老版uwp 网易云U ...
- 关于java中循环的学习
switch 值是固定的 效率高语法:switch (表达式) { case 常量 1: 语句; break; case 常量 2: 语句; break; … default: 语句; break;} ...