Crates.io | timbre |
lib.rs | timbre |
version | 0.3.0 |
source | src |
created_at | 2020-08-13 05:29:22.984261 |
updated_at | 2020-10-14 03:03:40.072197 |
description | A library for audio processing with composable effects. |
homepage | |
repository | https://github.com/thoren-d/timbre |
max_upload_size | |
id | 276032 |
size | 94,321 |
timbre is an audio library designed for composing real-time effects.
Timbre is designed to establish a common interface and a decent-sized library of effects and decoders for playing audio in real time. It is aimed at eventually providing most of the audio functionality needed for game programming, but should be flexible enough for other applications as well.
fn main() -> Result<(), Box<dyn std::error::Error>> {
use std::time::Duration;
use timbre::prelude::*;
// SDL setup.
let sdl = sdl2::init()?;
let audio = sdl.audio()?;
// Inputs
let mut microphone = timbre::drivers::Sdl2Input::new(&audio)?;
microphone.resume();
let music = timbre::decoders::WavDecoder::from_file("./assets/music-stereo-f32.wav")?;
// Apply effects
let microphone = timbre::effects::Echo::new(microphone.source(),
Duration::from_secs_f32(0.5), 0.6);
let music = timbre::effects::LowPass::new(music.into_shared(), 200.0);
// Mix them together
let mut mixer = timbre::effects::BasicMixer::new();
mixer.add_source(microphone.into_shared());
mixer.add_source(music.into_shared());
// Output
let mut speaker = timbre::drivers::Sdl2Output::new(&audio)?;
speaker.set_source(mixer.into_shared());
speaker.resume();
std::thread::sleep(Duration::from_secs_f32(10.0));
Ok(())
}
Arc<Mutex<...>>
.