# glicol_synth: a graph-based audio DSP library written in Rust

`glicol_synth` is the audio engine of glicol computer music language.
It can be used as a standalone audio library, with quite intuitive APIs:

```rust
use glicol_synth::{AudioContextBuilder, signal::ConstSig, Message};

let mut context = AudioContextBuilder::<16>::new()
    .sr(44100).channels(1).build();

let node_a = context.add_mono_node(ConstSig::new(42.));
context.connect(node_a, context.destination);
println!("first block {:?}", context.next_block());

context.send_msg(node_a, Message::SetToNumber(0, 100.));
println!("second block, after msg {:?}", context.next_block());
```

## Overview

`glicol_synth` begins with a fork of the `dasp_graph` crate, written by @mitchmindtree.
many features and contents are added:

- use const generics for a customisable buffer size
- replace the input from vec to a map, so users can use a node id to select input
- users can send message to each node in real-time for interaction
- add a higher level audiocontext for easier APIs
- many useful audio nodes from oscillators, filters, etc.

See the [examples on GitHub](https://github.com/chaosprint/glicol/tree/main/rs/synth/examples) for the basic usage.
