25 个版本 (5 个稳定版)

1.0.5 2023年8月7日
1.0.3 2023年7月30日
1.0.2 2022年2月17日
1.0.0 2021年10月17日
0.2.2 2020年11月22日

#30音频

Download history 205/week @ 2024-04-22 169/week @ 2024-04-29 244/week @ 2024-05-06 283/week @ 2024-05-13 266/week @ 2024-05-20 382/week @ 2024-05-27 180/week @ 2024-06-03 154/week @ 2024-06-10 198/week @ 2024-06-17 178/week @ 2024-06-24 110/week @ 2024-07-01 130/week @ 2024-07-08 233/week @ 2024-07-15 233/week @ 2024-07-22 344/week @ 2024-07-29 237/week @ 2024-08-05

1,063 每月下载量
用于 10 crates

MIT 许可

7.5MB
75K SLoC

C++ 45K SLoC // 0.1% comments C 22K SLoC // 0.0% comments Rust 5K SLoC // 0.0% comments Python 2K SLoC // 0.5% comments Lua 870 SLoC // 0.0% comments Ruby 101 SLoC // 0.1% comments C# 19 SLoC // 0.2% comments Batch 11 SLoC

soloud-rs

Documentation Crates.io License Build

soloud 音频引擎库的跨平台 Rust 绑定。

支持的格式:wav、mp3、ogg、flac。该库还包含语音合成器。

使用方法

[dependencies]
soloud = "1"

或者使用 git 仓库

[dependencies]
soloud = { git = "https://github.com/moalyousef/soloud-rs" }

播放音频

use soloud::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut sl = Soloud::default()?;

    let mut wav = audio::Wav::default();

    wav.load(&std::path::Path::new("sample.wav"))?;

    sl.play(&wav); // calls to play are non-blocking, so we put the thread to sleep
    while sl.voice_count() > 0 {
        std::thread::sleep(std::time::Duration::from_millis(100));
    }

    wav.load(&std::path::Path::new("Recording.mp3"))?;
    
    sl.play(&wav);
    while sl.voice_count() > 0 {
        std::thread::sleep(std::time::Duration::from_millis(100));
    }

    Ok(())
}

播放语音

use soloud::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut sl = Soloud::default()?;

    let mut speech = audio::Speech::default();

    speech.set_text("Hello World")?;

    sl.play(&speech);
    while sl.active_voice_count() > 0 {
        std::thread::sleep(std::time::Duration::from_millis(100));
    }

    speech.set_text("1 2 3")?;

    sl.play(&speech);
    while sl.active_voice_count() > 0 {
        std::thread::sleep(std::time::Duration::from_millis(100));
    }

    speech.set_text("Can you hear me?")?;

    sl.play(&speech);
    while sl.active_voice_count() > 0 {
        std::thread::sleep(std::time::Duration::from_millis(100));
    }
    
    Ok(())
}

添加过滤器

use soloud::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut sl = Soloud::default()?;

    let mut wav = audio::Wav::default();
    let mut filt = filter::EchoFilter::default();
    filt.set_params(0.2)?; // sets the delay

    wav.load(&std::path::Path::new("sample.wav"))?;
    wav.set_filter(0, Some(&filt));

    sl.play(&wav);
    while sl.voice_count() > 0 {
        std::thread::sleep(std::time::Duration::from_millis(100));
    }

    Ok(())
}

示例可以在 soloud/examples 目录中找到。它们可以使用以下方式运行

cargo run --example simple
cargo run --example speech
cargo run --example filter
cargo run --example load_mem

您需要在项目根目录中拥有有效的 "sample.wav" 和 "Recording.mp3" 音频文件。或者您可以将路径更改为指向任何支持的音频文件。

还有一个使用 fltk 的演示 GUI 应用程序(在此)。

依赖项

Rust 编译器、C++ 编译器、Cargo、CMake 和 git(所有这些都需要在您的 PATH 中)。推荐使用 Ninja,但不是必需的,如果找到,则会使用。此 crate 默认使用 miniaudio 后端,该后端假设默认声音驱动程序是可用的。

后端

默认后端是 miniaudio,但 Soloud 支持几个后端,程度不同。要启用对某个后端的支持,例如 alsa

[dependencies]
soloud = { version = "1", default-features = false, features = ["alsa"] }

这也假设这些库的头文件在您的包含路径中,CMake 可以找到它们,否则您可以通过命令行(posix)设置它

export CXXFLAGS="-I /path/to/include"

或者对于 Windows

set CXXFLAGS="-I C:\\path\\to\\include"

如果需要,也可以对 CFLAGS 执行相同的操作。

支持的后端

  • miniaudio
  • oss
  • alsa
  • sdl2
  • sdl2-static
  • portaudio
  • openal
  • xaudio2
  • winmm
  • wasapi
  • opensles
  • coreaudio
  • jack

Android 支持

需要设置 ANDROID_SDK_ROOT 和 ANDROID_NDK_ROOT。

依赖项