timestretch 0.16.0

timestretch audio time and pitch processing with host-driven streaming
Documentation
use timestretch::{Parameters, SessionConfig, TempoRate, render};
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let input: Vec<_> = (0..44100)
        .map(|i| (std::f32::consts::TAU * 440.0 * i as f32 / 44100.0).sin())
        .collect();
    let audio = render(
        &input,
        SessionConfig {
            channels: 1,
            parameters: Parameters::keylock(TempoRate::new(0.75)?),
            ..Default::default()
        },
    )?;
    println!(
        "{} frames, {:?}, achieved tempo {}",
        audio.report.output_frames,
        audio.report.backend,
        audio.report.parameters.tempo()
    );
    Ok(())
}