WAV Reader
Load WAV files for processing with bbx_dsp.
Creating a Reader
#![allow(unused)] fn main() { use bbx_file::readers::wav::WavFileReader; let reader = WavFileReader::<f32>::from_path("audio.wav")?; }
File Information
#![allow(unused)] fn main() { use bbx_file::readers::wav::WavFileReader; use bbx_dsp::reader::Reader; let reader = WavFileReader::<f32>::from_path("audio.wav")?; // Sample rate in Hz let rate = reader.sample_rate(); // Number of channels let channels = reader.num_channels(); // Total samples per channel let samples = reader.num_samples(); // Duration let duration = reader.duration_seconds(); }
Reading Audio Data
Full Channel
#![allow(unused)] fn main() { let left = reader.read_channel(0); let right = reader.read_channel(1); }
Partial Read
#![allow(unused)] fn main() { // Read specific range let data = reader.read_range(0, 1000..2000); }
Reader Trait
WavFileReader implements the Reader trait from bbx_dsp:
#![allow(unused)] fn main() { pub trait Reader<S: Sample>: Send { fn sample_rate(&self) -> f64; fn num_channels(&self) -> usize; fn num_samples(&self) -> usize; fn duration_seconds(&self) -> f64; fn read_channel(&self, channel: usize) -> Vec<S>; } }
Usage with FileInputBlock
#![allow(unused)] fn main() { use bbx_dsp::{blocks::FileInputBlock, graph::GraphBuilder}; use bbx_file::readers::wav::WavFileReader; let reader = WavFileReader::<f32>::from_path("input.wav")?; let mut builder = GraphBuilder::<f32>::new( reader.sample_rate(), 512, reader.num_channels(), ); let file_input = builder.add(FileInputBlock::new(Box::new(reader))); }
Supported Formats
- PCM 8-bit unsigned
- PCM 16-bit signed
- PCM 24-bit signed
- PCM 32-bit signed
- IEEE Float 32-bit
- IEEE Float 64-bit
Error Handling
#![allow(unused)] fn main() { use bbx_file::readers::wav::WavFileReader; match WavFileReader::<f32>::from_path("audio.wav") { Ok(reader) => { // Use reader } Err(e) => { eprintln!("Failed to load: {}", e); } } }
Performance Notes
- Files are loaded entirely into memory
- For large files, consider streaming approaches
- Sample type conversion happens on load