diff --git a/src/audio_frame_reader.rs b/src/audio_frame_reader.rs index edbf58c..c891fda 100644 --- a/src/audio_frame_reader.rs +++ b/src/audio_frame_reader.rs @@ -7,6 +7,8 @@ use byteorder::ReadBytesExt; use super::chunks::WaveFmt; use super::errors::Error; +/// Read samples from a `WaveFileReader` +/// #[derive(Debug)] pub struct AudioFrameReader { inner : R, @@ -14,7 +16,8 @@ pub struct AudioFrameReader { } impl AudioFrameReader { - /// Create a new AudioFrameReader, taking possession of a reader. + + /// Create a new `AudioFrameReader` pub fn new(inner: R, format: WaveFmt) -> Self { 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 {}", @@ -24,16 +27,25 @@ impl AudioFrameReader { AudioFrameReader { inner , format } } + /// Locate the read position to a different frame pub fn locate(&mut self, to :u64) -> Result { let position = to * self.format.block_alignment as u64; let seek_result = self.inner.seek(Start(position))?; Ok( seek_result / self.format.block_alignment as u64 ) } + /// Create a frame buffer sized to hold frames of the reader + /// + /// This is a conveneince method that creates a `Vec` with + /// as many elements as there are channels in the underlying stream. pub fn create_frame_buffer(&self) -> Vec { vec![0i32; self.format.channel_count as usize] } + /// Read a frame + /// + /// A single frame is read from the audio stream and the read location + /// is advanced one frame. pub fn read_integer_frame(&mut self, buffer:&mut [i32]) -> Result { assert!(buffer.len() as u16 == self.format.channel_count, "read_integer_frame was called with a mis-sized buffer, expected {}, was {}", diff --git a/src/lib.rs b/src/lib.rs index 5788149..9cd1997 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -64,4 +64,5 @@ mod wavewriter; pub use wavereader::{WaveReader}; pub use chunks::{WaveFmt,Bext}; -pub use errors::Error; \ No newline at end of file +pub use errors::Error; +pub use audio_frame_reader::AudioFrameReader; \ No newline at end of file