5个不稳定版本

0.3.0 2020年10月14日
0.2.0 2020年9月6日
0.1.2 2020年8月13日
0.1.1 2020年8月13日
0.1.0 2020年8月13日

#836 in 音频

MIT许可证

57KB
1K SLoC

Rust 789 SLoC Shell 276 SLoC // 0.2% comments

timbre

Crates.io Documentation GitHub CI

timbre是一个专为实时效果组合设计的音频库。

Timbre旨在建立一个通用的接口,并为实时播放音频提供适量的效果和解码器库。它旨在最终为游戏编程提供大多数音频功能,但也应足够灵活,适用于其他应用程序。

示例

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(())
}

0.3版更新了什么?

  • 现在,可失败的功能返回Result。
  • 新增错误类型。

路线图

0.4

  • 使效果通用,以减少Arc<Mutex<...>>的数量。
  • 使效果更具可变性;提供对其源的访问。

0.5

  • 引入3D空间化效果。
  • 为立体声源添加Pan效果。

依赖项

~18MB
~385K SLoC