#node #oscillator #engine #buffer #audio-playback #web

nightly rawdio

一个受Web Audio API启发的音频引擎

10个重大版本发布

0.13.0 2023年12月16日
0.11.0 2023年12月12日
0.8.0 2023年5月15日

#355音频 类别中

每月46次下载

MIT 许可证

300KB
7.5K SLoC

Rust音频引擎

Rust

Crates.io

docs.rs

这是一个受Web Audio API启发的音频引擎。

振荡器示例

更多示例可以在这里找到

  1. 创建一个引擎

    use rawdio::{connect_nodes, create_engine, Level, Oscillator, Node};
    let sample_rate = 44_100;
    let (mut context, mut process) = create_engine(sample_rate);
    
  2. 创建一个振荡器

    let frequency = 440.0;
    let output_channel_count = 2;
    let mut oscillator = Oscillator::sine(context.as_ref(), frequency, output_channel_count);
    
  3. 设置振荡器的增益

    let level = Level::from_db(-3.0);
    oscillator
        .gain()
        .set_value_at_time(level.as_gain(), Timestamp::zero());
    
  4. 连接到输出

    connect_nodes!(oscillator => "output");
    
  5. 启动上下文

    context.start();
    
  6. 运行进程以获取样本。这取决于您是否希望以实时(例如使用CPAL)或离线(例如输出到文件)方式运行引擎。引擎不进行任何假设,只是等待被请求处理。

    假设所有音频缓冲区都是非交错格式。因此,如果来自您的声卡的音频是交错格式,则需要进行解交错。

    let input_buffer = /*create an input buffer*/
    let output_buffer = /*create an audio buffer*/
    process.process (&mut output_buffer);
    

运行示例

cd examples && cargo run --bin [example_name] [example_args]

运行测试

cargo test

运行基准测试

cargo bench

缓冲区从哪里来?

引擎不会对它的运行方式做出任何假设。这意味着它可以实时运行,例如使用CPAL。或者,它也可以离线运行,例如使用hound处理文件中的音频。在/examples目录中有这两个示例。

请注意,预期音频为解交错格式。大多数声卡和音频文件将是交错格式,因此需要先进行转换。

依赖项

~6.5MB
~117K SLoC