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 次下载
用于 处理器
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