#合成器 #DSP #模块化

pcm-flow

将许多小型音频处理器组合成大型音频处理器

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

使用旧的Rust 2015

0.5.0 2017年12月1日
0.4.0 2017年11月30日
0.3.3 2017年11月30日
0.2.1 2017年11月20日
0.1.0 2017年11月19日

#1085 in 音频

每月 33 次下载
用于 处理器

LGPL-3.0

28KB
499 代码行

pcm-flow

一个用于从小型模块构建大型合成器和效果的库。您可以为Processor Trait实现结构体,并以灵活的方式将它们连接在一起。此库仍在早期开发中,不建议使用

用法

将pcm-flow添加到您的Cargo.toml

[dependencies]
pcm-flow = "0.5.0"

使用pcm-flow的简单程序

此程序展示了如何以非常无用的但简单的方式使用pcm-flow。我们定义了一个实现Processor trait的结构体,它只接收输入并将其传递到输出。然后我们创建了这个结构体的两个实例并将它们连接起来。

extern crate pcm_flow;

use pcm_flow::graph::Graph;
use pcm_flow::processor::Processor;

fn main() {
    // create a new graph Struct, it is the main container for our Processors
    let mut graph = Graph::new(1);
    // Add two PassThrough structs to the graph and store their IDs in variables
    let pass_through1 = graph.add_processor(Box::new(PassThrough{}));
    let pass_through2 = graph.add_processor(Box::new(PassThrough{}));
    // connect the two processors
    graph.add_connection(&(pass_through1, 0), &(pass_through2, 0)).unwrap();
    // add an input to the graph
    graph.set_input_amt(1);
    // add an output to the graph
    graph.set_output_amt(1);
    // connect the input to the first Processor
    graph.connect_input(0, (pass_through1, 0)).unwrap();
    // connect the second Processor to the Output
    graph.connect_output(0, (pass_through2, 0)).unwrap();
}

// The struct we define here, takes one input and passes the signal to the output
struct PassThrough {}

impl Processor<[f32; 2]> for PassThrough {
    fn process(&mut self, inputs: &Vec<Vec<[f32; 2]>>, outputs: &mut Vec<Vec<[f32; 2]>>) {
        for i in 0..2 {
            for sample in 0..1 {
                outputs[0][sample][i] = inputs[0][sample][i];
            }
        }
    }
    fn inputs_amt(&self) -> usize { 1 }
    fn outputs_amt(&self) -> usize { 1 }
}

依赖关系

~2MB
~21K SLoC