8个版本 (4个重大更新)

使用旧的Rust 2015

0.6.1 2015年4月13日
0.6.0 2015年4月13日
0.5.1 2015年3月23日
0.4.1 2015年1月24日
0.2.1 2014年11月20日

#698音频

每月 34次下载
用于 pure_vorbis

BSD-2-Clause

195KB
793

Rust-AO

libao 的Rust绑定。

使用方法

使用 cargo 构建

cargo build

使用 rustdoc 构建[文档],根目录为 doc/ao/index.html

cargo doc

运行测试。由于libao只能在一个特定的进程中实例化一次,因此测试不能并行运行。并行运行测试可能会导致库初始化时的竞态条件,从而导致测试失败

REST_TEST_TASKS=1 cargo test

示例包含在文档中。


lib.rs:

绑定到libao,这是一个音频输出的低级库。

use ao::{AO, SampleFormat, Driver, Sample};
use ao::Endianness::Native;
use std::error::Error;
use std::num::Float;
use std::path::Path;

fn main() {
    let lib = AO::init();
    let format = SampleFormat::<i16, &'static str>::new(44100, 1, Native, None);
    let driver = match lib.get_driver("wav") {
        Some(d) => play_sinusoid(d, format),
        None => panic!("No such driver: \"wav\"")
    };
    
}

fn play_sinusoid<S: AsRef<str>>(driver: Driver, format: SampleFormat<i16, S>) {
    match driver.open_file(&format, &Path::new("out.wav"), false) {
        Ok(d) => {
            let samples: Vec<i16> = (0..44100).map(|i| {
                ((1.0 / 44100.0 / 440.0 * i as f32).sin() * 32767.0) as i16
            }).collect();
            d.play(&samples);
        }
        Err(e) => {
            println!("Failed to open output file: {}", e.description());
        }
    }
}

依赖项