1 Star 1 Fork 0

pp/bnk

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
bnk.js 2.09 KB
一键复制 编辑 原始数据 按行查看 历史
pp 提交于 2024-11-20 18:21 . 初代
const fs = require('fs');
const path = require('path');
const { exec } = require('child_process');
// 配置工具路径
const vgmstreamW64 = path.join(__dirname, 'plugin', 'vgmstream-win64', 'vgmstream-cli.exe');
// 配置工作目录
const bnkDirectory = path.join(__dirname, 'bnks'); // .bnk 文件所在目录
const outputDirectory = path.join(__dirname, 'ext'); // 输出目录
// 检查工具是否存在
if (!fs.existsSync(vgmstreamW64) ) {
console.error('请确保 vgmstreamW64 工具已正确安装并配置路径!');
process.exit(1);
}
// 迁移到ext文件
function extractWemFiles(bnkFile) {
const data = fs.readFileSync(bnkFile);
// 假设文件的第 128 字节后是音频数据(具体需根据 .bnk 格式调整)
// const wemDataOffset = 128;
// const wemData = data.slice(wemDataOffset);
// 保存全部data
// 保存为临时 .wem 文件
const wemFilePath = path.join(outputDirectory, `${path.basename(bnkFile, '.bnk')}.bnk`);
fs.writeFileSync(wemFilePath, data);
return wemFilePath;
}
// 将 .wem 转换为 .ogg 的方法
function convertWemToOgg(wemFile) {
// console.log(wemFile)
// 执行 ww2ogg 转换
exec(`"${vgmstreamW64}" "${wemFile}"`, (err, stdout, stderr) => {
if (err) {
console.error(`转换失败: ${stderr}`);
return;
}
fs.unlinkSync(wemFile)
console.log(`转换成功:${wemFile}`)
});
}
// 主函数:处理目录中的所有 .bnk 文件
function processBnkFiles() {
// 检查并创建输出目录
if (!fs.existsSync(outputDirectory)) {
fs.mkdirSync(outputDirectory);
}
// 遍历目录中的所有 .bnk 文件
const bnkFiles = fs.readdirSync(bnkDirectory).filter(file => file.endsWith('.bnk'));
if (bnkFiles.length === 0) {
console.error('未找到任何 .bnk 文件!');
return;
}
bnkFiles.forEach(file => {
const bnkFilePath = path.join(bnkDirectory, file);
const wemFile = extractWemFiles(bnkFilePath);
convertWemToOgg(wemFile);
});
}
// 启动程序
processBnkFiles();
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/pmhw/bnk.git
git@gitee.com:pmhw/bnk.git
pmhw
bnk
bnk
master

搜索帮助