mirror of
https://github.com/iluvcapra/bwavfile.git
synced 2025-12-31 08:50:44 +00:00
Changed audio_frame_reader interface
to hide RawChunkReader
This commit is contained in:
@@ -7,6 +7,7 @@ use byteorder::ReadBytesExt;
|
|||||||
use super::fmt::{WaveFmt};
|
use super::fmt::{WaveFmt};
|
||||||
use super::errors::Error;
|
use super::errors::Error;
|
||||||
use super::CommonFormat;
|
use super::CommonFormat;
|
||||||
|
use super::raw_chunk_reader::RawChunkReader;
|
||||||
|
|
||||||
/// Read audio frames
|
/// Read audio frames
|
||||||
///
|
///
|
||||||
@@ -14,12 +15,12 @@ use super::CommonFormat;
|
|||||||
/// bitstream having a format specified by `format`.
|
/// bitstream having a format specified by `format`.
|
||||||
///
|
///
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct AudioFrameReader<R: Read + Seek> {
|
pub struct AudioFrameReader<'a, R: Read + Seek> {
|
||||||
inner : R,
|
inner : RawChunkReader<'a,R>,
|
||||||
format: WaveFmt
|
format: WaveFmt
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R: Read + Seek> AudioFrameReader<R> {
|
impl<'a, R: Read + Seek> AudioFrameReader<'a, R> {
|
||||||
|
|
||||||
/// Create a new `AudioFrameReader`
|
/// Create a new `AudioFrameReader`
|
||||||
///
|
///
|
||||||
@@ -29,7 +30,7 @@ impl<R: Read + Seek> AudioFrameReader<R> {
|
|||||||
/// parameter to confirm the `block_alignment` law is fulfilled
|
/// parameter to confirm the `block_alignment` law is fulfilled
|
||||||
/// and the format tag is readable by this implementation (only
|
/// and the format tag is readable by this implementation (only
|
||||||
/// format 0x01 is supported at this time.)
|
/// format 0x01 is supported at this time.)
|
||||||
pub fn new(inner: R, format: WaveFmt) -> Self {
|
pub fn new(inner: RawChunkReader<'a, R>, format: WaveFmt) -> Self {
|
||||||
assert!(format.block_alignment * 8 == format.bits_per_sample * format.channel_count,
|
assert!(format.block_alignment * 8 == format.bits_per_sample * format.channel_count,
|
||||||
"Unable to read audio frames from packed formats: block alignment is {}, should be {}",
|
"Unable to read audio frames from packed formats: block alignment is {}, should be {}",
|
||||||
format.block_alignment, (format.bits_per_sample / 8 ) * format.channel_count);
|
format.block_alignment, (format.bits_per_sample / 8 ) * format.channel_count);
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ impl<R: Read + Seek> WaveReader<R> {
|
|||||||
/**
|
/**
|
||||||
* Create an `AudioFrameReader` for reading each audio frame.
|
* Create an `AudioFrameReader` for reading each audio frame.
|
||||||
*/
|
*/
|
||||||
pub fn audio_frame_reader(&mut self) -> Result<AudioFrameReader<RawChunkReader<R>>, ParserError> {
|
pub fn audio_frame_reader(&mut self) -> Result<AudioFrameReader<R>, ParserError> {
|
||||||
let format = self.format()?;
|
let format = self.format()?;
|
||||||
let audio_chunk_reader = self.chunk_reader(DATA_SIG, 0)?;
|
let audio_chunk_reader = self.chunk_reader(DATA_SIG, 0)?;
|
||||||
Ok(AudioFrameReader::new(audio_chunk_reader, format))
|
Ok(AudioFrameReader::new(audio_chunk_reader, format))
|
||||||
@@ -349,3 +349,4 @@ impl<R:Read+Seek> WaveReader<R> { /* Private Implementation */
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -157,3 +157,20 @@ fn test_channels_stereo_no_fmt_extended() {
|
|||||||
assert_eq!(channels[0].speaker,ChannelMask::FrontLeft);
|
assert_eq!(channels[0].speaker,ChannelMask::FrontLeft);
|
||||||
assert_eq!(channels[1].speaker,ChannelMask::FrontRight);
|
assert_eq!(channels[1].speaker,ChannelMask::FrontRight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #[test]
|
||||||
|
// fn test_sample_reader_type() {
|
||||||
|
// // Issue #6
|
||||||
|
// use bwavfile::WaveFmt;
|
||||||
|
// use bwavfile::AudioFrameReader;
|
||||||
|
|
||||||
|
// fn from_wav_filename(wav_filename: &str) -> Result<(WaveFmt, AudioFrameReader<std::fs::File>), ()> {
|
||||||
|
// if let Ok(mut r) = WaveReader::open(&wav_filename) {
|
||||||
|
// let format = r.format().unwrap();
|
||||||
|
// let frame_reader = r.audio_frame_reader().unwrap();
|
||||||
|
// Ok((format, frame_reader))
|
||||||
|
// } else {
|
||||||
|
// Err(())
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
Reference in New Issue
Block a user