timbre 0.3.0

A library for audio processing with composable effects.
Documentation
use std::{error::Error, time::Duration};
use timbre::{
    decoders::WavDecoder,
    drivers::Sdl2Output,
    effects::{BasicMixer, Echo, HighPass, LowPass},
    IntoShared,
};
use tracing_subscriber::prelude::*;

fn main() -> Result<(), Box<dyn Error>> {
    let (chrome_layer, _guard) = tracing_chrome::ChromeLayerBuilder::new().build();
    tracing_subscriber::registry().with(chrome_layer).init();

    let sdl = sdl2::init()?;
    let audio = sdl.audio()?;

    let track1 = WavDecoder::from_file("./assets/music-stereo-f32.wav")?;
    let track2 = WavDecoder::new(std::fs::File::open("./assets/music-stereo-i16.wav")?)?;

    let low_pass = LowPass::new(track1.into_shared(), 300.0);
    let high_pass = HighPass::new(track2.into_shared(), 4000.0);

    let mut mixer = BasicMixer::new();
    mixer.add_source(low_pass.into_shared());
    mixer.add_source(high_pass.into_shared());

    let echo = Echo::new(mixer.into_shared(), Duration::from_secs_f32(0.5), 0.7);

    let mut output = Sdl2Output::new(&audio)?;
    output.set_source(echo.into_shared());
    output.resume();

    println!("Press enter to exit...");
    let mut line = String::new();
    std::io::stdin().read_line(&mut line)?;

    Ok(())
}