lainTSX/scripts/extract/extract_voice.mjs

36 lines
1.1 KiB
JavaScript

import { FileWriter } from "wav";
import { execSync } from "child_process";
import { readFileSync, mkdirSync, writeFileSync } from "fs";
import { join } from "path";
export function extract_voice(tempdir, jpsxdec_jar, disc1_index) {
execSync(
`java -jar ${jpsxdec_jar} -x "${disc1_index}" -i VOICE.BIN -dir "${tempdir}"`,
{ stdio: "inherit" }
);
const voice_files = JSON.parse(readFileSync("voice.json"));
let voice_data = readFileSync(join(tempdir, "VOICE.BIN"));
let output_folder = join("..", "..", "src", "static", "voice");
mkdirSync(output_folder, { recursive: true });
for (let voice_file of voice_files) {
let path = join(output_folder, voice_file.translated_name);
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();
}
}
}