Skip to content

jmg049/audio_samples_io

Repository files navigation

audio_samples_io

Fast and simple audio reading and writing in Rust

Crates.io Docs.rs License: MIT

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.

NOTE: Still under development

Currently only supports .wav files

  • flac
  • mp3
  • aiff
  • ogg
  • aac

Quick start

Install via:

cargo add audio_samples_io
use 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(())
}

Benchmarks

Checkout the benchmark summary doc for a comparison against Hound and libsndfile.

To run the benchmarks (Criterion) reading and writing.

cargo bench --bench wav_rw

I have included a small benchmark reported binary for collating benchmarks to a markdown file

cargo run --bin benchmark_reporter --features benchmark_reporting

Output files

  • benchmark_report.md — Markdown summary generated by the reporter binary
  • benchmark_results.csv — Detailed CSV export of benchmark rows (times in μs)
  • benchmark_summary.csv — Executive summary CSV

License

MIT License


Contributing

Contributions are welcome. Please submit a pull request and see CONTRIBUTING.md for guidance.

About

A Rust library for audio input and output operations.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages