lainTSX/scripts/extract/extract_voice.mjs

52 lines
1.3 KiB
JavaScript

import { spawnSync } from "child_process";
import { readFileSync, mkdirSync, writeFileSync } from "fs";
import { join } from "path";
export function extract_voice(tempdir, jpsxdec_jar) {
spawnSync(
"java",
[
"-jar",
jpsxdec_jar,
"-x",
join(tempdir, "disc1.idx"),
"-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 tempfile = join(tempdir, voice_file.translated_name);
let outfile = join(
output_folder,
voice_file.translated_name.replace("WAV", "mp4")
);
let data = voice_data.slice(
voice_file.offset,
voice_file.offset + voice_file.size
);
writeFileSync(tempfile, data);
if (["BYA.WAV", "BYO.WAV", "BYU.WAV"].includes(voice_file.original_name)) {
spawnSync("ffmpeg", ["-i", tempfile, outfile]);
} else {
spawnSync("ffmpeg", [
"-sample_rate",
22050,
"-f",
"s16le",
"-i",
tempfile,
outfile,
], {stdio:'inherit'});
}
}
}