Rust crate providing audio file I/O utilities and helpers.
audio_samples_io is the IO extension of the audio_samples crate.
audio_samples_io builds on top of the representations provided by audio_samples to provide the functionality necessary for reading, writing and investigating audio files.
Currently only supports .wav files
- flac
- mp3
- aiff
- ogg
- aac
Install via:
cargo add audio_samples_iouse std::time::Duration;
use audio_samples_io::error::AudioIOResult;
use audio_samples::{AudioSamples, sine_wave};
pub fn main() -> AudioIOResult<()> {
// create and write a basic signal and read it back
let sine_wave: AudioSamples<f32> =
sine_wave::<_, f32>(440.0, Duration::from_secs_f64(10.0), 44100, 1.0);
audio_samples_io::write("./sine_wave.wav", &sine_wave)?;
let read_sine_wave: AudioSamples<f32> = audio_samples_io::read("./sine_wave.wav")?;
println!("{:#}", read_sine_wave);
println!("Duration: {:.1}s", read_sine_wave.duration_seconds::<f32>());
Ok(())
}Checkout the benchmark summary doc for a comparison against Hound and libsndfile.
To run the benchmarks (Criterion) reading and writing.
cargo bench --bench wav_rwI have included a small benchmark reported binary for collating benchmarks to a markdown file
cargo run --bin benchmark_reporter --features benchmark_reportingbenchmark_report.md— Markdown summary generated by the reporter binarybenchmark_results.csv— Detailed CSV export of benchmark rows (times in μs)benchmark_summary.csv— Executive summary CSV
MIT License
Contributions are welcome. Please submit a pull request and see CONTRIBUTING.md for guidance.
