mirror of
https://github.com/iluvcapra/bwavfile.git
synced 2025-12-31 08:50:44 +00:00
Read trait
This commit is contained in:
45
src/fmt.rs
45
src/fmt.rs
@@ -379,49 +379,4 @@ impl WaveFmt {
|
||||
x => panic!("Channel count ({}) was illegal!", x),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
trait ReadWavAudioData {
|
||||
fn read_i32_frames(&mut self, format: WaveFmt, into: &mut [i32]) -> Result<usize,std::io::Error>;
|
||||
fn read_f32_frames(&mut self, format: WaveFmt, into: &mut [f32]) -> Result<usize,std::io::Error>;
|
||||
}
|
||||
|
||||
impl<T> ReadWavAudioData for T where T: std::io::Read {
|
||||
|
||||
fn read_i32_frames(&mut self, format: WaveFmt, into: &mut [i32]) -> Result<usize, std::io::Error> {
|
||||
assert!(into.len() % format.channel_count as usize == 0);
|
||||
|
||||
for n in 0..(into.len()) {
|
||||
into[n] = match (format.valid_bits_per_sample(), format.bits_per_sample) {
|
||||
(0..=8,8) => self.read_u8().unwrap() as i32 - 0x80_i32, // EBU 3285 §A2.2
|
||||
(9..=16,16) => self.read_i16::<LittleEndian>().unwrap() as i32,
|
||||
(10..=24,24) => self.read_i24::<LittleEndian>().unwrap(),
|
||||
(25..=32,32) => self.read_i32::<LittleEndian>().unwrap(),
|
||||
(b,_)=> panic!("Unrecognized integer format, bits per sample {}, channels {}, block_alignment {}",
|
||||
b, format.channel_count, format.block_alignment)
|
||||
}
|
||||
}
|
||||
|
||||
todo!()
|
||||
}
|
||||
fn read_f32_frames(&mut self, format: WaveFmt, into: &mut [f32]) -> Result<usize, std::io::Error> {
|
||||
assert!(into.len() % format.channel_count as usize == 0);
|
||||
todo!()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
trait WriteWavAudioData {
|
||||
fn write_i32_frames(&mut self, format: WaveFmt, from: &[i32]) -> Result<usize, std::io::Error>;
|
||||
fn write_f32_frames(&mut self, format: WaveFmt, from: &[f32]) -> Result<usize, std::io::Error>;
|
||||
}
|
||||
|
||||
impl<T> WriteWavAudioData for T where T: std::io::Write {
|
||||
|
||||
fn write_i32_frames(&mut self, format: WaveFmt, _: &[i32]) -> Result<usize, std::io::Error> {
|
||||
todo!()
|
||||
}
|
||||
fn write_f32_frames(&mut self, format: WaveFmt, _: &[f32]) -> Result<usize, std::io::Error> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user