From 49df60562a64eddae6982d1375fcf52485f22e8d Mon Sep 17 00:00:00 2001 From: elliotcraft79 <16109561+elliotcraft79@users.noreply.github.com> Date: Sat, 6 Mar 2021 01:44:31 +1030 Subject: [PATCH] fix voice extraction --- package-lock.json | 102 ++++++++++++++++++++++++++++++ package.json | 3 +- scripts/extract/extract_voice.mjs | 24 +++++-- 3 files changed, 122 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index b166262..b43f734 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4208,6 +4208,28 @@ "isarray": "^1.0.0" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -15770,6 +15792,32 @@ } } }, + "stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "dev": true, + "requires": { + "debug": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, "stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", @@ -17098,6 +17146,60 @@ } } }, + "wav": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz", + "integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==", + "dev": true, + "requires": { + "buffer-alloc": "^1.1.0", + "buffer-from": "^1.0.0", + "debug": "^2.2.0", + "readable-stream": "^1.1.14", + "stream-parser": "^0.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, "wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", diff --git a/package.json b/package.json index 6fc1e29..d151ebb 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ }, "homepage": ".", "devDependencies": { - "eslint-loader": "^4.0.2" + "eslint-loader": "^4.0.2", + "wav": "^1.0.2" } } diff --git a/scripts/extract/extract_voice.mjs b/scripts/extract/extract_voice.mjs index 55c83a5..6c5170c 100644 --- a/scripts/extract/extract_voice.mjs +++ b/scripts/extract/extract_voice.mjs @@ -1,6 +1,6 @@ import { FileWriter } from "wav"; import { execSync } from "child_process"; -import { readFileSync, existsSync, mkdirSync } from "fs"; +import { readFileSync, existsSync, mkdirSync, writeFileSync } from "fs"; import { join } from "path"; export function extract_voice(tempdir, jpsxdec_jar, disc1_index) { @@ -8,18 +8,30 @@ export function extract_voice(tempdir, jpsxdec_jar, disc1_index) { `java -jar ${jpsxdec_jar} -x "${disc1_index}" -i VOICE.BIN -dir "${tempdir}"`, { stdio: "inherit" } ); - const voice_files = JSON.parse(readFileSync('voice.json')) + const voice_files = JSON.parse(readFileSync("voice.json")); let voice_data = readFileSync(join(tempdir, "VOICE.BIN")); let output_folder = join("..", "..", "src", "static", "voice"); - if(!existsSync(output_folder)) { + if (!existsSync(output_folder)) { mkdirSync(output_folder); } for (let voice_file of voice_files) { let path = join(output_folder, voice_file.translated_name); - let wav_file = new FileWriter(path, {sampleRate: 22050, channels:1, bitDepth: 16}); - wav_file.write(voice_data.slice(voice_file.offset, voice_file.offset + voice_file.size)); - wav_file.end(); + let data = voice_data.slice( + voice_file.offset, + voice_file.offset + voice_file.size + ); + if (["BYA.WAV", "BYO.WAV", "BYU.WAV"].includes(voice_file.original_name)) { + writeFileSync(path, data); + } else { + let wav_file = new FileWriter(path, { + sampleRate: 22050, + channels: 1, + bitDepth: 16, + }); + wav_file.write(data); + wav_file.end(); + } } }