From e242181b741affb09b7e196a27c90502fc395617 Mon Sep 17 00:00:00 2001 From: Jaby Date: Sat, 9 Nov 2024 22:54:00 +0000 Subject: [PATCH] Update creation of buffers --- .../src/audio/my_xa/raw_audio/error.rs | 4 ---- .../src/audio/my_xa/raw_audio/mod.rs | 19 ++++++++++------ .../src/audio/my_xa/xa_audio/mod.rs | 22 ++++++++++++++++++- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/Tools/psxfileconv/src/audio/my_xa/raw_audio/error.rs b/src/Tools/psxfileconv/src/audio/my_xa/raw_audio/error.rs index 668cbf2d..ee190c34 100644 --- a/src/Tools/psxfileconv/src/audio/my_xa/raw_audio/error.rs +++ b/src/Tools/psxfileconv/src/audio/my_xa/raw_audio/error.rs @@ -23,8 +23,4 @@ pub fn decode(error: SymError) -> Error { pub fn find_track() -> Error { Error::from_str("symphonia error: No audio track located") -} - -pub fn no_buffer_created() -> Error { - Error::from_str("No packets found for XA conversion") } \ No newline at end of file diff --git a/src/Tools/psxfileconv/src/audio/my_xa/raw_audio/mod.rs b/src/Tools/psxfileconv/src/audio/my_xa/raw_audio/mod.rs index a83d0343..f4803f25 100644 --- a/src/Tools/psxfileconv/src/audio/my_xa/raw_audio/mod.rs +++ b/src/Tools/psxfileconv/src/audio/my_xa/raw_audio/mod.rs @@ -10,7 +10,7 @@ use symphonia::core::{ }; use tool_helper::{Error, Input}; -pub type I16Samples = SampleBuffer::; +pub type I16Samples = Vec::; pub struct Settings { frequency: u32, layout: Layout @@ -35,7 +35,8 @@ pub fn load_as_i16_audio(input: Input, settings: Settings) -> Result, mut decoder: Box, settings: Settings, track_id: u32) -> Result { - let mut i16_audio = None; + let mut i16_audio = Vec::new(); + let mut cur_sample = None; loop { // Get the next packet from the media format. @@ -44,7 +45,7 @@ fn decode(mut format: Box, mut decoder: Box, sett Err(err) => { if let SymError::IoError(io_err) = &err { if io_err.kind() == std::io::ErrorKind::UnexpectedEof { - return i16_audio.ok_or_else(error::no_buffer_created); + return Ok(i16_audio); } } return Err(error::next_packet(err)); @@ -61,14 +62,18 @@ fn decode(mut format: Box, mut decoder: Box, sett // Decode the packet into audio samples. let packet = decoder.decode(&packet).map_err(error::decode)?; - if i16_audio.is_none() { + if cur_sample.is_none() { let duration = packet.capacity() as u64; - i16_audio = Some(I16Samples::new(duration, SignalSpec::new_with_layout(settings.frequency, settings.layout))); + cur_sample = Some(SampleBuffer::::new(duration, SignalSpec::new_with_layout(settings.frequency, settings.layout))); } - if let Some(i16_audio) = &mut i16_audio { - i16_audio.copy_interleaved_ref(packet); + if let Some(cur_sample) = &mut cur_sample { + cur_sample.copy_interleaved_ref(packet); + + for sample in cur_sample.samples() { + i16_audio.push(*sample); + } } } } diff --git a/src/Tools/psxfileconv/src/audio/my_xa/xa_audio/mod.rs b/src/Tools/psxfileconv/src/audio/my_xa/xa_audio/mod.rs index 7822fe78..1d661000 100644 --- a/src/Tools/psxfileconv/src/audio/my_xa/xa_audio/mod.rs +++ b/src/Tools/psxfileconv/src/audio/my_xa/xa_audio/mod.rs @@ -20,6 +20,26 @@ pub fn audio_conversion_settings(arguments: &Arguments) -> Settings { Settings::new(frequency, layout) } -pub fn convert(_input: I16Samples, _output: &mut dyn Write, _arguments: &Arguments) -> Result<(), Error> { +pub fn convert(input: I16Samples, _output: &mut dyn Write, arguments: &Arguments) -> Result<(), Error> { + let (samples_per_block, sample_count) = init_values(&input, arguments); + + for (iteration, sampled_id) in (0..sample_count).step_by(samples_per_block).enumerate() { + print!("\rIteration: {}; Sample: {}", iteration, sampled_id); + } + println!(); Err(Error::not_implemented("XA conversion")) +} + +fn init_values(input: &I16Samples, arguments: &Arguments) -> (usize, u32) { + let samples_per_block = match arguments.sample_depth { + super::SampleDepth::Normal => 224, + super::SampleDepth::High => 112, + }; + + let sample_count = match arguments.channels { + super::Channels::Stereo => input.len() / 2, + super::Channels::Mono => input.len(), + }; + + (samples_per_block as usize, sample_count as u32) } \ No newline at end of file