added some API examples to the README

This commit is contained in:
Weird Constructor 2021-05-18 05:04:27 +02:00
parent 799443d266
commit c92d558067

View file

@ -21,6 +21,72 @@ Here a short list of features:
* Extensible framework for quickly developing new nodes at compile time * Extensible framework for quickly developing new nodes at compile time
* A comprehensive automated test suite * A comprehensive automated test suite
## API Examples
### Raw `NodeConfigurator` API
This API is the most low level API provided by HexoDSP.
It shows how to create nodes and connect them.
The execution of the nodes in the audio thread is
controlled by a `NodeProg`, which defines the order
the nodes are executed in.
This only showcases the non-realtime generation of audio
samples. For a real time application of this library please
refer to the examples that come with this library.
use hexosynth::*;
let (mut node_conf, mut node_exec) = new_node_engine();
node_conf.create_node(NodeId::Sin(0));
node_conf.create_node(NodeId::Amp(0));
let mut prog = node_conf.rebuild_node_ports();
node_conf.add_prog_node(&mut prog, &NodeId::Sin(0));
node_conf.add_prog_node(&mut prog, &NodeId::Amp(0));
node_conf.set_prog_node_exec_connection(
&mut prog,
(NodeId::Amp(0), NodeId::Amp(0).inp("inp").unwrap()),
(NodeId::Sin(0), NodeId::Sin(0).out("sig").unwrap()));
node_conf.upload_prog(prog, true);
let (out_l, out_r) = node_exec.test_run(0.1, false);
### Hexagonal Matrix API
This is a short overview of the API provided by the
hexagonal Matrix API, which is the primary API used
inside [HexoSynth](https://github.com/WeirdConstructor/HexoSynth).
This only showcases the non-realtime generation of audio
samples. For a real time application of this library please
refer to the examples that come with this library.
use hexodsp::*;
let (node_conf, mut node_exec) = new_node_engine();
let mut matrix = Matrix::new(node_conf, 3, 3);
let sin = NodeId::Sin(0);
let amp = NodeId::Amp(0);
matrix.place(0, 0, Cell::empty(sin)
.out(None, None, sin.out("sig")));
matrix.place(0, 1, Cell::empty(amp)
.input(amp.inp("inp"), None, None));
matrix.sync().unwrap();
let gain_p = amp.inp_param("gain").unwrap();
matrix.set_param(gain_p, SAtom::param(0.25));
let (out_l, out_r) = node_exec.test_run(0.11, true);
// out_l and out_r contain two channels of audio
// samples now.
## State of Development ## State of Development
As of 2021-05-18: The architecture and it's functionality have been mostly As of 2021-05-18: The architecture and it's functionality have been mostly