From 48f2137c52100a58d3c53da8feb9248c89aefd01 Mon Sep 17 00:00:00 2001 From: Jaby Date: Sun, 3 Nov 2024 10:31:58 +0000 Subject: [PATCH] Support auto names for the VAG files --- src/Tools/psxfileconv/src/audio/my_vag/mod.rs | 29 +++++++++++++++++-- src/Tools/psxfileconv/src/main.rs | 6 ++-- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/Tools/psxfileconv/src/audio/my_vag/mod.rs b/src/Tools/psxfileconv/src/audio/my_vag/mod.rs index dcbb722d..c86063ed 100644 --- a/src/Tools/psxfileconv/src/audio/my_vag/mod.rs +++ b/src/Tools/psxfileconv/src/audio/my_vag/mod.rs @@ -1,10 +1,16 @@ pub mod types; +use clap::Args; use std::io::Write; use tool_helper::{Error, Input}; use types::{LPC, MonoADPCMIterator, VAGADPCM, VAGHeader}; -pub fn convert(input: Input, output: &mut dyn Write) -> Result<(), Error> { +#[derive(Args)] +pub struct Arguments { + name: Option +} + +pub fn convert(args: Arguments, output_file_path: &Option, input: Input, output: &mut dyn Write) -> Result<(), Error> { let mut wav_file = hound::WavReader::new(input)?; let wav_header = wav_file.spec(); @@ -13,7 +19,7 @@ pub fn convert(input: Input, output: &mut dyn Write) -> Result<(), Error> { let vagadpcm_samples = VAGHeader::expected_vagadpcm_samples(wav_file.len()) + 1; let mut lpc = LPC::empty(); - tool_helper::raw::write_raw(output, &VAGHeader::create(vagadpcm_samples, wav_header.sample_rate, "Planschi")?)?; + tool_helper::raw::write_raw(output, &VAGHeader::create(vagadpcm_samples, wav_header.sample_rate, &get_name_for_file_header(args.name, output_file_path))?)?; for adpcm_sample in MonoADPCMIterator::create(wav_file.samples::()) { let (vagadpcm, new_lpc) = VAGADPCM::create(adpcm_sample?, lpc); tool_helper::raw::write_raw(output, &vagadpcm)?; @@ -37,4 +43,23 @@ fn validate(wav_header: &hound::WavSpec) -> Result<(), Error> { } Ok(()) +} + +fn get_name_for_file_header(name: Option, output_file_path: &Option) -> String { + if let Some(name) = name { + return name; + } + + if let Some(output_file_path) = output_file_path { + if let Some(file_name) = output_file_path.file_name() { + let mut string = file_name.to_string_lossy().to_string(); + + if let Some(idx) = string.rfind('.') { + string.replace_range(idx.., ""); + } + return string; + } + } + + return "".to_owned(); } \ No newline at end of file diff --git a/src/Tools/psxfileconv/src/main.rs b/src/Tools/psxfileconv/src/main.rs index 6b0fa647..25044c5a 100644 --- a/src/Tools/psxfileconv/src/main.rs +++ b/src/Tools/psxfileconv/src/main.rs @@ -24,7 +24,7 @@ enum SubCommands { // === Internal Commands === Nothing, SimpleTIM(reduced_tim::Arguments), - MyVAG, + MyVAG(my_vag::Arguments), // === External Commands === VAG(vag::Arguments), @@ -36,7 +36,7 @@ impl SubCommands { match self { SubCommands::Nothing => false, SubCommands::SimpleTIM(_) => false, - SubCommands::MyVAG => false, + SubCommands::MyVAG(_) => false, SubCommands::VAG(_) => true, SubCommands::XA(_) => true @@ -62,7 +62,7 @@ fn run_internal_conversion(cmd: CommandLine) -> Result<(), Error> { match cmd.sub_command { SubCommands::Nothing => nothing::copy(&mut input, dst_buffer), SubCommands::SimpleTIM(args) => reduced_tim::convert(args, input, dst_buffer), - SubCommands::MyVAG => audio::my_vag::convert(input, dst_buffer), + SubCommands::MyVAG(args) => audio::my_vag::convert(args, &cmd.output_file, input, dst_buffer), _ => Err(Error::from_str("External functions can not be called for internal conversion")) } };