3个版本 (稳定)
2.0.0 | 2021年1月3日 |
---|---|
1.0.0 | 2020年12月30日 |
0.0.1 | 2020年8月5日 |
#38 in #allowing
94KB
2K SLoC
Graphity
在有向图中建模节点之间的信号流。这个库旨在用于(但不仅限于)声音应用,其中音频信号将在生成和编辑它的各个节点之间流动。
文档
该库与#[no_std]
兼容,允许在例如嵌入式环境中使用。然而,请注意,它需要带有alloc
软件包的全局分配器。
使用方法
将以下内容添加到您的Cargo.toml
[dependencies]
graphity = "2.0"
然后您需要
- 通过实现
Node
特质来定义您的节点。 - 使用提供的宏生成一个包含这些节点的图类型。
- 实例化图,添加节点,使用边连接它们。
- 触发
tick
操作,这将推动信号通过图。
在此示例中,我们将使用3种节点类型,并按照以下方式连接它们
| [1] [2] Generators are outputting their value
| \ /
| [+] Sum adds the two inputs together
| |
V [3] Echo prints its input on the stdout
以下片段说明了如何通过该库建模此类图。您可以在examples/中找到完整的代码。
impl Node<i32> for Echo {
...
}
impl Node<i32> for Generator {
...
}
impl Node<i32> for Sum {
...
}
graphity!(
Graph<i32>;
Generator = {Generator, GeneratorConsumer, GeneratorProducer},
Sum = {Sum, SumConsumer, SumProducer},
Echo = {Echo, EchoConsumer, EchoProducer},
);
fn main() {
let mut graph = Graph::new();
let one = graph.add_node(Generator(1));
let two = graph.add_node(Generator(2));
let sum = graph.add_node(Sum::default());
let echo = graph.add_node(Echo::default());
graph.must_add_edge(
one.producer(GeneratorProducer),
sum.consumer(SumConsumer::In1),
);
graph.must_add_edge(
two.producer(GeneratorProducer),
sum.consumer(SumConsumer::In2),
);
graph.must_add_edge(
sum.producer(SumProducer),
echo.consumer(EchoConsumer)
);
graph.tick();
}
您可以在文档中找到详细示例和完整的API解释。
如果您喜欢通过阅读文档来修改代码,请查看并尝试包含的示例
cargo run --example graph
许可证
Gazpatcho是在通用公共许可证版本3的条款下分发的。有关详细信息,请参阅LICENSE。
变更日志
阅读CHANGELOG.md了解每个版本引入的更改。
依赖项
~1MB
~13K SLoC