lainTSX/scripts/extract/extract_voice.mjs

53 lines
1.3 KiB
JavaScript
Raw Normal View History

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" }
);
2021-03-05 15:14:31 +00:00
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")
);
2021-03-05 15:14:31 +00:00
let data = voice_data.slice(
voice_file.offset,
voice_file.offset + voice_file.size
);
writeFileSync(tempfile, data);
2021-03-05 15:14:31 +00:00
if (["BYA.WAV", "BYO.WAV", "BYU.WAV"].includes(voice_file.original_name)) {
spawnSync("ffmpeg", ["-i", tempfile, outfile]);
2021-03-05 15:14:31 +00:00
} else {
spawnSync("ffmpeg", [
"-sample_rate",
22050,
"-f",
"s16le",
"-i",
tempfile,
outfile,
], {stdio:'inherit'});
2021-03-05 15:14:31 +00:00
}
}
}