From 0b2b45d86f729c4088d10048c96eb2b8ffa196a1 Mon Sep 17 00:00:00 2001 From: jaby Date: Thu, 17 Oct 2024 22:15:03 +0200 Subject: [PATCH] Restructre writing of VAG file --- src/Tools/psxfileconv/src/audio/my_vag/mod.rs | 20 ++++++------------- .../psxfileconv/src/audio/my_vag/types.rs | 9 ++++++--- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/Tools/psxfileconv/src/audio/my_vag/mod.rs b/src/Tools/psxfileconv/src/audio/my_vag/mod.rs index cce6664e..1a34f5e9 100644 --- a/src/Tools/psxfileconv/src/audio/my_vag/mod.rs +++ b/src/Tools/psxfileconv/src/audio/my_vag/mod.rs @@ -9,25 +9,17 @@ pub fn convert(input: Input, output: &mut dyn Write) -> Result<(), Error> { let wav_header = wav_file.spec(); validate(&wav_header)?; - let mut samples = Vec::new(); - let mut sample_count = 0; + + let vagadpcm_samples = VAGHeader::expected_vagadpcm_samples(wav_file.len()) + 1; + let mut lpc = LPC::empty(); - let mut lpc = LPC::empty(); + tool_helper::raw::write_raw(output, &VAGHeader::create(vagadpcm_samples, wav_header.sample_rate, "Planschi"))?; for adpcm_sample in MonoADPCMIterator::create(wav_file.samples::()) { let (vagadpcm, new_lpc) = VAGADPCM::create(adpcm_sample?, lpc); - samples.push(vagadpcm); + tool_helper::raw::write_raw(output, &vagadpcm)?; lpc = new_lpc; - - sample_count += 1; - } - samples.push(VAGADPCM::end()); - sample_count += 1; - - // TODO: Restructure - tool_helper::raw::write_raw(output, &VAGHeader::create(sample_count, wav_header.sample_rate, "Planschi"))?; - for sample in samples { - tool_helper::raw::write_raw(output, &sample)?; } + tool_helper::raw::write_raw(output, &VAGADPCM::end())?; Ok(()) } diff --git a/src/Tools/psxfileconv/src/audio/my_vag/types.rs b/src/Tools/psxfileconv/src/audio/my_vag/types.rs index dd2e4250..26199799 100644 --- a/src/Tools/psxfileconv/src/audio/my_vag/types.rs +++ b/src/Tools/psxfileconv/src/audio/my_vag/types.rs @@ -20,10 +20,13 @@ impl VAGHeader { const RESERVED: u32 = 0; const RESERVED2: [u8; 12] = [0; 12]; - // TODO: Ensure big endianes - pub fn create(vagadpcm_samples: usize, sampling_frequency: u32, _name: &str) -> VAGHeader { + pub fn expected_vagadpcm_samples(adpcm_samples: u32) -> u32 { + ((adpcm_samples as usize + (VAGADPCM::ADPCM_SAMPLES_PER_VAGADPCM - 1))/VAGADPCM::ADPCM_SAMPLES_PER_VAGADPCM) as u32 + } + + pub fn create(vagadpcm_samples: u32, sampling_frequency: u32, _name: &str) -> VAGHeader { // TODO: Support naming feature - let data_size = (vagadpcm_samples*VAGADPCM::SIZE) as u32; + let data_size = vagadpcm_samples*VAGADPCM::SIZE as u32; let name = ['A' as u8; 16]; VAGHeader{