2021-03-19 15:01:16 +00:00
|
|
|
import { spawnSync } from "child_process";
|
2021-03-07 16:10:41 +00:00
|
|
|
import { readFileSync, mkdirSync, writeFileSync } from "fs";
|
2021-03-05 14:44:33 +00:00
|
|
|
import { join } from "path";
|
|
|
|
|
2021-03-19 15:01:16 +00:00
|
|
|
export function extract_voice(tempdir, jpsxdec_jar) {
|
|
|
|
spawnSync(
|
|
|
|
"java",
|
|
|
|
[
|
|
|
|
"-jar",
|
|
|
|
jpsxdec_jar,
|
|
|
|
"-x",
|
|
|
|
join(tempdir, "disc1.idx"),
|
|
|
|
"-i",
|
|
|
|
"VOICE.BIN",
|
|
|
|
"-dir",
|
|
|
|
tempdir,
|
|
|
|
],
|
2021-03-05 14:44:33 +00:00
|
|
|
{ stdio: "inherit" }
|
|
|
|
);
|
2021-03-05 15:14:31 +00:00
|
|
|
const voice_files = JSON.parse(readFileSync("voice.json"));
|
2021-03-05 14:44:33 +00:00
|
|
|
|
|
|
|
let voice_data = readFileSync(join(tempdir, "VOICE.BIN"));
|
|
|
|
let output_folder = join("..", "..", "src", "static", "voice");
|
2021-03-07 16:10:41 +00:00
|
|
|
|
|
|
|
mkdirSync(output_folder, { recursive: true });
|
2021-03-05 14:44:33 +00:00
|
|
|
|
|
|
|
for (let voice_file of voice_files) {
|
2021-03-19 15:01:16 +00:00
|
|
|
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
|
|
|
|
);
|
2021-03-19 15:01:16 +00:00
|
|
|
writeFileSync(tempfile, data);
|
2021-03-05 15:14:31 +00:00
|
|
|
if (["BYA.WAV", "BYO.WAV", "BYU.WAV"].includes(voice_file.original_name)) {
|
2021-03-19 15:01:16 +00:00
|
|
|
spawnSync("ffmpeg", ["-i", tempfile, outfile]);
|
2021-03-05 15:14:31 +00:00
|
|
|
} else {
|
2021-03-19 15:01:16 +00:00
|
|
|
spawnSync("ffmpeg", [
|
|
|
|
"-sample_rate",
|
|
|
|
22050,
|
|
|
|
"-f",
|
|
|
|
"s16le",
|
|
|
|
"-i",
|
|
|
|
tempfile,
|
|
|
|
outfile,
|
|
|
|
], {stdio:'inherit'});
|
2021-03-05 15:14:31 +00:00
|
|
|
}
|
2021-03-05 14:44:33 +00:00
|
|
|
}
|
|
|
|
}
|