br41ndmg 0.2.0

A polyphase sinc audio resampler with offline and streaming APIs for Rust.
Documentation
use br41ndmg::io::{AudioBuffer, write_wav};
use std::f32::consts::PI;

fn main() {
    if let Err(error) = run() {
        eprintln!("error: {error}");
        std::process::exit(1);
    }
}

fn run() -> Result<(), Box<dyn std::error::Error>> {
    let output_path = std::env::args()
        .nth(1)
        .unwrap_or_else(|| "tone_resampled.wav".into());

    let input_rate = 44_100;
    let output_rate = 48_000;
    let duration_seconds = 1.0;
    let frequency_hz = 440.0;
    let frame_count = (input_rate as f32 * duration_seconds) as usize;

    let samples = (0..frame_count)
        .map(|index| {
            let t = index as f32 / input_rate as f32;
            (2.0 * PI * frequency_hz * t).sin() * 0.5
        })
        .collect();

    let input = AudioBuffer::new(input_rate, 1, samples)?;
    let output = input.resample_to(output_rate)?;
    write_wav(&output_path, &output)?;

    println!(
        "wrote {} frames at {} Hz to {}",
        output.frame_count(),
        output.sample_rate(),
        output_path
    );

    Ok(())
}